From d0cea95f49d1d9d4ab72014dc382d3eb0d24cbac Mon Sep 17 00:00:00 2001 From: "Sinisa@sinisa.nasamreza.org" <> Date: Tue, 25 Jun 2002 21:20:10 +0300 Subject: Fix for a user management system that resources can be reset to zero with a GRANT statement. --- sql/sql_acl.cc | 12 ++++++------ sql/sql_parse.cc | 2 +- sql/sql_yacc.yy | 3 +++ sql/structs.h | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index cdfe2f2e5b3..aff6c206b28 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -652,11 +652,11 @@ static void acl_update_user(const char *user, const char *host, acl_user->host.hostname && !strcmp(host,acl_user->host.hostname)) { acl_user->access=privileges; - if (mqh->questions) + if (mqh->bits & 1) acl_user->user_resource.questions=mqh->questions; - if (mqh->updates) + if (mqh->bits & 2) acl_user->user_resource.updates=mqh->updates; - if (mqh->connections) + if (mqh->bits & 4) acl_user->user_resource.connections=mqh->connections; #ifdef HAVE_OPENSSL acl_user->ssl_type=ssl_type; @@ -1300,11 +1300,11 @@ static int replace_user_table(THD *thd, TABLE *table, const LEX_USER &combo, #endif /* HAVE_OPENSSL */ USER_RESOURCES mqh = thd->lex.mqh; - if (mqh.questions) + if (mqh.bits & 1) table->field[28]->store((longlong) mqh.questions); - if (mqh.updates) + if (mqh.bits & 2) table->field[29]->store((longlong) mqh.updates); - if (mqh.connections) + if (mqh.bits & 4) table->field[30]->store((longlong) mqh.connections); mqh_used = mqh_used || mqh.questions || mqh.updates || mqh.connections; } diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index f3b5f45ae6b..7124066bd3b 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -392,7 +392,7 @@ static void reset_mqh(THD *thd, LEX_USER *lu, bool get_them=false) if (lu) // for GRANT { USER_CONN *uc; - volatile uint temp_len=lu->user.length+lu->host.length+2; + uint temp_len=lu->user.length+lu->host.length+2; char temp_user[USERNAME_LENGTH+HOSTNAME_LENGTH+2]; memcpy(temp_user,lu->user.str,lu->user.length); diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index dcb5f680357..7b3dc7db52e 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3669,14 +3669,17 @@ grant_option: | MAX_QUERIES_PER_HOUR ULONG_NUM { Lex->mqh.questions=$2; + Lex->mqh.bits |= 1; } | MAX_UPDATES_PER_HOUR ULONG_NUM { Lex->mqh.updates=$2; + Lex->mqh.bits |= 2; } | MAX_CONNECTIONS_PER_HOUR ULONG_NUM { Lex->mqh.connections=$2; + Lex->mqh.bits |= 4; }; begin: diff --git a/sql/structs.h b/sql/structs.h index 75280b34715..00b9c6153fe 100644 --- a/sql/structs.h +++ b/sql/structs.h @@ -163,7 +163,7 @@ typedef struct st_lex_user { typedef struct user_resources { - uint questions, updates, connections; + uint questions, updates, connections, bits; } USER_RESOURCES; typedef struct user_conn { -- cgit v1.2.1