summary refs log tree commit diff
path: root/resolv
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-08-26 07:06:57 +0000
committerUlrich Drepper <drepper@redhat.com>2002-08-26 07:06:57 +0000
commit34816665b678a06e096a378303b68d35ff10a693 (patch)
tree471e49cf229dc64a80a72764e1d2db2c9c6e2818 /resolv
parent40e15c4da81e899cbb4c6299fd4f48e1b1391115 (diff)
downloadglibc-34816665b678a06e096a378303b68d35ff10a693.tar.gz
glibc-34816665b678a06e096a378303b68d35ff10a693.tar.xz
glibc-34816665b678a06e096a378303b68d35ff10a693.zip
Update.
	* nss/getXXbyYY_r.c (REENTRANT_NAME): Return ENOENT if status is
	neither SUCCESS nor TRYAGAIN [PR libc/4259].
	* nss/nss_files/files-XXX.c (internal_getent): Don't set *errnop
	to ENOENT if no entry is found.
	* nis/nss_compat/compat-grp.c: Don't set errno in case of lookup
	failure.
	* nis/nss_compat/compat-initgroups.c: Likewise.
	* nis/nss_compat/compat-pwd.c: Likewise.
	* nis/nss_compat/compat-spwd.c: Likewise.
	* nis/nss_nis/nis-alias.c: Likewise.
	* nis/nss_nis/nis-ethers.c: Likewise.
	* nis/nss_nis/nis-grp.c: Likewise.
	* nis/nss_nis/nis-hosts.c: Likewise.
	* nis/nss_nis/nis-initgroups.c: Likewise.
	* nis/nss_nis/nis-netgrp.c: Likewise.
	* nis/nss_nis/nis-network.c: Likewise.
	* nis/nss_nis/nis-proto.c: Likewise.
	* nis/nss_nis/nis-publickey.c: Likewise.
	* nis/nss_nis/nis-pwd.c: Likewise.
	* nis/nss_nis/nis-rpc.c: Likewise.
	* nis/nss_nis/nis-service.c: Likewise.
	* nis/nss_nis/nis-spwd.c: Likewise.
	* resolv/nss_dns/dns-host.c: Likewise.
	* resolv/nss_dns/dns-network.c: Likewise.
	* nis/nss_nisplus/nisplus-alias.c: Save errno around NIS calls.
	* nis/nss_nisplus/nisplus-ethers.c: Likewise.
	* nis/nss_nisplus/nisplus-grp.c: Likewise.
	* nis/nss_nisplus/nisplus-hosts.c: Likewise.
	* nis/nss_nisplus/nisplus-network.c: Likewise.
	* nis/nss_nisplus/nisplus-proto.c: Likewise.
	* nis/nss_nisplus/nisplus-pwd.c: Likewise.
	* nis/nss_nisplus/nisplus-rpc.c: Likewise.
	* nis/nss_nisplus/nisplus-service.c: Likewise.
	* nis/nss_nisplus/nisplus-spwd.c: Likewise.
	* hesiod/nss_hesiod/hesiod-pwd.c (lookup): Preserve errno value.
	* hesiod/nss_hesiod/hesiod-proto.c (lookup): Likewise.
	* hesiod/nss_hesiod/hesiod-grp.c (lookup): Likewise.
	* hesiod/nss_hesiod/hesiod-service.c (lookup): Likewise.
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;
     }