From: Sam Leffler Date: Mon, 8 Nov 1982 11:11:20 +0000 (-0800) Subject: date and time created 82/11/07 19:11:20 by sam X-Git-Tag: BSD-4_1c_2-Snapshot-Development~1893 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/a4f42d0e28f587fff6804dc5dc2bf6764e55c81f date and time created 82/11/07 19:11:20 by sam SCCS-vsn: lib/libc/gen/initgroups.c 4.1 --- diff --git a/usr/src/lib/libc/gen/initgroups.c b/usr/src/lib/libc/gen/initgroups.c new file mode 100644 index 0000000000..50d016d93e --- /dev/null +++ b/usr/src/lib/libc/gen/initgroups.c @@ -0,0 +1,38 @@ +/* initgroups.c 4.1 82/11/07 */ + +/* + * initgroups + */ +#include +#include +#include + +struct group *getgrent(); + +initgroups(uname, agroup) + char *uname; + int agroup; +{ + int groups[NGROUPS], ngroups = 0; + register struct group *grp; + register int i; + + if (agroup >= 0) + groups[ngroups++] = agroup; + setgrent(); + while (grp = getgrent()) + for (i = 0; grp->gr_mem[i]; i++) + if (!strcmp(grp->gr_mem[i], uname)) { + groups[ngroups++] = grp->gr_gid; + if (ngroups == NGROUPS) { +fprintf(stderr, "inigrp: %s is in too many groups\n", uname); + goto toomany; + } + } +toomany: + if (setgroups(ngroups, groups) < 0) { + perror("setgrp"); + return (1); + } + return (0); +}