diff options
author | Brooks Davis <brooks@FreeBSD.org> | 2009-06-19 15:58:24 +0000 |
---|---|---|
committer | Brooks Davis <brooks@FreeBSD.org> | 2009-06-19 15:58:24 +0000 |
commit | 54404cfb13d40e474f72d3c75de1f4db3417df64 (patch) | |
tree | b7d4401847de9bebf98c6fe35d5b61bfd749c7dc /usr.bin/newgrp | |
parent | 68cc62cec1384a3e08391dc734b0ff16f6eda869 (diff) | |
download | src-test2-54404cfb13d40e474f72d3c75de1f4db3417df64.tar.gz src-test2-54404cfb13d40e474f72d3c75de1f4db3417df64.zip |
Notes
Diffstat (limited to 'usr.bin/newgrp')
-rw-r--r-- | usr.bin/newgrp/newgrp.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/usr.bin/newgrp/newgrp.c b/usr.bin/newgrp/newgrp.c index 62d552fa05d3..91b62a52779d 100644 --- a/usr.bin/newgrp/newgrp.c +++ b/usr.bin/newgrp/newgrp.c @@ -146,8 +146,8 @@ restoregrps(void) static void addgroup(const char *grpname) { - gid_t grps[NGROUPS_MAX]; - long lgid; + gid_t *grps; + long lgid, ngrps_max; int dbmember, i, ngrps; gid_t egid; struct group *grp; @@ -185,7 +185,10 @@ addgroup(const char *grpname) } } - if ((ngrps = getgroups(NGROUPS_MAX, (gid_t *)grps)) < 0) { + ngrps_max = sysconf(_SC_NGROUPS_MAX) + 1; + if ((grps = malloc(sizeof(gid_t) * ngrps_max)) == NULL) + err(1, "malloc"); + if ((ngrps = getgroups(ngrps_max, (gid_t *)grps)) < 0) { warn("getgroups"); return; } @@ -217,7 +220,7 @@ addgroup(const char *grpname) /* Add old effective gid to supp. list if it does not exist. */ if (egid != grp->gr_gid && !inarray(egid, grps, ngrps)) { - if (ngrps == NGROUPS_MAX) + if (ngrps == ngrps_max) warnx("too many groups"); else { grps[ngrps++] = egid; @@ -231,6 +234,7 @@ addgroup(const char *grpname) } } + free(grps); } static int |