diff options
author | Christian Poessinger <christian@poessinger.com> | 2019-12-04 17:13:59 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2019-12-04 17:13:59 +0100 |
commit | a96ffc33cc63918ba3815f66c506c717a8676621 (patch) | |
tree | f883f5976a40f2066f500363931a5e499374b8de | |
parent | 26677aa3ce312a5b980ea88d57feebd09e39fd98 (diff) | |
parent | aceb4d7e187a571019e4bc24cd23efc7c2f624fe (diff) | |
download | vyos-1x-a96ffc33cc63918ba3815f66c506c717a8676621.tar.gz vyos-1x-a96ffc33cc63918ba3815f66c506c717a8676621.zip |
Merge branch 'current' of github.com:vyos/vyos-1x into equuleus
* 'current' of github.com:vyos/vyos-1x:
shutdown: T1826: Modify cancel reboot msg
T1801: move escaping of backslashes into configtree
vxlan: T1636: remove unused import statements
geneve: T1799: remove unused import statements
-rw-r--r-- | python/vyos/config.py | 6 | ||||
-rw-r--r-- | python/vyos/configtree.py | 7 | ||||
-rw-r--r-- | python/vyos/util.py | 6 | ||||
-rwxr-xr-x | src/conf_mode/interfaces-geneve.py | 2 | ||||
-rwxr-xr-x | src/conf_mode/interfaces-vxlan.py | 2 | ||||
-rwxr-xr-x | src/helpers/vyos-merge-config.py | 3 | ||||
-rwxr-xr-x | src/op_mode/powerctrl.py | 8 | ||||
-rwxr-xr-x | src/services/vyos-http-api-server | 2 | ||||
-rwxr-xr-x | src/utils/vyos-config-to-commands | 8 |
9 files changed, 13 insertions, 31 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 diff --git a/src/conf_mode/interfaces-geneve.py b/src/conf_mode/interfaces-geneve.py index ba684b553..7322e0c50 100755 --- a/src/conf_mode/interfaces-geneve.py +++ b/src/conf_mode/interfaces-geneve.py @@ -19,10 +19,8 @@ import os from sys import exit from copy import deepcopy -from vyos.configdict import list_diff from vyos.config import Config from vyos.ifconfig import GeneveIf, Interface -from vyos.interfaces import get_type_of_interface from vyos import ConfigError from netifaces import interfaces diff --git a/src/conf_mode/interfaces-vxlan.py b/src/conf_mode/interfaces-vxlan.py index 30ff1755d..c1fedc824 100755 --- a/src/conf_mode/interfaces-vxlan.py +++ b/src/conf_mode/interfaces-vxlan.py @@ -19,10 +19,8 @@ import os from sys import exit from copy import deepcopy -from vyos.configdict import list_diff from vyos.config import Config from vyos.ifconfig import VXLANIf, Interface -from vyos.interfaces import get_type_of_interface from vyos import ConfigError from netifaces import interfaces diff --git a/src/helpers/vyos-merge-config.py b/src/helpers/vyos-merge-config.py index e9a14ae98..7ae62cfb3 100755 --- a/src/helpers/vyos-merge-config.py +++ b/src/helpers/vyos-merge-config.py @@ -72,9 +72,6 @@ merge_config_tree = ConfigTree(config_file) effective_config = Config() output_effective_config = effective_config.show_config() -# showConfig (called by config.show_config() does not escape -# backslashes, which configtree expects; cf. T1001. -output_effective_config = output_effective_config.replace("\\", "\\\\") effective_config_tree = ConfigTree(output_effective_config) diff --git a/src/op_mode/powerctrl.py b/src/op_mode/powerctrl.py index e3644e063..46ebf5ffb 100755 --- a/src/op_mode/powerctrl.py +++ b/src/op_mode/powerctrl.py @@ -60,7 +60,11 @@ def check_shutdown(): def cancel_shutdown(): try: - cmd = check_output(["/sbin/shutdown","-c"]) + timenow = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + cmd = check_output(["/sbin/shutdown","-c","--no-wall"]) + message = "Reboot scheduled has been cancelled %s" % timenow + #Generate broadcast message about cancel reboot + os.system("wall %s" % message) except CalledProcessError as e: sys.exit("Error aborting shutdown: %s" % e) @@ -105,7 +109,7 @@ def execute_shutdown(time, reboot = True, ask=True): else: sys.exit("Could not decode time and date") - print(cmd.decode().split(",",1)[0]) + check_shutdown() def chk_vyatta_based_reboots(): ### T870 commit-confirm is still using the vyatta code base, once gone, the code below can be removed diff --git a/src/services/vyos-http-api-server b/src/services/vyos-http-api-server index 9b6d7e979..1abaed873 100755 --- a/src/services/vyos-http-api-server +++ b/src/services/vyos-http-api-server @@ -24,7 +24,6 @@ import traceback import threading import vyos.config -import vyos.util import bottle @@ -213,7 +212,6 @@ def get_value(): config_format = command['configFormat'] res = session.show_config(path=command['path']) - res = vyos.util.escape_backslash(res) if config_format == 'json': config_tree = vyos.configtree.ConfigTree(res) res = json.loads(config_tree.to_json()) diff --git a/src/utils/vyos-config-to-commands b/src/utils/vyos-config-to-commands index 7147bc5ff..8b50f7c5d 100755 --- a/src/utils/vyos-config-to-commands +++ b/src/utils/vyos-config-to-commands @@ -19,14 +19,6 @@ else: except OSError as e: print("Could not read config file {0}: {1}".format(file_name, e), file=sys.stderr) -# This script is usually called with the output of "cli-shell-api showCfg", which does not -# escape backslashes. "ConfigTree()" expects escaped backslashes when parsing a config -# string (and also prints them itself). Therefore this script would fail. -# Manually escape backslashes here to handle backslashes in any configuration strings -# properly. The alternative would be to modify the output of "cli-shell-api showCfg", -# but that may be break other things who rely on that specific output. -config_string = config_string.replace("\\", "\\\\") - try: config = ConfigTree(config_string) commands = config.to_commands() |