| Server IP : 127.0.1.1 / Your IP : 216.73.216.152 Web Server : Apache/2.4.52 (Ubuntu) System : Linux bahcrestlinepropertiesllc 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /usr/share/augeas/lenses/dist/ |
Upload File : |
(*
Module: Passwd
Parses /etc/passwd
Author: Free Ekanayaka <free@64studio.com>
About: Reference
- man 5 passwd
- man 3 getpwnam
Each line in the unix passwd file represents a single user record, whose
colon-separated attributes correspond to the members of the passwd struct
*)
module Passwd =
autoload xfm
(************************************************************************
* Group: USEFUL PRIMITIVES
*************************************************************************)
(* Group: Comments and empty lines *)
let eol = Util.eol
let comment = Util.comment
let empty = Util.empty
let dels = Util.del_str
let word = Rx.word
let integer = Rx.integer
let colon = Sep.colon
let sto_to_eol = store Rx.space_in
let sto_to_col = store /[^:\r\n]+/
(* Store an empty string if nothing matches *)
let sto_to_col_or_empty = store /[^:\r\n]*/
(************************************************************************
* Group: ENTRIES
*************************************************************************)
let username = /[_.A-Za-z0-9][-_.A-Za-z0-9]*\$?/
(* View: password
pw_passwd *)
let password = [ label "password" . sto_to_col? . colon ]
(* View: uid
pw_uid *)
let uid = [ label "uid" . store integer . colon ]
(* View: gid
pw_gid *)
let gid = [ label "gid" . store integer . colon ]
(* View: name
pw_gecos; the user's full name *)
let name = [ label "name" . sto_to_col? . colon ]
(* View: home
pw_dir *)
let home = [ label "home" . sto_to_col? . colon ]
(* View: shell
pw_shell *)
let shell = [ label "shell" . sto_to_eol? ]
(* View: entry
struct passwd *)
let entry = [ key username
. colon
. password
. uid
. gid
. name
. home
. shell
. eol ]
(* NIS entries *)
let niscommon = [ label "password" . sto_to_col ]? . colon
. [ label "uid" . store integer ]? . colon
. [ label "gid" . store integer ]? . colon
. [ label "name" . sto_to_col ]? . colon
. [ label "home" . sto_to_col ]? . colon
. [ label "shell" . sto_to_eol ]?
let nisentry =
let overrides =
colon
. niscommon in
[ dels "+@" . label "@nis" . store username . overrides . eol ]
let nisuserplus =
let overrides =
colon
. niscommon in
[ dels "+" . label "@+nisuser" . store username . overrides . eol ]
let nisuserminus =
let overrides =
colon
. niscommon in
[ dels "-" . label "@-nisuser" . store username . overrides . eol ]
let nisdefault =
let overrides =
colon
. [ label "password" . sto_to_col_or_empty . colon ]
. [ label "uid" . store integer? . colon ]
. [ label "gid" . store integer? . colon ]
. [ label "name" . sto_to_col? . colon ]
. [ label "home" . sto_to_col? . colon ]
. [ label "shell" . sto_to_eol? ] in
[ dels "+" . label "@nisdefault" . overrides? . eol ]
(************************************************************************
* LENS
*************************************************************************)
let lns = (comment|empty|entry|nisentry|nisdefault|nisuserplus|nisuserminus) *
let filter = incl "/etc/passwd"
let xfm = transform lns filter