]> 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)
committerAki Tuomi <aki.tuomi@dovecot.fi>
Wed, 27 Sep 2017 11:36:51 +0000 (14:36 +0300)
src/auth/auth-request.c

index 3c07aba328831a0f19cd291bc82950168208bfa9..a652ed0807f173154ac015a54a72baa2ea3cabb0 100644 (file)
@@ -2264,7 +2264,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;
 
@@ -2291,8 +2291,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);