diff options
author | Kali Kaneko (leap communications) <kali@leap.se> | 2017-05-19 14:54:51 +0200 |
---|---|---|
committer | Ruben Pollan <meskio@sindominio.net> | 2017-05-22 12:56:22 +0200 |
commit | 35d2f5662c6f03480f3f6f9ef9092757447361ed (patch) | |
tree | 8ee163148918f1b75e5e064c7cf46bb3f1ae15df /src/leap/bitmask/vpn/helpers/linux | |
parent | 9b415b6423c7dd18fe9ffa302c3343dfa2314619 (diff) |
[feat] port the polkit agent launcher
this commit is porting the polkit launcher from the legacy bitmask
client. if no polkit authentication agent is running, it will try to run
one that is found in the system.
- Resolves: #8836
Diffstat (limited to 'src/leap/bitmask/vpn/helpers/linux')
-rw-r--r-- | src/leap/bitmask/vpn/helpers/linux/polkit_agent.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/leap/bitmask/vpn/helpers/linux/polkit_agent.py b/src/leap/bitmask/vpn/helpers/linux/polkit_agent.py new file mode 100644 index 0000000..10bf7db --- /dev/null +++ b/src/leap/bitmask/vpn/helpers/linux/polkit_agent.py @@ -0,0 +1,82 @@ +# -*- 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 os +import subprocess + +import daemon + + +POLKIT_PATHS = ( + '/usr/lib/lxpolkit/lxpolkit', + '/usr/lib/policykit-1-gnome/polkit-gnome-authentication-agent-1', + '/usr/lib/mate-polkit/polkit-mate-authentication-agent-1', + '/usr/lib/kde4/libexec/polkit-kde-authentication-agent-1', +) + + +# TODO write tests for this piece. +def _get_polkit_agent(): + """ + Return a valid polkit agent to use. + + :rtype: str or None + """ + # TODO: in caso of having more than one polkit agent we may want to + # stablish priorities. E.g.: lxpolkit over gnome-polkit for minimalistic + # desktops. + for polkit in POLKIT_PATHS: + if os.path.isfile(polkit): + return polkit + + return None + + +def _launch_agent(): + """ + Launch a polkit authentication agent on a subprocess. + """ + polkit_agent = _get_polkit_agent() + + if polkit_agent is None: + print("No usable polkit was found.") + return + + print('Launching polkit auth agent') + try: + # XXX fix KDE launch. See: #3755 + subprocess.call(polkit_agent) + except Exception as e: + print('Error launching polkit authentication agent %r' % (e, )) + + +def launch(): + """ + Launch a polkit authentication agent as a daemon. + """ + with daemon.DaemonContext(): + _launch_agent() + + +if __name__ == "__main__": + # TODO pass a --nodaemon flag so that we can launch this in the foreground + # and debug this module, getting errors to stderr. + launch() |