Commit | Line | Data |
---|---|---|
69444686 | 1 | /* initgroups.c 4.2 83/02/15 */ |
a4f42d0e SL |
2 | |
3 | /* | |
4 | * initgroups | |
5 | */ | |
6 | #include <stdio.h> | |
7 | #include <sys/param.h> | |
8 | #include <grp.h> | |
9 | ||
10 | struct group *getgrent(); | |
11 | ||
12 | initgroups(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(); | |
23 | while (grp = getgrent()) | |
24 | for (i = 0; grp->gr_mem[i]; i++) | |
25 | if (!strcmp(grp->gr_mem[i], uname)) { | |
26 | groups[ngroups++] = grp->gr_gid; | |
27 | if (ngroups == NGROUPS) { | |
28 | fprintf(stderr, "inigrp: %s is in too many groups\n", uname); | |
29 | goto toomany; | |
30 | } | |
31 | } | |
32 | toomany: | |
33 | if (setgroups(ngroups, groups) < 0) { | |
34 | perror("setgrp"); | |
35 | return (1); | |
36 | } | |
37 | return (0); | |
38 | } |