Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/winsup
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2003-02-04 20:53:08 +0300
committerCorinna Vinschen <corinna@vinschen.de>2003-02-04 20:53:08 +0300
commit0daf256192b56839708082f0788c5c477d1ef9d6 (patch)
treec7cbb2969a5dd1356d0367b57c64e1c7625d3dd1 /winsup
parent4a21c2d5c8c87d5df8151300085fcc333a5ffefe (diff)
* grp.cc (internal_getgroups): Do not return without closing
the process handle.
Diffstat (limited to 'winsup')
-rw-r--r--winsup/cygwin/ChangeLog5
-rw-r--r--winsup/cygwin/grp.cc41
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