From efac9c470b2a74da94c92703e87da603bf87296f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaroslav=20=C5=A0karvada?= Date: Wed, 19 Aug 2015 14:09:56 +0200 Subject: [PATCH] plugin_sysctl: unquoting sysctl values MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Unquoting first and last quotation mark in value, i.e. converting: OPTION="VALUE" to OPTION=VALUE Also added unquoting to profile verification, unquoting both (current and requested) values. Resolves: rhbz#1254538 Signed-off-by: Jaroslav Škarvada --- tuned/plugins/base.py | 7 +++++-- tuned/plugins/plugin_bootloader.py | 5 +---- tuned/plugins/plugin_sysctl.py | 2 +- tuned/utils/commands.py | 3 +++ 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/tuned/plugins/base.py b/tuned/plugins/base.py index e7ff2d2..3b4652a 100644 --- a/tuned/plugins/base.py +++ b/tuned/plugins/base.py @@ -3,6 +3,7 @@ import tuned.consts as consts import tuned.profiles.variables import tuned.logs import collections +from tuned.utils.commands import commands log = tuned.logs.get() @@ -35,6 +36,8 @@ class Plugin(object): self._options_used_by_dynamic = self._get_config_options_used_by_dynamic() + self._cmd = commands() + def cleanup(self): self.destroy_instances() @@ -415,10 +418,10 @@ class Plugin(object): command["set"](new_value, sim = False) def _norm_value(self, value): - v = str(value) + v = self._cmd.unquote(str(value)) if re.match(r'\s*(0+,)+[\da-fA-F]*\s*$', v): return re.sub(r'^\s*(0+,)+', "", v) - return value + return v def _verify_value(self, name, new_value, current_value, device = None): if new_value is None: diff --git a/tuned/plugins/plugin_bootloader.py b/tuned/plugins/plugin_bootloader.py index e0ff646..27b7132 100644 --- a/tuned/plugins/plugin_bootloader.py +++ b/tuned/plugins/plugin_bootloader.py @@ -105,9 +105,6 @@ class BootloaderPlugin(base.Plugin): self._grub2_default_env_patch() return True - def _unquote(self, v): - return re.sub("^\"(.*)\"$", r"\1", v) - @command_custom("grub2_cfg_file") def _grub2_cfg_file(self, enabling, value, verify): # nothing to verify @@ -118,7 +115,7 @@ class BootloaderPlugin(base.Plugin): @command_custom("cmdline", per_device = False, priority = 10) def _cmdline(self, enabling, value, verify): - v = self._variables.expand(self._unquote(value)) + v = self._variables.expand(self._cmd.unquote(value)) if verify: cmdline = self._cmd.read_file("/proc/cmdline") if len(cmdline) == 0: diff --git a/tuned/plugins/plugin_sysctl.py b/tuned/plugins/plugin_sysctl.py index 676fd52..70f27af 100644 --- a/tuned/plugins/plugin_sysctl.py +++ b/tuned/plugins/plugin_sysctl.py @@ -43,7 +43,7 @@ class SysctlPlugin(base.Plugin): original_value = self._read_sysctl(option) if original_value != None: instance._sysctl_original[option] = original_value - self._write_sysctl(option, self._variables.expand(value)) + self._write_sysctl(option, self._variables.expand(self._cmd.unquote(value))) self._storage.set("options", instance._sysctl_original) diff --git a/tuned/utils/commands.py b/tuned/utils/commands.py index 4c80783..2392a89 100644 --- a/tuned/utils/commands.py +++ b/tuned/utils/commands.py @@ -30,6 +30,9 @@ class commands: def remove_ws(self, s): return re.sub('\s+', ' ', s).strip() + def unquote(self, v): + return re.sub("^\"(.*)\"$", r"\1", v) + # convert dictionary 'd' to flat list and return it # it uses sort on the dictionary items to return consistent results # for directories with different inserte/delete history -- 2.4.3