diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 77c82618446..6c57b7254e0 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -34,6 +34,7 @@ brian@brian-akers-computer.local brian@private-client-ip-101.oz.net carsten@tsort.bitbybit.dk davida@isil.mysql.com +dellis@goetia.(none) dlenev@brandersnatch.localdomain dlenev@build.mysql.com dlenev@jabberwock.localdomain diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result index 35b90349804..b13ce0cf7ba 100644 --- a/mysql-test/r/grant.result +++ b/mysql-test/r/grant.result @@ -248,3 +248,30 @@ GRANT SELECT ON `ab%`.* TO 'test11'@'localhost' GRANT SELECT ON `a%`.* TO 'test11'@'localhost' delete from mysql.user where user='test11'; delete from mysql.db where user='test11'; +USE test; +CREATE TABLE t1 (a int ); +CREATE TABLE t2 LIKE t1; +CREATE TABLE t3 LIKE t1; +CREATE TABLE t4 LIKE t1; +CREATE TABLE t5 LIKE t1; +CREATE TABLE t6 LIKE t1; +CREATE TABLE t7 LIKE t1; +CREATE TABLE t8 LIKE t1; +CREATE TABLE t9 LIKE t1; +CREATE TABLE t10 LIKE t1; +GRANT SELECT ON test.t1 TO testuser@localhost; +GRANT SELECT ON test.t2 TO testuser@localhost; +GRANT SELECT ON test.t3 TO testuser@localhost; +GRANT SELECT ON test.t4 TO testuser@localhost; +GRANT SELECT ON test.t5 TO testuser@localhost; +GRANT SELECT ON test.t6 TO testuser@localhost; +GRANT SELECT ON test.t7 TO testuser@localhost; +GRANT SELECT ON test.t8 TO testuser@localhost; +GRANT SELECT ON test.t9 TO testuser@localhost; +GRANT SELECT ON test.t10 TO testuser@localhost; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM testuser@localhost; +SHOW GRANTS FOR testuser@localhost; +Grants for testuser@localhost +GRANT USAGE ON *.* TO 'testuser'@'localhost' +DROP USER testuser@localhost; +DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8,t9,t10; diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test index e1319690dc5..f5b0db2971f 100644 --- a/mysql-test/t/grant.test +++ b/mysql-test/t/grant.test @@ -189,3 +189,32 @@ show grants for test11@localhost; delete from mysql.user where user='test11'; delete from mysql.db where user='test11'; +# +# Bug #5831: REVOKE ALL PRIVILEGES, GRANT OPTION does not revoke everything +# +USE test; +CREATE TABLE t1 (a int ); +CREATE TABLE t2 LIKE t1; +CREATE TABLE t3 LIKE t1; +CREATE TABLE t4 LIKE t1; +CREATE TABLE t5 LIKE t1; +CREATE TABLE t6 LIKE t1; +CREATE TABLE t7 LIKE t1; +CREATE TABLE t8 LIKE t1; +CREATE TABLE t9 LIKE t1; +CREATE TABLE t10 LIKE t1; +GRANT SELECT ON test.t1 TO testuser@localhost; +GRANT SELECT ON test.t2 TO testuser@localhost; +GRANT SELECT ON test.t3 TO testuser@localhost; +GRANT SELECT ON test.t4 TO testuser@localhost; +GRANT SELECT ON test.t5 TO testuser@localhost; +GRANT SELECT ON test.t6 TO testuser@localhost; +GRANT SELECT ON test.t7 TO testuser@localhost; +GRANT SELECT ON test.t8 TO testuser@localhost; +GRANT SELECT ON test.t9 TO testuser@localhost; +GRANT SELECT ON test.t10 TO testuser@localhost; +REVOKE ALL PRIVILEGES, GRANT OPTION FROM testuser@localhost; +SHOW GRANTS FOR testuser@localhost; +DROP USER testuser@localhost; +DROP TABLE t1,t2,t3,t4,t5,t6,t7,t8,t9,t10; + diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc index fc68e26c21d..855e56af12b 100644 --- a/sql/sql_acl.cc +++ b/sql/sql_acl.cc @@ -3622,7 +3622,7 @@ int mysql_revoke_all(THD *thd, List &list) } /* Remove db access privileges */ - for (counter= 0 ; counter < acl_dbs.elements ; counter++) + for (counter= 0 ; counter < acl_dbs.elements ; ) { const char *user,*host; @@ -3636,12 +3636,18 @@ int mysql_revoke_all(THD *thd, List &list) !my_strcasecmp(system_charset_info, lex_user->host.str, host)) { if (replace_db_table(tables[1].table, acl_db->db, *lex_user, ~0, 1)) + { result= -1; + ++counter; + continue; + } } + else + ++counter; } /* Remove column access */ - for (counter= 0 ; counter < column_priv_hash.records ; counter++) + for (counter= 0 ; counter < column_priv_hash.records ; ) { const char *user,*host; GRANT_TABLE *grant_table= (GRANT_TABLE*) hash_element(&column_priv_hash, @@ -3660,6 +3666,7 @@ int mysql_revoke_all(THD *thd, List &list) ~0, 0, 1)) { result= -1; + ++counter; continue; } if (grant_table->cols) @@ -3670,9 +3677,15 @@ int mysql_revoke_all(THD *thd, List &list) grant_table->db, grant_table->tname, ~0, 1)) + { result= -1; + ++counter; + continue; + } } } + else + ++counter; } }