diff options
author | Ruben Pollan <meskio@sindominio.net> | 2016-09-20 16:45:53 +0200 |
---|---|---|
committer | Ruben Pollan <meskio@sindominio.net> | 2016-09-20 18:53:19 +0200 |
commit | 607df76ebdf5516085835a0a1f7718baf966a6e0 (patch) | |
tree | eea518e4f699f58600833971dafa77a3eb4bd42a /src/leap/bitmask/util.py | |
parent | eebfd5ea79348b19fdd0c3010735580991c3cdd1 (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.py | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/src/leap/bitmask/util.py b/src/leap/bitmask/util.py index 96dafe0..6da8571 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 |