dovecot-2.0: imap, pop3: Try to use the correct log prefix when ...
dovecot at dovecot.org
dovecot at dovecot.org
Fri Dec 3 07:43:20 EET 2010
details: http://hg.dovecot.org/dovecot-2.0/rev/8ebf513b875c
changeset: 12494:8ebf513b875c
user: Timo Sirainen <tss at iki.fi>
date: Fri Dec 03 05:43:16 2010 +0000
description:
imap, pop3: Try to use the correct log prefix when service_count!=1.
diffstat:
src/imap/cmd-append.c | 3 +++
src/imap/cmd-idle.c | 4 ++++
src/imap/imap-client.c | 32 ++++++++++++++++++++++++++++++++
src/imap/imap-client.h | 3 +++
src/imap/imap-search.c | 2 ++
src/pop3/pop3-client.c | 30 ++++++++++++++++++++++++++++++
6 files changed, 74 insertions(+), 0 deletions(-)
diffs (284 lines):
diff -r b7d13ee51aa4 -r 8ebf513b875c src/imap/cmd-append.c
--- 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
diff -r b7d13ee51aa4 -r 8ebf513b875c src/imap/cmd-idle.c
--- 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();
}
}
diff -r b7d13ee51aa4 -r 8ebf513b875c src/imap/imap-client.c
--- 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;
}
diff -r b7d13ee51aa4 -r 8ebf513b875c src/imap/imap-client.h
--- 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
diff -r b7d13ee51aa4 -r 8ebf513b875c src/imap/imap-search.c
--- 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,
diff -r b7d13ee51aa4 -r 8ebf513b875c src/pop3/pop3-client.c
--- 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) <
More information about the dovecot-cvs
mailing list