Mercurial > dovecot > core-2.2
changeset 12494:8ebf513b875c
imap, pop3: Try to use the correct log prefix when service_count!=1.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 03 Dec 2010 05:43:16 +0000 |
parents | b7d13ee51aa4 |
children | c9c9ea2bdec9 |
files | src/imap/cmd-append.c src/imap/cmd-idle.c src/imap/imap-client.c src/imap/imap-client.h src/imap/imap-search.c src/pop3/pop3-client.c |
diffstat | 6 files changed, 74 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/imap/cmd-append.c Fri Dec 03 04:25:06 2010 +0000 +++ b/src/imap/cmd-append.c Fri Dec 03 05:43:16 2010 +0000 @@ -51,6 +51,7 @@ client->last_input = ioloop_time; timeout_reset(client->to_idle); + client_log_start(client); switch (i_stream_read(client->input)) { case -1: /* disconnected */ @@ -76,6 +77,7 @@ client_send_command_error(cmd, "Too long argument."); cmd->param_error = TRUE; client_command_free(&cmd); + client_log_stop(); return; } @@ -92,6 +94,7 @@ client_destroy(client, NULL); else client_continue_pending_input(client); + client_log_stop(); } /* Returns -1 = error, 0 = need more data, 1 = successful. flags and
--- a/src/imap/cmd-idle.c Fri Dec 03 04:25:06 2010 +0000 +++ b/src/imap/cmd-idle.c Fri Dec 03 05:43:16 2010 +0000 @@ -82,6 +82,7 @@ return; } + client_log_start(client); while ((line = i_stream_next_line(client->input)) != NULL) { if (client->input_skip_line) client->input_skip_line = FALSE; @@ -92,6 +93,7 @@ break; } } + client_log_stop(); } static void idle_client_input(struct cmd_idle_context *ctx) @@ -144,9 +146,11 @@ ctx->sync_pending = TRUE; else { ctx->manual_cork = TRUE; + client_log_start(client); idle_sync_now(box, ctx); if (client->disconnected) client_destroy(client, NULL); + client_log_stop(); } }
--- a/src/imap/imap-client.c Fri Dec 03 04:25:06 2010 +0000 +++ b/src/imap/imap-client.c Fri Dec 03 05:43:16 2010 +0000 @@ -25,6 +25,8 @@ struct client *imap_clients = NULL; unsigned int imap_client_count = 0; +static struct mail_user *log_prefix_user = NULL; + static void client_idle_timeout(struct client *client) { if (client->output_lock == NULL) @@ -95,6 +97,7 @@ if (hook_client_created != NULL) hook_client_created(&client); + log_prefix_user = client->user; imap_refresh_proctitle(); return client; } @@ -132,6 +135,27 @@ } } +void client_log_start(struct client *client) +{ + if (log_prefix_user != NULL && + log_prefix_user == client->user) + return; + + mail_user_set_log_prefix(client->user); + log_prefix_user = client->user; +} + +void client_log_stop(void) +{ + if (imap_client_count == 1) { + mail_user_set_log_prefix(imap_clients->user); + log_prefix_user = imap_clients->user; + } else { + master_service_init_log(master_service, "imap: "); + log_prefix_user = NULL; + } +} + static const char *client_stats(struct client *client) { static struct var_expand_table static_tab[] = { @@ -169,6 +193,7 @@ i_assert(!client->destroyed); client->destroyed = TRUE; + client_log_start(client); if (!client->disconnected) { client->disconnected = TRUE; if (reason == NULL) @@ -231,6 +256,7 @@ mail_storage_service_user_free(&client->service_user); pool_unref(&client->pool); + client_log_stop(); master_service_client_connection_destroyed(master_service); imap_refresh_proctitle(); } @@ -247,6 +273,7 @@ if (client->disconnected) return; + client_log_start(client); i_info("Disconnected: %s %s", reason, client_stats(client)); client->disconnected = TRUE; (void)o_stream_flush(client->output); @@ -788,6 +815,8 @@ i_assert(client->io != NULL); + client_log_start(client); + client->last_input = ioloop_time; timeout_reset(client->to_idle); @@ -819,6 +848,7 @@ client_destroy(client, NULL); else client_continue_pending_input(client); + client_log_stop(); } static void client_output_cmd(struct client_command_context *cmd) @@ -843,6 +873,7 @@ i_assert(!client->destroyed); + client_log_start(client); client->last_output = ioloop_time; timeout_reset(client->to_idle); if (client->to_idle_output != NULL) @@ -887,6 +918,7 @@ client_destroy(client, NULL); else client_continue_pending_input(client); + client_log_stop(); return ret; }
--- a/src/imap/imap-client.h Fri Dec 03 04:25:06 2010 +0000 +++ b/src/imap/imap-client.h Fri Dec 03 05:43:16 2010 +0000 @@ -209,6 +209,9 @@ bool client_handle_input(struct client *client); int client_output(struct client *client); +void client_log_start(struct client *client); +void client_log_stop(void); + void clients_destroy_all(void); #endif
--- a/src/imap/imap-search.c Fri Dec 03 04:25:06 2010 +0000 +++ b/src/imap/imap-search.c Fri Dec 03 05:43:16 2010 +0000 @@ -425,6 +425,7 @@ struct client *client = cmd->client; bool finished; + client_log_start(client); o_stream_cork(client->output); finished = cmd_search_more(cmd); o_stream_uncork(client->output); @@ -439,6 +440,7 @@ client_destroy(client, NULL); else client_continue_pending_input(client); + client_log_stop(); } int cmd_search_parse_return_if_found(struct imap_search_context *ctx,
--- a/src/pop3/pop3-client.c Fri Dec 03 04:25:06 2010 +0000 +++ b/src/pop3/pop3-client.c Fri Dec 03 05:43:16 2010 +0000 @@ -39,9 +39,32 @@ struct client *pop3_clients; unsigned int pop3_client_count; +static struct mail_user *log_prefix_user = NULL; + static void client_input(struct client *client); static int client_output(struct client *client); +static void client_log_start(struct client *client) +{ + if (log_prefix_user != NULL && + log_prefix_user == client->user) + return; + + mail_user_set_log_prefix(client->user); + log_prefix_user = client->user; +} + +static void client_log_stop(void) +{ + if (pop3_client_count == 1) { + mail_user_set_log_prefix(pop3_clients->user); + log_prefix_user = pop3_clients->user; + } else { + master_service_init_log(master_service, "pop3: "); + log_prefix_user = NULL; + } +} + static void client_commit_timeout(struct client *client) { if (client->cmd != NULL) { @@ -330,6 +353,7 @@ if (hook_client_created != NULL) hook_client_created(&client); + log_prefix_user = client->user; pop3_refresh_proctitle(); return client; } @@ -428,6 +452,7 @@ if (client->seen_change_count > 0) client_update_mails(client); + client_log_start(client); if (!client->disconnected) { if (reason == NULL) reason = client_get_disconnect_reason(client); @@ -480,6 +505,7 @@ mail_storage_service_user_free(&client->service_user); i_free(client); + client_log_stop(); master_service_client_connection_destroyed(master_service); pop3_refresh_proctitle(); } @@ -624,6 +650,7 @@ if (client->to_commit != NULL) timeout_reset(client->to_commit); + client_log_start(client); switch (i_stream_read(client->input)) { case -1: /* disconnected */ @@ -637,10 +664,12 @@ } (void)client_handle_input(client); + client_log_stop(); } static int client_output(struct client *client) { + client_log_start(client); o_stream_cork(client->output); if (o_stream_flush(client->output) < 0) { client_destroy(client, NULL); @@ -654,6 +683,7 @@ if (client->cmd != NULL) client->cmd(client); + client_log_stop(); if (client->cmd == NULL) { if (o_stream_get_buffer_used_size(client->output) <