[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[commits] r9448 - in /fsf/trunk/libc: ./ nis/nss_nis/ nis/nss_nisplus/ nss/nss_files/ sysdeps/posix/
- To: commits@xxxxxxxxxx
- Subject: [commits] r9448 - in /fsf/trunk/libc: ./ nis/nss_nis/ nis/nss_nisplus/ nss/nss_files/ sysdeps/posix/
- From: eglibc@xxxxxxxxxx
- Date: Fri, 11 Dec 2009 08:04:34 -0000
Author: eglibc
Date: Fri Dec 11 00:04:33 2009
New Revision: 9448
Log:
Import glibc-mainline for 2009-12-11
Modified:
fsf/trunk/libc/ChangeLog
fsf/trunk/libc/nis/nss_nis/nis-hosts.c
fsf/trunk/libc/nis/nss_nisplus/nisplus-hosts.c
fsf/trunk/libc/nss/nss_files/files-hosts.c
fsf/trunk/libc/sysdeps/posix/getaddrinfo.c
Modified: fsf/trunk/libc/ChangeLog
==============================================================================
--- fsf/trunk/libc/ChangeLog (original)
+++ fsf/trunk/libc/ChangeLog Fri Dec 11 00:04:33 2009
@@ -1,3 +1,15 @@
+2009-12-10 Ulrich Drepper <drepper@xxxxxxxxxx>
+
+ [BZ #11000]
+ * nis/nss_nis/nis-hosts.c (_nss_nis_gethostbyname4_r): Always set
+ *herrnop before returning.
+ * nis/nss_nisplus/nisplus-hosts.c (internal_gethostbyname2_r):
+ Likewise.
+ * nss/nss_files/files-hosts.c (_nss_files_gethostbyname4_r): Handle
+ TRYAGAIN errors separately.
+ * sysdeps/posix/getaddrinfo.c (gaih_inet): Fix error handling of
+ *name4_r after functions.
+
2009-12-09 Ulrich Drepper <drepper@xxxxxxxxxx>
[BZ #11046]
Modified: fsf/trunk/libc/nis/nss_nis/nis-hosts.c
==============================================================================
--- fsf/trunk/libc/nis/nss_nis/nis-hosts.c (original)
+++ fsf/trunk/libc/nis/nss_nis/nis-hosts.c Fri Dec 11 00:04:33 2009
@@ -70,20 +70,20 @@
{
assert ((flags & AI_V4MAPPED) == 0 || af != AF_UNSPEC);
if (flags & AI_V4MAPPED)
- {
- map_v4v6_address ((char *) entdata->host_addr,
- (char *) entdata->host_addr);
- result->h_addrtype = AF_INET6;
- result->h_length = IN6ADDRSZ;
- }
+ {
+ map_v4v6_address ((char *) entdata->host_addr,
+ (char *) entdata->host_addr);
+ result->h_addrtype = AF_INET6;
+ result->h_length = IN6ADDRSZ;
+ }
else
- {
- result->h_addrtype = AF_INET;
- result->h_length = INADDRSZ;
- }
+ {
+ result->h_addrtype = AF_INET;
+ result->h_length = INADDRSZ;
+ }
}
else if (af != AF_INET
- && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
+ && inet_pton (AF_INET6, addr, entdata->host_addr) > 0)
{
result->h_addrtype = AF_INET6;
result->h_length = IN6ADDRSZ;
@@ -164,14 +164,14 @@
int keylen;
int yperr;
if (new_start)
- yperr = yp_first (domain, "hosts.byname", &outkey, &keylen, &result,
+ yperr = yp_first (domain, "hosts.byname", &outkey, &keylen, &result,
&len);
else
- yperr = yp_next (domain, "hosts.byname", oldkey, oldkeylen, &outkey,
+ yperr = yp_next (domain, "hosts.byname", oldkey, oldkeylen, &outkey,
&keylen, &result, &len);
if (__builtin_expect (yperr != YPERR_SUCCESS, 0))
- {
+ {
enum nss_status retval = yperr2nss (yperr);
switch (retval)
@@ -191,12 +191,12 @@
}
if (__builtin_expect ((size_t) (len + 1) > linebuflen, 0))
- {
- free (result);
+ {
+ free (result);
*h_errnop = NETDB_INTERNAL;
- *errnop = ERANGE;
- return NSS_STATUS_TRYAGAIN;
- }
+ *errnop = ERANGE;
+ return NSS_STATUS_TRYAGAIN;
+ }
char *p = strncpy (data->linebuffer, result, len);
data->linebuffer[len] = '\0';
@@ -233,7 +233,7 @@
__libc_lock_lock (lock);
status = internal_nis_gethostent_r (host, buffer, buflen, errnop, h_errnop,
- ((_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET),
+ ((_res.options & RES_USE_INET6) ? AF_INET6 : AF_INET),
((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0 ));
__libc_lock_unlock (lock);
@@ -346,7 +346,7 @@
return internal_gethostbyname2_r (name, af, host, buffer, buflen, errnop,
h_errnop,
- ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0));
+ ((_res.options & RES_USE_INET6) ? AI_V4MAPPED : 0));
}
@@ -456,7 +456,10 @@
{
char *domain;
if (yp_get_default_domain (&domain))
- return NSS_STATUS_UNAVAIL;
+ {
+ *herrnop = NO_DATA;
+ return NSS_STATUS_UNAVAIL;
+ }
/* Convert name to lowercase. */
size_t namlen = strlen (name);
Modified: fsf/trunk/libc/nis/nss_nisplus/nisplus-hosts.c
==============================================================================
--- fsf/trunk/libc/nis/nss_nisplus/nisplus-hosts.c (original)
+++ fsf/trunk/libc/nis/nss_nisplus/nisplus-hosts.c Fri Dec 11 00:04:33 2009
@@ -1,4 +1,4 @@
-/* Copyright (C) 1997-2003, 2005, 2006, 2008 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2003, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@xxxxxxx>, 1997.
@@ -38,10 +38,10 @@
static u_long tablename_len;
#define NISENTRYVAL(idx, col, res) \
- (NIS_RES_OBJECT (res)[idx].EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val)
+ (NIS_RES_OBJECT (res)[idx].EN_data.en_cols.en_cols_val[col].ec_value.ec_value_val)
#define NISENTRYLEN(idx, col, res) \
- (NIS_RES_OBJECT (res)[idx].EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len)
+ (NIS_RES_OBJECT (res)[idx].EN_data.en_cols.en_cols_val[col].ec_value.ec_value_len)
/* Get implementation for some internal functions. */
#include <resolv/mapv4v6addr.h>
@@ -287,15 +287,15 @@
return NSS_STATUS_TRYAGAIN;
}
if (niserr2nss (result->status) != NSS_STATUS_SUCCESS)
- {
- enum nss_status retval = niserr2nss (result->status);
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- *herrnop = NETDB_INTERNAL;
- *errnop = errno;
- }
- return retval;
- }
+ {
+ enum nss_status retval = niserr2nss (result->status);
+ if (retval == NSS_STATUS_TRYAGAIN)
+ {
+ *herrnop = NETDB_INTERNAL;
+ *errnop = errno;
+ }
+ return retval;
+ }
}
else
@@ -308,18 +308,18 @@
return NSS_STATUS_TRYAGAIN;
}
if (niserr2nss (result->status) != NSS_STATUS_SUCCESS)
- {
- enum nss_status retval= niserr2nss (result->status);
+ {
+ enum nss_status retval= niserr2nss (result->status);
nis_freeresult (result);
result = saved_res;
- if (retval == NSS_STATUS_TRYAGAIN)
- {
- *herrnop = NETDB_INTERNAL;
+ if (retval == NSS_STATUS_TRYAGAIN)
+ {
+ *herrnop = NETDB_INTERNAL;
*errnop = errno;
- }
- return retval;
- }
+ }
+ return retval;
+ }
}
if (_res.options & RES_USE_INET6)
@@ -330,13 +330,13 @@
buflen, errnop, 0);
if (parse_res == -1)
- {
+ {
nis_freeresult (result);
result = saved_res;
- *herrnop = NETDB_INTERNAL;
+ *herrnop = NETDB_INTERNAL;
*errnop = ERANGE;
- return NSS_STATUS_TRYAGAIN;
- }
+ return NSS_STATUS_TRYAGAIN;
+ }
if (saved_res != NULL)
nis_freeresult (saved_res);
@@ -435,6 +435,7 @@
if (result == NULL)
{
*errnop = ENOMEM;
+ *herrnop = NETDB_INTERNAL;
return NSS_STATUS_TRYAGAIN;
}
@@ -444,10 +445,13 @@
if (retval == NSS_STATUS_TRYAGAIN)
{
*errnop = errno;
+ *herrnop = TRY_AGAIN;
+ }
+ else
+ {
+ __set_errno (olderr);
*herrnop = NETDB_INTERNAL;
}
- else
- __set_errno (olderr);
nis_freeresult (result);
return retval;
}
@@ -502,7 +506,7 @@
buflen, errnop, h_errnop,
AI_V4MAPPED);
if (status == NSS_STATUS_SUCCESS)
- return status;
+ return status;
}
return internal_gethostbyname2_r (name, AF_INET, host, buffer,
Modified: fsf/trunk/libc/nss/nss_files/files-hosts.c
==============================================================================
--- fsf/trunk/libc/nss/nss_files/files-hosts.c (original)
+++ fsf/trunk/libc/nss/nss_files/files-hosts.c Fri Dec 11 00:04:33 2009
@@ -423,6 +423,11 @@
if (! keep_stream)
internal_endent ();
}
+ else if (status == NSS_STATUS_TRYAGAIN)
+ {
+ *errnop = errno;
+ *herrnop = TRY_AGAIN;
+ }
else
{
*errnop = errno;
Modified: fsf/trunk/libc/sysdeps/posix/getaddrinfo.c
==============================================================================
--- fsf/trunk/libc/sysdeps/posix/getaddrinfo.c (original)
+++ fsf/trunk/libc/sysdeps/posix/getaddrinfo.c Fri Dec 11 00:04:33 2009
@@ -719,13 +719,8 @@
if (status != NSS_STATUS_TRYAGAIN
|| rc != ERANGE || herrno != NETDB_INTERNAL)
{
- if (herrno == NETDB_INTERNAL)
- {
- __set_h_errno (herrno);
- _res.options = old_res_options;
- return -EAI_SYSTEM;
- }
- if (herrno == TRY_AGAIN)
+ if (status == NSS_STATUS_TRYAGAIN
+ && herrno == TRY_AGAIN)
no_data = EAI_AGAIN;
else
no_data = herrno == NO_DATA;