/* id - return uid and gid Author: John J. Marco */ /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/ /* ----- id.c ----- */ /* Id - get real and effective user id and group id */ /* Author: John J. Marco */ /* pa1343@sdcc15.ucsd.edu */ /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/ #include #include #include #include #include #include int main(int argc, char *argv[]) { struct passwd *pwd; struct group *grp; uid_t ruid, euid; gid_t rgid, egid; #if __minix_vmd uid_t suid; gid_t sgid; #else # define suid ruid # define sgid rgid #endif #if NGROUPS_MAX > 0 gid_t groups[NGROUPS_MAX]; int ngroups; #else # define groups (&rgid) # define ngroups 0 #endif int g; int isug; int c, uopt = 0; #if __minix_vmd get6id(&ruid, &euid, &suid, &rgid, &egid, &sgid); isug = issetugid(); #else ruid = getuid(); euid = geteuid(); rgid = getgid(); egid = getegid(); isug = 0; #endif #if NGROUPS_MAX > 0 ngroups = getgroups(NGROUPS_MAX, groups); #endif while((c = getopt(argc, argv, "u")) != EOF) { switch(c) { case 'u': uopt = 1; break; default: fprintf(stderr, "%s: unrecognized option\n", argv[0]); return(1); } } if(uopt) { printf("%d\n", euid); return 0; } if ((pwd = getpwuid(ruid)) == NULL) printf("uid=%d", ruid); else printf("uid=%d(%s)", ruid, pwd->pw_name); if ((grp = getgrgid(rgid)) == NULL) printf(" gid=%d", rgid); else printf(" gid=%d(%s)", rgid, grp->gr_name); if (euid != ruid) if ((pwd = getpwuid(euid)) != NULL) printf(" euid=%d(%s)", euid, pwd->pw_name); else printf(" euid=%d", euid); if (egid != rgid) if ((grp = getgrgid(egid)) != NULL) printf(" egid=%d(%s)", egid, grp->gr_name); else printf(" egid=%d", egid); if (suid != euid) if ((pwd = getpwuid(suid)) != NULL) printf(" suid=%d(%s)", suid, pwd->pw_name); else printf(" suid=%d", suid); if (sgid != egid) if ((grp = getgrgid(sgid)) != NULL) printf(" sgid=%d(%s)", sgid, grp->gr_name); else printf(" sgid=%d", sgid); if (isug) { printf(" issetugid"); } if (ngroups > 0) { printf(" groups="); for (g = 0; g < ngroups; g++) { if (g > 0) fputc(',', stdout); if ((grp = getgrgid(groups[g])) == NULL) printf("%d", groups[g]); else printf("%d(%s)", groups[g], grp->gr_name); } } printf("\n"); return(0); }