diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | nscd/netgroupcache.c | 14 | ||||
-rw-r--r-- | nss/nss_files/files-netgrp.c | 2 |
4 files changed, 20 insertions, 10 deletions
@@ -1,3 +1,11 @@ +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. + 2014-05-25 Richard Henderson <rth@twiddle.net> * sysdeps/unix/sysv/linux/aarch64/nptl/sysdep-cancel.h @@ -16,9 +16,9 @@ Version 2.20 16670, 16674, 16677, 16680, 16683, 16689, 16695, 16701, 16706, 16707, 16712, 16713, 16714, 16731, 16739, 16740, 16743, 16754, 16758, 16759, 16760, 16770, 16786, 16789, 16791, 16799, 16800, 16815, 16823, 16824, - 16831, 16838, 16849, 16854, 16876, 16877, 16885, 16888, 16890, 16912, - 16915, 16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, 16966, - 16967, 16965, 16977, 16978. + 16831, 16838, 16849, 16854, 16876, 16877, 16878, 16885, 16888, 16890, + 16912, 16915, 16916, 16917, 16922, 16927, 16928, 16932, 16943, 16958, + 16966, 16967, 16965, 16977, 16978. * The minimum Linux kernel version that this version of the GNU C Library can be used with is 2.6.32. diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c index b3d40e9..edab174 100644 --- a/nscd/netgroupcache.c +++ b/nscd/netgroupcache.c @@ -197,11 +197,6 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, 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) @@ -320,11 +315,18 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, } } } - 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 *); diff --git a/nss/nss_files/files-netgrp.c b/nss/nss_files/files-netgrp.c index 34eae4c..bc0b367 100644 --- a/nss/nss_files/files-netgrp.c +++ b/nss/nss_files/files-netgrp.c @@ -252,7 +252,7 @@ _nss_netgroup_parseline (char **cursor, struct __netgrent *result, if (cp - host > buflen) { *errnop = ERANGE; - status = NSS_STATUS_UNAVAIL; + status = NSS_STATUS_TRYAGAIN; } else { |