From f1bf69c2d71a7e426ee967847173200a3ef1705a Mon Sep 17 00:00:00 2001 From: petrvh <152157825+petrvh@users.noreply.github.com> Date: Mon, 27 Nov 2023 17:35:40 +0200 Subject: [PATCH] ares_getaddrinfo(): do not use search domains if ARES_FLAG_NOSEARCH is set (#638) c-ares init options defines a flag ARES_FLAG_NOSEARCH that is supposed to prevent search using configured domain suffixes, however when using ares_getaddrinfo() the flag was ignored and domain suffixes were used anyway. Configuring zero domains to search also does not work (if ndomains == 0 default domain search list is loaded regardless of the flag ARES_OPT_DOMAINS being set). This change adds a check for the ARES_FLAG_NOSEARCH in as_is_only() function that is used by ares_getaddrinfo() to decide if to try to query next possible name ( next_dns_lookup() ) Fix By: @petrvh --- src/lib/ares_getaddrinfo.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/ares_getaddrinfo.c b/src/lib/ares_getaddrinfo.c index 7ee0ab69..fa9212db 100644 --- a/src/lib/ares_getaddrinfo.c +++ b/src/lib/ares_getaddrinfo.c @@ -737,13 +737,12 @@ static ares_bool_t as_is_first(const struct host_query *hquery) { const char *p; size_t ndots = 0; - size_t nname = ares_strlen(hquery->name); for (p = hquery->name; p && *p; p++) { if (*p == '.') { ndots++; } } - if (hquery->name != NULL && nname && hquery->name[nname - 1] == '.') { + if (as_is_only(hquery)) { /* prevent ARES_EBADNAME for valid FQDN, where ndots < channel->ndots */ return ARES_TRUE; } @@ -753,6 +752,9 @@ static ares_bool_t as_is_first(const struct host_query *hquery) static ares_bool_t as_is_only(const struct host_query *hquery) { size_t nname = ares_strlen(hquery->name); + if(hquery->channel->flags & ARES_FLAG_NOSEARCH) { + return ARES_TRUE; + } if (hquery->name != NULL && nname && hquery->name[nname - 1] == '.') { return ARES_TRUE; }