1
0
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:
Michael Widenius
2011-08-16 12:32:06 +03:00
parent 13af398240
commit 8ce93bbd64
4 changed files with 23 additions and 10 deletions

View File

@ -8167,6 +8167,8 @@ bool acl_authenticate(THD *thd, uint connect_errors,
max_user_connections) &&
check_for_max_user_connections(thd, thd->user_connect))
{
/* Ensure we don't decrement thd->user_connections->connections twice */
thd->user_connect= 0;
status_var_increment(denied_connections);
DBUG_RETURN(1); // The error is set in check_for_max_user_connections()
}
@ -8207,12 +8209,7 @@ bool acl_authenticate(THD *thd, uint connect_errors,
if (mysql_change_db(thd, &mpvio.db, FALSE))
{
/* mysql_change_db() has pushed the error message. */
if (thd->user_connect)
{
status_var_increment(thd->status_var.access_denied_errors);
decrease_user_connections(thd->user_connect);
thd->user_connect= 0;
}
status_var_increment(thd->status_var.access_denied_errors);
DBUG_RETURN(1);
}
}