00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include <sys/types.h>
00011 #include <pwd.h>
00012 #include <grp.h>
00013 #include <unistd.h>
00014 #include <stdio.h>
00015 #include <limits.h>
00016
00017 int main(int argc, char *argv[])
00018 {
00019 struct passwd *pwd;
00020 struct group *grp;
00021 uid_t ruid, euid;
00022 gid_t rgid, egid;
00023 #if __minix_vmd
00024 uid_t suid;
00025 gid_t sgid;
00026 #else
00027 # define suid ruid
00028 # define sgid rgid
00029 #endif
00030 #if NGROUPS_MAX > 0
00031 gid_t groups[NGROUPS_MAX];
00032 int ngroups;
00033 #else
00034 # define groups (&rgid)
00035 # define ngroups 0
00036 #endif
00037 int g;
00038 int isug;
00039 int c, uopt = 0;
00040
00041 #if __minix_vmd
00042 get6id(&ruid, &euid, &suid, &rgid, &egid, &sgid);
00043 isug = issetugid();
00044 #else
00045 ruid = getuid();
00046 euid = geteuid();
00047 rgid = getgid();
00048 egid = getegid();
00049 isug = 0;
00050 #endif
00051 #if NGROUPS_MAX > 0
00052 ngroups = getgroups(NGROUPS_MAX, groups);
00053 #endif
00054
00055 while((c = getopt(argc, argv, "u")) != EOF) {
00056 switch(c) {
00057 case 'u':
00058 uopt = 1;
00059 break;
00060 default:
00061 fprintf(stderr, "%s: unrecognized option\n", argv[0]);
00062 return(1);
00063 }
00064 }
00065
00066 if(uopt) {
00067 printf("%d\n", euid);
00068 return 0;
00069 }
00070
00071 if ((pwd = getpwuid(ruid)) == NULL)
00072 printf("uid=%d", ruid);
00073 else
00074 printf("uid=%d(%s)", ruid, pwd->pw_name);
00075
00076 if ((grp = getgrgid(rgid)) == NULL)
00077 printf(" gid=%d", rgid);
00078 else
00079 printf(" gid=%d(%s)", rgid, grp->gr_name);
00080
00081 if (euid != ruid)
00082 if ((pwd = getpwuid(euid)) != NULL)
00083 printf(" euid=%d(%s)", euid, pwd->pw_name);
00084 else
00085 printf(" euid=%d", euid);
00086
00087 if (egid != rgid)
00088 if ((grp = getgrgid(egid)) != NULL)
00089 printf(" egid=%d(%s)", egid, grp->gr_name);
00090 else
00091 printf(" egid=%d", egid);
00092
00093 if (suid != euid)
00094 if ((pwd = getpwuid(suid)) != NULL)
00095 printf(" suid=%d(%s)", suid, pwd->pw_name);
00096 else
00097 printf(" suid=%d", suid);
00098
00099 if (sgid != egid)
00100 if ((grp = getgrgid(sgid)) != NULL)
00101 printf(" sgid=%d(%s)", sgid, grp->gr_name);
00102 else
00103 printf(" sgid=%d", sgid);
00104
00105 if (isug) {
00106 printf(" issetugid");
00107 }
00108
00109 if (ngroups > 0) {
00110 printf(" groups=");
00111 for (g = 0; g < ngroups; g++) {
00112 if (g > 0) fputc(',', stdout);
00113 if ((grp = getgrgid(groups[g])) == NULL)
00114 printf("%d", groups[g]);
00115 else
00116 printf("%d(%s)", groups[g], grp->gr_name);
00117 }
00118 }
00119
00120 printf("\n");
00121 return(0);
00122 }