|
Packit Service |
a2ae7a |
(*
|
|
Packit Service |
a2ae7a |
Module: Passwd
|
|
Packit Service |
a2ae7a |
Parses /etc/passwd
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
Author: Free Ekanayaka <free@64studio.com>
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
About: Reference
|
|
Packit Service |
a2ae7a |
- man 5 passwd
|
|
Packit Service |
a2ae7a |
- man 3 getpwnam
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
Each line in the unix passwd file represents a single user record, whose
|
|
Packit Service |
a2ae7a |
colon-separated attributes correspond to the members of the passwd struct
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
*)
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
module Passwd =
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
autoload xfm
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(************************************************************************
|
|
Packit Service |
a2ae7a |
* Group: USEFUL PRIMITIVES
|
|
Packit Service |
a2ae7a |
*************************************************************************)
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* Group: Comments and empty lines *)
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let eol = Util.eol
|
|
Packit Service |
a2ae7a |
let comment = Util.comment
|
|
Packit Service |
a2ae7a |
let empty = Util.empty
|
|
Packit Service |
a2ae7a |
let dels = Util.del_str
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let word = Rx.word
|
|
Packit Service |
a2ae7a |
let integer = Rx.integer
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let colon = Sep.colon
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let sto_to_eol = store Rx.space_in
|
|
Packit Service |
a2ae7a |
let sto_to_col = store /[^:\r\n]+/
|
|
Packit Service |
a2ae7a |
(* Store an empty string if nothing matches *)
|
|
Packit Service |
a2ae7a |
let sto_to_col_or_empty = store /[^:\r\n]*/
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(************************************************************************
|
|
Packit Service |
a2ae7a |
* Group: ENTRIES
|
|
Packit Service |
a2ae7a |
*************************************************************************)
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let username = /[_.A-Za-z0-9][-_.A-Za-z0-9]*\$?/
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: password
|
|
Packit Service |
a2ae7a |
pw_passwd *)
|
|
Packit Service |
a2ae7a |
let password = [ label "password" . sto_to_col? . colon ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: uid
|
|
Packit Service |
a2ae7a |
pw_uid *)
|
|
Packit Service |
a2ae7a |
let uid = [ label "uid" . store integer . colon ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: gid
|
|
Packit Service |
a2ae7a |
pw_gid *)
|
|
Packit Service |
a2ae7a |
let gid = [ label "gid" . store integer . colon ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: name
|
|
Packit Service |
a2ae7a |
pw_gecos; the user's full name *)
|
|
Packit Service |
a2ae7a |
let name = [ label "name" . sto_to_col? . colon ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: home
|
|
Packit Service |
a2ae7a |
pw_dir *)
|
|
Packit Service |
a2ae7a |
let home = [ label "home" . sto_to_col? . colon ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: shell
|
|
Packit Service |
a2ae7a |
pw_shell *)
|
|
Packit Service |
a2ae7a |
let shell = [ label "shell" . sto_to_eol? ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* View: entry
|
|
Packit Service |
a2ae7a |
struct passwd *)
|
|
Packit Service |
a2ae7a |
let entry = [ key username
|
|
Packit Service |
a2ae7a |
. colon
|
|
Packit Service |
a2ae7a |
. password
|
|
Packit Service |
a2ae7a |
. uid
|
|
Packit Service |
a2ae7a |
. gid
|
|
Packit Service |
a2ae7a |
. name
|
|
Packit Service |
a2ae7a |
. home
|
|
Packit Service |
a2ae7a |
. shell
|
|
Packit Service |
a2ae7a |
. eol ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(* NIS entries *)
|
|
Packit Service |
a2ae7a |
let niscommon = [ label "password" . sto_to_col ]? . colon
|
|
Packit Service |
a2ae7a |
. [ label "uid" . store integer ]? . colon
|
|
Packit Service |
a2ae7a |
. [ label "gid" . store integer ]? . colon
|
|
Packit Service |
a2ae7a |
. [ label "name" . sto_to_col ]? . colon
|
|
Packit Service |
a2ae7a |
. [ label "home" . sto_to_col ]? . colon
|
|
Packit Service |
a2ae7a |
. [ label "shell" . sto_to_eol ]?
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let nisentry =
|
|
Packit Service |
a2ae7a |
let overrides =
|
|
Packit Service |
a2ae7a |
colon
|
|
Packit Service |
a2ae7a |
. niscommon in
|
|
Packit Service |
a2ae7a |
[ dels "+@" . label "@nis" . store username . overrides . eol ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let nisuserplus =
|
|
Packit Service |
a2ae7a |
let overrides =
|
|
Packit Service |
a2ae7a |
colon
|
|
Packit Service |
a2ae7a |
. niscommon in
|
|
Packit Service |
a2ae7a |
[ dels "+" . label "@+nisuser" . store username . overrides . eol ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let nisuserminus =
|
|
Packit Service |
a2ae7a |
let overrides =
|
|
Packit Service |
a2ae7a |
colon
|
|
Packit Service |
a2ae7a |
. niscommon in
|
|
Packit Service |
a2ae7a |
[ dels "-" . label "@-nisuser" . store username . overrides . eol ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let nisdefault =
|
|
Packit Service |
a2ae7a |
let overrides =
|
|
Packit Service |
a2ae7a |
colon
|
|
Packit Service |
a2ae7a |
. [ label "password" . sto_to_col_or_empty . colon ]
|
|
Packit Service |
a2ae7a |
. [ label "uid" . store integer? . colon ]
|
|
Packit Service |
a2ae7a |
. [ label "gid" . store integer? . colon ]
|
|
Packit Service |
a2ae7a |
. [ label "name" . sto_to_col? . colon ]
|
|
Packit Service |
a2ae7a |
. [ label "home" . sto_to_col? . colon ]
|
|
Packit Service |
a2ae7a |
. [ label "shell" . sto_to_eol? ] in
|
|
Packit Service |
a2ae7a |
[ dels "+" . label "@nisdefault" . overrides? . eol ]
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
(************************************************************************
|
|
Packit Service |
a2ae7a |
* LENS
|
|
Packit Service |
a2ae7a |
*************************************************************************)
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let lns = (comment|empty|entry|nisentry|nisdefault|nisuserplus|nisuserminus) *
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let filter = incl "/etc/passwd"
|
|
Packit Service |
a2ae7a |
|
|
Packit Service |
a2ae7a |
let xfm = transform lns filter
|