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