From: Lennart Poettering Date: Thu, 22 Jun 2023 20:26:23 +0000 (+0200) Subject: resolved: if ipv6 is off patch hostname→address query with unspec family to ipv4 X-Git-Tag: v254-rc1~132 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0438aa57751559295fee86d1c1f176486e518455;p=thirdparty%2Fsystemd.git resolved: if ipv6 is off patch hostname→address query with unspec family to ipv4 If the client never specified the address family, and IPv6 is off in the kernel, then look only for A, never for AAAA RRs. Fixes: #23951 --- diff --git a/src/resolve/resolved-dns-question.c b/src/resolve/resolved-dns-question.c index 8f5ebb4590d..5754c851117 100644 --- a/src/resolve/resolved-dns-question.c +++ b/src/resolve/resolved-dns-question.c @@ -4,6 +4,7 @@ #include "dns-domain.h" #include "dns-type.h" #include "resolved-dns-question.h" +#include "socket-util.h" DnsQuestion *dns_question_new(size_t n) { DnsQuestion *q; @@ -330,6 +331,11 @@ int dns_question_new_address(DnsQuestion **ret, int family, const char *name, bo if (!IN_SET(family, AF_INET, AF_INET6, AF_UNSPEC)) return -EAFNOSUPPORT; + /* If IPv6 is off and the request has an unspecified lookup family, restrict it automatically to + * IPv4. */ + if (family == AF_UNSPEC && !socket_ipv6_is_enabled()) + family = AF_INET; + if (convert_idna) { r = dns_name_apply_idna(name, &buf); if (r < 0)