Loading sql/sql_acl.cc +71 −59 Original line number Diff line number Diff line Loading @@ -3591,7 +3591,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list) int mysql_revoke_all(THD *thd, List <LEX_USER> &list) { uint counter; uint counter, revoked; int result; ACL_DB *acl_db; TABLE_LIST tables[4]; Loading Loading @@ -3624,7 +3624,14 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) } /* Remove db access privileges */ for (counter= 0 ; counter < acl_dbs.elements ; ) /* Because acl_dbs and column_priv_hash shrink and may re-order as privileges are removed, removal occurs in a repeated loop until no more privileges are revoked. */ do { for (counter= 0, revoked= 0 ; counter < acl_dbs.elements ; ) { const char *user,*host; Loading @@ -3641,17 +3648,21 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) { /* Don't increment counter as replace_db_table deleted the current element in acl_db's and shifted the higher elements down current element in acl_dbs. */ revoked= 1; continue; } result= -1; // Something went wrong } counter++; } } while (revoked); /* Remove column access */ for (counter= 0 ; counter < column_priv_hash.records ; ) do { for (counter= 0, revoked= 0 ; counter < column_priv_hash.records ; ) { const char *user,*host; GRANT_TABLE *grant_table= (GRANT_TABLE*)hash_element(&column_priv_hash, Loading @@ -3670,28 +3681,29 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) ~0, 0, 1)) { result= -1; continue; } else { if (!grant_table->cols) { revoked= 1; continue; } List<LEX_COLUMN> columns; if (replace_column_table(grant_table,tables[3].table, *lex_user, if (!replace_column_table(grant_table,tables[3].table, *lex_user, columns, grant_table->db, grant_table->tname, ~0, 1)) result= -1; /* Safer to do continue here as replace_table_table changed column_priv_hash and we want to test the current element */ { revoked= 1; continue; } result= -1; } } counter++; } } while (revoked); } VOID(pthread_mutex_unlock(&acl_cache->lock)); Loading Loading
sql/sql_acl.cc +71 −59 Original line number Diff line number Diff line Loading @@ -3591,7 +3591,7 @@ int mysql_drop_user(THD *thd, List <LEX_USER> &list) int mysql_revoke_all(THD *thd, List <LEX_USER> &list) { uint counter; uint counter, revoked; int result; ACL_DB *acl_db; TABLE_LIST tables[4]; Loading Loading @@ -3624,7 +3624,14 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) } /* Remove db access privileges */ for (counter= 0 ; counter < acl_dbs.elements ; ) /* Because acl_dbs and column_priv_hash shrink and may re-order as privileges are removed, removal occurs in a repeated loop until no more privileges are revoked. */ do { for (counter= 0, revoked= 0 ; counter < acl_dbs.elements ; ) { const char *user,*host; Loading @@ -3641,17 +3648,21 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) { /* Don't increment counter as replace_db_table deleted the current element in acl_db's and shifted the higher elements down current element in acl_dbs. */ revoked= 1; continue; } result= -1; // Something went wrong } counter++; } } while (revoked); /* Remove column access */ for (counter= 0 ; counter < column_priv_hash.records ; ) do { for (counter= 0, revoked= 0 ; counter < column_priv_hash.records ; ) { const char *user,*host; GRANT_TABLE *grant_table= (GRANT_TABLE*)hash_element(&column_priv_hash, Loading @@ -3670,28 +3681,29 @@ int mysql_revoke_all(THD *thd, List <LEX_USER> &list) ~0, 0, 1)) { result= -1; continue; } else { if (!grant_table->cols) { revoked= 1; continue; } List<LEX_COLUMN> columns; if (replace_column_table(grant_table,tables[3].table, *lex_user, if (!replace_column_table(grant_table,tables[3].table, *lex_user, columns, grant_table->db, grant_table->tname, ~0, 1)) result= -1; /* Safer to do continue here as replace_table_table changed column_priv_hash and we want to test the current element */ { revoked= 1; continue; } result= -1; } } counter++; } } while (revoked); } VOID(pthread_mutex_unlock(&acl_cache->lock)); Loading