summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-12-19 15:23:54 +0100
committerSergei Golubchik <serg@mariadb.org>2018-12-20 08:39:54 +0100
commit8ede9b3ae542068cc02ca27ab32eb76fcfab942f (patch)
tree4320f8c01fdc8206a2645d53457a4041e246a724
parentdd72d7d561d36c2d1f5d3ccad2b388d886230392 (diff)
downloadmariadb-git-8ede9b3ae542068cc02ca27ab32eb76fcfab942f.tar.gz
MDEV-17975 Assertion `! is_set()' or `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed upon REVOKE under LOCK TABLE
open_grant_tables() returns -1/0/1, where -1 is an error, while 1 is not. Don't store it's return value in bool
-rw-r--r--mysql-test/r/grant5.result7
-rw-r--r--mysql-test/t/grant5.test10
-rw-r--r--sql/sql_acl.cc9
3 files changed, 22 insertions, 4 deletions
diff --git a/mysql-test/r/grant5.result b/mysql-test/r/grant5.result
index d7f3b6812bb..8c32d90a640 100644
--- a/mysql-test/r/grant5.result
+++ b/mysql-test/r/grant5.result
@@ -16,3 +16,10 @@ show grants for foo@'%';
ERROR 42000: Access denied for user 'test'@'%' to database 'mysql'
drop user test, foo;
drop role foo;
+CREATE TABLE t1 (a INT);
+LOCK TABLE t1 WRITE;
+REVOKE EXECUTE ON PROCEDURE sp FROM u;
+ERROR HY000: Table 'user' was not locked with LOCK TABLES
+REVOKE PROCESS ON *.* FROM u;
+ERROR HY000: Table 'user' was not locked with LOCK TABLES
+DROP TABLE t1;
diff --git a/mysql-test/t/grant5.test b/mysql-test/t/grant5.test
index 14f2fd65020..649bba7d1ca 100644
--- a/mysql-test/t/grant5.test
+++ b/mysql-test/t/grant5.test
@@ -23,3 +23,13 @@ show grants for foo@'%'; # user
drop user test, foo;
drop role foo;
+#
+# MDEV-17975 Assertion `! is_set()' or `!is_set() || (m_status == DA_OK_BULK && is_bulk_op())' failed upon REVOKE under LOCK TABLE
+#
+CREATE TABLE t1 (a INT);
+LOCK TABLE t1 WRITE;
+--error ER_TABLE_NOT_LOCKED
+REVOKE EXECUTE ON PROCEDURE sp FROM u;
+--error ER_TABLE_NOT_LOCKED
+REVOKE PROCESS ON *.* FROM u;
+DROP TABLE t1;
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 0f21a6bc134..784f2338a55 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -786,8 +786,7 @@ static const int Table_procs_priv= 1 << PROCS_PRIV_TABLE;
static const int Table_proxies_priv= 1 << PROXIES_PRIV_TABLE;
static const int Table_roles_mapping= 1 << ROLES_MAPPING_TABLE;
-static int open_grant_tables(THD *thd, TABLE_LIST *tables,
- enum thr_lock_type lock_type, int tables_to_open);
+static int open_grant_tables(THD *, TABLE_LIST *, enum thr_lock_type, int);
const LEX_STRING acl_table_names[]= // matches enum_acl_tables
{
@@ -6030,7 +6029,8 @@ bool mysql_routine_grant(THD *thd, TABLE_LIST *table_list, bool is_proc,
List_iterator <LEX_USER> str_list (user_list);
LEX_USER *Str, *tmp_Str;
TABLE_LIST tables[TABLES_MAX];
- bool create_new_users= 0, result;
+ bool create_new_users= 0;
+ int result;
char *db_name, *table_name;
DBUG_ENTER("mysql_routine_grant");
@@ -6465,7 +6465,8 @@ bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &list,
List_iterator <LEX_USER> str_list (list);
LEX_USER *Str, *tmp_Str, *proxied_user= NULL;
char tmp_db[SAFE_NAME_LEN+1];
- bool create_new_users=0, result;
+ bool create_new_users=0;
+ int result;
TABLE_LIST tables[TABLES_MAX];
DBUG_ENTER("mysql_grant");