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