|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)groups.c 4.8 (Berkeley) 9/25/83";
3: #endif
4:
5: /*
6: * groups
7: */
8:
9: #include <sys/param.h>
10: #include <grp.h>
11: #include <pwd.h>
12: #include <stdio.h>
13:
14: int groups[NGROUPS];
15:
16: main(argc, argv)
17: int argc;
18: char *argv[];
19: {
20: int ngroups, i;
21: char *sep = "";
22: struct group *gr;
23:
24: if (argc > 1)
25: showgroups(argv[1]);
26: ngroups = getgroups(NGROUPS, groups);
27: for (i = 0; i < ngroups; i++) {
28: gr = getgrgid(groups[i]);
29: if (gr == NULL)
30: printf("%s%d", sep, groups[i]);
31: else
32: printf("%s%s", sep, gr->gr_name);
33: sep = " ";
34: }
35: printf("\n");
36: exit(0);
37: }
38:
39: showgroups(user)
40: register char *user;
41: {
42: register struct group *gr;
43: register struct passwd *pw;
44: register char **cp;
45: char *sep = "";
46:
47: if ((pw = getpwnam(user)) == NULL) {
48: fprintf(stderr, "No such user\n");
49: exit(1);
50: }
51: while (gr = getgrent()) {
52: if (pw->pw_gid == gr->gr_gid) {
53: printf("%s%s", sep, gr->gr_name);
54: sep = " ";
55: continue;
56: }
57: for (cp = gr->gr_mem; cp && *cp; cp++)
58: if (strcmp(*cp, user) == 0) {
59: printf("%s%s", sep, gr->gr_name);
60: sep = " ";
61: break;
62: }
63: }
64: printf("\n");
65: exit(0);
66: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.