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