1 /* initgroups.c 4.2 83/02/15 */ 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 if (ngroups == NGROUPS) { 27 fprintf(stderr, "inigrp: %s is in too many groups\n", uname); 28 goto toomany; 29 } 30 groups[ngroups++] = grp->gr_gid; 31 } 32 toomany: 33 if (setgroups(ngroups, groups) < 0) { 34 perror("setgrp"); 35 return (1); 36 } 37 return (0); 38 } 39