summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2003-02-17 22:07:26 +0200
committerunknown <bell@sanja.is.com.ua>2003-02-17 22:07:26 +0200
commit1b9b2c3091fc580bff82ca0630221eabd5628d6c (patch)
tree36d57cc3236865b15adff6a4d9784a9ddd977aa6
parent65508b65ba04d499f900259d52d6b16be871ef4a (diff)
downloadmariadb-git-1b9b2c3091fc580bff82ca0630221eabd5628d6c.tar.gz
client port number added to SHOW PROCESSLIST (SCRUM?)
include/violite.h: port added to reported parameters libmysqld/lib_vio.c: port added to reported parameters sql/sql_class.h: port added to reported parameters sql/sql_parse.cc: port added to reported parameters sql/sql_show.cc: SHOW PROCESSLIST will report port number if it is possible vio/viosocket.c: port added to reported parameters
-rw-r--r--include/violite.h4
-rw-r--r--libmysqld/lib_vio.c2
-rw-r--r--sql/sql_class.h3
-rw-r--r--sql/sql_parse.cc7
-rw-r--r--sql/sql_show.cc18
-rw-r--r--vio/viosocket.c4
6 files changed, 25 insertions, 13 deletions
diff --git a/include/violite.h b/include/violite.h
index 6c8ad1f4b69..f99bb521e23 100644
--- a/include/violite.h
+++ b/include/violite.h
@@ -95,7 +95,7 @@ my_socket vio_fd(Vio*vio);
/*
* Remote peer's address and name in text form.
*/
-my_bool vio_peer_addr(Vio* vio, char *buf);
+my_bool vio_peer_addr(Vio* vio, char *buf, u_int16_t *port);
/* Remotes in_addr */
@@ -119,7 +119,7 @@ my_bool vio_poll_read(Vio *vio,uint timeout);
#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive)
#define vio_should_retry(vio) (vio)->should_retry(vio)
#define vio_close(vio) ((vio)->vioclose)(vio)
-#define vio_peer_addr(vio, buf) (vio)->peer_addr(vio, buf)
+#define vio_peer_addr(vio, buf, prt) (vio)->peer_addr(vio, buf, prt)
#define vio_in_addr(vio, in) (vio)->in_addr(vio, in)
#endif /* defined(HAVE_VIO) && !defined(DONT_MAP_VIO) */
diff --git a/libmysqld/lib_vio.c b/libmysqld/lib_vio.c
index 29a70b7acbb..428df972372 100644
--- a/libmysqld/lib_vio.c
+++ b/libmysqld/lib_vio.c
@@ -204,7 +204,7 @@ my_socket vio_fd(Vio* vio)
}
-my_bool vio_peer_addr(Vio * vio, char *buf)
+my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port)
{
return(0);
}
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 802052d553a..da341c64d50 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -350,8 +350,9 @@ public:
db - currently selected database
ip - client IP
*/
-
char *host,*user,*priv_user,*db,*ip;
+ /* remote (peer) port */
+ u_int16_t peer_port;
/* Points to info-string that will show in SHOW PROCESSLIST */
const char *proc_info;
/* points to host if host is available, otherwise points to ip */
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 6249c769015..c5a87626691 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -482,7 +482,7 @@ check_connections(THD *thd)
{
char ip[30];
- if (vio_peer_addr(net->vio,ip))
+ if (vio_peer_addr(net->vio, ip, &thd->peer_port))
return (ER_BAD_HOST_ERROR);
if (!(thd->ip = my_strdup(ip,MYF(0))))
return (ER_OUT_OF_RESOURCES);
@@ -512,8 +512,9 @@ check_connections(THD *thd)
else /* Hostname given means that the connection was on a socket */
{
DBUG_PRINT("info",("Host: %s",thd->host));
- thd->host_or_ip=thd->host;
- thd->ip=0;
+ thd->host_or_ip= thd->host;
+ thd->ip= 0;
+ thd->peer_port= 0;
bzero((char*) &thd->remote,sizeof(struct sockaddr));
}
/* Ensure that wrong hostnames doesn't cause buffer overflows */
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 4faee7d248f..9c3de1c4338 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1016,6 +1016,7 @@ public:
template class I_List<thread_info>;
#endif
+#define LIST_PROCESS_HOST_LEN 64
void mysqld_list_processes(THD *thd,const char *user, bool verbose)
{
@@ -1029,7 +1030,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
field_list.push_back(new Item_int("Id",0,7));
field_list.push_back(new Item_empty_string("User",16));
- field_list.push_back(new Item_empty_string("Host",64));
+ field_list.push_back(new Item_empty_string("Host",LIST_PROCESS_HOST_LEN));
field_list.push_back(field=new Item_empty_string("db",NAME_LEN));
field->maybe_null=1;
field_list.push_back(new Item_empty_string("Command",16));
@@ -1058,10 +1059,17 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
thd_info->user=thd->strdup(tmp->user ? tmp->user :
(tmp->system_thread ?
"system user" : "unauthenticated user"));
- thd_info->host=thd->strdup(tmp->host ? tmp->host :
- (tmp->ip ? tmp->ip :
- (tmp->system_thread ? "none" :
- "connecting host")));
+ if (tmp->peer_port && (tmp->host || tmp->ip))
+ {
+ if ((thd_info->host= thd->alloc(LIST_PROCESS_HOST_LEN+1)))
+ snprintf((char *) thd_info->host, LIST_PROCESS_HOST_LEN, "%s:%u",
+ (tmp->host ? tmp->host : tmp->ip), tmp->peer_port);
+ }
+ else
+ thd_info->host= thd->strdup(tmp->host ? tmp->host :
+ (tmp->ip ? tmp->ip :
+ (tmp->system_thread ? "none" :
+ "connecting host")));
if ((thd_info->db=tmp->db)) // Safe test
thd_info->db=thd->strdup(thd_info->db);
thd_info->command=(int) tmp->command;
diff --git a/vio/viosocket.c b/vio/viosocket.c
index f69eebd413a..edcea19d76a 100644
--- a/vio/viosocket.c
+++ b/vio/viosocket.c
@@ -277,13 +277,14 @@ my_socket vio_fd(Vio* vio)
}
-my_bool vio_peer_addr(Vio * vio, char *buf)
+my_bool vio_peer_addr(Vio * vio, char *buf, u_int16_t *port)
{
DBUG_ENTER("vio_peer_addr");
DBUG_PRINT("enter", ("sd: %d", vio->sd));
if (vio->localhost)
{
strmov(buf,"127.0.0.1");
+ *port= 0;
}
else
{
@@ -295,6 +296,7 @@ my_bool vio_peer_addr(Vio * vio, char *buf)
DBUG_RETURN(1);
}
my_inet_ntoa(vio->remote.sin_addr,buf);
+ *port= ntohs(vio->remote.sin_port);
}
DBUG_PRINT("exit", ("addr: %s", buf));
DBUG_RETURN(0);