mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed bug that MAX_USER_CONNECTIONS was not working properly in all situations (which could cause aborted connects)
thd->user_connect is now handled in thd->clenup() which will ensure that it works in all context (including slaves). I added also some DBUG_ASSERT() to ensure that things are working correctly. sql/sql_acl.cc: Reset thd->user_connect on failed check_for_max_user_connections() to ensure we don't decrement value twice. Removed not needed call to decrease_user_connections() as thd->cleanup() will now do it. sql/sql_class.cc: Call decrease_user_connections() in thd->cleanup() sql/sql_connect.cc: Ensure we don't allocate thd->user_connect twice. Simplify check_for_max_user_connections(). sql/sql_parse.cc: Ensure that thd->user_connect is handled properly in for 'change_user' command.
This commit is contained in:
@ -1138,12 +1138,15 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||
|
||||
/* Ensure we don't free security_ctx->user in case we have to revert */
|
||||
thd->security_ctx->user= 0;
|
||||
thd->user_connect= 0;
|
||||
|
||||
if (acl_authenticate(thd, 0, packet_length))
|
||||
{
|
||||
/* Free user if allocated by acl_authenticate */
|
||||
x_free(thd->security_ctx->user);
|
||||
*thd->security_ctx= save_security_ctx;
|
||||
if (thd->user_connect)
|
||||
decrease_user_connections(thd->user_connect);
|
||||
thd->user_connect= save_user_connect;
|
||||
thd->reset_db(save_db, save_db_length);
|
||||
thd->variables.character_set_client= save_character_set_client;
|
||||
|
Reference in New Issue
Block a user