setgroups(2) already performs a test to check if the number of groups is
too large. Don't do that ourselves, and also don't do it for every
iteration. Just let setgroups(2) do it once.
Instead of our check, let's report errors from setgroups(2).
Reviewed-by: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
if (LFIND(&grp->gr_gid, grouplist, ngroups) != NULL)
continue;
- if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
- fputs (_("Warning: too many groups\n"), shadow_logfd);
- break;
- }
-
grouplist[ngroups] = grp->gr_gid;
ngroups++;
}
- if (setgroups(ngroups, grouplist) == -1)
+ if (setgroups(ngroups, grouplist) == -1) {
+ fprintf(shadow_logfd, "setgroups: %s\n", strerror(errno));
goto free_gids;
+ }
free (grouplist);
return 0;
grouplist = XREALLOC(grouplist, ngroups + 1, GETGROUPS_T);
if (LFIND(&gid, grouplist, ngroups) == NULL) {
- if (ngroups >= sysconf (_SC_NGROUPS_MAX)) {
- (void) fputs (_("too many groups\n"), stderr);
- } else {
- grouplist[ngroups++] = gid;
- }
+ grouplist[ngroups++] = gid;
}
if (setgroups(ngroups, grouplist) == -1)