1*9110Ssam /* initgroups.c 4.1 82/11/07 */ 2*9110Ssam 3*9110Ssam /* 4*9110Ssam * initgroups 5*9110Ssam */ 6*9110Ssam #include <stdio.h> 7*9110Ssam #include <sys/param.h> 8*9110Ssam #include <grp.h> 9*9110Ssam 10*9110Ssam struct group *getgrent(); 11*9110Ssam 12*9110Ssam initgroups(uname, agroup) 13*9110Ssam char *uname; 14*9110Ssam int agroup; 15*9110Ssam { 16*9110Ssam int groups[NGROUPS], ngroups = 0; 17*9110Ssam register struct group *grp; 18*9110Ssam register int i; 19*9110Ssam 20*9110Ssam if (agroup >= 0) 21*9110Ssam groups[ngroups++] = agroup; 22*9110Ssam setgrent(); 23*9110Ssam while (grp = getgrent()) 24*9110Ssam for (i = 0; grp->gr_mem[i]; i++) 25*9110Ssam if (!strcmp(grp->gr_mem[i], uname)) { 26*9110Ssam groups[ngroups++] = grp->gr_gid; 27*9110Ssam if (ngroups == NGROUPS) { 28*9110Ssam fprintf(stderr, "inigrp: %s is in too many groups\n", uname); 29*9110Ssam goto toomany; 30*9110Ssam } 31*9110Ssam } 32*9110Ssam toomany: 33*9110Ssam if (setgroups(ngroups, groups) < 0) { 34*9110Ssam perror("setgrp"); 35*9110Ssam return (1); 36*9110Ssam } 37*9110Ssam return (0); 38*9110Ssam } 39