summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--python/vyos/config.py6
-rw-r--r--python/vyos/configtree.py7
-rw-r--r--python/vyos/util.py6
-rwxr-xr-xsrc/conf_mode/interfaces-geneve.py2
-rwxr-xr-xsrc/conf_mode/interfaces-vxlan.py2
-rwxr-xr-xsrc/helpers/vyos-merge-config.py3
-rwxr-xr-xsrc/op_mode/powerctrl.py8
-rwxr-xr-xsrc/services/vyos-http-api-server2
-rwxr-xr-xsrc/utils/vyos-config-to-commands8
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()