Skip to content
Permalink
Browse files
MDEV-29131 Assertion `status == 0' failed when renaming user after de…
…leting table roles_mapping

if mysql.roles_mapping table doesn't exist (it's optional, after all),
we still update in-memory structures to keep them consistent
  • Loading branch information
vuvova committed Jul 29, 2022
1 parent 6c7e3e5 commit 8ea529e
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 17 deletions.
@@ -25,3 +25,12 @@ newhost test_user_rm test_role1 N
delete from mysql.roles_mapping;
delete from mysql.user where user like 'test%';
flush privileges;
#
# MDEV-29131 Assertion `status == 0' failed when renaming user after deleting table roles_mapping
#
create role r;
rename table mysql.roles_mapping to test.t1;
rename user current_user to a@a;
rename user a@a to root@localhost;
rename table test.t1 to mysql.roles_mapping;
drop role r;
@@ -36,3 +36,13 @@ delete from mysql.roles_mapping;
delete from mysql.user where user like 'test%';
flush privileges;

--echo #
--echo # MDEV-29131 Assertion `status == 0' failed when renaming user after deleting table roles_mapping
--echo #
create role r;
rename table mysql.roles_mapping to test.t1;
rename user current_user to a@a;
rename user a@a to root@localhost;
rename table test.t1 to mysql.roles_mapping;
drop role r;

@@ -10153,24 +10153,21 @@ static int handle_grant_data(THD *thd, Grant_tables& tables, bool drop,
}

/* Handle roles_mapping table. */
if (tables.roles_mapping_table().table_exists())
if (tables.roles_mapping_table().table_exists() &&
(found= handle_grant_table(thd, tables.roles_mapping_table(),
ROLES_MAPPING_TABLE, drop, user_from, user_to)) < 0)
{
if ((found= handle_grant_table(thd, tables.roles_mapping_table(),
ROLES_MAPPING_TABLE, drop,
user_from, user_to)) < 0)
{
/* Handle of table failed, don't touch the in-memory array. */
result= -1;
}
else
{
/* Handle acl_roles_mappings array */
if ((handle_grant_struct(ROLES_MAPPINGS_HASH, drop, user_from, user_to) || found)
&& ! result)
result= 1; /* At least one record/element found */
if (search_only)
goto end;
}
/* Handle of table failed, don't touch the in-memory array. */
result= -1;
}
else
{
/* Handle acl_roles_mappings array */
if ((handle_grant_struct(ROLES_MAPPINGS_HASH, drop, user_from, user_to) || found)
&& ! result)
result= 1; /* At least one record/element found */
if (search_only)
goto end;
}

/* Handle user table. */

0 comments on commit 8ea529e

Please sign in to comment.