Sat Jul 13 02:47:53 1996 David Mosberger-Tang <davidm@azstarnet.com>
authorroland <roland>
Sun, 14 Jul 1996 05:27:31 +0000 (05:27 +0000)
committerroland <roland>
Sun, 14 Jul 1996 05:27:31 +0000 (05:27 +0000)
* grp/initgroups.c (initgroups): Add groups that user is a member
  of, not the ones he is _not_ a member of.

grp/initgroups.c

index 73c15c6..35af575 100644 (file)
@@ -70,28 +70,27 @@ initgroups (user, group)
        register char **m;
 
        for (m = g->gr_mem; *m != NULL; ++m)
-         if (!strcmp (*m, user))
-           break;
-
-       if (*m == NULL)
-         {
-           /* Matched the user.  Insert this group.  */
-           if (n == ngroups && limit <= 0)
-             {
-               /* Need a bigger buffer.  */
-               groups = memcpy (__alloca (ngroups * 2 * sizeof *groups),
-                                groups, ngroups * sizeof *groups);
-               ngroups *= 2;
-             }
-
-           groups[n++] = g->gr_gid;
-
-           if (n == limit)
-             /* Can't take any more groups; stop searching.  */
+         if (strcmp (*m, user) == 0)
+           {
+             /* Matches user.  Insert this group.  */
+             if (n == ngroups && limit <= 0)
+               {
+                 /* Need a bigger buffer.  */
+                 groups = memcpy (__alloca (ngroups * 2 * sizeof *groups),
+                                  groups, ngroups * sizeof *groups);
+                 ngroups *= 2;
+               }
+
+             groups[n++] = g->gr_gid;
+
+             if (n == limit)
+               /* Can't take any more groups; stop searching.  */
+               goto done;
+
              break;
-         }
+           }
       }
-
+done:
   endgrent ();
 
   return setgroups (n, groups);