diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/leap/bitmask/vpn/helpers/__init__.py | 52 |
1 files changed, 37 insertions, 15 deletions
diff --git a/src/leap/bitmask/vpn/helpers/__init__.py b/src/leap/bitmask/vpn/helpers/__init__.py index c8dfb662..631ad785 100644 --- a/src/leap/bitmask/vpn/helpers/__init__.py +++ b/src/leap/bitmask/vpn/helpers/__init__.py @@ -53,28 +53,50 @@ if IS_LINUX: return has_pkexec and running def check(): - helper = _is_up_to_date(_config.get_bitmask_helper_path(), - BITMASK_ROOT_LOCAL, - BITMASK_ROOT_SYSTEM) - polkit = (os.path.exists(POLKIT_LOCAL) or - os.path.exists(POLKIT_SYSTEM)) - openvpn = (os.path.exists(OPENVPN_SYSTEM) or - _is_up_to_date(_config.get_bitmask_openvpn_path(), - OPENVPN_LOCAL, "")) - return helper and polkit and openvpn - - def _is_up_to_date(src, local, system): - if src is None or not access(src, R_OK): + return ( + is_pkexec_in_system() and + _check_helper() and + _check_polkit() and + _check_openvpn()) + + def _check_helper(): + helper_path = _config.get_bitmask_helper_path() + if not access(helper_path, R_OK): return True - src_digest = digest(src) - if access(system, R_OK) and src_digest == digest(system): + helper_path_digest = digest(helper_path) + if (access(BITMASK_ROOT_SYSTEM, R_OK) and + helper_path_digest == digest(BITMASK_ROOT_SYSTEM)): return True - if access(local, R_OK) and src_digest == digest(local): + if (access(BITMASK_ROOT_LOCAL, R_OK) and + helper_path_digest == digest(BITMASK_ROOT_LOCAL)): return True return False + def _check_openvpn(): + if os.path.exists(OPENVPN_SYSTEM): + return True + + openvpn_path = _config.get_bitmask_openvpn_path() + if openvpn_path is None: + return True + + openvpn_path_digest = digest(openvpn_path) + if (access(OPENVPN_LOCAL, R_OK) and + openvpn_path_digest == digest(OPENVPN_LOCAL)): + return True + + return False + + def _check_polkit(): + # XXX: we are just checking if there is any policy file installed not + # if it's valid or if it's the correct one that will be used. + # (if LOCAL is used if /usr/local/sbin/bitmask-root is used and SYSTEM + # if /usr/sbin/bitmask-root) + return (os.path.exists(POLKIT_LOCAL) or + os.path.exists(POLKIT_SYSTEM)) + elif IS_MAC: |