From 3891799d970f10a111f0a690537e1aa7e28c5deb Mon Sep 17 00:00:00 2001
From: John Estabrook <jestabro@vyos.io>
Date: Mon, 15 Jun 2020 10:14:34 -0500
Subject: config: T2568: add missing error checking

---
 python/vyos/config.py | 45 +++++++++++++++++++++++++++++++++------------
 1 file changed, 33 insertions(+), 12 deletions(-)

diff --git a/python/vyos/config.py b/python/vyos/config.py
index 54cb518c3..f94293e2d 100644
--- a/python/vyos/config.py
+++ b/python/vyos/config.py
@@ -100,23 +100,33 @@ class Config(object):
         # once the config system is initialized during boot;
         # before initialization, set to empty string
         if os.path.isfile('/tmp/vyos-config-status'):
-            running_config_text = self._run([self._cli_shell_api, '--show-active-only', '--show-show-defaults', '--show-ignore-edit', 'showConfig'])
+            try:
+                running_config_text = self._run([self._cli_shell_api, '--show-active-only', '--show-show-defaults', '--show-ignore-edit', 'showConfig'])
+            except VyOSError:
+                running_config_text = ''
         else:
             running_config_text = ''
 
         # Session config ("active") only exists in conf mode.
         # In op mode, we'll just use the same running config for both active and session configs.
         if self.in_session():
-            session_config_text = self._run([self._cli_shell_api, '--show-working-only', '--show-show-defaults', '--show-ignore-edit', 'showConfig'])
+            try:
+                session_config_text = self._run([self._cli_shell_api, '--show-working-only', '--show-show-defaults', '--show-ignore-edit', 'showConfig'])
+            except VyOSError:
+                session_config_text = ''
         else:
             session_config_text = running_config_text
 
-        self._session_config = vyos.configtree.ConfigTree(session_config_text)
         if running_config_text:
             self._running_config = vyos.configtree.ConfigTree(running_config_text)
         else:
             self._running_config = None
 
+        if session_config_text:
+            self._session_config = vyos.configtree.ConfigTree(session_config_text)
+        else:
+            self._session_config = None
+
     def _make_command(self, op, path):
         args = path.split()
         cmd = [self._cli_shell_api, op] + args
@@ -193,6 +203,8 @@ class Config(object):
             This function cannot be used outside a configuration sessions.
             In operational mode scripts, use ``exists_effective``.
         """
+        if not self._session_config:
+            return False
         if self._session_config.exists(self._make_path(path)):
             return True
         else:
@@ -362,9 +374,12 @@ class Config(object):
             This function cannot be used outside a configuration session.
             In operational mode scripts, use ``return_effective_value``.
         """
-        try:
-            value = self._session_config.return_value(self._make_path(path))
-        except vyos.configtree.ConfigTreeError:
+        if self._session_config:
+            try:
+                value = self._session_config.return_value(self._make_path(path))
+            except vyos.configtree.ConfigTreeError:
+                value = None
+        else:
             value = None
 
         if not value:
@@ -387,9 +402,12 @@ class Config(object):
             This function cannot be used outside a configuration session.
             In operational mode scripts, use ``return_effective_values``.
         """
-        try:
-            values = self._session_config.return_values(self._make_path(path))
-        except vyos.configtree.ConfigTreeError:
+        if self._session_config:
+            try:
+                values = self._session_config.return_values(self._make_path(path))
+            except vyos.configtree.ConfigTreeError:
+                values = []
+        else:
             values = []
 
         if not values:
@@ -408,9 +426,12 @@ class Config(object):
             string list: child node names
 
         """
-        try:
-            nodes = self._session_config.list_nodes(self._make_path(path))
-        except vyos.configtree.ConfigTreeError:
+        if self._session_config:
+            try:
+                nodes = self._session_config.list_nodes(self._make_path(path))
+            except vyos.configtree.ConfigTreeError:
+                nodes = []
+        else:
             nodes = []
 
         if not nodes:
-- 
cgit v1.2.3