summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <msvensson@neptunus.(none)>2006-01-09 10:31:07 +0100
committerunknown <msvensson@neptunus.(none)>2006-01-09 10:31:07 +0100
commit16257e8b356c105fcc9fa8c8851338da60ece8f2 (patch)
tree788f8e7da96bac419a2f9810c1c6b3ffd55af3ca
parentc2ac089167ac158aff1318cdb94c55a48fae34a5 (diff)
downloadmariadb-git-16257e8b356c105fcc9fa8c8851338da60ece8f2.tar.gz
Bug #15598 Server crashes in specific case during setting new password
- When acl_user->host.hostname is NULL compare it as "" mysql-test/r/grant.result: Test user with host '' mysql-test/t/grant.test: Test user with host '' sql/sql_acl.cc: If acl_user->host.hostname is NULL compare it as ""
-rw-r--r--mysql-test/r/grant.result9
-rw-r--r--mysql-test/t/grant.test12
-rw-r--r--sql/sql_acl.cc5
3 files changed, 24 insertions, 2 deletions
diff --git a/mysql-test/r/grant.result b/mysql-test/r/grant.result
index 0a406c1ffc2..13593ec2a88 100644
--- a/mysql-test/r/grant.result
+++ b/mysql-test/r/grant.result
@@ -464,3 +464,12 @@ show grants for root@localhost;
Grants for root@localhost
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
set names latin1;
+insert into mysql.user (host, user) values ('', 'mysqltest_7');
+flush privileges;
+set password for mysqltest_7@ = password('systpass');
+show grants for mysqltest_7@;
+Grants for mysqltest_7@
+GRANT USAGE ON *.* TO 'mysqltest_7'@'' IDENTIFIED BY PASSWORD '*2FB071A056F9BB745219D9C876814231DAF46517'
+drop user mysqltest_7@;
+show grants for mysqltest_7@;
+ERROR 42000: There is no such grant defined for user 'mysqltest_7' on host ''
diff --git a/mysql-test/t/grant.test b/mysql-test/t/grant.test
index 039e41dcf34..805fa881399 100644
--- a/mysql-test/t/grant.test
+++ b/mysql-test/t/grant.test
@@ -421,4 +421,16 @@ revoke all privileges on ÂÄ.* from root@localhost;
show grants for root@localhost;
set names latin1;
+#
+# Bug #15598 Server crashes in specific case during setting new password
+# - Caused by a user with host ''
+#
+insert into mysql.user (host, user) values ('', 'mysqltest_7');
+flush privileges;
+set password for mysqltest_7@ = password('systpass');
+show grants for mysqltest_7@;
+drop user mysqltest_7@;
+--error 1141
+show grants for mysqltest_7@;
+
# End of 4.1 tests
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 1ade6ce3064..119952eeda9 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -1371,7 +1371,8 @@ find_acl_user(const char *host, const char *user, my_bool exact)
acl_user->user && !strcmp(user,acl_user->user))
{
if (exact ? !my_strcasecmp(&my_charset_latin1, host,
- acl_user->host.hostname) :
+ acl_user->host.hostname ?
+ acl_user->host.hostname : "") :
compare_hostname(&acl_user->host,host,host))
{
DBUG_RETURN(acl_user);
@@ -3604,7 +3605,7 @@ ACL_USER *check_acl_user(LEX_USER *user_name,
if (!(user=acl_user->user))
user= "";
if (!(host=acl_user->host.hostname))
- host= "%";
+ host= "";
if (!strcmp(user_name->user.str,user) &&
!my_strcasecmp(system_charset_info, user_name->host.str, host))
break;