Commit 333b91f8 authored by davi@endora.local's avatar davi@endora.local

Merge endora.local:/Users/davi/mysql/bugs/31850-5.1

into  endora.local:/Users/davi/mysql/mysql-5.1-runtime
parents 8f90f66d 968af721
...@@ -318,16 +318,19 @@ check_user(THD *thd, enum enum_server_command command, ...@@ -318,16 +318,19 @@ check_user(THD *thd, enum enum_server_command command,
DBUG_ENTER("check_user"); DBUG_ENTER("check_user");
LEX_STRING db_str= { (char *) db, db ? strlen(db) : 0 }; LEX_STRING db_str= { (char *) db, db ? strlen(db) : 0 };
/*
Clear thd->db as it points to something, that will be freed when
connection is closed. We don't want to accidentally free a wrong
pointer if connect failed. Also in case of 'CHANGE USER' failure,
current database will be switched to 'no database selected'.
*/
thd->reset_db(NULL, 0);
#ifdef NO_EMBEDDED_ACCESS_CHECKS #ifdef NO_EMBEDDED_ACCESS_CHECKS
thd->main_security_ctx.master_access= GLOBAL_ACLS; // Full rights thd->main_security_ctx.master_access= GLOBAL_ACLS; // Full rights
/* Change database if necessary */ /* Change database if necessary */
if (db && db[0]) if (db && db[0])
{ {
/*
thd->db is saved in caller and needs to be freed by caller if this
function returns 0
*/
thd->reset_db(NULL, 0);
if (mysql_change_db(thd, &db_str, FALSE)) if (mysql_change_db(thd, &db_str, FALSE))
DBUG_RETURN(1); DBUG_RETURN(1);
} }
...@@ -358,14 +361,6 @@ check_user(THD *thd, enum enum_server_command command, ...@@ -358,14 +361,6 @@ check_user(THD *thd, enum enum_server_command command,
DBUG_RETURN(1); DBUG_RETURN(1);
} }
/*
Clear thd->db as it points to something, that will be freed when
connection is closed. We don't want to accidentally free a wrong pointer
if connect failed. Also in case of 'CHANGE USER' failure, current
database will be switched to 'no database selected'.
*/
thd->reset_db(NULL, 0);
USER_RESOURCES ur; USER_RESOURCES ur;
int res= acl_getroot(thd, &ur, passwd, passwd_len); int res= acl_getroot(thd, &ur, passwd, passwd_len);
#ifndef EMBEDDED_LIBRARY #ifndef EMBEDDED_LIBRARY
......
...@@ -911,6 +911,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd, ...@@ -911,6 +911,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
/* Clear variables that are allocated */ /* Clear variables that are allocated */
thd->user_connect= 0; thd->user_connect= 0;
thd->security_ctx->priv_user= thd->security_ctx->user;
res= check_user(thd, COM_CHANGE_USER, passwd, passwd_len, db, FALSE); res= check_user(thd, COM_CHANGE_USER, passwd, passwd_len, db, FALSE);
if (res) if (res)
...@@ -928,8 +929,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd, ...@@ -928,8 +929,8 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
if (save_user_connect) if (save_user_connect)
decrease_user_connections(save_user_connect); decrease_user_connections(save_user_connect);
#endif /* NO_EMBEDDED_ACCESS_CHECKS */ #endif /* NO_EMBEDDED_ACCESS_CHECKS */
x_free((uchar*) save_db); x_free(save_db);
x_free((uchar*) save_security_ctx.user); x_free(save_security_ctx.user);
if (cs_number) if (cs_number)
{ {
......
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