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
     {
openSUSE Build Service is sponsored by