Commit 12db5ab0 authored by Kristofer Pettersson's avatar Kristofer Pettersson

Bug#21226 FLUSH PRIVILEGES does not provided feedback when it fails.

  
If during a FLUSH PRIVILEGES the server fails to load the new privilege
tables, the error message is lost. This patch is a back port from 5.1 which
adresses this issue by setting the server in an error state if a failure
occurrs.
  
This patch also corrects an incorrect variable assignment which might
cause an error state to be reverted by coincidence.

sql/sql_parse.cc:
  * Set error state if acl_reload or grant_reload fails.
  * Fix bad variable assignment which cancels previous error status.
parent 3b5c3df2
...@@ -7054,11 +7054,23 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, ...@@ -7054,11 +7054,23 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
thd->thread_stack= (char*) &tmp_thd; thd->thread_stack= (char*) &tmp_thd;
thd->store_globals(); thd->store_globals();
} }
if (thd) if (thd)
{ {
(void)acl_reload(thd); bool reload_acl_failed= acl_reload(thd);
(void)grant_reload(thd); bool reload_grants_failed= grant_reload(thd);
if (reload_acl_failed || reload_grants_failed)
{
result= 1;
/*
When an error is returned, my_message may have not been called and
the client will hang waiting for a response.
*/
my_error(ER_UNKNOWN_ERROR, MYF(0), "FLUSH PRIVILEGES failed");
} }
}
if (tmp_thd) if (tmp_thd)
{ {
delete tmp_thd; delete tmp_thd;
...@@ -7144,8 +7156,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, ...@@ -7144,8 +7156,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
tmp_write_to_binlog= 0; tmp_write_to_binlog= 0;
if (lock_global_read_lock(thd)) if (lock_global_read_lock(thd))
return 1; // Killed return 1; // Killed
result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
tables); tables))
result= 1;
if (make_global_read_lock_block_commit(thd)) // Killed if (make_global_read_lock_block_commit(thd)) // Killed
{ {
/* Don't leave things in a half-locked state */ /* Don't leave things in a half-locked state */
...@@ -7154,7 +7168,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, ...@@ -7154,7 +7168,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
} }
} }
else else
result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables); {
if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables))
result= 1;
}
my_dbopt_cleanup(); my_dbopt_cleanup();
} }
if (options & REFRESH_HOSTS) if (options & REFRESH_HOSTS)
...@@ -7178,8 +7195,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, ...@@ -7178,8 +7195,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
#ifdef OPENSSL #ifdef OPENSSL
if (options & REFRESH_DES_KEY_FILE) if (options & REFRESH_DES_KEY_FILE)
{ {
if (des_key_file) if (des_key_file && load_des_key_file(des_key_file))
result=load_des_key_file(des_key_file); result= 1;
} }
#endif #endif
#ifdef HAVE_REPLICATION #ifdef HAVE_REPLICATION
......
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