From fade8d08a076a25b85afc737964d262a2d752d6b Mon Sep 17 00:00:00 2001 From: Olivier Certner Date: Thu, 31 Jul 2025 19:07:11 +0200 Subject: [PATCH] More changes for kevans@'s D51648 --- usr.bin/newgrp/newgrp.c | 4 ++-- usr.bin/quota/quota.c | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/usr.bin/newgrp/newgrp.c b/usr.bin/newgrp/newgrp.c index 79d693a8c4ef..d9e714865d44 100644 --- a/usr.bin/newgrp/newgrp.c +++ b/usr.bin/newgrp/newgrp.c @@ -184,20 +184,20 @@ addgroup(const char *grpname) fprintf(stderr, "Sorry\n"); return; } } - ngrps_max = sysconf(_SC_NGROUPS_MAX) + 1; + ngrps_max = sysconf(_SC_NGROUPS_MAX); if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL) err(1, "malloc"); if ((ngrps = getgroups(ngrps_max, (gid_t *)grps)) < 0) { warn("getgroups"); goto end; } /* Remove requested gid from supp. list if it exists. */ - if (inarray(grp->gr_gid, grps, ngrps)) { + if (grp->gr_gid != egid && inarray(grp->gr_gid, grps, ngrps)) { for (i = 0; i < ngrps; i++) if (grps[i] == grp->gr_gid) break; ngrps--; memmove(&grps[i], &grps[i + 1], (ngrps - i) * sizeof(gid_t)); diff --git a/usr.bin/quota/quota.c b/usr.bin/quota/quota.c index b5d28fd7c184..9ad4076cec40 100644 --- a/usr.bin/quota/quota.c +++ b/usr.bin/quota/quota.c @@ -98,12 +98,11 @@ static int vflag; static char *filename = NULL; int main(int argc, char *argv[]) { - int ngroups; - gid_t mygid, gidset[NGROUPS]; + int ngroups; int i, ch, gflag = 0, uflag = 0, errflag = 0; while ((ch = getopt(argc, argv, "f:ghlrquv")) != -1) { switch(ch) { case 'f': @@ -140,15 +139,19 @@ main(int argc, char *argv[]) uflag++; if (argc == 0) { if (uflag) errflag += showuid(getuid()); if (gflag) { + gid_t mygid, myegid, gidset[NGROUPS_MAX]; + mygid = getgid(); - ngroups = getgroups(NGROUPS, gidset); + errflag += showgid(mygid); + myegid = getegid(); + errflag += showgid(myegid); + ngroups = getgroups(NGROUPS_MAX, gidset); if (ngroups < 0) err(1, "getgroups"); - errflag += showgid(mygid); for (i = 0; i < ngroups; i++) if (gidset[i] != mygid) errflag += showgid(gidset[i]); } return(errflag);