|
|
1.1 root 1: #include <stdio.h>
2: #include <pwd.h>
3: #include <grp.h>
4:
5: main()
6: {
7: register struct passwd *pstp;
8: register struct group *psgr;
9: int ruid, /* real user id */
10: rgid, /* real group id */
11: euid, /* effective user id */
12: egid; /* effetcive group id */
13:
14:
15: ruid = getuid();
16: rgid = getgid();
17: euid = geteuid();
18: egid = getegid();
19:
20: if ((pstp = getpwuid(ruid)) == NULL) {
21: perror("id");
22: exit(1);
23: }
24: if ((psgr = getgrgid(rgid)) == NULL) {
25: perror("id");
26: exit(1);
27: }
28: printf("uid=%d(%s) gid=%d(%s)", ruid, pstp->pw_name,
29: rgid, psgr->gr_name);
30: if (ruid != euid) {
31: if ((pstp = getpwuid(euid)) == NULL) {
32: perror("id");
33: exit(1);
34: }
35: if ((psgr = getgrgid(rgid)) == NULL) {
36: perror("id");
37: exit(1);
38: }
39: printf(" euid=%d(%s) egid=%d(%s)\n",
40: euid, pstp->pw_name, egid, psgr->gr_name);
41: } else
42: putchar('\n');
43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.