]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
auth: Avoid DNS lookup for "host" if passdb returns also "hostip"
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 8 Sep 2017 08:01:20 +0000 (11:01 +0300)
committerTimo Sirainen <timo.sirainen@dovecot.fi>
Fri, 8 Sep 2017 08:39:45 +0000 (11:39 +0300)
src/auth/auth-request.c

index 3f9cde19c3025aa8e6aedc150a7169410eb75728..851f7d589bde042dd0d0a113b0a973d1704a2880 100644 (file)
@@ -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);