home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gnuawk.zip / awklib / eg / lib / groupawk.in < prev    next >
Text File  |  1997-03-15  |  2KB  |  81 lines

  1. # group.awk --- functions for dealing with the group file
  2. # Arnold Robbins, arnold@gnu.ai.mit.edu, Public Domain
  3. # May 1993
  4.  
  5. BEGIN    \
  6. {
  7.     # Change to suit your system
  8.     _gr_awklib = "/usr/local/libexec/awk/"
  9. }
  10. function _gr_init(    oldfs, oldrs, olddol0, grcat, n, a, i)
  11. {
  12.     if (_gr_inited)
  13.         return
  14.  
  15.     oldfs = FS
  16.     oldrs = RS
  17.     olddol0 = $0
  18.     FS = ":"
  19.     RS = "\n"
  20.  
  21.     grcat = _gr_awklib "grcat"
  22.     while ((grcat | getline) > 0) {
  23.         if ($1 in _gr_byname)
  24.             _gr_byname[$1] = _gr_byname[$1] "," $4
  25.         else
  26.             _gr_byname[$1] = $0
  27.         if ($3 in _gr_bygid)
  28.             _gr_bygid[$3] = _gr_bygid[$3] "," $4
  29.         else
  30.             _gr_bygid[$3] = $0
  31.  
  32.         n = split($4, a, "[ \t]*,[ \t]*")
  33.         for (i = 1; i <= n; i++)
  34.             if (a[i] in _gr_groupsbyuser)
  35.                 _gr_groupsbyuser[a[i]] = \
  36.                     _gr_groupsbyuser[a[i]] " " $1
  37.             else
  38.                 _gr_groupsbyuser[a[i]] = $1
  39.  
  40.         _gr_bycount[++_gr_count] = $0
  41.     }
  42.     close(grcat)
  43.     _gr_count = 0
  44.     _gr_inited++
  45.     FS = oldfs
  46.     RS = oldrs
  47.     $0 = olddol0
  48. }
  49. function getgrnam(group)
  50. {
  51.     _gr_init()
  52.     if (group in _gr_byname)
  53.         return _gr_byname[group]
  54.     return ""
  55. }
  56. function getgrgid(gid)
  57. {
  58.     _gr_init()
  59.     if (gid in _gr_bygid)
  60.         return _gr_bygid[gid]
  61.     return ""
  62. }
  63. function getgruser(user)
  64. {
  65.     _gr_init()
  66.     if (user in _gr_groupsbyuser)
  67.         return _gr_groupsbyuser[user]
  68.     return ""
  69. }
  70. function getgrent()
  71. {
  72.     _gr_init()
  73.     if (++gr_count in _gr_bycount)
  74.         return _gr_bycount[_gr_count]
  75.     return ""
  76. }
  77. function endgrent()
  78. {
  79.     _gr_count = 0
  80. }
  81.