From d473199744812ee4af52edfa4b85610d834802ca Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Thu, 8 Nov 2012 14:17:53 +0100 Subject: MDEV-258 audit plugin only see queries if general log is enabled --- mysql-test/suite/plugins/r/audit_null.result | 4 ++-- mysql-test/suite/plugins/t/audit_null.test | 3 +++ sql/log.cc | 30 +++++++++++++--------------- sql/sql_audit.h | 13 ++++++------ 4 files changed, 26 insertions(+), 24 deletions(-) diff --git a/mysql-test/suite/plugins/r/audit_null.result b/mysql-test/suite/plugins/r/audit_null.result index 6cb6356ce98..14f5708f417 100644 --- a/mysql-test/suite/plugins/r/audit_null.result +++ b/mysql-test/suite/plugins/r/audit_null.result @@ -8,9 +8,9 @@ select foobar; ERROR 42S22: Unknown column 'foobar' in 'field list' show status like 'audit_null%'; Variable_name Value -Audit_null_called 6 +Audit_null_called 9 Audit_null_general_error 1 -Audit_null_general_log 0 +Audit_null_general_log 3 Audit_null_general_result 2 uninstall plugin audit_null; Warnings: diff --git a/mysql-test/suite/plugins/t/audit_null.test b/mysql-test/suite/plugins/t/audit_null.test index 52bbc0d08e4..c2dec9eca54 100644 --- a/mysql-test/suite/plugins/t/audit_null.test +++ b/mysql-test/suite/plugins/t/audit_null.test @@ -1,3 +1,4 @@ + if (!$ADT_NULL_SO) { skip No NULL_AUDIT plugin; } @@ -5,6 +6,7 @@ if (!$ADT_NULL_SO) { set @old_global_general_log=@@global.general_log; set global general_log=OFF; +--disable_ps_protocol install plugin audit_null soname 'adt_null'; select 1; @@ -13,6 +15,7 @@ select foobar; show status like 'audit_null%'; uninstall plugin audit_null; +--enable_ps_protocol set global general_log=@old_global_general_log; diff --git a/sql/log.cc b/sql/log.cc index effe0e36705..b583c6dfac4 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -1279,12 +1279,6 @@ bool LOGGER::general_log_write(THD *thd, enum enum_server_command command, DBUG_ASSERT(thd); - lock_shared(); - if (!opt_log) - { - unlock(); - return 0; - } user_host_len= make_user_name(thd, user_host_buff); current_time= my_hrtime(); @@ -1295,15 +1289,19 @@ bool LOGGER::general_log_write(THD *thd, enum enum_server_command command, command_name[(uint) command].length, query, query_length); - while (*current_handler) - error|= (*current_handler++)-> - log_general(thd, current_time, user_host_buff, - user_host_len, thd->thread_id, - command_name[(uint) command].str, - command_name[(uint) command].length, - query, query_length, - thd->variables.character_set_client) || error; - unlock(); + if (opt_log && log_command(thd, command)) + { + lock_shared(); + while (*current_handler) + error|= (*current_handler++)-> + log_general(thd, current_time, user_host_buff, + user_host_len, thd->thread_id, + command_name[(uint) command].str, + command_name[(uint) command].length, + query, query_length, + thd->variables.character_set_client) || error; + unlock(); + } return error; } @@ -5333,7 +5331,7 @@ bool general_log_write(THD *thd, enum enum_server_command command, const char *query, uint query_length) { /* Write the message to the log if we want to log this king of commands */ - if (logger.log_command(thd, command)) + if (logger.log_command(thd, command) || mysql_audit_general_enabled()) return logger.general_log_write(thd, command, query, query_length); return FALSE; diff --git a/sql/sql_audit.h b/sql/sql_audit.h index 51c695d091d..02a63852955 100644 --- a/sql/sql_audit.h +++ b/sql/sql_audit.h @@ -53,6 +53,11 @@ static inline uint make_user_name(THD *thd, char *buf) sctx->ip ? sctx->ip : "", "]", NullS) - buf; } +static inline bool mysql_audit_general_enabled() +{ + return mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK; +} + /** Call audit plugins of GENERAL audit class, MYSQL_AUDIT_GENERAL_LOG subtype. @@ -72,8 +77,7 @@ void mysql_audit_general_log(THD *thd, time_t time, const char *cmd, uint cmdlen, const char *query, uint querylen) { -#ifndef EMBEDDED_LIBRARY - if (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK) + if (mysql_audit_general_enabled()) { CHARSET_INFO *clientcs= thd ? thd->variables.character_set_client : global_system_variables.character_set_client; @@ -82,7 +86,6 @@ void mysql_audit_general_log(THD *thd, time_t time, 0, time, user, userlen, cmd, cmdlen, query, querylen, clientcs, 0); } -#endif } /** @@ -101,8 +104,7 @@ static inline void mysql_audit_general(THD *thd, uint event_subtype, int error_code, const char *msg) { -#ifndef EMBEDDED_LIBRARY - if (mysql_global_audit_mask[0] & MYSQL_AUDIT_GENERAL_CLASSMASK) + if (mysql_audit_general_enabled()) { time_t time= my_time(0); uint msglen= msg ? strlen(msg) : 0; @@ -130,7 +132,6 @@ void mysql_audit_general(THD *thd, uint event_subtype, error_code, time, user, userlen, msg, msglen, query.str(), query.length(), query.charset(), rows); } -#endif } #define MYSQL_AUDIT_NOTIFY_CONNECTION_CONNECT(thd) mysql_audit_notify(\ -- cgit v1.2.1