# passwd.awk --- access password file information # # Arnold Robbins, arnold@skeeve.com, Public Domain # May 1993 # Revised October 2000 # Revised December 2010 # Revised July 2017 @namespace "foo" # this is foo @namespace "bar" # this is bar @namespace "passwd" # move to passwd namespace 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 }