complained too early about too many groups
[unix-history] / usr / src / lib / libc / gen / initgroups.c
CommitLineData
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
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();
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) {
28fprintf(stderr, "inigrp: %s is in too many groups\n", uname);
29 goto toomany;
30 }
31 }
32toomany:
33 if (setgroups(ngroups, groups) < 0) {
34 perror("setgrp");
35 return (1);
36 }
37 return (0);
38}