summaryrefslogtreecommitdiff
path: root/src/leap/bitmask/util.py
diff options
context:
space:
mode:
authorRuben Pollan <meskio@sindominio.net>2016-09-20 16:45:53 +0200
committerRuben Pollan <meskio@sindominio.net>2016-09-20 18:53:19 +0200
commit607df76ebdf5516085835a0a1f7718baf966a6e0 (patch)
treeeea518e4f699f58600833971dafa77a3eb4bd42a /src/leap/bitmask/util.py
parenteebfd5ea79348b19fdd0c3010735580991c3cdd1 (diff)
[feat] discover gpg bin path instead of hardcode it
Diffstat (limited to 'src/leap/bitmask/util.py')
-rw-r--r--src/leap/bitmask/util.py58
1 files changed, 57 insertions, 1 deletions
diff --git a/src/leap/bitmask/util.py b/src/leap/bitmask/util.py
index 96dafe06..6da8571b 100644
--- a/src/leap/bitmask/util.py
+++ b/src/leap/bitmask/util.py
@@ -18,11 +18,17 @@
Handy common utils
"""
import os
+import platform
import sys
+from twisted.python import log
+
+
+STANDALONE = getattr(sys, 'frozen', False)
+
def here(module=None):
- if getattr(sys, 'frozen', False):
+ if STANDALONE:
# we are running in a |PyInstaller| bundle
return sys._MEIPASS
else:
@@ -31,3 +37,53 @@ def here(module=None):
return dirname(module.__file__)
else:
return dirname(__file__)
+
+
+def get_gpg_bin_path():
+ """
+ Return the path to gpg binary.
+
+ :returns: the gpg binary path
+ :rtype: str
+ """
+ gpgbin = None
+
+ # During the transition towards gpg2, we can look for /usr/bin/gpg1
+ # binary, in case it was renamed using dpkg-divert or manually.
+ # We could just pick gpg2, but we need to solve #7564 first.
+ try:
+ gpgbin_options = which("gpg1")
+ for opt in gpgbin_options:
+ if not os.path.islink(opt):
+ gpgbin = opt
+ break
+ except IndexError as e:
+ log.msg("Couldn't find the gpg1 binary!: %s" % (e,))
+ if gpgbin is not None:
+ return gpgbin
+
+ if STANDALONE:
+ gpgbin = os.path.join(
+ get_path_prefix(), "..", "apps", "mail", "gpg")
+ if platform.system() == "Windows":
+ gpgbin += ".exe"
+ else:
+ try:
+ gpgbin_options = which("gpg")
+ # gnupg checks that the path to the binary is not a
+ # symlink, so we need to filter those and come up with
+ # just one option.
+ for opt in gpgbin_options:
+ if not os.path.islink(opt):
+ gpgbin = opt
+ break
+ except IndexError as e:
+ log.msg("Couldn't find the gpg binary!: %s" % (e,))
+ log.exception(e)
+ if platform.system() == "Darwin":
+ gpgbin = os.path.abspath(
+ os.path.join(here(), "apps", "mail", "gpg"))
+
+ if gpgbin is None:
+ log.msg("Could not find gpg1 binary")
+ return gpgbin