From: Timo Sirainen Date: Fri, 8 Sep 2017 08:01:20 +0000 (+0300) Subject: auth: Avoid DNS lookup for "host" if passdb returns also "hostip" X-Git-Tag: 2.3.0.rc1~1072 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=dbe43c872305a349542563fc08f25d6a0cceb46e;p=thirdparty%2Fdovecot%2Fcore.git auth: Avoid DNS lookup for "host" if passdb returns also "hostip" --- diff --git a/src/auth/auth-request.c b/src/auth/auth-request.c index 3f9cde19c3..851f7d589b 100644 --- a/src/auth/auth-request.c +++ b/src/auth/auth-request.c @@ -2335,7 +2335,7 @@ static int auth_request_proxy_host_lookup(struct auth_request *request, int auth_request_proxy_finish(struct auth_request *request, auth_request_proxy_cb_t *callback) { - const char *host; + const char *host, *hostip; struct ip_addr ip; bool proxy_host_is_self; @@ -2362,8 +2362,18 @@ int auth_request_proxy_finish(struct auth_request *request, proxy_host_is_self = auth_request_proxy_ip_is_self(request, &ip); } else { - /* asynchronous host lookup */ - return auth_request_proxy_host_lookup(request, host, callback); + hostip = auth_fields_find(request->extra_fields, "hostip"); + if (hostip != NULL && net_addr2ip(hostip, &ip) < 0) { + auth_request_log_error(request, AUTH_SUBSYS_PROXY, + "Invalid hostip in passdb: %s", hostip); + return -1; + } + if (hostip == NULL) { + /* asynchronous host lookup */ + return auth_request_proxy_host_lookup(request, host, callback); + } + proxy_host_is_self = + auth_request_proxy_ip_is_self(request, &ip); } auth_request_proxy_finish_ip(request, proxy_host_is_self);