xref: /csrg-svn/old/groups/groups.c (revision 15082)
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