|
|
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.