2008-06-12 Ulrich Drepper <drepper@redhat.com>
+ * resolv/nss_dns/dns-host.c (gaih_getanswer): Don't
+ unconditionally use second gaih_getanswer_slice result.
+
* sysdeps/posix/getaddrinfo.c (gai_inet): Remove unnecessary test.
(getaddrinfo): RES must always be non-NULL.
if (__builtin_expect (buflen < sizeof (struct gaih_addrtuple),
0))
- {
- *errnop = ERANGE;
- *h_errnop = NETDB_INTERNAL;
- return NSS_STATUS_TRYAGAIN;
- }
+ goto too_small;
*pat = (struct gaih_addrtuple *) buffer;
buffer += sizeof (struct gaih_addrtuple);
&pat, &buffer, &buflen,
errnop, h_errnop, ttlp,
&first);
- if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND)
+ if ((status == NSS_STATUS_SUCCESS || status == NSS_STATUS_NOTFOUND
+ || status == NSS_STATUS_TRYAGAIN)
&& answer2 != NULL && anslen2 > 0)
- status = gaih_getanswer_slice(answer2, anslen2, qname,
- &pat, &buffer, &buflen,
- errnop, h_errnop, ttlp, &first);
+ {
+ enum nss_status status2 = gaih_getanswer_slice(answer2, anslen2, qname,
+ &pat, &buffer, &buflen,
+ errnop, h_errnop, ttlp,
+ &first);
+ if (status != NSS_STATUS_SUCCESS)
+ status = status2;
+ }
return status;
}