<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>