changeset 22546:0af134a26b4a

doveadm proxy: Avoid DNS lookup for "host" if passdb also returns "hostip"
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Fri, 08 Sep 2017 11:02:29 +0300
parents 425ee3581927
children ae84a2f539bf
files src/doveadm/doveadm-mail-server.c
diffstat 1 files changed, 6 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/doveadm/doveadm-mail-server.c	Fri Sep 08 11:02:07 2017 +0300
+++ b/src/doveadm/doveadm-mail-server.c	Fri Sep 08 11:02:29 2017 +0300
@@ -179,7 +179,7 @@
 	struct auth_master_connection *auth_conn;
 	struct auth_user_info info;
 	pool_t pool;
-	const char *auth_socket_path, *proxy_host, *const *fields;
+	const char *auth_socket_path, *proxy_host, *proxy_hostip, *const *fields;
 	unsigned int i;
 	in_port_t proxy_port;
 	bool proxying;
@@ -216,7 +216,7 @@
 		/* user not found from passdb. it could be in userdb though,
 		   so just continue with the default host */
 	} else {
-		proxy_host = NULL; proxying = FALSE;
+		proxy_host = NULL; proxy_hostip = NULL; proxying = FALSE;
 		proxy_port = ctx->set->doveadm_port;
 		for (i = 0; fields[i] != NULL; i++) {
 			if (strncmp(fields[i], "proxy", 5) == 0 &&
@@ -224,6 +224,8 @@
 				proxying = TRUE;
 			else if (strncmp(fields[i], "host=", 5) == 0)
 				proxy_host = fields[i]+5;
+			else if (strncmp(fields[i], "hostip=", 7) == 0)
+				proxy_hostip = fields[i]+7;
 			else if (strncmp(fields[i], "user=", 5) == 0)
 				*user_r = t_strdup(fields[i]+5);
 			else if (strncmp(fields[i], "destuser=", 9) == 0)
@@ -233,6 +235,8 @@
 					proxy_port = 0;
 			}
 		}
+		if (proxy_hostip != NULL)
+			proxy_host = proxy_hostip;
 		if (!proxying)
 			ret = 0;
 		else if (proxy_host == NULL) {