]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Optimise re-resolving for known IPs 5601/head
authorVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 4 Sep 2025 14:58:32 +0000 (15:58 +0100)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Thu, 4 Sep 2025 14:58:32 +0000 (15:58 +0100)
src/libutil/upstream.c

index 932167393fe887ba596ae5d0b5292b1980f734d5..23d188dda1236f9ea3fbac81e15bd34dbb78d326 100644 (file)
@@ -660,7 +660,13 @@ rspamd_upstream_resolve_addrs(const struct upstream_list *ls,
        if ((upstream->flags & RSPAMD_UPSTREAM_FLAG_DNS)) {
                /* For DNS upstreams: resolve synchronously using getaddrinfo if name */
                if (upstream->name[0] != '/') {
-                       char dns_name[253 + 1]; /* host part */
+                       /* If marked NORESOLVE at init (numeric address), keep old behaviour */
+                       if (upstream->flags & RSPAMD_UPSTREAM_FLAG_NORESOLVE) {
+                               return;
+                       }
+
+                       /* Extract host part without port */
+                       char dns_name[253 + 1];
                        const char *semicolon_pos = strchr(upstream->name, ':');
 
                        if (semicolon_pos != NULL && semicolon_pos > upstream->name) {
@@ -678,16 +684,7 @@ rspamd_upstream_resolve_addrs(const struct upstream_list *ls,
                                rspamd_strlcpy(dns_name, upstream->name, sizeof(dns_name));
                        }
 
-                       /* Skip if already IP */
-                       rspamd_inet_addr_t *tmp_ip = NULL;
-                       if (rspamd_parse_inet_address(&tmp_ip, dns_name, strlen(dns_name),
-                                                                                 RSPAMD_INET_ADDRESS_PARSE_DEFAULT)) {
-                               if (tmp_ip) {
-                                       rspamd_inet_address_free(tmp_ip);
-                               }
-                               return;
-                       }
-
+                       /* Use saved port from current address */
                        unsigned int port = 0;
                        if (upstream->addrs.addr && upstream->addrs.addr->len > 0) {
                                struct upstream_addr_elt *addr_elt = g_ptr_array_index(upstream->addrs.addr, 0);
@@ -702,6 +699,7 @@ rspamd_upstream_resolve_addrs(const struct upstream_list *ls,
 
                        char portbuf[8];
                        if (port == 0) {
+                               /* Fallback to default 53 if unknown */
                                rspamd_strlcpy(portbuf, "53", sizeof(portbuf));
                        }
                        else {