delete extraneous definitions
[unix-history] / usr / src / lib / libc / gen / initgroups.c
CommitLineData
4ce247a6 1/* initgroups.c 4.4 83/06/17 */
a4f42d0e
SL
2
3/*
4 * initgroups
5 */
6#include <stdio.h>
7#include <sys/param.h>
8#include <grp.h>
9
10struct group *getgrent();
11
12initgroups(uname, agroup)
13 char *uname;
14 int agroup;
15{
16 int groups[NGROUPS], ngroups = 0;
17 register struct group *grp;
18 register int i;
19
20 if (agroup >= 0)
21 groups[ngroups++] = agroup;
22 setgrent();
0fb3f429
SL
23 while (grp = getgrent()) {
24 if (grp->gr_gid == agroup)
25 continue;
a4f42d0e
SL
26 for (i = 0; grp->gr_mem[i]; i++)
27 if (!strcmp(grp->gr_mem[i], uname)) {
a4f42d0e 28 if (ngroups == NGROUPS) {
0fb3f429 29fprintf(stderr, "initgroups: %s is in too many groups\n", uname);
a4f42d0e
SL
30 goto toomany;
31 }
7479b5d0 32 groups[ngroups++] = grp->gr_gid;
a4f42d0e 33 }
0fb3f429 34 }
a4f42d0e 35toomany:
4ce247a6 36 endgrent();
a4f42d0e 37 if (setgroups(ngroups, groups) < 0) {
0fb3f429 38 perror("setgroups");
a4f42d0e
SL
39 return (1);
40 }
41 return (0);
42}