home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gnuawk.zip / awklib / eg / prog / id.awk < prev    next >
Text File  |  1997-03-15  |  1KB  |  70 lines

  1. # id.awk --- implement id in awk
  2. # Arnold Robbins, arnold@gnu.ai.mit.edu, Public Domain
  3. # May 1993
  4.  
  5. # output is:
  6. # uid=12(foo) euid=34(bar) gid=3(baz) \
  7. #             egid=5(blat) groups=9(nine),2(two),1(one)
  8.  
  9. BEGIN    \
  10. {
  11.     if ((getline < "/dev/user") < 0) {
  12.         err = "id: no /dev/user support - cannot run"
  13.         print err > "/dev/stderr"
  14.         exit 1
  15.     }
  16.     close("/dev/user")
  17.  
  18.     uid = $1
  19.     euid = $2
  20.     gid = $3
  21.     egid = $4
  22.  
  23.     printf("uid=%d", uid)
  24.     pw = getpwuid(uid)
  25.     if (pw != "") {
  26.         split(pw, a, ":")
  27.         printf("(%s)", a[1])
  28.     }
  29.  
  30.     if (euid != uid) {
  31.         printf(" euid=%d", euid)
  32.         pw = getpwuid(euid)
  33.         if (pw != "") {
  34.             split(pw, a, ":")
  35.             printf("(%s)", a[1])
  36.         }
  37.     }
  38.  
  39.     printf(" gid=%d", gid)
  40.     pw = getgrgid(gid)
  41.     if (pw != "") {
  42.         split(pw, a, ":")
  43.         printf("(%s)", a[1])
  44.     }
  45.  
  46.     if (egid != gid) {
  47.         printf(" egid=%d", egid)
  48.         pw = getgrgid(egid)
  49.         if (pw != "") {
  50.             split(pw, a, ":")
  51.             printf("(%s)", a[1])
  52.         }
  53.     }
  54.  
  55.     if (NF > 4) {
  56.         printf(" groups=");
  57.         for (i = 5; i <= NF; i++) {
  58.             printf("%d", $i)
  59.             pw = getgrgid($i)
  60.             if (pw != "") {
  61.                 split(pw, a, ":")
  62.                 printf("(%s)", a[1])
  63.             }
  64.             if (i < NF)
  65.                 printf(",")
  66.         }
  67.     }
  68.     print ""
  69. }
  70.