aboutsummaryrefslogtreecommitdiffstats
path: root/awklib/eg/lib/ns_passwd.awk
diff options
context:
space:
mode:
Diffstat (limited to 'awklib/eg/lib/ns_passwd.awk')
-rw-r--r--awklib/eg/lib/ns_passwd.awk72
1 files changed, 72 insertions, 0 deletions
diff --git a/awklib/eg/lib/ns_passwd.awk b/awklib/eg/lib/ns_passwd.awk
new file mode 100644
index 00000000..b9b6bce5
--- /dev/null
+++ b/awklib/eg/lib/ns_passwd.awk
@@ -0,0 +1,72 @@
+# ns_passwd.awk --- access password file information
+#
+# Arnold Robbins, arnold@skeeve.com, Public Domain
+# May 1993
+# Revised October 2000
+# Revised December 2010
+#
+# Reworked for namespaces June 2017, with help from
+# Andrew J.: Schorr, aschorr@telemetry-investments.com
+
+@namespace "passwd"
+
+BEGIN {
+ # tailor this to suit your system
+ Awklib = "/usr/local/libexec/awk/"
+}
+
+function Init( oldfs, oldrs, olddol0, pwcat, using_fw, using_fpat)
+{
+ if (Inited)
+ return
+
+ oldfs = FS
+ oldrs = RS
+ olddol0 = $0
+ using_fw = (PROCINFO["FS"] == "FIELDWIDTHS")
+ using_fpat = (PROCINFO["FS"] == "FPAT")
+ FS = ":"
+ RS = "\n"
+
+ pwcat = Awklib "pwcat"
+ while ((pwcat | getline) > 0) {
+ Byname[$1] = $0
+ Byuid[$3] = $0
+ Bycount[++Total] = $0
+ }
+ close(pwcat)
+ Count = 0
+ Inited = 1
+ FS = oldfs
+ if (using_fw)
+ FIELDWIDTHS = FIELDWIDTHS
+ else if (using_fpat)
+ FPAT = FPAT
+ RS = oldrs
+ $0 = olddol0
+}
+
+function awk::getpwnam(name)
+{
+ Init()
+ return Byname[name]
+}
+
+function awk::getpwuid(uid)
+{
+ Init()
+ return Byuid[uid]
+}
+
+function awk::getpwent()
+{
+ Init()
+ if (Count < Total)
+ return Bycount[++Count]
+ return ""
+}
+
+function awk::endpwent()
+{
+ Count = 0
+}