xref: /csrg-svn/old/groups/groups.c (revision 13440)
1*13440Ssam /*	groups.c	4.6	83/06/29	*/
26013Swnj 
36013Swnj /*
46013Swnj  * groups
56013Swnj  */
66013Swnj 
76013Swnj #include <sys/param.h>
86013Swnj #include <grp.h>
96013Swnj #include <pwd.h>
106013Swnj 
1111072Smckusick int	groups[NGROUPS];
126013Swnj 
136013Swnj main(argc, argv)
146013Swnj 	int argc;
156013Swnj 	char *argv[];
166013Swnj {
17*13440Ssam 	int ngroups, i;
186013Swnj 	char *sep = "";
19*13440Ssam 	struct group *gr;
206013Swnj 
21*13440Ssam 	if (argc > 1)
22*13440Ssam 		showgroups(argv[1]);
239249Ssam 	ngroups = getgroups(NGROUPS, groups);
249249Ssam 	for (i = 0; i < ngroups; i++) {
259249Ssam 		gr = getgrgid(groups[i]);
269249Ssam 		if (gr == NULL)
279249Ssam 			printf("%s%d", sep, groups[i]);
289249Ssam 		else
299249Ssam 			printf("%s%s", sep, gr->gr_name);
309249Ssam 		sep = " ";
319249Ssam 	}
326013Swnj 	printf("\n");
336013Swnj 	exit(0);
346013Swnj }
35*13440Ssam 
36*13440Ssam showgroups(user)
37*13440Ssam 	register char *user;
38*13440Ssam {
39*13440Ssam 	register struct group *gr;
40*13440Ssam 	register char **cp;
41*13440Ssam 	char *sep = "";
42*13440Ssam 
43*13440Ssam 	while (gr = getgrent())
44*13440Ssam 		for (cp = gr->gr_mem; cp && *cp; cp++)
45*13440Ssam 			if (strcmp(*cp, user) == 0) {
46*13440Ssam 				printf("%s%s", sep, gr->gr_name);
47*13440Ssam 				sep = " ";
48*13440Ssam 				break;
49*13440Ssam 			}
50*13440Ssam 	printf("\n");
51*13440Ssam 	exit(0);
52*13440Ssam }
53