From 9dbbfeebbb4bb7c445e01f94533e88e514fd6821 Mon Sep 17 00:00:00 2001
From: Kali Kaneko <kali@leap.se>
Date: Fri, 17 Jan 2014 11:22:35 -0400
Subject: defend against keyring errors

on certain settings, like a virtualenv with symlinks, I'm getting
errors after a suspend, related to a error to connect to the dbus
socket.

wrapping all of it in a conditional we avoid that kind of error.
---
 src/leap/bitmask/util/keyring_helpers.py | 30 ++++++++++++++++++++----------
 1 file changed, 20 insertions(+), 10 deletions(-)

(limited to 'src')

diff --git a/src/leap/bitmask/util/keyring_helpers.py b/src/leap/bitmask/util/keyring_helpers.py
index b202d47e..ee2d7a1c 100644
--- a/src/leap/bitmask/util/keyring_helpers.py
+++ b/src/leap/bitmask/util/keyring_helpers.py
@@ -19,19 +19,23 @@ Keyring helpers.
 """
 import logging
 
-import keyring
+try:
+    import keyring
+    from keyring.backends.file import EncryptedKeyring, PlaintextKeyring
+    OBSOLETE_KEYRINGS = [
+        EncryptedKeyring,
+        PlaintextKeyring
+    ]
+    canuse = lambda kr: (kr is not None
+                         and kr.__class__ not in OBSOLETE_KEYRINGS)
 
-from keyring.backends.file import EncryptedKeyring, PlaintextKeyring
-
-logger = logging.getLogger(__name__)
+except Exception:
+    # Problems when importing keyring! It might be a problem binding to the
+    # dbus socket, or stuff like that.
+    keyring = None
 
 
-OBSOLETE_KEYRINGS = [
-    EncryptedKeyring,
-    PlaintextKeyring
-]
-
-canuse = lambda kr: kr is not None and kr.__class__ not in OBSOLETE_KEYRINGS
+logger = logging.getLogger(__name__)
 
 
 def _get_keyring_with_fallback():
@@ -42,6 +46,8 @@ def _get_keyring_with_fallback():
     This is a workaround for the cases in which the keyring module chooses
     an insecure keyring by default (ie, inside a virtualenv).
     """
+    if not keyring:
+        return None
     kr = keyring.get_keyring()
     if not canuse(kr):
         try:
@@ -61,6 +67,8 @@ def has_keyring():
 
     :rtype: bool
     """
+    if not keyring:
+        return False
     kr = _get_keyring_with_fallback()
     return canuse(kr)
 
@@ -71,5 +79,7 @@ def get_keyring():
 
     :rtype: keyringBackend or None
     """
+    if not keyring:
+        return False
     kr = _get_keyring_with_fallback()
     return kr if canuse(kr) else None
-- 
cgit v1.2.3