From 22d87bd260a4476da878df48206eba0b37322a6c Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Thu, 13 Nov 2014 22:55:59 -0800 Subject: [PATCH] doveadm: If passdb lookup returns port, use it to override the doveadm_port setting. --- src/doveadm/doveadm-mail-server.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/doveadm/doveadm-mail-server.c b/src/doveadm/doveadm-mail-server.c index 780536bc80..33fb2bb050 100644 --- a/src/doveadm/doveadm-mail-server.c +++ b/src/doveadm/doveadm-mail-server.c @@ -179,7 +179,7 @@ doveadm_mail_server_user_get_host(struct doveadm_mail_cmd_context *ctx, struct auth_user_info info; pool_t pool; const char *auth_socket_path, *proxy_host, *const *fields; - unsigned int i; + unsigned int i, proxy_port; bool proxying; int ret; @@ -214,12 +214,17 @@ doveadm_mail_server_user_get_host(struct doveadm_mail_cmd_context *ctx, so just continue with the default host */ } else { proxy_host = NULL; proxying = FALSE; + proxy_port = ctx->set->doveadm_port; for (i = 0; fields[i] != NULL; i++) { if (strncmp(fields[i], "proxy", 5) == 0 && (fields[i][5] == '\0' || fields[i][5] == '=')) proxying = TRUE; else if (strncmp(fields[i], "host=", 5) == 0) proxy_host = fields[i]+5; + else if (strncmp(fields[i], "port=", 5) == 0) { + if (str_to_uint(fields[i]+5, &proxy_port) < 0) + proxy_port = 0; + } } if (!proxying) ret = 0; @@ -233,8 +238,7 @@ doveadm_mail_server_user_get_host(struct doveadm_mail_cmd_context *ctx, } ret = -1; } else { - *host_r = t_strdup_printf("%s:%u", proxy_host, - ctx->set->doveadm_port); + *host_r = t_strdup_printf("%s:%u", proxy_host, proxy_port); } } pool_unref(&pool); -- 2.47.3