[netcf-devel] [PATCH 6/7] Use a copy of shellvars.aug instead of the one in augeas

Jonas Eriksson jonas.j.eriksson at ericsson.com
Thu Jul 23 12:37:07 UTC 2009


This is the first in a two-stage commit where we move from
the standard shellvars-lens to one that strips the single
quotes before and after strings. data/lenses/ifcfg.aug is
currently only a copy of the augeas lens, except for the
lens name.

src/drv_initscripts.c: Changed Shellvars.lns to Ifcfg.lns in xfm

Added data/lenses/ifcfg.aug
---
 data/lenses/ifcfg.aug |  107 +++++++++++++++++++++++++++++++++++++++++++++++++
 src/drv_initscripts.c |    2 +-
 2 files changed, 108 insertions(+), 1 deletions(-)
 create mode 100644 data/lenses/ifcfg.aug

diff --git a/data/lenses/ifcfg.aug b/data/lenses/ifcfg.aug
new file mode 100644
index 0000000..c1a82dd
--- /dev/null
+++ b/data/lenses/ifcfg.aug
@@ -0,0 +1,107 @@
+(* Generic lens for shell-script config files like the ones found *)
+(* in /etc/sysconfig                                              *)
+module Ifcfg =
+  autoload xfm
+
+  let eol = Util.eol
+
+  let key_re = /[A-Za-z0-9_]+(\[[0-9]+\])?/ - "unset" - "export"
+  let eq = Util.del_str "="
+  let comment = Util.comment
+  let empty   = Util.empty
+
+  let char  = /[^() '"\t\n]|\\\\"/
+  let dquot = /"([^"\\\n]|\\\\.)*"/                    (* " Emacs, relax *)
+  let squot = /'[^'\n]*'/
+  let bquot = /`[^`\n]*`/
+
+  (* Array values of the form '(val1 val2 val3)'. We do not handle empty *)
+  (* arrays here because of typechecking headaches. Instead, they are    *)
+  (* treated as a simple value                                           *)
+  let array =
+    let array_value = store (char+ | dquot) in
+    del "(" "(" . counter "values" .
+      [ seq "values" . array_value ] .
+      [ del /[ \t]+/ " " . seq "values" . array_value ] *
+      . del ")" ")"
+
+  (* Treat an empty list () as a value '()'; that's not quite correct *)
+  (* but fairly close.                                                *)
+  let simple_value =
+    let empty_array = /\([ \t]*\)/ in
+      store (char* | dquot | squot | bquot | empty_array)
+
+  let export = [ key "export" . Util.del_ws_spc ]
+  let kv = [ export? . key key_re . eq . (simple_value | array) . eol ]
+
+  let unset = [ key "unset" . Util.del_ws_spc . store key_re . eol ]
+
+  let source =
+    [
+      del /\.|source/ "." . label ".source" .
+      Util.del_ws_spc . store /[^= \t\n]+/ . eol
+    ]
+
+  let lns = (comment | empty | source | kv | unset) *
+
+  let sc_incl (n:string) = (incl ("/etc/sysconfig/" . n))
+  let filter_sysconfig =
+      sc_incl "atd" .
+      sc_incl "authconfig" .
+      sc_incl "autofs" .
+      sc_incl "clock" .
+      sc_incl "cpuspeed" .
+      sc_incl "crond" .
+      sc_incl "crontab" .
+      sc_incl "desktop" .
+      sc_incl "firstboot" .
+      sc_incl "grub" .
+      sc_incl "hsqldb" .
+      sc_incl "httpd" .
+      sc_incl "i18n" .
+      sc_incl "init" .
+      sc_incl "iptables-config" .
+      sc_incl "irda" .
+      sc_incl "irqbalance" .
+      sc_incl "kdump" .
+      sc_incl "kernel" .
+      sc_incl "keyboard" .
+      sc_incl "kudzu" .
+      sc_incl "libvirtd" .
+      sc_incl "lircd" .
+      sc_incl "nasd" .
+      sc_incl "netconsole" .
+      sc_incl "network" .
+      sc_incl "nfs" .
+      sc_incl "ntpd" .
+      sc_incl "prelink" .
+      sc_incl "readonly-root" .
+      sc_incl "rsyslog" .
+      sc_incl "samba" .
+      sc_incl "saslauthd" .
+      sc_incl "selinux" .
+      sc_incl "sendmail" .
+      sc_incl "smartmontools" .
+      sc_incl "spamassassin" .
+      sc_incl "sysstat" .
+      sc_incl "system-config-users" .
+      sc_incl "vncservers" .
+      sc_incl "wpa_supplicant" .
+      sc_incl "xend" .
+      sc_incl "xendomains"
+
+  let filter_ifcfg   = incl "/etc/sysconfig/network-scripts/ifcfg-*"
+  let filter_default = incl "/etc/default/*"
+  let filter_misc    = incl "/etc/arno-iptables-firewall/debconf.cfg"
+                     . incl "/etc/cron-apt/config"
+  let filter = filter_sysconfig
+             . filter_ifcfg
+             . filter_default
+             . filter_misc
+             . Util.stdexcl
+
+  let xfm = transform lns filter
+
+(* Local Variables: *)
+(* mode: caml       *)
+(* End:             *)
diff --git a/src/drv_initscripts.c b/src/drv_initscripts.c
index 550df65..3fcf5cb 100644
--- a/src/drv_initscripts.c
+++ b/src/drv_initscripts.c
@@ -50,7 +50,7 @@ static const char *const ifcfg_path =
 /* Augeas should only load the files we are interested in */
 static const struct augeas_pv augeas_xfm[] = {
     /* Ifcfg files */
-    { "/augeas/load/Ifcfg/lens", "Shellvars.lns" },
+    { "/augeas/load/Ifcfg/lens", "Ifcfg.lns" },
     { "/augeas/load/Ifcfg/incl",
       "/etc/sysconfig/network-scripts/ifcfg-*" },
     { "/augeas/load/Ifcfg/excl[1]", "*.augnew" },
-- 
1.6.2



More information about the netcf-devel mailing list