Commit cfad792e authored by unknown's avatar unknown

Clean up fix for Bug #7989 by avoiding extra memory copy, and adding some

more information to the error message.


sql/sql_acl.cc:
  Change strmov() call to strnmov(), and don't do redundant copy.
  Add to warning message that privilege can't be removed with REVOKE.
parent 2d2d4df7
...@@ -202,18 +202,17 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables) ...@@ -202,18 +202,17 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
{ {
/* /*
We make a temporary copy of the database, force it to lower case, We make a temporary copy of the database, force it to lower case,
and then copy it back over the original name. We can't just update and then check it against the original name.
the host.db pointer, because tmp_name is allocated on the stack.
*/ */
(void)strmov(tmp_name, host.db); (void)strnmov(tmp_name, host.db, sizeof(tmp_name));
my_casedn_str(files_charset_info, tmp_name); my_casedn_str(files_charset_info, host.db);
if (strcmp(host.db, tmp_name) != 0) if (strcmp(host.db, tmp_name) != 0)
{ {
sql_print_warning("'host' entry '%s|%s' had database in mixed " sql_print_warning("'host' entry '%s|%s' had database in mixed "
"case that has been forced to lowercase because " "case that has been forced to lowercase because "
"lower_case_table_names is set.", "lower_case_table_names is set. It will not be "
"possible to remove this privilege using REVOKE.",
host.host.hostname, host.db); host.host.hostname, host.db);
(void)strmov(host.db, tmp_name);
} }
} }
host.access= get_access(table,2); host.access= get_access(table,2);
...@@ -403,18 +402,17 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables) ...@@ -403,18 +402,17 @@ my_bool acl_init(THD *org_thd, bool dont_read_acl_tables)
{ {
/* /*
We make a temporary copy of the database, force it to lower case, We make a temporary copy of the database, force it to lower case,
and then copy it back over the original name. We can't just update and then check it against the original name.
the db.db pointer, because tmp_name is allocated on the stack.
*/ */
(void)strmov(tmp_name, db.db); (void)strnmov(tmp_name, db.db, sizeof(tmp_name));
my_casedn_str(files_charset_info, tmp_name); my_casedn_str(files_charset_info, db.db);
if (strcmp(db.db, tmp_name) != 0) if (strcmp(db.db, tmp_name) != 0)
{ {
sql_print_warning("'db' entry '%s %s@%s' had database in mixed " sql_print_warning("'db' entry '%s %s@%s' had database in mixed "
"case that has been forced to lowercase because " "case that has been forced to lowercase because "
"lower_case_table_names is set.", "lower_case_table_names is set. It will not be "
"possible to remove this privilege using REVOKE.",
db.db, db.user, db.host.hostname, db.host.hostname); db.db, db.user, db.host.hostname, db.host.hostname);
(void)strmov(db.db, tmp_name);
} }
} }
db.sort=get_sort(3,db.host.hostname,db.db,db.user); db.sort=get_sort(3,db.host.hostname,db.db,db.user);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment