From: magnus.blaudd Date: November 19 2012 5:58pm Subject: bzr push into mysql-trunk branch (magnus.blaudd:5041 to 5042) List-Archive: http://lists.mysql.com/commits/145330 Message-Id: <20121119175825.24140.46852.5042@wholphin> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 5042 magnus.blaudd@stripped 2012-11-19 [merge] Merge modified: sql/handler.h sql/sql_acl.cc 5041 Vamsikrishna Bhagi 2012-11-19 [merge] Bazaar merge for Bug#14463669 from mysql-5.6. modified: client/mysqldump.c mysql-test/r/mysqldump.result === modified file 'sql/handler.h' --- a/sql/handler.h 2012-11-07 12:05:17 +0000 +++ b/sql/handler.h 2012-11-19 15:00:50 +0000 @@ -421,7 +421,8 @@ enum enum_binlog_command { LOGCOM_DROP_TABLE, LOGCOM_CREATE_DB, LOGCOM_ALTER_DB, - LOGCOM_DROP_DB + LOGCOM_DROP_DB, + LOGCOM_ACL_NOTIFY }; /* struct to hold information about the table that should be created */ === modified file 'sql/sql_acl.cc' --- a/sql/sql_acl.cc 2012-11-16 16:37:45 +0000 +++ b/sql/sql_acl.cc 2012-11-19 17:52:50 +0000 @@ -1488,6 +1488,30 @@ static bool acl_trans_commit_and_close_t } +/** + Notify handlerton(s) that privileges have changed + + Interested handlertons may use this notification to update + its own privilege structures as well as propagating + the changing query to other destinations. + +*/ + +static inline void +acl_notify_htons(THD* thd, + const char* query, uint query_length) +{ + DBUG_ENTER("acl_notify_htons"); + DBUG_PRINT("enter", ("db: %s", thd->db)); + DBUG_PRINT("enter", ("query: '%s', length: %u", query, query_length)); + + ha_binlog_log_query(thd, NULL, LOGCOM_ACL_NOTIFY, + query, query_length, + thd->db, ""); + DBUG_VOID_RETURN; +} + + /* Forget current user/db-level privileges and read new privileges from the privilege tables. @@ -2405,6 +2429,9 @@ bool change_password(THD *thd, const cha end: result|= acl_trans_commit_and_close_tables(thd); + if (!result) + acl_notify_htons(thd, buff, query_length); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -4451,7 +4478,10 @@ int mysql_table_grant(THD *thd, TABLE_LI result|= acl_trans_commit_and_close_tables(thd); if (!result) /* success */ + { + acl_notify_htons(thd, thd->query(), thd->query_length()); my_ok(thd); + } thd->lex->restore_backup_query_tables_list(&backup); /* Restore the state of binlog format */ @@ -4659,6 +4689,9 @@ bool mysql_routine_grant(THD *thd, TABLE result|= acl_trans_commit_and_close_tables(thd); + if (write_to_binlog && !result) + acl_notify_htons(thd, thd->query(), thd->query_length()); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -4908,7 +4941,10 @@ bool mysql_grant(THD *thd, const char *d result|= acl_trans_commit_and_close_tables(thd); if (!result) + { + acl_notify_htons(thd, thd->query(), thd->query_length()); my_ok(thd); + } /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); @@ -7456,6 +7492,9 @@ bool mysql_create_user(THD *thd, List query(), thd->query_length()); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -7545,6 +7584,9 @@ bool mysql_drop_user(THD *thd, List query(), thd->query_length()); + thd->variables.sql_mode= old_sql_mode; /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); @@ -7646,6 +7688,9 @@ bool mysql_rename_user(THD *thd, List query(), thd->query_length()); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -7763,6 +7808,9 @@ bool mysql_user_password_expire(THD *thd result|= acl_trans_commit_and_close_tables(thd); + if (some_passwords_expired && !result) + acl_notify_htons(thd, thd->query(), thd->query_length()); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) @@ -7970,6 +8018,9 @@ bool mysql_revoke_all(THD *thd, List query(), thd->query_length()); + /* Restore the state of binlog format */ DBUG_ASSERT(!thd->is_current_stmt_binlog_format_row()); if (save_binlog_row_based) No bundle (reason: useless for push emails).