From 1b8ae5b55131ec5679147811bf71488299624ba2 Mon Sep 17 00:00:00 2001 From: Alejandro Colomar Date: Thu, 14 Nov 2024 19:05:31 +0100 Subject: [PATCH] lib/, src/: Unconditionally call setgroups(2) Call it regardless of having added any groups. If the group list is the same that getgroups(3) gave us, setgroups(3) will be a no-op, and it simplifies the surrounding code, by removing the 'added' variable, and allowing to call lsearch(3) instead of lfind(3). Reviewed-by: Serge Hallyn Signed-off-by: Alejandro Colomar --- lib/addgrps.c | 9 ++------- src/newgrp.c | 6 +++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/addgrps.c b/lib/addgrps.c index e65b06d27..c45c52996 100644 --- a/lib/addgrps.c +++ b/lib/addgrps.c @@ -36,7 +36,6 @@ add_groups(const char *list) { GETGROUPS_T *grouplist; int ngroups; - bool added; char *g, *p; char buf[1024]; FILE *shadow_logfd = log_get_logfd(); @@ -59,7 +58,6 @@ add_groups(const char *list) if (ngroups == -1) goto free_gids; - added = false; p = buf; while (NULL != (g = strsep(&p, ",:"))) { struct group *grp; @@ -84,13 +82,10 @@ add_groups(const char *list) grouplist[ngroups] = grp->gr_gid; ngroups++; - added = true; } - if (added) { - if (setgroups(ngroups, grouplist) == -1) - goto free_gids; - } + if (setgroups(ngroups, grouplist) == -1) + goto free_gids; free (grouplist); return 0; diff --git a/src/newgrp.c b/src/newgrp.c index 7a5fecabe..4c5795931 100644 --- a/src/newgrp.c +++ b/src/newgrp.c @@ -687,12 +687,12 @@ fail_gg: (void) fputs (_("too many groups\n"), stderr); } else { grouplist[ngroups++] = gid; - if (setgroups (ngroups, grouplist) != 0) { - perror ("setgroups"); - } } } + if (setgroups(ngroups, grouplist) == -1) + perror("setgroups"); + /* * Close all files before changing the user/group IDs. * -- 2.47.2