OSDN Git Service

* grp.cc (internal_getgroups): Do not return without closing
authorcorinna <corinna>
Tue, 4 Feb 2003 17:53:08 +0000 (17:53 +0000)
committercorinna <corinna>
Tue, 4 Feb 2003 17:53:08 +0000 (17:53 +0000)
the process handle.

winsup/cygwin/ChangeLog
winsup/cygwin/grp.cc

index adcd668..5c62517 100644 (file)
@@ -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.
index 41f2484..cee32a2 100644 (file)
@@ -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