<div>---</div><div> lenses/nsswitch.aug | 89 ++++++++++++++++++++++++++++++++++++++++</div><div> lenses/tests/test_nsswitch.aug | 39 +++++++++++++++++</div><div> 2 files changed, 128 insertions(+), 0 deletions(-)</div>
<div> create mode 100644 lenses/nsswitch.aug</div><div> create mode 100644 lenses/tests/test_nsswitch.aug</div><div><br></div><div>diff --git a/lenses/nsswitch.aug b/lenses/nsswitch.aug</div><div>new file mode 100644</div>
<div>index 0000000..34d892c</div><div>--- /dev/null</div><div>+++ b/lenses/nsswitch.aug</div><div>@@ -0,0 +1,89 @@</div><div>+(*</div><div>+Module: Nsswitch</div><div>+ Parses /etc/nsswitch.conf</div><div>+</div><div>+Author: Raphael Pinson <<a href="mailto:raphink@gmail.com">raphink@gmail.com</a>></div>
<div>+</div><div>+About: Reference</div><div>+ This lens tries to keep as close as possible to `man nsswitch.conf` where possible.</div><div>+</div><div>+About: Licence</div><div>+ This file is licensed under the LGPLv2+, like the rest of Augeas.</div>
<div>+</div><div>+About: Lens Usage</div><div>+</div><div>+About: Configuration files</div><div>+ This lens applies to /etc/nsswitch.conf. See <filter>.</div><div>+*)</div><div>+</div><div>+module Nsswitch =</div><div>
+autoload xfm</div><div>+</div><div>+(************************************************************************</div><div>+ * Group: USEFUL PRIMITIVES</div><div>+ *************************************************************************)</div>
<div>+</div><div>+(* View: comment *)</div><div>+let comment = Util.comment</div><div>+</div><div>+(* View: empty *)</div><div>+let empty = Util.empty</div><div>+</div><div>+(* View: sep_colon</div><div>+ The separator for database entries *)</div>
<div>+let sep_colon = del /:[ \t]*/ ": "</div><div>+</div><div>+(* View: service</div><div>+ The service specification like `files', `db', or `nis' *)</div><div>+let service = [ label "service" . store Rx.word ]</div>
<div>+</div><div>+(* View: reaction</div><div>+ The reaction on lookup result like `[NOTFOUND=return]'</div><div>+ TODO: Use case-insensitive regexps when ticket #147 is fixed.</div><div>+*)</div><div>+let reaction =</div>
<div>+ let status_kw = /[Ss][Uu][Cc][Cc][Ee][Ss][Ss]/</div><div>+ | /[Nn][Oo][Tt][Ff][Oo][Uu][Nn][Dd]/</div><div>+ | /[Uu][Nn][Aa][Vv][Aa][Ii][Ll]/</div><div>+ | /[Tt][Rr][Yy][Aa][Gg][Aa][Ii][Nn]/</div>
<div>+ in let action_kw = /[Rr][Ee][Tt][Uu][Rr][Nn]/</div><div>+ | /[Cc][Oo][Nn][Tt][Ii][Nn][Uu][Ee]/</div><div>+ in let negate = [ Util.del_str "!" . label "negate" ]</div>
<div>+ in let reaction_entry = [ label "status" . negate?</div><div>+ . store status_kw</div><div>+ . Util.del_str "="</div><div>+ . [ label "action" . store action_kw ] ]</div>
<div>+ in Util.del_str "["</div><div>+ . [ label "reaction"</div><div>+ . (Build.opt_list reaction_entry Sep.space) ]</div><div>+ . Util.del_str "]"</div>
<div>+</div><div>+(* View: database *)</div><div>+let database = </div><div>+ let database_kw = "aliases"</div><div>+ | "ethers"</div><div>+ | "group"</div>
<div>+ | "hosts"</div><div>+ | "netgroup"</div><div>+ | "networks"</div><div>+ | "passwd"</div><div>+ | "protocols"</div>
<div>+ | "publickey"</div><div>+ | "rpc"</div><div>+ | "services"</div><div>+ | "shadow"</div><div>+ in [ label "database" . store database_kw</div>
<div>+ . sep_colon</div><div>+ . (Build.opt_list</div><div>+ (service|reaction)</div><div>+ Sep.space)</div><div>+ . Util.eol ]</div><div>+</div>
<div>+(* View: lns *)</div><div>+let lns = ( empty | comment | database )*</div><div>+</div><div>+(* Variable: filter *)</div><div>+let filter = (incl "/etc/resolv.conf")</div><div>+ . Util.stdexcl</div><div>
+</div><div>+let xfm = transform lns filter</div><div>diff --git a/lenses/tests/test_nsswitch.aug b/lenses/tests/test_nsswitch.aug</div><div>new file mode 100644</div><div>index 0000000..d9e5d99</div><div>--- /dev/null</div>
<div>+++ b/lenses/tests/test_nsswitch.aug</div><div>@@ -0,0 +1,39 @@</div><div>+module Test_nsswitch =</div><div>+</div><div>+ let conf = "# Sample nsswitch.conf</div><div>+passwd: compat</div><div>+</div><div>
+hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4</div><div>+networks: nis [!UNAVAIL=return success=continue] files</div><div>+protocols: db files</div><div>+netgroup: nis</div><div>+"</div>
<div>+</div><div>+test Nsswitch.lns get conf =</div><div>+ { "#comment" = "Sample nsswitch.conf" }</div><div>+ { "database" = "passwd"</div><div>+ { "service" = "compat" } }</div>
<div>+ {}</div><div>+ { "database" = "hosts"</div><div>+ { "service" = "files" }</div><div>+ { "service" = "mdns4_minimal" }</div><div>+ { "reaction"</div>
<div>+ { "status" = "NOTFOUND"</div><div>+ { "action" = "return" } } }</div><div>+ { "service" = "dns" }</div><div>+ { "service" = "mdns4" } }</div>
<div>+ { "database" = "networks"</div><div>+ { "service" = "nis" }</div><div>+ { "reaction"</div><div>+ { "status" = "UNAVAIL"</div>
<div>+ { "negate" }</div><div>+ { "action" = "return" } }</div><div>+ { "status" = "success"</div><div>+ { "action" = "continue" } } }</div>
<div>+ { "service" = "files" } }</div><div>+ { "database" = "protocols"</div><div>+ { "service" = "db" }</div><div>+ { "service" = "files" } }</div>
<div>+ { "database" = "netgroup"</div><div>+ { "service" = "nis" } }</div><div>+ </div><div>-- </div><div>1.7.0.4</div><div><br></div>