1 /*
2 * Copyright (c) 1980 Regents of the University of California.
3 * All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8 #ifndef lint
9 char copyright[] =
10 "@(#) Copyright (c) 1980 Regents of the University of California.\n\
11 All rights reserved.\n";
12 #endif /* not lint */
13
14 #ifndef lint
15 static char sccsid[] = "@(#)groups.c 5.4 (Berkeley) 06/01/90";
16 #endif /* not lint */
17
18 /*
19 * groups
20 */
21
22 #include <sys/param.h>
23 #include <grp.h>
24 #include <pwd.h>
25 #include <stdio.h>
26
27 int groups[NGROUPS];
28
main(argc,argv)29 main(argc, argv)
30 int argc;
31 char *argv[];
32 {
33 int ngroups, i;
34 char *sep = "";
35 struct group *gr;
36
37 if (argc > 1)
38 showgroups(argv[1]);
39 ngroups = getgroups(NGROUPS, groups);
40 for (i = 0; i < ngroups; i++) {
41 gr = getgrgid(groups[i]);
42 if (gr == NULL)
43 printf("%s%d", sep, groups[i]);
44 else
45 printf("%s%s", sep, gr->gr_name);
46 sep = " ";
47 }
48 printf("\n");
49 exit(0);
50 }
51
showgroups(user)52 showgroups(user)
53 register char *user;
54 {
55 register struct group *gr;
56 register struct passwd *pw;
57 register char **cp;
58 char *sep = "";
59
60 if ((pw = getpwnam(user)) == NULL) {
61 fprintf(stderr, "groups: no such user.\n");
62 exit(1);
63 }
64 while (gr = getgrent()) {
65 if (pw->pw_gid == gr->gr_gid) {
66 printf("%s%s", sep, gr->gr_name);
67 sep = " ";
68 continue;
69 }
70 for (cp = gr->gr_mem; cp && *cp; cp++)
71 if (strcmp(*cp, user) == 0) {
72 printf("%s%s", sep, gr->gr_name);
73 sep = " ";
74 break;
75 }
76 }
77 printf("\n");
78 exit(0);
79 }
80