1 /* initgroups.c 4.1 82/11/07 */ 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 } 39