From 927f0673b3bce7c209071bb5c4e3815f9b1ef0b0 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 1 Oct 2004 21:24:29 +0000 Subject: Update. * nscd/nscd_initgroups.c (__nscd_getgrouplist): Always add the group the caller provided unless there is a real problem. --- nscd/nscd_initgroups.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) (limited to 'nscd') diff --git a/nscd/nscd_initgroups.c b/nscd/nscd_initgroups.c index ea32ab6..d6cb000 100644 --- a/nscd/nscd_initgroups.c +++ b/nscd/nscd_initgroups.c @@ -95,6 +95,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, doesn't use memcpy but instead copies each array element one by one. */ assert (sizeof (int32_t) == sizeof (gid_t)); + assert (initgr_resp->ngrps > 0); /* Make sure we have enough room. We always count GROUP in even though we might not end up adding it. */ @@ -125,25 +126,21 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size, retval = initgr_resp->ngrps; memcpy (*groupsp, respdata, retval * sizeof (gid_t)); } - - /* Check whether GROUP is part of the mix. If not, add it. */ - if (retval >= 0) - { - int cnt; - for (cnt = 0; cnt < retval; ++cnt) - if ((*groupsp)[cnt] == group) - break; - - if (cnt == retval) - (*groupsp)[retval++] = group; - } } else + /* No group found yet. */ + retval = 0; + + /* Check whether GROUP is part of the mix. If not, add it. */ + if (retval >= 0) { - /* The `errno' to some value != ERANGE. */ - __set_errno (ENOENT); - /* Even though we have not found anything, the result is zero. */ - retval = 0; + int cnt; + for (cnt = 0; cnt < retval; ++cnt) + if ((*groupsp)[cnt] == group) + break; + + if (cnt == retval) + (*groupsp)[retval++] = group; } if (sock != -1) -- cgit v1.1