aboutsummaryrefslogtreecommitdiffstats
path: root/awklib/eg
diff options
context:
space:
mode:
Diffstat (limited to 'awklib/eg')
-rw-r--r--awklib/eg/lib/inplace.awk28
-rw-r--r--awklib/eg/lib/ns_passwd.awk72
2 files changed, 89 insertions, 11 deletions
diff --git a/awklib/eg/lib/inplace.awk b/awklib/eg/lib/inplace.awk
index 6771bc45..68dad92e 100644
--- a/awklib/eg/lib/inplace.awk
+++ b/awklib/eg/lib/inplace.awk
@@ -21,11 +21,15 @@
#
# Andrew J. Schorr, aschorr@telemetry-investments.com
# January 2013
+#
+# Revised for namespaces
+# Arnold Robbins, arnold@skeeve.com
+# July 2017
@load "inplace"
-# Please set INPLACE_SUFFIX to make a backup copy. For example, you may
-# want to set INPLACE_SUFFIX to .bak on the command line or in a BEGIN rule.
+# Please set inplace::suffix to make a backup copy. For example, you may
+# want to set inplace::suffix to .bak on the command line or in a BEGIN rule.
# By default, each filename on the command line will be edited inplace.
# But you can selectively disable this by adding an inplace=0 argument
@@ -33,23 +37,25 @@
# reenable it later on the commandline by putting inplace=1 before files
# that you wish to be subject to inplace editing.
-# N.B. We call inplace_end() in the BEGINFILE and END rules so that any
+# N.B. We call inplace::end() in the BEGINFILE and END rules so that any
# actions in an ENDFILE rule will be redirected as expected.
+@namespace "inplace"
+
BEGIN {
- inplace = 1 # enabled by default
+ enable = 1 # enabled by default
}
BEGINFILE {
- if (_inplace_filename != "")
- inplace_end(_inplace_filename, INPLACE_SUFFIX)
- if (inplace)
- inplace_begin(_inplace_filename = FILENAME, INPLACE_SUFFIX)
+ if (filename != "")
+ end(filename, suffix)
+ if (enable)
+ begin(filename = FILENAME, suffix)
else
- _inplace_filename = ""
+ filename = ""
}
END {
- if (_inplace_filename != "")
- inplace_end(_inplace_filename, INPLACE_SUFFIX)
+ if (filename != "")
+ end(filename, suffix)
}
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
+}