summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <eric@mysql.com>2005-09-06 11:38:52 -0700
committerunknown <eric@mysql.com>2005-09-06 11:38:52 -0700
commit291d59d4bf1d753fca6d10f1738aff4134e6f9fa (patch)
tree12dbb685e3cb6417887d1e8b1f4c3e70b71e5299 /sql
parent981e5226bba0bb1201d0b35f25f7ce67f19d4772 (diff)
parenta59a44410899029ca01787553c3a42d6008f6bbc (diff)
downloadmariadb-git-291d59d4bf1d753fca6d10f1738aff4134e6f9fa.tar.gz
Merge eherman@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/Users/eric/bktmp/mysql-4.1 sql/sql_parse.cc: Auto merged
Diffstat (limited to 'sql')
-rw-r--r--sql/hostname.cc10
-rw-r--r--sql/sql_parse.cc30
2 files changed, 19 insertions, 21 deletions
diff --git a/sql/hostname.cc b/sql/hostname.cc
index 39223556024..32e1d84fac3 100644
--- a/sql/hostname.cc
+++ b/sql/hostname.cc
@@ -130,15 +130,23 @@ void reset_host_errors(struct in_addr *in)
VOID(pthread_mutex_unlock(&hostname_cache->lock));
}
+/* Deal with systems that don't defined INADDR_LOOPBACK */
+#ifndef INADDR_LOOPBACK
+#define INADDR_LOOPBACK 0x7f000001UL
+#endif
my_string ip_to_hostname(struct in_addr *in, uint *errors)
{
uint i;
host_entry *entry;
DBUG_ENTER("ip_to_hostname");
+ *errors= 0;
+
+ /* We always treat the loopback address as "localhost". */
+ if (in->s_addr == htonl(INADDR_LOOPBACK))
+ DBUG_RETURN((char *)my_localhost);
/* Check first if we have name in cache */
- *errors=0;
if (!(specialflag & SPECIAL_NO_HOST_CACHE))
{
VOID(pthread_mutex_lock(&hostname_cache->lock));
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index c77a19ae144..76d4c5c27dc 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -696,29 +696,19 @@ static int check_connection(THD *thd)
return (ER_OUT_OF_RESOURCES);
thd->host_or_ip= thd->ip;
vio_in_addr(net->vio,&thd->remote.sin_addr);
-#if !defined(HAVE_SYS_UN_H) || defined(HAVE_mit_thread)
- /* Fast local hostname resolve for Win32 */
- if (!strcmp(thd->ip,"127.0.0.1"))
+ if (!(specialflag & SPECIAL_NO_RESOLVE))
{
- thd->host= (char*) my_localhost;
- thd->host_or_ip= my_localhost;
- }
- else
-#endif
- {
- if (!(specialflag & SPECIAL_NO_RESOLVE))
+ vio_in_addr(net->vio,&thd->remote.sin_addr);
+ thd->host=ip_to_hostname(&thd->remote.sin_addr,&connect_errors);
+ /* Cut very long hostnames to avoid possible overflows */
+ if (thd->host)
{
- vio_in_addr(net->vio,&thd->remote.sin_addr);
- thd->host=ip_to_hostname(&thd->remote.sin_addr,&connect_errors);
- /* Cut very long hostnames to avoid possible overflows */
- if (thd->host)
- {
- thd->host[min(strlen(thd->host), HOSTNAME_LENGTH)]= 0;
- thd->host_or_ip= thd->host;
- }
- if (connect_errors > max_connect_errors)
- return(ER_HOST_IS_BLOCKED);
+ if (thd->host != my_localhost)
+ thd->host[min(strlen(thd->host), HOSTNAME_LENGTH)]= 0;
+ thd->host_or_ip= thd->host;
}
+ if (connect_errors > max_connect_errors)
+ return(ER_HOST_IS_BLOCKED);
}
DBUG_PRINT("info",("Host: %s ip: %s",
thd->host ? thd->host : "unknown host",