]> granicus.if.org Git - sudo/commitdiff
Fix setgroups() fallback code on EINVAL.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 22 Jul 2011 19:33:33 +0000 (15:33 -0400)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Fri, 22 Jul 2011 19:33:33 +0000 (15:33 -0400)
common/setgroups.c

index 19feb53ac157d01e720efa14dbaddcf185fefb60..c469d20b3fd4e0fc677d0f43579fe9ed08a330d2 100644 (file)
@@ -45,15 +45,12 @@ sudo_setgroups(int ngids, const GETGROUPS_T *gids)
     if (rval == -1 && errno == EINVAL) {
        /* Too many groups, try again with fewer. */
 #if defined(HAVE_SYSCONF) && defined(_SC_NGROUPS_MAX)
-       maxgids = sysconf(_SC_NGROUPS_MAX);
+       maxgids = (int)sysconf(_SC_NGROUPS_MAX);
        if (maxgids == -1)
 #endif
            maxgids = NGROUPS_MAX;
-       if (maxgids > ngids) {
-           /* Skip base gid. */
-           if (getegid() == gids[0])
-               rval = setgroups(maxgids, gids + 1);
-       }
+       if (ngids > maxgids)
+           rval = setgroups(maxgids, gids);
     }
     return rval;
 }