[augeas-devel] augeas: master - Sudoers: produce at most one negate node

David Lutterkort lutter at fedoraproject.org
Wed Mar 25 19:24:58 UTC 2009


Gitweb:        http://git.fedorahosted.org/git/augeas.git?p=augeas.git;a=commitdiff;h=468976635238ce814d954b7d44df3b7b41121f87
Commit:        468976635238ce814d954b7d44df3b7b41121f87
Parent:        c35ad5aef2069b39472e209c8700e13706bef8fe
Author:        David Lutterkort <lutter at redhat.com>
AuthorDate:    Wed Mar 25 12:21:44 2009 -0700
Committer:     David Lutterkort <lutter at redhat.com>
CommitterDate: Wed Mar 25 12:21:44 2009 -0700

Sudoers: produce at most one negate node

Even if there are multiple '!' signs, only produce one negate node.
---
 lenses/sudoers.aug            |   62 +++++++++++++++++++++--------------------
 lenses/tests/test_sudoers.aug |   13 ++++++++
 2 files changed, 45 insertions(+), 30 deletions(-)

diff --git a/lenses/sudoers.aug b/lenses/sudoers.aug
index 423ce45..39d7d12 100644
--- a/lenses/sudoers.aug
+++ b/lenses/sudoers.aug
@@ -1,9 +1,9 @@
-(* 
+(*
 Module: Sudoers
-  Parses /etc/sudoers     
+  Parses /etc/sudoers
+
+Author: Raphael Pinson <raphink at gmail.com>
 
-Author: Raphael Pinson <raphink at gmail.com> 
-                                            
 About: Reference
   This lens tries to keep as close as possible to `man sudoers` where possible.
 
@@ -95,7 +95,7 @@ let sto_to_com_user = store ( /[^,=:#() \t\n]+/
                               - /(User|Runas|Host|Cmnd)_Alias|Defaults.*/ )
 
 (* Variable: sto_to_com_col *)
-let sto_to_com_col      = store /[^",=#() \t\n\\\\]+/
+let sto_to_com_col      = store /[^",=#() \t\n\\\\]+/ (* " relax emacs *)
 
 (* Variable: sto_to_eq *)
 let sto_to_eq  = store /[^,=:#() \t\n\\\\]+/
@@ -233,10 +233,20 @@ let default_type     =
   [ label "type" . value ]
 
 (************************************************************************
- * View: parameter_negate
- *   Negation of boolean values for <defaults>
+ * View: del_negate
+ *   Delete an even number of '!' signs
  *************************************************************************)
-let parameter_negate = [ del "!" "!" . label "negate" ]
+let del_negate = del /(!!)*/ ""
+
+(************************************************************************
+ * View: negate_node
+ *   Negation of boolean values for <defaults>. Accept one optional '!'
+ *   and produce a 'negate' node if there is one.
+ *************************************************************************)
+let negate_node = [ del "!" "!" . label "negate" ]
+
+let negate_or_value (key:lens) (value:lens) =
+  [ del_negate . (negate_node . key | key . value) ]
 
 (************************************************************************
  * View: parameter_flag
@@ -258,8 +268,8 @@ let parameter_flag_kw    = "always_set_home" | "authenticate" | "env_editor"
                          | "shell_noargs" | "stay_setuid" | "targetpw"
                          | "tty_tickets"
 
-let parameter_flag       = [ parameter_negate?
-                           . key parameter_flag_kw ]
+let parameter_flag       = [ (del_negate . negate_node)?
+                               . key parameter_flag_kw ]
 
 (************************************************************************
  * View: parameter_integer
@@ -275,11 +285,10 @@ let parameter_integer_nobool    = [ key parameter_integer_nobool_kw . sep_eq
 let parameter_integer_bool_kw   = "loglinelen" | "passwd_timeout"
                                 | "timestamp_timeout" | "umask"
 
-let parameter_integer_bool      = [ ( parameter_negate
-                                     . key parameter_integer_bool_kw )
-                                | ( key parameter_integer_bool_kw . sep_eq
-                                     . del /"?/ "" . sto_integer
-                                     . del /"?/ "" ) ]
+let parameter_integer_bool      =
+  negate_or_value
+    (key parameter_integer_bool_kw)
+    (sep_eq . del /"?/ "" . sto_integer . del /"?/ "")
 
 let parameter_integer           = parameter_integer_nobool
                                 | parameter_integer_bool
@@ -307,13 +316,10 @@ let parameter_string_bool_kw   = "exempt_group" | "lecture" | "lecture_file"
                                | "mailerflags" | "mailerpath" | "mailto"
                                | "syslog" | "verifypw"
 
-let parameter_string_bool      = [ ( parameter_negate
-                                         . ( parameter_negate
-                                                . parameter_negate )*
-                                         . key parameter_string_bool_kw )
-                               | ( ( parameter_negate . parameter_negate )*
-                                         . key parameter_string_bool_kw
-                                         . sep_eq . sto_to_com_col ) ]
+let parameter_string_bool      =
+  negate_or_value
+    (key parameter_string_bool_kw)
+    (sep_eq . sto_to_com_col)
 
 let parameter_string           = parameter_string_nobool
                                | parameter_string_bool
@@ -346,14 +352,10 @@ let parameter_lists_sep    = sep_cont_opt
                                | [ del "-" "-" . label "remove" ] )?
                              . del "=" "=" . sep_cont_opt
 
-let parameter_lists        = [ ( parameter_negate
-                                         . ( parameter_negate
-                                                . parameter_negate )*
-                                         . key parameter_lists_kw )
-                             | ( ( parameter_negate . parameter_negate )*
-                                         . key parameter_lists_kw
-                                         . parameter_lists_sep
-                                         . parameter_lists_values ) ]
+let parameter_lists        =
+  negate_or_value
+    (key parameter_lists_kw)
+    (parameter_lists_sep . parameter_lists_values)
 
 (************************************************************************
  * View: parameter
diff --git a/lenses/tests/test_sudoers.aug b/lenses/tests/test_sudoers.aug
index f9bc594..86cf119 100644
--- a/lenses/tests/test_sudoers.aug
+++ b/lenses/tests/test_sudoers.aug
@@ -121,3 +121,16 @@ www-data +biglab=(rpinson)NOEXEC: ICAL \
 	      { "host" = "ALPHA" }
 	      { "command" = "/usr/bin/su [!-]*" }
 	      { "command" = "!/usr/bin/su *root*" } } }
+
+test Sudoers.parameter_integer_bool
+    put "umask = 022"
+    after set "/umask/negate" ""  = "!umask"
+
+test Sudoers.parameter_integer_bool
+    put "!!!!!umask"
+    after rm "/umask/negate"; set "/umask" "022" = "!!!!umask = 022"
+
+test Sudoers.parameter_integer_bool put "!!!!umask = 022" after
+    set "/umask/negate" "" = "!!!!!umask"
+
+test Sudoers.parameter_integer_bool get "!!!umask = 022" = *




More information about the augeas-devel mailing list