Commit 87dcb3c6 authored by dlenev@mysql.com's avatar dlenev@mysql.com

Fix for bug #13407 "Remote connecting crashes server" and couple of similar

problems which were introduced during work on WL#2787 "Add view definer/owner
to the view definition (.frm) to check privileges on used tables and stored
routines when using a VIEW."

In some cases it is better to use value from Security_context::host_or_ip
instead of value from Security_context::host since the latter can be NULL
in certain situations (When we can't resolve hostname or we have not done
this yet).
parent 306dcf06
...@@ -5,3 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255' ...@@ -5,3 +5,10 @@ GRANT USAGE ON *.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255' GRANT ALL PRIVILEGES ON `test`.* TO 'mysqltest_1'@'127.0.0.1/255.255.255.255'
REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255'; REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
DROP USER mysqltest_1@'127.0.0.1/255.255.255.255'; DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
select user();
user()
#
show processlist;
Id User Host db Command Time State Info
# root # test Sleep # NULL
# root # test Query # NULL show processlist
...@@ -8,3 +8,13 @@ REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255'; ...@@ -8,3 +8,13 @@ REVOKE ALL ON test.* FROM mysqltest_1@'127.0.0.1/255.255.255.255';
DROP USER mysqltest_1@'127.0.0.1/255.255.255.255'; DROP USER mysqltest_1@'127.0.0.1/255.255.255.255';
# End of 4.1 tests # End of 4.1 tests
# Bug #13407 "Remote connecting crashes server".
# Server crashed when one used USER() function in connection for which
# was impossible to obtain peer hostname.
connect (con1, 127.0.0.1, root, , test, $MASTER_MYPORT, );
--replace_column 1 #
select user();
--replace_column 1 # 6 # 3 #
show processlist;
connection default;
...@@ -1608,7 +1608,7 @@ String *Item_func_user::val_str(String *str) ...@@ -1608,7 +1608,7 @@ String *Item_func_user::val_str(String *str)
else else
{ {
user= thd->main_security_ctx.user; user= thd->main_security_ctx.user;
host= thd->main_security_ctx.host; host= thd->main_security_ctx.host_or_ip;
} }
// For system threads (e.g. replication SQL thread) user may be empty // For system threads (e.g. replication SQL thread) user may be empty
......
...@@ -4208,7 +4208,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg) ...@@ -4208,7 +4208,7 @@ pthread_handler_decl(handle_connections_shared_memory,arg)
errmsg= 0; errmsg= 0;
goto errorconn; goto errorconn;
} }
thd->host= my_strdup(my_localhost,MYF(0)); /* Host is unknown */ thd->security_ctx->host= my_strdup(my_localhost, MYF(0)); /* Host is unknown */
create_new_thread(thd); create_new_thread(thd);
connect_number++; connect_number++;
continue; continue;
......
...@@ -1205,7 +1205,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose) ...@@ -1205,7 +1205,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
"%s:%u", tmp_sctx->host_or_ip, tmp->peer_port); "%s:%u", tmp_sctx->host_or_ip, tmp->peer_port);
} }
else else
thd_info->host= thd->strdup(tmp_sctx->host); thd_info->host= thd->strdup(tmp_sctx->host_or_ip);
if ((thd_info->db=tmp->db)) // Safe test if ((thd_info->db=tmp->db)) // Safe test
thd_info->db=thd->strdup(thd_info->db); thd_info->db=thd->strdup(thd_info->db);
thd_info->command=(int) tmp->command; thd_info->command=(int) tmp->command;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment