diff options
author | Ulrich Drepper <drepper@redhat.com> | 2004-10-01 21:24:29 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2004-10-01 21:24:29 +0000 |
commit | 927f0673b3bce7c209071bb5c4e3815f9b1ef0b0 (patch) | |
tree | 1859ee41b1ef187590d86f1e8101daa353bbe0fb /nscd/nscd_initgroups.c | |
parent | cb984ef2a284a17e67b9143f4a432df719191004 (diff) | |
download | glibc-927f0673b3bce7c209071bb5c4e3815f9b1ef0b0.zip glibc-927f0673b3bce7c209071bb5c4e3815f9b1ef0b0.tar.gz glibc-927f0673b3bce7c209071bb5c4e3815f9b1ef0b0.tar.bz2 |
* nscd/nscd_initgroups.c (__nscd_getgrouplist): Always add the
group the caller provided unless there is a real problem.
Diffstat (limited to 'nscd/nscd_initgroups.c')
-rw-r--r-- | nscd/nscd_initgroups.c | 29 |
1 files changed, 13 insertions, 16 deletions
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) |