mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 03:10:05 +00:00
Handle DNS timeouts in old-style lookkup code.
This commit is contained in:
parent
4bc2bcba67
commit
4535680d03
@ -1,5 +1,9 @@
|
||||
2010-04-05 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #11010]
|
||||
* resolv/nss_dns/dns-host.c (_nss_dns_gethostbyname3_r): Handle
|
||||
timeouts from servers.
|
||||
|
||||
[BZ #11149]
|
||||
* elf/ldconfig.c (main): Respect chroot setting when looking for
|
||||
the aux cache.
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1996-2004, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1996-2004, 2007-2009, 2010 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Extended from original form by Ulrich Drepper <drepper@cygnus.com>, 1996.
|
||||
|
||||
@ -198,21 +198,27 @@ _nss_dns_gethostbyname3_r (const char *name, int af, struct hostent *result,
|
||||
1024, &host_buffer.ptr, NULL, NULL, NULL);
|
||||
if (n < 0)
|
||||
{
|
||||
if (errno == ESRCH)
|
||||
switch (errno)
|
||||
{
|
||||
case ESRCH:
|
||||
status = NSS_STATUS_TRYAGAIN;
|
||||
h_errno = TRY_AGAIN;
|
||||
break;
|
||||
case ECONNREFUSED:
|
||||
case ETIMEDOUT:
|
||||
status = NSS_STATUS_UNAVAIL;
|
||||
break;
|
||||
default:
|
||||
status = NSS_STATUS_NOTFOUND;
|
||||
break;
|
||||
}
|
||||
else
|
||||
status = (errno == ECONNREFUSED
|
||||
? NSS_STATUS_UNAVAIL : NSS_STATUS_NOTFOUND);
|
||||
*h_errnop = h_errno;
|
||||
if (h_errno == TRY_AGAIN)
|
||||
*errnop = EAGAIN;
|
||||
else
|
||||
__set_errno (olderr);
|
||||
|
||||
/* If we are looking for a IPv6 address and mapping is enabled
|
||||
/* If we are looking for an IPv6 address and mapping is enabled
|
||||
by having the RES_USE_INET6 bit in _res.options set, we try
|
||||
another lookup. */
|
||||
if (af == AF_INET6 && (_res.options & RES_USE_INET6))
|
||||
|
Loading…
Reference in New Issue
Block a user