|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: char copyright[] =
20: "@(#) Copyright (c) 1980 Regents of the University of California.\n\
21: All rights reserved.\n";
22: #endif /* not lint */
23:
24: #ifndef lint
25: static char sccsid[] = "@(#)groups.c 5.3 (Berkeley) 6/29/88";
26: #endif /* not lint */
27:
28: /*
29: * groups
30: */
31:
32: #include <sys/param.h>
33: #include <grp.h>
34: #include <pwd.h>
35: #include <stdio.h>
36:
37: int groups[NGROUPS];
38:
39: main(argc, argv)
40: int argc;
41: char *argv[];
42: {
43: int ngroups, i;
44: char *sep = "";
45: struct group *gr;
46:
47: if (argc > 1)
48: showgroups(argv[1]);
49: ngroups = getgroups(NGROUPS, groups);
50: for (i = 0; i < ngroups; i++) {
51: gr = getgrgid(groups[i]);
52: if (gr == NULL)
53: printf("%s%d", sep, groups[i]);
54: else
55: printf("%s%s", sep, gr->gr_name);
56: sep = " ";
57: }
58: printf("\n");
59: exit(0);
60: }
61:
62: showgroups(user)
63: register char *user;
64: {
65: register struct group *gr;
66: register struct passwd *pw;
67: register char **cp;
68: char *sep = "";
69:
70: if ((pw = getpwnam(user)) == NULL) {
71: fprintf(stderr, "groups: no such user.\n");
72: exit(1);
73: }
74: while (gr = getgrent()) {
75: if (pw->pw_gid == gr->gr_gid) {
76: printf("%s%s", sep, gr->gr_name);
77: sep = " ";
78: continue;
79: }
80: for (cp = gr->gr_mem; cp && *cp; cp++)
81: if (strcmp(*cp, user) == 0) {
82: printf("%s%s", sep, gr->gr_name);
83: sep = " ";
84: break;
85: }
86: }
87: printf("\n");
88: exit(0);
89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.