diff options
author | Ruben Pollan <meskio@sindominio.net> | 2017-09-14 00:16:19 +0200 |
---|---|---|
committer | Ruben Pollan <meskio@sindominio.net> | 2017-09-15 23:40:05 +0200 |
commit | c27a6b6c3ef8b2b529b884d261b2acabf6322077 (patch) | |
tree | a781224428da5fb795608d7ecf22a3263394b598 | |
parent | bf7920abcceb0651ab536b3a7268cc87b886469e (diff) |
[feat] wait up to 20 seconds for polkit to be launched
- Related: #9012
-rw-r--r-- | src/leap/bitmask/vpn/privilege.py | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/src/leap/bitmask/vpn/privilege.py b/src/leap/bitmask/vpn/privilege.py index 54065a8..458f690 100644 --- a/src/leap/bitmask/vpn/privilege.py +++ b/src/leap/bitmask/vpn/privilege.py @@ -109,23 +109,29 @@ class LinuxPolicyChecker(object): :returns: a list of the paths where pkexec is to be found :rtype: list """ - if self._is_pkexec_in_system(): - if not self.is_up(): - self.launch() - time.sleep(2) - if self.is_up(): - pkexec_possibilities = which(self.PKEXEC_BIN) - if not pkexec_possibilities: - raise Exception("We couldn't find pkexec") - return pkexec_possibilities - else: - log.warn('No polkit auth agent found. pkexec ' + - 'will use its own auth agent.') - raise NoPolkitAuthAgentAvailable() - else: + if not self._is_pkexec_in_system(): log.warn('System has no pkexec') raise NoPkexecAvailable() + if not self.is_up(): + self.launch() + seconds = 0 + while not self.is_up(): + if seconds >= 20: + log.warn('No polkit auth agent found. pkexec ' + + 'will use its own auth agent.') + raise NoPolkitAuthAgentAvailable() + + # XXX: sleep()!!!! we should do it the twisted way + time.sleep(1) + seconds += 1 + + pkexec_possibilities = which(self.PKEXEC_BIN) + if not pkexec_possibilities: + raise Exception("We couldn't find pkexec") + + return pkexec_possibilities + @classmethod def launch(self): """ |