home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1729 / id.c < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-28  |  2.2 KB  |  90 lines

  1. /*
  2.  * Last Edited: Tue Jul 10 18:21:59 1990 by bjs (Brian J. Smith) on lightning
  3.  * Copyright (C) 1990 Brian J. Smith,  This code may be modified without
  4.  * any restrictions, all I request is that you send me updated copies.
  5.  *
  6.  * Please send updates to bjs@cis.ufl.edu
  7.  *
  8.  */
  9. /* Jun 12, Version 0.9: Completed getting uid and all gid's */
  10. /*
  11.  * Jun 13, Version 1.0: Completed getting all gid's true names as listed in
  12.  * the /etc/groups file or ypdatabase
  13.  */
  14. /*
  15.  * Jun 13, Version 1.01: Added tests for egid and euid and included SYSV 
  16.  * compiler directive so it won't bomb on SYSV machines (I hope)
  17.  */
  18.  
  19. #include <grp.h>
  20. #include <stdio.h>
  21. #include <pwd.h>
  22.  
  23. extern int      getuid();
  24. extern int      getgid();
  25. extern int      geteuid();
  26. extern int      getegid();
  27. extern struct group *getgrent();
  28. extern struct group *getgrgid();
  29. extern struct passwd *getpwent();
  30.  
  31. #ifndef SYSV
  32. #include <sys/param.h>
  33. extern int getgroups();
  34. #endif                /* not SYSV */
  35.  
  36. #ifdef SYSV
  37. #define NGROUPS 2  /* Max 2 gid and egid */
  38.  
  39. int getgroups(ngr, gr)
  40.     int             ngr;
  41.     int             gr[];
  42. {
  43.     if (ngr < 1)        /* shouldn't happen */
  44.         return (0);
  45.     gr[0] = getgid();
  46.     gr[1] = getegid();
  47.     if (gr[1] != gr[0])
  48.        return (2);
  49.     else
  50.        return(1);
  51. }
  52. #endif                /* SYSV */
  53.  
  54.  
  55.  
  56. main()
  57. {
  58.     int             id = 0;
  59.     int             uid = getuid();
  60.     int             gid = getgid();
  61.     int             euid = geteuid();
  62.     int             egid = getegid();
  63.     int             numgroups;
  64.     int             grouplist[NGROUPS];
  65.     struct group   *groupinfo;
  66.     struct passwd  *passinfo;
  67.  
  68.     passinfo = getpwuid(uid);
  69.     groupinfo = getgrgid(gid);
  70.     numgroups = getgroups(NGROUPS, grouplist);
  71.     (void) fprintf(stdout, "uid=%d(%s) gid=%d(%s)", uid, passinfo->pw_name, gid, groupinfo->gr_name);
  72.     if (uid != euid) {
  73.         passinfo = getpwuid(euid);
  74.         (void) fprintf(stdout, " euid=%d(%s)", euid, passinfo->pw_name);
  75.     }
  76.     if (gid != egid) {
  77.         groupinfo = getgrgid(egid);
  78.         (void) fprintf(stdout, " egid=%d(%s)", egid, groupinfo->gr_name);
  79.     }
  80.     if (numgroups != 0) {
  81.         (void) fprintf(stdout, " groups=");
  82.         for (id = 0; id != numgroups; id++) {
  83.             groupinfo = getgrgid(grouplist[id]);
  84.             (void) fprintf(stdout, "%d(%s) ", grouplist[id], groupinfo->gr_name);
  85.         }
  86.     }
  87.     (void) fprintf(stdout, "\n");
  88.     exit(0);
  89. }
  90.