id.c

Go to the documentation of this file.
00001 /* id - return uid and gid              Author: John J. Marco */
00002 
00003 /*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
00004 /*              ----- id.c -----                                        */
00005 /* Id - get real and effective user id and group id                     */
00006 /* Author: John J. Marco                                                */
00007 /*         pa1343@sdcc15.ucsd.edu                                       */
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 }

Generated on Fri Apr 14 22:57:07 2006 for minix by  doxygen 1.4.6