diff options
author | Sergei Golubchik <serg@mariadb.org> | 2018-12-19 15:23:54 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-12-20 08:39:54 +0100 |
commit | 8ede9b3ae542068cc02ca27ab32eb76fcfab942f (patch) | |
tree | 4320f8c01fdc8206a2645d53457a4041e246a724 | |
parent | dd72d7d561d36c2d1f5d3ccad2b388d886230392 (diff) | |
download | mariadb-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.result | 7 | ||||
-rw-r--r-- | mysql-test/t/grant5.test | 10 | ||||
-rw-r--r-- | sql/sql_acl.cc | 9 |
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"); |