[augeas-devel] [PATCH] Add nsswitch.aug and associated test

Raphaël Pinson raphink at gmail.com
Tue Oct 26 21:34:42 UTC 2010


---
 lenses/nsswitch.aug            |   89
++++++++++++++++++++++++++++++++++++++++
 lenses/tests/test_nsswitch.aug |   39 +++++++++++++++++
 2 files changed, 128 insertions(+), 0 deletions(-)
 create mode 100644 lenses/nsswitch.aug
 create mode 100644 lenses/tests/test_nsswitch.aug

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


More information about the augeas-devel mailing list