File netgroup-buffer-tryagain.patch of Package glibc.8003
2014-05-26 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #16878]
* nscd/netgroupcache.c (addgetnetgrentX): Look for
NSS_STATUS_TRYAGAIN to indicate insufficient buffer space.
* nscd/nss_files/files-netgrp.c (_nss_netgroup_parseline): Use
NSS_STATUS_TRYAGAIN to indicate insufficient buffer space.
Index: glibc-2.19/nscd/netgroupcache.c
===================================================================
--- glibc-2.19.orig/nscd/netgroupcache.c
+++ glibc-2.19/nscd/netgroupcache.c
@@ -203,11 +203,6 @@ addgetnetgrentX (struct database_dyn *db
int e;
status = getfct.f (&data, buffer + buffilled,
buflen - buffilled - req->key_len, &e);
- if (status == NSS_STATUS_RETURN
- || status == NSS_STATUS_NOTFOUND)
- /* This was either the last one for this group or the
- group was empty. Look at next group if available. */
- break;
if (status == NSS_STATUS_SUCCESS)
{
if (data.type == triple_val)
@@ -322,11 +317,18 @@ addgetnetgrentX (struct database_dyn *db
}
}
}
- else if (status == NSS_STATUS_UNAVAIL && e == ERANGE)
+ else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE)
{
buflen *= 2;
buffer = xrealloc (buffer, buflen);
}
+ else if (status == NSS_STATUS_RETURN
+ || status == NSS_STATUS_NOTFOUND
+ || status == NSS_STATUS_UNAVAIL)
+ /* This was either the last one for this group or the
+ group was empty or the NSS module had an internal
+ failure. Look at next group if available. */
+ break;
}
enum nss_status (*endfct) (struct __netgrent *);
Index: glibc-2.19/nss/nss_files/files-netgrp.c
===================================================================
--- glibc-2.19.orig/nss/nss_files/files-netgrp.c
+++ glibc-2.19/nss/nss_files/files-netgrp.c
@@ -252,7 +252,7 @@ _nss_netgroup_parseline (char **cursor,
if (cp - host > buflen)
{
*errnop = ERANGE;
- status = NSS_STATUS_UNAVAIL;
+ status = NSS_STATUS_TRYAGAIN;
}
else
{