summaryrefslogtreecommitdiff
path: root/resolv/nss_dns
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-10-15 16:30:38 +0000
committerUlrich Drepper <drepper@redhat.com>2007-10-15 16:30:38 +0000
commit2884dad43cc3c0cbf046caa0a96d7883e5ed0443 (patch)
tree09f8dd8cadc7d6fa256455f0aa3e1debac16158e /resolv/nss_dns
parent8d97ac135571fb7415d4331d925744eaae6df2e0 (diff)
downloadglibc-2884dad43cc3c0cbf046caa0a96d7883e5ed0443.tar.gz
[BZ #3425]
2007-10-15 Ulrich Drepper <drepper@redhat.com> [BZ #3425] * resolv/nss_dns/dns-host.c (getanswer_r): Fail with NSS_STATUS_NOTFOUND if the server replied with only a CNAME and no address record to T_A/T_AAAA requests.
Diffstat (limited to 'resolv/nss_dns')
-rw-r--r--resolv/nss_dns/dns-host.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index cf060be8ef..0e25564670 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -215,7 +215,7 @@ _nss_dns_gethostbyname3_r (const char *name, int af, struct hostent *result,
map = 1;
result->h_addrtype = AF_INET;
- result->h_length = INADDRSZ;;
+ result->h_length = INADDRSZ;
}
status = getanswer_r (host_buffer.buf, n, name, type, result, buffer, buflen,
@@ -836,5 +836,9 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
no_recovery:
*h_errnop = NO_RECOVERY;
*errnop = ENOENT;
- return NSS_STATUS_TRYAGAIN;
+ /* Special case here: if the resolver sent a result but it only
+ contains a CNAME while we are looking for a T_A or T_AAAA record,
+ we fail with NOTFOUND instead of TRYAGAIN. */
+ return ((qtype == T_A || qtype == T_AAAA) && ap != host_data->aliases
+ ? NSS_STATUS_NOTFOUND : NSS_STATUS_TRYAGAIN);
}