summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2005-02-15 14:42:14 +0200
committerunknown <marko@hundin.mysql.fi>2005-02-15 14:42:14 +0200
commitc7b5773551ba41abda521f1b6e592258252431ee (patch)
tree3f04ce02f57b06c40b5c6bc4c90327bd54f9133b
parent658bac84bf8fcc8d57c94e65e2097164af88eb50 (diff)
parent358cfd6c4220d3d1d1f596f6313fcba1819ff1a6 (diff)
downloadmariadb-git-c7b5773551ba41abda521f1b6e592258252431ee.tar.gz
Merge marko@bk-internal.mysql.com:/home/bk/mysql-4.0
into hundin.mysql.fi:/home/marko/k/mysql-4.0
-rw-r--r--mysql-test/t/group_by.test1
-rw-r--r--sql/sql_parse.cc23
-rw-r--r--vio/viosocket.c12
3 files changed, 25 insertions, 11 deletions
diff --git a/mysql-test/t/group_by.test b/mysql-test/t/group_by.test
index 5af78b924f8..2e5446c2d92 100644
--- a/mysql-test/t/group_by.test
+++ b/mysql-test/t/group_by.test
@@ -455,4 +455,3 @@ select min(a) is null from t1;
select min(a) is null or null from t1;
select 1 and min(a) is null from t1;
drop table t1;
-
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index cd0abafc0c9..613484ebf50 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -504,8 +504,6 @@ check_connections(THD *thd)
DBUG_PRINT("info",("New connection received on %s",
vio_description(net->vio)));
- vio_in_addr(net->vio,&thd->remote.sin_addr);
-
if (!thd->host) // If TCP/IP connection
{
char ip[30];
@@ -515,6 +513,7 @@ check_connections(THD *thd)
if (!(thd->ip = my_strdup(ip,MYF(0))))
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"))
@@ -524,17 +523,19 @@ check_connections(THD *thd)
}
else
#endif
- if (!(specialflag & SPECIAL_NO_RESOLVE))
{
- thd->host=ip_to_hostname(&thd->remote.sin_addr,&connect_errors);
- /* Cut very long hostnames to avoid possible overflows */
- if (thd->host)
+ if (!(specialflag & SPECIAL_NO_RESOLVE))
{
- thd->host[min(strlen(thd->host), HOSTNAME_LENGTH)]= 0;
- thd->host_or_ip= thd->host;
+ 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 (connect_errors > max_connect_errors)
- return(ER_HOST_IS_BLOCKED);
}
DBUG_PRINT("info",("Host: %s ip: %s",
thd->host ? thd->host : "unknown host",
@@ -547,6 +548,8 @@ check_connections(THD *thd)
DBUG_PRINT("info",("Host: %s",thd->host));
thd->host_or_ip= thd->host;
thd->ip= 0;
+ /* Reset sin_addr */
+ bzero((char*) &thd->remote, sizeof(thd->remote));
}
vio_keepalive(net->vio, TRUE);
diff --git a/vio/viosocket.c b/vio/viosocket.c
index 1b6f46c57cf..f45c9dd98c4 100644
--- a/vio/viosocket.c
+++ b/vio/viosocket.c
@@ -291,6 +291,18 @@ my_bool vio_peer_addr(Vio * vio, char *buf, uint16 *port)
}
+/*
+ Get in_addr for a TCP/IP connection
+
+ SYNOPSIS
+ vio_in_addr()
+ vio vio handle
+ in put in_addr here
+
+ NOTES
+ one must call vio_peer_addr() before calling this one
+*/
+
void vio_in_addr(Vio *vio, struct in_addr *in)
{
DBUG_ENTER("vio_in_addr");