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).
This commit is contained in:
parent
306dcf0620
commit
87dcb3c6f5
@ -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';
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
"%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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user