# ns_passwd.awk --- access password file information | |
# | |
# Arnold Robbins, [email protected], Public Domain | |
# May 1993 | |
# Revised October 2000 | |
# Revised December 2010 | |
# | |
# Reworked for namespaces June 2017, with help from | |
# Andrew J.: Schorr, [email protected] | |
@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 | |
} | |