Skip to content

Commit

Permalink
MDEV-5999 MySQL Bug#12766319 - 61865: RENAME USER DOES NOT WORK CORRE…
Browse files Browse the repository at this point in the history
…CTLY - REQUIRES FLUSH PRIVILEGES

use update_hostname() to update the hostname.
test case comes from

  commit 0abdeed1d6d
  Author: gopal.shankar@oracle.com <>
  Date:   Thu Mar 29 00:20:54 2012 +0530

    Bug#12766319 - 61865: RENAME USER DOES NOT WORK CORRECTLY -
                          REQUIRES FLUSH PRIVILEGES
  • Loading branch information
vuvova committed Feb 27, 2017
1 parent 494a941 commit 199f88c
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 2 deletions.
26 changes: 26 additions & 0 deletions mysql-test/r/grant.result
Original file line number Diff line number Diff line change
Expand Up @@ -2560,3 +2560,29 @@ Grants for mysqltest_u1@%
GRANT USAGE ON *.* TO 'mysqltest_u1'@'%'
drop database mysqltest_db1;
drop user mysqltest_u1;
#
# Bug#12766319 - 61865: RENAME USER DOES NOT WORK CORRECTLY -
# REQUIRES FLUSH PRIVILEGES
#
CREATE USER foo@'127.0.0.1';
GRANT ALL ON *.* TO foo@'127.0.0.1';
# First attempt, should connect successfully
SELECT user(), current_user();
user() current_user()
foo@localhost foo@127.0.0.1
# Rename the user
RENAME USER foo@'127.0.0.1' to foo@'127.0.0.0/255.0.0.0';
# Second attempt, should connect successfully as its valid mask
# This was failing without fix
SELECT user(), current_user();
user() current_user()
foo@localhost foo@127.0.0.0/255.0.0.0
# Rename the user back to original
RENAME USER foo@'127.0.0.0/255.0.0.0' to foo@'127.0.0.1';
# Third attempt, should connect successfully
SELECT user(), current_user();
user() current_user()
foo@localhost foo@127.0.0.1
# Clean-up
DROP USER foo@'127.0.0.1';
# End of Bug#12766319
40 changes: 40 additions & 0 deletions mysql-test/t/grant.test
Original file line number Diff line number Diff line change
Expand Up @@ -2211,3 +2211,43 @@ grant select on mysqltest_db1.t1 to mysqltest_u1;
show grants for mysqltest_u1;
drop database mysqltest_db1;
drop user mysqltest_u1;


--echo #
--echo # Bug#12766319 - 61865: RENAME USER DOES NOT WORK CORRECTLY -
--echo # REQUIRES FLUSH PRIVILEGES
--echo #

CREATE USER foo@'127.0.0.1';
GRANT ALL ON *.* TO foo@'127.0.0.1';

--echo # First attempt, should connect successfully
connect (conn1, '127.0.0.1', foo,,test);
SELECT user(), current_user();

--echo # Rename the user
RENAME USER foo@'127.0.0.1' to foo@'127.0.0.0/255.0.0.0';

--echo # Second attempt, should connect successfully as its valid mask
--echo # This was failing without fix
connect (conn2, '127.0.0.1', foo,,test);
SELECT user(), current_user();

--echo # Rename the user back to original
RENAME USER foo@'127.0.0.0/255.0.0.0' to foo@'127.0.0.1';

--echo # Third attempt, should connect successfully
connect (conn3, '127.0.0.1', foo,,test);
SELECT user(), current_user();

--echo # Clean-up
connection default;
disconnect conn1;
disconnect conn2;
disconnect conn3;
DROP USER foo@'127.0.0.1';

--echo # End of Bug#12766319

# Wait till we reached the initial number of concurrent sessions
--source include/wait_until_count_sessions.inc
4 changes: 2 additions & 2 deletions sql/sql_acl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6285,12 +6285,12 @@ static int handle_grant_struct(enum enum_acl_lists struct_no, bool drop,
switch ( struct_no ) {
case USER_ACL:
acl_user->user= strdup_root(&mem, user_to->user.str);
acl_user->host.hostname= strdup_root(&mem, user_to->host.str);
update_hostname(&acl_user->host, strdup_root(&mem, user_to->host.str));
break;

case DB_ACL:
acl_db->user= strdup_root(&mem, user_to->user.str);
acl_db->host.hostname= strdup_root(&mem, user_to->host.str);
update_hostname(&acl_db->host, strdup_root(&mem, user_to->host.str));
break;

case COLUMN_PRIVILEGES_HASH:
Expand Down

0 comments on commit 199f88c

Please sign in to comment.