diff options
| author | Tomás Touceda <chiiph@leap.se> | 2013-09-04 08:45:28 -0300 | 
|---|---|---|
| committer | Tomás Touceda <chiiph@leap.se> | 2013-09-04 08:45:28 -0300 | 
| commit | cdc10a30b0a76eaa5c302b12996766faa90300dc (patch) | |
| tree | 7b31c82bef19873888ab21717bd73bd5f616648d | |
| parent | 5dc4bf2886e13a914f8888bc4e49ac813f3cd56c (diff) | |
| parent | d315312740333abf8450e4e0b004d219a0936488 (diff) | |
Merge remote-tracking branch 'kali/bug/fix-polkit-aut' into develop
| -rw-r--r-- | changes/bug_3554_fix-polkit-auth-agent | 1 | ||||
| -rw-r--r-- | pkg/requirements.pip | 1 | ||||
| -rw-r--r-- | src/leap/bitmask/services/eip/vpnlaunchers.py | 25 | ||||
| -rw-r--r-- | src/leap/bitmask/util/polkit_agent.py | 52 | 
4 files changed, 67 insertions, 12 deletions
| diff --git a/changes/bug_3554_fix-polkit-auth-agent b/changes/bug_3554_fix-polkit-auth-agent new file mode 100644 index 00000000..9498868b --- /dev/null +++ b/changes/bug_3554_fix-polkit-auth-agent @@ -0,0 +1 @@ +  o Properly daemonize polkit-gnome-authentication-agent. Closes: #3554 diff --git a/pkg/requirements.pip b/pkg/requirements.pip index e04127b7..7d0f79af 100644 --- a/pkg/requirements.pip +++ b/pkg/requirements.pip @@ -16,6 +16,7 @@ ipaddr  twisted  qt4reactor  python-gnupg +python-daemon # this should not be needed for Windows.  leap.common>=0.3.0  leap.soledad.client>=0.3.0 diff --git a/src/leap/bitmask/services/eip/vpnlaunchers.py b/src/leap/bitmask/services/eip/vpnlaunchers.py index a9213a9a..49edc8eb 100644 --- a/src/leap/bitmask/services/eip/vpnlaunchers.py +++ b/src/leap/bitmask/services/eip/vpnlaunchers.py @@ -23,8 +23,8 @@ import logging  import getpass  import os  import platform -import subprocess  import stat +import subprocess  try:      import grp  except ImportError: @@ -34,6 +34,7 @@ from abc import ABCMeta, abstractmethod  from functools import partial  from leap.bitmask.config.leapsettings import LeapSettings +  from leap.bitmask.config.providerconfig import ProviderConfig  from leap.bitmask.services.eip.eipconfig import EIPConfig, VPNGatewaySelector  from leap.bitmask.util import first @@ -218,19 +219,19 @@ def _is_auth_agent_running():      return any(is_running) -def _try_to_launch_agent(): +def _try_to_launch_agent(standalone=False):      """      Tries to launch a polkit daemon.      """ -    opts = [ -        "/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1", -        # XXX add kde thing here -    ] -    for cmd in opts: -        try: -            subprocess.Popen([cmd], shell=True) -        except: -            pass +    env = None +    if standalone is True: +        env = { +            "PYTHONPATH": os.path.abspath('../../../../lib/')} +    try: +        subprocess.call(["python", "-m", "leap.bitmask.util.polkit_agent"], +                        shell=True, env=env) +    except Exception as exc: +        logger.exception(exc)  class LinuxVPNLauncher(VPNLauncher): @@ -314,7 +315,7 @@ class LinuxVPNLauncher(VPNLauncher):          """          if _is_pkexec_in_system():              if not _is_auth_agent_running(): -                _try_to_launch_agent() +                _try_to_launch_agent(ProviderConfig.standalone)              if _is_auth_agent_running():                  pkexec_possibilities = which(kls.PKEXEC_BIN)                  leap_assert(len(pkexec_possibilities) > 0, diff --git a/src/leap/bitmask/util/polkit_agent.py b/src/leap/bitmask/util/polkit_agent.py new file mode 100644 index 00000000..a4650273 --- /dev/null +++ b/src/leap/bitmask/util/polkit_agent.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +# polkit_agent.py +# Copyright (C) 2013 LEAP +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program.  If not, see <http://www.gnu.org/licenses/>. +""" +Daemonizes polkit authentication agent. +""" +import logging +import subprocess + +import daemon + +logger = logging.getLogger(__name__) + +BASE_PATH = "/usr/lib/policykit-1-gnome/"\ +            + "polkit-%s-authentication-agent-1" + +GNOME_PATH = BASE_PATH % ("gnome",) +KDE_PATH = BASE_PATH % ("kde",) + + +def _launch_agent(): +    logger.debug('Launching polkit auth agent') +    print "launching polkit" +    try: +        subprocess.call(GNOME_PATH) +    except Exception as exc: +        try: +            subprocess.call(KDE_PATH) +        except Exception as exc: +            logger.error('Exception while running polkit authentication agent ' +                         '%s' % (exc,)) + + +def launch(): +    with daemon.DaemonContext(): +        _launch_agent() + +if __name__ == "__main__": +    launch() | 
