summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKali Kaneko (leap communications) <kali@leap.se>2017-05-31 17:45:53 +0200
committerKali Kaneko (leap communications) <kali@leap.se>2017-05-31 18:51:24 +0200
commit59807917612e301ac37d59f0d4d832979316896c (patch)
treeb2fb3fe513ee1ec6f002b660b842c2321c1469a2
parent419828838991e3dfa447f3b29b37e5277052abb4 (diff)
[feat] install installers directly if we are root
-rw-r--r--src/leap/bitmask/vpn/privilege.py51
1 files changed, 33 insertions, 18 deletions
diff --git a/src/leap/bitmask/vpn/privilege.py b/src/leap/bitmask/vpn/privilege.py
index 4617aedf..d918a30d 100644
--- a/src/leap/bitmask/vpn/privilege.py
+++ b/src/leap/bitmask/vpn/privilege.py
@@ -33,29 +33,43 @@ from twisted.python.procutils import which
from leap.bitmask.util import STANDALONE, here
+from .constants import IS_LINUX
+
log = Logger()
-def install_helpers():
- cmd = 'bitmask_helpers install'
- if STANDALONE:
- binary_path = os.path.join(here(), "bitmask")
- cmd = "%s %s" % (binary_path, cmd)
+# TODO wrap the install/uninstall helper functions around the policychecker
+# classes below.
- # TODO check if the command has succeeded, and display error
- # if failed
- commands.getoutput('pkexec ' + cmd)
+def install_helpers():
+ if IS_LINUX:
+ cmd = 'bitmask_helpers install'
+ if STANDALONE:
+ binary_path = os.path.join(here(), "bitmask")
+ cmd = "%s %s" % (binary_path, cmd)
+ if os.getuid() != 0:
+ cmd = 'pkexec ' + cmd
+ retcode, _ = commands.getstatusoutput(cmd)
+ if retcode != 0:
+ raise Exception('Could not install helpers')
+ else:
+ raise Exception('No install mechanism for this platform')
def uninstall_helpers():
- cmd = 'bitmask_helpers uninstall'
- if STANDALONE:
- binary_path = os.path.join(here(), "bitmask")
- cmd = "%s %s" % (binary_path, cmd)
-
- # TODO check if the command has succeeded, and display error
- # if failed
- commands.getoutput('pkexec ' + cmd)
+ if IS_LINUX:
+ cmd = 'bitmask_helpers uninstall'
+ if STANDALONE:
+ binary_path = os.path.join(here(), "bitmask")
+ cmd = "%s %s" % (binary_path, cmd)
+ if os.getuid() != 0:
+ cmd = 'pkexec ' + cmd
+ retcode, _ = commands.getstatusoutput(cmd)
+ commands.getoutput('pkexec ' + cmd)
+ if retcode != 0:
+ raise Exception('Could not uninstall helpers')
+ else:
+ raise Exception('No install mechanism for this platform')
class NoPolkitAuthAgentAvailable(Exception):
@@ -66,6 +80,7 @@ class NoPkexecAvailable(Exception):
message = 'Could not find pkexec in the system'
+# TODO rename to privileged_runner or something like that
def is_missing_policy_permissions():
"""
Returns True if we do not have implemented a policy checker for this
@@ -169,7 +184,7 @@ class LinuxPolicyChecker(PolicyChecker):
@classmethod
def launch(self):
"""
- Tries to launch policykit.
+ Tries to launch polkit agent.
"""
if not self.is_up():
try:
@@ -196,7 +211,7 @@ class LinuxPolicyChecker(PolicyChecker):
# polkit-agent, it uses a polkit-agent within its own process so we
# can't ps-grep a polkit process, we can ps-grep gnome-shell itself.
- # the [x] thing is to avoid grep match itself
+ # the square brackets are to avoid grep match itself
polkit_options = [
'ps aux | grep "polkit-[g]nome-authentication-agent-1"',
'ps aux | grep "polkit-[k]de-authentication-agent-1"',