1*11073Smckusick /* initgroups.c 4.2 83/02/15 */ 29110Ssam 39110Ssam /* 49110Ssam * initgroups 59110Ssam */ 69110Ssam #include <stdio.h> 79110Ssam #include <sys/param.h> 89110Ssam #include <grp.h> 99110Ssam 109110Ssam struct group *getgrent(); 119110Ssam 129110Ssam initgroups(uname, agroup) 139110Ssam char *uname; 149110Ssam int agroup; 159110Ssam { 169110Ssam int groups[NGROUPS], ngroups = 0; 179110Ssam register struct group *grp; 189110Ssam register int i; 199110Ssam 209110Ssam if (agroup >= 0) 219110Ssam groups[ngroups++] = agroup; 229110Ssam setgrent(); 239110Ssam while (grp = getgrent()) 249110Ssam for (i = 0; grp->gr_mem[i]; i++) 259110Ssam if (!strcmp(grp->gr_mem[i], uname)) { 269110Ssam if (ngroups == NGROUPS) { 279110Ssam fprintf(stderr, "inigrp: %s is in too many groups\n", uname); 289110Ssam goto toomany; 299110Ssam } 30*11073Smckusick groups[ngroups++] = grp->gr_gid; 319110Ssam } 329110Ssam toomany: 339110Ssam if (setgroups(ngroups, groups) < 0) { 349110Ssam perror("setgrp"); 359110Ssam return (1); 369110Ssam } 379110Ssam return (0); 389110Ssam } 39