diff options
Diffstat (limited to 'python/vyos')
-rw-r--r-- | python/vyos/config.py | 6 | ||||
-rw-r--r-- | python/vyos/configtree.py | 7 | ||||
-rw-r--r-- | python/vyos/util.py | 6 |
3 files changed, 7 insertions, 12 deletions
diff --git a/python/vyos/config.py b/python/vyos/config.py index e5963c19a..5bd8fb072 100644 --- a/python/vyos/config.py +++ b/python/vyos/config.py @@ -69,7 +69,6 @@ import json import subprocess import vyos.configtree -import vyos.util class VyOSError(Exception): @@ -112,11 +111,6 @@ class Config(object): else: session_config_text = running_config_text - # The output of showConfig does not escape backslashes, as is expected - # by ConfigTree(). - session_config_text = vyos.util.escape_backslash(session_config_text) - running_config_text = vyos.util.escape_backslash(running_config_text) - self._session_config = vyos.configtree.ConfigTree(session_config_text) self._running_config = vyos.configtree.ConfigTree(running_config_text) diff --git a/python/vyos/configtree.py b/python/vyos/configtree.py index 77cffe90b..0274f3573 100644 --- a/python/vyos/configtree.py +++ b/python/vyos/configtree.py @@ -18,6 +18,12 @@ import json from ctypes import cdll, c_char_p, c_void_p, c_int +def escape_backslash(string: str) -> str: + """Escape single backslashes in string that are not in escape sequence""" + p = re.compile(r'(?<!\\)[\\](?!b|f|n|r|t|\\[^bfnrt])') + result = p.sub(r'\\\\', string) + return result + def strip_comments(s): """ Split a config string into the config section and the trailing comments """ INITIAL = 0 @@ -169,6 +175,7 @@ class ConfigTree(object): self.__destroy.argtypes = [c_void_p] config_section, comments_section = strip_comments(config_string) + config_section = escape_backslash(config_section) config = self.__from_string(config_section.encode()) if config is None: msg = self.__get_error().decode() diff --git a/python/vyos/util.py b/python/vyos/util.py index 659a702fd..67a602f7a 100644 --- a/python/vyos/util.py +++ b/python/vyos/util.py @@ -199,9 +199,3 @@ def is_admin() -> bool: current_user = getpass.getuser() (_, _, _, admin_group_members) = grp.getgrnam('sudo') return current_user in admin_group_members - -def escape_backslash(string: str) -> str: - """Escape single backslashes in string that are not in escape sequence""" - p = re.compile(r'(?<!\\)[\\](?!b|f|n|r|t|\\[^bfnrt])') - result = p.sub(r'\\\\', string) - return result |