diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2003-02-04 17:53:08 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2003-02-04 17:53:08 +0000 |
commit | 0daf256192b56839708082f0788c5c477d1ef9d6 (patch) | |
tree | c7cbb2969a5dd1356d0367b57c64e1c7625d3dd1 | |
parent | 4a21c2d5c8c87d5df8151300085fcc333a5ffefe (diff) | |
download | cygnal-0daf256192b56839708082f0788c5c477d1ef9d6.tar.gz cygnal-0daf256192b56839708082f0788c5c477d1ef9d6.tar.bz2 cygnal-0daf256192b56839708082f0788c5c477d1ef9d6.zip |
* grp.cc (internal_getgroups): Do not return without closing
the process handle.
-rw-r--r-- | winsup/cygwin/ChangeLog | 5 | ||||
-rw-r--r-- | winsup/cygwin/grp.cc | 41 |
2 files changed, 26 insertions, 20 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index adcd66861..5c6251763 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,10 @@ 2003-02-04 Pierre Humblet <pierre.humblet@ieee.org> + * grp.cc (internal_getgroups): Do not return without closing + the process handle. + +2003-02-04 Pierre Humblet <pierre.humblet@ieee.org> + * security.h (class cygpsid): New class. (class cygsid): Use cygpsid as base. Remove members psid, get_id, get_uid, get_gid, string, debug_printf and the == and != operators. diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index 41f2484b0..cee32a24f 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -263,27 +263,28 @@ internal_getgroups (int gidsetsize, __gid32_t *grouplist, cygpsid * srchsid) if (srchsid) { for (DWORD pg = 0; pg < groups->GroupCount; ++pg) - if (*srchsid == groups->Groups[pg].Sid) - return 1; - return 0; + if ((cnt = (*srchsid == groups->Groups[pg].Sid))) + break; + cnt = -1; } - for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx) - if (sid.getfromgr (gr)) - for (DWORD pg = 0; pg < groups->GroupCount; ++pg) - if (sid == groups->Groups[pg].Sid && - sid != well_known_world_sid) - { - if (cnt < gidsetsize) - grouplist[cnt] = gr->gr_gid; - ++cnt; - if (gidsetsize && cnt > gidsetsize) - { - if (hToken != cygheap->user.token) - CloseHandle (hToken); - goto error; - } - break; - } + else + for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx) + if (sid.getfromgr (gr)) + for (DWORD pg = 0; pg < groups->GroupCount; ++pg) + if (sid == groups->Groups[pg].Sid && + sid != well_known_world_sid) + { + if (cnt < gidsetsize) + grouplist[cnt] = gr->gr_gid; + ++cnt; + if (gidsetsize && cnt > gidsetsize) + { + if (hToken != cygheap->user.token) + CloseHandle (hToken); + goto error; + } + break; + } } } else |