diff options
author | Michael Widenius <monty@askmonty.org> | 2011-08-16 12:32:06 +0300 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2011-08-16 12:32:06 +0300 |
commit | 8ce93bbd64a38514de82e73fade36ba703ada5dd (patch) | |
tree | 9d558db883ce18bbce4a90ae9404ad14dae07f57 /sql/sql_parse.cc | |
parent | 13af39824030a675bf2188d3870e56197ef13425 (diff) | |
download | mariadb-git-8ce93bbd64a38514de82e73fade36ba703ada5dd.tar.gz |
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.
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r-- | sql/sql_parse.cc | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index c930eb0824a..0fdc0b1690c 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -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; |