diff options
author | unknown <Sinisa@sinisa.nasamreza.org> | 2002-06-25 21:20:10 +0300 |
---|---|---|
committer | unknown <Sinisa@sinisa.nasamreza.org> | 2002-06-25 21:20:10 +0300 |
commit | ea20da9d4dcc64ba6317c71c9138015bdc55b3ed (patch) | |
tree | f4a378e5c4a12d1d735ff95e378a82f208cbb5cb | |
parent | 7243131d2e1c8187dd7fb686f54322e6e19c1332 (diff) | |
download | mariadb-git-ea20da9d4dcc64ba6317c71c9138015bdc55b3ed.tar.gz |
Fix for a user management system that resources can be reset to zero
with a GRANT statement.
-rw-r--r-- | sql/sql_acl.cc | 12 | ||||
-rw-r--r-- | sql/sql_parse.cc | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 3 | ||||
-rw-r--r-- | 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 { |