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