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