dovecot-2.2: doveadm: Support changing proxy destination usernam...

dovecot at dovecot.org dovecot at dovecot.org
Fri Dec 5 02:39:46 UTC 2014


details:   http://hg.dovecot.org/dovecot-2.2/rev/7c834633922c
changeset: 18126:7c834633922c
user:      Timo Sirainen <tss at iki.fi>
date:      Fri Dec 05 03:53:02 2014 +0200
description:
doveadm: Support changing proxy destination username with "user" and "destuser" passdb field.

diffstat:

 src/doveadm/doveadm-mail-server.c |  18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diffs (71 lines):

diff -r a3ac6d5e5915 -r 7c834633922c src/doveadm/doveadm-mail-server.c
--- a/src/doveadm/doveadm-mail-server.c	Fri Dec 05 03:38:08 2014 +0200
+++ b/src/doveadm/doveadm-mail-server.c	Fri Dec 05 03:53:02 2014 +0200
@@ -173,7 +173,8 @@
 static int
 doveadm_mail_server_user_get_host(struct doveadm_mail_cmd_context *ctx,
 				  const struct mail_storage_service_input *input,
-				  const char **host_r, const char **error_r)
+				  const char **user_r, const char **host_r,
+				  const char **error_r)
 {
 	struct auth_master_connection *auth_conn;
 	struct auth_user_info info;
@@ -183,6 +184,7 @@
 	bool proxying;
 	int ret;
 
+	*user_r = input->username;
 	*host_r = ctx->set->doveadm_socket_path;
 
 	if (ctx->set->doveadm_port == 0)
@@ -221,6 +223,10 @@
 				proxying = TRUE;
 			else if (strncmp(fields[i], "host=", 5) == 0)
 				proxy_host = fields[i]+5;
+			else if (strncmp(fields[i], "user=", 5) == 0)
+				*user_r = t_strdup(fields[i]+5);
+			else if (strncmp(fields[i], "destuser=", 9) == 0)
+				*user_r = t_strdup(fields[i]+9);
 			else if (strncmp(fields[i], "port=", 5) == 0) {
 				if (str_to_uint(fields[i]+5, &proxy_port) < 0)
 					proxy_port = 0;
@@ -251,14 +257,14 @@
 {
 	struct doveadm_server *server;
 	struct server_connection *conn;
-	const char *host;
+	const char *user, *host;
 	char *username_dup;
 	int ret;
 
 	i_assert(cmd_ctx == ctx || cmd_ctx == NULL);
 	cmd_ctx = ctx;
 
-	ret = doveadm_mail_server_user_get_host(ctx, input, &host, error_r);
+	ret = doveadm_mail_server_user_get_host(ctx, input, &user, &host, error_r);
 	if (ret < 0)
 		return -1;
 	if (ret == 0 &&
@@ -274,18 +280,18 @@
 	server = doveadm_server_get(ctx, host);
 	conn = doveadm_server_find_unused_conn(server);
 	if (conn != NULL)
-		doveadm_mail_server_handle(conn, input->username);
+		doveadm_mail_server_handle(conn, user);
 	else if (array_count(&server->connections) <
 		 	I_MAX(ctx->set->doveadm_worker_count, 1)) {
 		if (server_connection_create(server, &conn) < 0)
 			internal_failure = TRUE;
 		else
-			doveadm_mail_server_handle(conn, input->username);
+			doveadm_mail_server_handle(conn, user);
 	} else {
 		if (array_count(&server->queue) >= DOVEADM_SERVER_QUEUE_MAX)
 			doveadm_server_flush_one(server);
 
-		username_dup = i_strdup(input->username);
+		username_dup = i_strdup(user);
 		array_append(&server->queue, &username_dup, 1);
 	}
 	*error_r = "doveadm server failure";


More information about the dovecot-cvs mailing list