aboutsummaryrefslogtreecommitdiff
path: root/resolv
diff options
context:
space:
mode:
Diffstat (limited to 'resolv')
-rw-r--r--resolv/nss_dns/dns-host.c10
-rw-r--r--resolv/nss_dns/dns-network.c12
2 files changed, 14 insertions, 8 deletions
diff --git a/resolv/nss_dns/dns-host.c b/resolv/nss_dns/dns-host.c
index fafe3435c0..c7bfc13aab 100644
--- a/resolv/nss_dns/dns-host.c
+++ b/resolv/nss_dns/dns-host.c
@@ -137,6 +137,7 @@ _nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
int size, type, n;
const char *cp;
int map = 0;
+ int olderr = errno;
if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1)
return NSS_STATUS_UNAVAIL;
@@ -175,7 +176,10 @@ _nss_dns_gethostbyname2_r (const char *name, int af, struct hostent *result,
enum nss_status status = (errno == ECONNREFUSED
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
*h_errnop = h_errno;
- *errnop = h_errno == TRY_AGAIN ? EAGAIN : ENOENT;
+ if (h_errno == TRY_AGAIN)
+ *errnop = EAGAIN;
+ else
+ __set_errno (olderr);
/* If we are looking for a IPv6 address and mapping is enabled
by having the RES_USE_INET6 bit in _res.options set, we try
@@ -236,6 +240,7 @@ _nss_dns_gethostbyaddr_r (const void *addr, socklen_t len, int af,
char qbuf[MAXDNAME+1], *qp = NULL;
size_t size;
int n, status;
+ int olderr = errno;
if ((_res.options & RES_INIT) == 0 && __res_ninit (&_res) == -1)
return NSS_STATUS_UNAVAIL;
@@ -300,7 +305,7 @@ _nss_dns_gethostbyaddr_r (const void *addr, socklen_t len, int af,
if (n < 0)
{
*h_errnop = h_errno;
- *errnop = errno;
+ __set_errno (olderr);
return errno == ECONNREFUSED ? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
}
@@ -443,7 +448,6 @@ getanswer_r (const querybuf *answer, int anslen, const char *qname, int qtype,
if (__builtin_expect (qdcount, 1) != 1)
{
*h_errnop = NO_RECOVERY;
- *errnop = ENOENT;
return NSS_STATUS_UNAVAIL;
}
if (sizeof (struct host_data) + (ancount + 1) * sizeof (char *) >= buflen)
diff --git a/resolv/nss_dns/dns-network.c b/resolv/nss_dns/dns-network.c
index 105b81f48b..88166531b3 100644
--- a/resolv/nss_dns/dns-network.c
+++ b/resolv/nss_dns/dns-network.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 1998, 1999, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -146,6 +146,7 @@ _nss_dns_getnetbyaddr_r (uint32_t net, int type, struct netent *result,
char qbuf[MAXDNAME];
int cnt, anslen;
u_int32_t net2;
+ int olderr = errno;
/* No net address lookup for IPv6 yet. */
if (type != AF_INET)
@@ -185,10 +186,11 @@ _nss_dns_getnetbyaddr_r (uint32_t net, int type, struct netent *result,
if (anslen < 0)
{
/* Nothing found. */
- *errnop = errno;
- return (errno == ECONNREFUSED
- || errno == EPFNOSUPPORT
- || errno == EAFNOSUPPORT)
+ int err = errno;
+ __set_errno (olderr);
+ return (err == ECONNREFUSED
+ || err == EPFNOSUPPORT
+ || err == EAFNOSUPPORT)
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND;
}