This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH][BZ #16365] Fix infinite loop in nscd when netgroup is empty
- From: Siddhesh Poyarekar <siddhesh at redhat dot com>
- To: libc-alpha at sourceware dot org
- Date: Tue, 31 Dec 2013 12:15:50 +0530
- Subject: Re: [PATCH][BZ #16365] Fix infinite loop in nscd when netgroup is empty
- Authentication-results: sourceware.org; auth=none
- References: <20131223115002 dot GH4979 at spoyarek dot pnq dot redhat dot com>
Ping!
On Mon, Dec 23, 2013 at 05:20:02PM +0530, Siddhesh Poyarekar wrote:
> Hi,
>
> Currently, when a user looks up a netgroup that does not have any
> members, nscd goes into an infinite loop trying to find members in the
> group. This is because it does not handle cases when getnetgrent
> returns an NSS_STATUS_NOTFOUND (which is what it does on empty group).
> Fixed to handle this in the same way as NSS_STATUS_RETURN, similar to
> what getgrent does by itself.
>
> Tested on Fedora rawhide to verify that the problem is fixed. OK to
> commit?
>
> Siddhesh
>
> [BZ # 16365]
> * nscd/netgroupcache.c (addgetnetgrentX): Break if status is
> NSS_STATUS_NOTFOUND.
>
> diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c
> index a607dda..f555892 100644
> --- a/nscd/netgroupcache.c
> +++ b/nscd/netgroupcache.c
> @@ -180,9 +180,10 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req,
> int e;
> status = getfct.f (&data, buffer + buffilled,
> buflen - buffilled, &e);
> - if (status == NSS_STATUS_RETURN)
> - /* This was the last one for this group. Look
> - at next group if available. */
> + 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)
> {