codekingpro/portable-devtools
114k
1# group.awk --- functions for dealing with the group file2#3# This file and how to use it are described in the manual.4# Therefore, we respectfully advise you to Read The Fine Manual5# for more information.6#7# Arnold Robbins, arnold@skeeve.com, Public Domain8# May 19939# Revised October 200010# Revised December 201011 12BEGIN {13 # Change to suit your system14 _gr_awklib = "/usr/lib/awk/"15}16 17function _gr_init( oldfs, oldrs, olddol0, grcat,18 using_fw, using_fpat, n, a, i)19{20 if (_gr_inited)21 return22 23 oldfs = FS24 oldrs = RS25 olddol0 = $026 using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")27 using_fpat = (PROCINFO["FS"] == "FPAT")28 FS = ":"29 RS = "\n"30 31 grcat = _gr_awklib "grcat"32 while ((grcat | getline) > 0) {33 if ($1 in _gr_byname)34 _gr_byname[$1] = _gr_byname[$1] "," $435 else36 _gr_byname[$1] = $037 if ($3 in _gr_bygid)38 _gr_bygid[$3] = _gr_bygid[$3] "," $439 else40 _gr_bygid[$3] = $041 42 n = split($4, a, "[ \t]*,[ \t]*")43 for (i = 1; i <= n; i++)44 if (a[i] in _gr_groupsbyuser)45 _gr_groupsbyuser[a[i]] = _gr_groupsbyuser[a[i]] " " $146 else47 _gr_groupsbyuser[a[i]] = $148 49 _gr_bycount[++_gr_count] = $050 }51 close(grcat)52 _gr_count = 053 _gr_inited++54 FS = oldfs55 if (using_fw)56 FIELDWIDTHS = FIELDWIDTHS57 else if (using_fpat)58 FPAT = FPAT59 RS = oldrs60 $0 = olddol061}62function getgrnam(group)63{64 _gr_init()65 return _gr_byname[group]66}67function getgrgid(gid)68{69 _gr_init()70 return _gr_bygid[gid]71}72function getgruser(user)73{74 _gr_init()75 return _gr_groupsbyuser[user]76}77function getgrent()78{79 _gr_init()80 if (++_gr_count in _gr_bycount)81 return _gr_bycount[_gr_count]82 return ""83}84function endgrent()85{86 _gr_count = 087}88 