summaryrefslogtreecommitdiff
path: root/awklib/eg/lib/groupawk.in
diff options
context:
space:
mode:
Diffstat (limited to 'awklib/eg/lib/groupawk.in')
-rw-r--r--awklib/eg/lib/groupawk.in80
1 files changed, 80 insertions, 0 deletions
diff --git a/awklib/eg/lib/groupawk.in b/awklib/eg/lib/groupawk.in
new file mode 100644
index 00000000..a8103a04
--- /dev/null
+++ b/awklib/eg/lib/groupawk.in
@@ -0,0 +1,80 @@
+# group.awk --- functions for dealing with the group file
+# Arnold Robbins, arnold@gnu.ai.mit.edu, Public Domain
+# May 1993
+
+BEGIN \
+{
+ # Change to suit your system
+ _gr_awklib = "/usr/local/libexec/awk/"
+}
+function _gr_init( oldfs, oldrs, olddol0, grcat, n, a, i)
+{
+ if (_gr_inited)
+ return
+
+ oldfs = FS
+ oldrs = RS
+ olddol0 = $0
+ FS = ":"
+ RS = "\n"
+
+ grcat = _gr_awklib "grcat"
+ while ((grcat | getline) > 0) {
+ if ($1 in _gr_byname)
+ _gr_byname[$1] = _gr_byname[$1] "," $4
+ else
+ _gr_byname[$1] = $0
+ if ($3 in _gr_bygid)
+ _gr_bygid[$3] = _gr_bygid[$3] "," $4
+ else
+ _gr_bygid[$3] = $0
+
+ n = split($4, a, "[ \t]*,[ \t]*")
+ for (i = 1; i <= n; i++)
+ if (a[i] in _gr_groupsbyuser)
+ _gr_groupsbyuser[a[i]] = \
+ _gr_groupsbyuser[a[i]] " " $1
+ else
+ _gr_groupsbyuser[a[i]] = $1
+
+ _gr_bycount[++_gr_count] = $0
+ }
+ close(grcat)
+ _gr_count = 0
+ _gr_inited++
+ FS = oldfs
+ RS = oldrs
+ $0 = olddol0
+}
+function getgrnam(group)
+{
+ _gr_init()
+ if (group in _gr_byname)
+ return _gr_byname[group]
+ return ""
+}
+function getgrgid(gid)
+{
+ _gr_init()
+ if (gid in _gr_bygid)
+ return _gr_bygid[gid]
+ return ""
+}
+function getgruser(user)
+{
+ _gr_init()
+ if (user in _gr_groupsbyuser)
+ return _gr_groupsbyuser[user]
+ return ""
+}
+function getgrent()
+{
+ _gr_init()
+ if (++gr_count in _gr_bycount)
+ return _gr_bycount[_gr_count]
+ return ""
+}
+function endgrent()
+{
+ _gr_count = 0
+}