summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changes/feature_2906_check_kext1
-rw-r--r--src/leap/gui/mainwindow.py16
-rw-r--r--src/leap/services/eip/vpnlaunchers.py14
3 files changed, 27 insertions, 4 deletions
diff --git a/changes/feature_2906_check_kext b/changes/feature_2906_check_kext
new file mode 100644
index 00000000..3b663d55
--- /dev/null
+++ b/changes/feature_2906_check_kext
@@ -0,0 +1 @@
+ o Add check for tuntap kext before launching openvpn. Closes: #2906
diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py
index 1d0d3120..f333d7ec 100644
--- a/src/leap/gui/mainwindow.py
+++ b/src/leap/gui/mainwindow.py
@@ -52,10 +52,12 @@ from leap.services.eip.vpnprocess import VPN
from leap.services.eip.vpnprocess import OpenVPNAlreadyRunning
from leap.services.eip.vpnprocess import AlienOpenVPNAlreadyRunning
-from leap.services.eip.vpnlaunchers import (VPNLauncherException,
- OpenVPNNotFoundException,
- EIPNoPkexecAvailable,
- EIPNoPolkitAuthAgentAvailable)
+from leap.services.eip.vpnlaunchers import VPNLauncherException
+from leap.services.eip.vpnlaunchers import OpenVPNNotFoundException
+from leap.services.eip.vpnlaunchers import EIPNoPkexecAvailable
+from leap.services.eip.vpnlaunchers import EIPNoPolkitAuthAgentAvailable
+from leap.services.eip.vpnlaunchers import EIPNoTunKextLoaded
+
from leap.util import __version__ as VERSION
from leap.util.keyring_helpers import has_keyring
@@ -1037,6 +1039,12 @@ class MainWindow(QtGui.QMainWindow):
"running and try again."),
error=True)
self._set_eipstatus_off()
+ except EIPNoTunKextLoaded:
+ self._status_panel.set_global_status(
+ self.tr("Encrypted Internet cannot be started because "
+ "the tuntap extension is not installed properly "
+ "in your system."))
+ self._set_eipstatus_off()
except EIPNoPkexecAvailable:
self._status_panel.set_global_status(
self.tr("We could not find <b>pkexec</b> "
diff --git a/src/leap/services/eip/vpnlaunchers.py b/src/leap/services/eip/vpnlaunchers.py
index 81d9b43b..8522d1df 100644
--- a/src/leap/services/eip/vpnlaunchers.py
+++ b/src/leap/services/eip/vpnlaunchers.py
@@ -58,6 +58,10 @@ class EIPNoPkexecAvailable(VPNLauncherException):
pass
+class EIPNoTunKextLoaded(VPNLauncherException):
+ pass
+
+
class VPNLauncher:
"""
Abstract launcher class
@@ -520,6 +524,13 @@ class DarwinVPNLauncher(VPNLauncher):
to, frompath, to, to)
return cmd
+ @classmethod
+ def maybe_kextloaded(kls):
+ """
+ Checks if the needed kext is loaded before launching openvpn.
+ """
+ return bool(commands.getoutput('kextstat | grep "leap.tun"'))
+
def _get_resource_path(self):
"""
Returns the absolute path to the app resources directory
@@ -600,6 +611,9 @@ class DarwinVPNLauncher(VPNLauncher):
leap_assert(socket_host, "We need a socket host!")
leap_assert(socket_port, "We need a socket port!")
+ if not self.maybe_kextloaded():
+ raise EIPNoTunKextLoaded
+
kwargs = {}
if ProviderConfig.standalone:
kwargs['path_extension'] = os.path.join(