dovecot-2.2: doveadm: Include username in internal errors and "n...

dovecot at dovecot.org dovecot at dovecot.org
Sat Jan 5 01:14:34 EET 2013


details:   http://hg.dovecot.org/dovecot-2.2/rev/6f19c535110e
changeset: 15519:6f19c535110e
user:      Timo Sirainen <tss at iki.fi>
date:      Tue Nov 27 06:19:10 2012 +0200
description:
doveadm: Include username in internal errors and "no such user" errors when running via server.

diffstat:

 src/doveadm/doveadm-mail-server.c |  27 ++++++++++++++++++++++-----
 1 files changed, 22 insertions(+), 5 deletions(-)

diffs (73 lines):

diff -r 339e654f371e -r 6f19c535110e src/doveadm/doveadm-mail-server.c
--- a/src/doveadm/doveadm-mail-server.c	Tue Nov 27 03:49:36 2012 +0200
+++ b/src/doveadm/doveadm-mail-server.c	Tue Nov 27 06:19:10 2012 +0200
@@ -22,6 +22,11 @@
 #define DOVEADM_MAIL_SERVER_FAILED() \
 	(internal_failure || master_service_is_killed(master_service))
 
+struct doveadm_mail_server_cmd {
+	struct server_connection *conn;
+	char *username;
+};
+
 static struct hash_table *servers;
 static pool_t server_pool;
 static struct doveadm_mail_cmd_context *cmd_ctx;
@@ -80,16 +85,22 @@
 
 static void doveadm_cmd_callback(enum server_cmd_reply reply, void *context)
 {
-	struct server_connection *conn = context;
-	struct doveadm_server *server;
+	struct doveadm_mail_server_cmd *servercmd = context;
+	struct doveadm_server *server =
+		server_connection_get_server(servercmd->conn);
+	const char *username = t_strdup(servercmd->username);
+
+	i_free(servercmd->username);
+	i_free(servercmd);
 
 	switch (reply) {
 	case SERVER_CMD_REPLY_INTERNAL_FAILURE:
+		i_error("%s: Internal failure for %s", server->name, username);
 		internal_failure = TRUE;
 		master_service_stop(master_service);
 		return;
 	case SERVER_CMD_REPLY_UNKNOWN_USER:
-		i_error("No such user");
+		i_error("%s: No such user: %s", server->name, username);
 		if (cmd_ctx->exit_code == 0)
 			cmd_ctx->exit_code = EX_NOUSER;
 		break;
@@ -100,8 +111,8 @@
 		break;
 	}
 
-	server = server_connection_get_server(conn);
 	if (array_count(&server->queue) > 0) {
+		struct server_connection *conn;
 		char *const *usernamep = array_idx(&server->queue, 0);
 		char *username = *usernamep;
 
@@ -119,6 +130,7 @@
 static void doveadm_mail_server_handle(struct server_connection *conn,
 				       const char *username)
 {
+	struct doveadm_mail_server_cmd *servercmd;
 	string_t *cmd;
 	unsigned int i;
 
@@ -138,7 +150,12 @@
 		str_tabescape_write(cmd, cmd_ctx->full_args[i]);
 	}
 	str_append_c(cmd, '\n');
-	server_connection_cmd(conn, str_c(cmd), doveadm_cmd_callback, conn);
+
+	servercmd = i_new(struct doveadm_mail_server_cmd, 1);
+	servercmd->conn = conn;
+	servercmd->username = i_strdup(username);
+	server_connection_cmd(conn, str_c(cmd),
+			      doveadm_cmd_callback, servercmd);
 }
 
 static void doveadm_server_flush_one(struct doveadm_server *server)


More information about the dovecot-cvs mailing list