From bb4096effef7f0001339669a4abf9448ec1f8743 Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Mon, 13 Jun 2011 12:53:22 +0200 Subject: [PATCH] Only fall back to AF_INET searches when looking for AF_UNSPEC addresses --- ares_gethostbyname.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/ares_gethostbyname.c b/ares_gethostbyname.c index 72f8f8b9..ad89dc27 100644 --- a/ares_gethostbyname.c +++ b/ares_gethostbyname.c @@ -194,11 +194,11 @@ static void host_callback(void *arg, int status, int timeouts, else if (hquery->sent_family == AF_INET6) { status = ares_parse_aaaa_reply(abuf, alen, &host, NULL, NULL); - if (status == ARES_ENODATA || status == ARES_EBADRESP) { + if ((status == ARES_ENODATA || status == ARES_EBADRESP) && + hquery->want_family == AF_UNSPEC) { /* The query returned something but either there were no AAAA records (e.g. just CNAME) or the response was malformed. Try - looking up A instead. We should possibly limit this - attempt-next logic to AF_UNSPEC lookups only. */ + looking up A instead. */ hquery->sent_family = AF_INET; ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, hquery); @@ -210,11 +210,10 @@ static void host_callback(void *arg, int status, int timeouts, end_hquery(hquery, status, host); } else if ((status == ARES_ENODATA || status == ARES_EBADRESP || - status == ARES_ETIMEOUT) && hquery->sent_family == AF_INET6) + status == ARES_ETIMEOUT) && (hquery->sent_family == AF_INET6 && + hquery->want_family == AF_UNSPEC)) { - /* The AAAA query yielded no useful result. Now look up an A instead. - We should possibly limit this attempt-next logic to AF_UNSPEC lookups - only. */ + /* The AAAA query yielded no useful result. Now look up an A instead. */ hquery->sent_family = AF_INET; ares_search(hquery->channel, hquery->name, C_IN, T_A, host_callback, hquery);