File 0067-Bugfix-prevent-crash-if-python-dbus-module-is-instal.patch of Package salt.3514

From 2ca7171f334fa17095defd9fb35fd3d30788b407 Mon Sep 17 00:00:00 2001
From: Bo Maryniuk <bo@suse.de>
Date: Thu, 11 Aug 2016 15:36:20 +0200
Subject: [PATCH 67/67] Bugfix: prevent crash, if python dbus module is
 installed, but no real dbus is around in the system (e.g. minimal RHEL6)

* Add error check for snapper's object init
* Add error message for missing snapper in a whole
* Disable pylint on module-level non-constant variables
* Turn off pylint on non-constant names in init block
---
 salt/modules/snapper.py | 41 +++++++++++++++++++++++++++++------------
 1 file changed, 29 insertions(+), 12 deletions(-)

diff --git a/salt/modules/snapper.py b/salt/modules/snapper.py
index 9a73820..edecd87 100644
--- a/salt/modules/snapper.py
+++ b/salt/modules/snapper.py
@@ -46,26 +46,43 @@ SNAPPER_DBUS_OBJECT = 'org.opensuse.Snapper'
 SNAPPER_DBUS_PATH = '/org/opensuse/Snapper'
 SNAPPER_DBUS_INTERFACE = 'org.opensuse.Snapper'
 
-log = logging.getLogger(__name__)  # pylint: disable=invalid-name
+# pylint: disable=invalid-name
+log = logging.getLogger(__name__)
 
-bus = None  # pylint: disable=invalid-name
-snapper = None  # pylint: disable=invalid-name
+bus = None
+system_bus_error = None
+snapper = None
+snapper_error = None
 
 if HAS_DBUS:
-    bus = dbus.SystemBus()  # pylint: disable=invalid-name
-    if SNAPPER_DBUS_OBJECT in bus.list_activatable_names():
-        snapper = dbus.Interface(bus.get_object(SNAPPER_DBUS_OBJECT,  # pylint: disable=invalid-name
-                                                SNAPPER_DBUS_PATH),
-                                 dbus_interface=SNAPPER_DBUS_INTERFACE)
+    try:
+        bus = dbus.SystemBus()
+    except dbus.DBusException as exc:
+        log.error(exc)
+        system_bus_error = exc
+    else:
+        if SNAPPER_DBUS_OBJECT in bus.list_activatable_names():
+            try:
+                snapper = dbus.Interface(bus.get_object(SNAPPER_DBUS_OBJECT,
+                                                        SNAPPER_DBUS_PATH),
+                                         dbus_interface=SNAPPER_DBUS_INTERFACE)
+            except (dbus.DBusException, ValueError) as exc:
+                log.error(exc)
+                snapper_error = exc
+        else:
+            snapper_error = 'snapper is missing'
+# pylint: enable=invalid-name
 
 
 def __virtual__():
+    error_msg = 'The snapper module cannot be loaded: {0}'
     if not HAS_DBUS:
-        return (False, 'The snapper module cannot be loaded:'
-                ' missing python dbus module')
+        return False, error_msg.format('missing python dbus module')
     elif not snapper:
-        return (False, 'The snapper module cannot be loaded:'
-                ' missing snapper')
+        return False, error_msg.format(snapper_error)
+    elif not bus:
+        return False, error_msg.format(system_bus_error)
+
     return 'snapper'
 
 
-- 
2.9.2

openSUSE Build Service is sponsored by