|
|
1.1 root 1: #include <stdio.h>
2: #include <pwd.h>
3: #include <grp.h>
4:
5: int getopt();
6:
7: main (argc, argv)
8: int argc;
9: char **argv;
10: {
11: int uid, gid, euid, egid, c, flags=0;
12: static char stdbuf[BUFSIZ];
13: char ln[64];
14:
15: setbuf (stdout, stdbuf);
16:
17: uid = getuid();
18: gid = getgid();
19: euid = geteuid();
20: egid = getegid();
21: ln[0] = '\0';
22: getlogname (ln);
23:
24: while ((c = getopt (argc, argv, "ugUGl")) >= 0) {
25: flags++;
26: switch (c) {
27: case 'u':
28: puid ("", euid);
29: break;
30: case 'g':
31: pgid ("", egid);
32: break;
33: case 'U':
34: puid ("", uid);
35: break;
36: case 'G':
37: pgid ("", gid);
38: break;
39: case 'l':
40: plogin ("", ln);
41: break;
42: }
43: putchar ('\n');
44: }
45:
46: if (!flags) {
47: puid ("uid=", uid);
48: pgid (" gid=", gid);
49: if (uid != euid)
50: puid (" euid=", euid);
51: if (gid != egid)
52: pgid (" egid=", egid);
53: plogin (" login=", ln);
54: putchar ('\n');
55: }
56: return 0;
57: }
58:
59: puid (s, id)
60: char *s;
61: int id;
62: {
63: struct passwd *pw;
64: struct passwd *getpwuid();
65:
66: printf ("%s%d", s, id);
67: setpwent();
68: pw = getpwuid(id);
69: if (pw)
70: printf ("(%s)", pw->pw_name);
71: }
72:
73: pgid (s, id)
74: char *s;
75: int id;
76: {
77: struct group *gr;
78: struct group *getgrgid();
79:
80: printf ("%s%d", s, id);
81: setgrent();
82: gr = getgrgid(id);
83: if (gr)
84: printf ("(%s)", gr->gr_name);
85: }
86:
87: plogin (s, l)
88: char *s, *l;
89: {
90: if (*l)
91: printf ("%s%s", s, l);
92: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.