114517Ssam #ifndef lint 2*15082Ssam static char sccsid[] = "@(#)groups.c 4.8 (Berkeley) 09/25/83"; 314517Ssam #endif 46013Swnj 56013Swnj /* 66013Swnj * groups 76013Swnj */ 86013Swnj 96013Swnj #include <sys/param.h> 106013Swnj #include <grp.h> 116013Swnj #include <pwd.h> 12*15082Ssam #include <stdio.h> 136013Swnj 1411072Smckusick int groups[NGROUPS]; 156013Swnj 166013Swnj main(argc, argv) 176013Swnj int argc; 186013Swnj char *argv[]; 196013Swnj { 2013440Ssam int ngroups, i; 216013Swnj char *sep = ""; 2213440Ssam struct group *gr; 236013Swnj 2413440Ssam if (argc > 1) 2513440Ssam showgroups(argv[1]); 269249Ssam ngroups = getgroups(NGROUPS, groups); 279249Ssam for (i = 0; i < ngroups; i++) { 289249Ssam gr = getgrgid(groups[i]); 299249Ssam if (gr == NULL) 309249Ssam printf("%s%d", sep, groups[i]); 319249Ssam else 329249Ssam printf("%s%s", sep, gr->gr_name); 339249Ssam sep = " "; 349249Ssam } 356013Swnj printf("\n"); 366013Swnj exit(0); 376013Swnj } 3813440Ssam 3913440Ssam showgroups(user) 4013440Ssam register char *user; 4113440Ssam { 4213440Ssam register struct group *gr; 43*15082Ssam register struct passwd *pw; 4413440Ssam register char **cp; 4513440Ssam char *sep = ""; 4613440Ssam 47*15082Ssam if ((pw = getpwnam(user)) == NULL) { 48*15082Ssam fprintf(stderr, "No such user\n"); 49*15082Ssam exit(1); 50*15082Ssam } 51*15082Ssam while (gr = getgrent()) { 52*15082Ssam if (pw->pw_gid == gr->gr_gid) { 53*15082Ssam printf("%s%s", sep, gr->gr_name); 54*15082Ssam sep = " "; 55*15082Ssam continue; 56*15082Ssam } 5713440Ssam for (cp = gr->gr_mem; cp && *cp; cp++) 5813440Ssam if (strcmp(*cp, user) == 0) { 5913440Ssam printf("%s%s", sep, gr->gr_name); 6013440Ssam sep = " "; 6113440Ssam break; 6213440Ssam } 63*15082Ssam } 6413440Ssam printf("\n"); 6513440Ssam exit(0); 6613440Ssam } 67