in plugin/server_audit/server_audit.cc [1770:1865]
static void update_connection_info(struct connection_info *cn,
mysql_event_class_t event_class, const void *ev, int *after_action)
{
*after_action= 0;
switch (event_class) {
case MYSQL_AUDIT_GENERAL_CLASS:
{
const struct mysql_event_general *event =
(const struct mysql_event_general *) ev;
switch (event->event_subclass) {
case MYSQL_AUDIT_GENERAL_LOG:
{
int init_db_command= event->general_command.length == 7 &&
strncmp(event->general_command.str, "Init DB", 7) == 0;
if (!ci_needs_setup(cn))
{
if (init_db_command)
{
/* Change DB */
get_str_n(cn->db, &cn->db_length, sizeof(cn->db),
event->general_query.str, event->general_query.length);
}
cn->query_id = query_counter++;
cn->query= event->general_query.str;
cn->query_length= event->general_query.length;
cn->query_time= (time_t) event->general_time;
update_general_user(cn, event);
}
else if (init_db_command)
setup_connection_initdb(cn, event);
else if (event_query_command(event))
setup_connection_query(cn, event);
else
setup_connection_simple(cn);
break;
}
case MYSQL_AUDIT_GENERAL_STATUS:
if (event_query_command(event))
{
if (ci_needs_setup(cn))
setup_connection_query(cn, event);
if (event->general_error_code == 0)
{
int use_command= event->general_query.length > 4 &&
strncasecmp(event->general_query.str, "use ", 4) == 0;
if (use_command)
{
/* Change DB */
get_str_n(cn->db, &cn->db_length, sizeof(cn->db),
event->general_query.str + 4, event->general_query.length - 4);
}
}
update_general_user(cn, event);
}
break;
case MYSQL_AUDIT_GENERAL_ERROR:
/*
We need this because the MariaDB returns NULL query field for the
MYSQL_AUDIT_GENERAL_STATUS in the mysqld_stmt_prepare.
As a result we get empty QUERY field for errors.
*/
if (ci_needs_setup(cn))
setup_connection_query(cn, event);
cn->query_id= query_counter++;
get_str_n(cn->query_buffer, &cn->query_length, sizeof(cn->query_buffer),
event->general_query.str, event->general_query.length);
cn->query= cn->query_buffer;
cn->query_time= (time_t) event->general_time;
break;
default:;
}
break;
}
case MYSQL_AUDIT_CONNECTION_CLASS:
{
const struct mysql_event_connection *event =
(const struct mysql_event_connection *) ev;
switch (event->event_subclass)
{
case MYSQL_AUDIT_CONNECTION_CONNECT:
setup_connection_connect(cn, event);
break;
case MYSQL_AUDIT_CONNECTION_CHANGE_USER:
*after_action= AA_CHANGE_USER;
break;
default:;
}
break;
}
default:
break;
}
}