summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pkg/requirements.pip1
-rw-r--r--src/leap/eip/exceptions.py7
-rw-r--r--src/leap/eip/openvpnconnection.py15
3 files changed, 22 insertions, 1 deletions
diff --git a/pkg/requirements.pip b/pkg/requirements.pip
index 5eeabf5c..a958d53f 100644
--- a/pkg/requirements.pip
+++ b/pkg/requirements.pip
@@ -2,5 +2,6 @@ argparse
configuration
requests
ping
+psutil
netifaces
python-gnutls==1.1.9 # see https://bugs.launchpad.net/ubuntu/+source/python-gnutls/+bug/1027129
diff --git a/src/leap/eip/exceptions.py b/src/leap/eip/exceptions.py
index f048621f..bb375cf0 100644
--- a/src/leap/eip/exceptions.py
+++ b/src/leap/eip/exceptions.py
@@ -93,6 +93,13 @@ class LeapBadConfigFetchedError(Warning):
message = "provider sent a malformed json file"
usermessage = "an error occurred during configuratio of leap services"
+
+class OpenVPNAlreadyRunning(EIPClientError):
+ message = "Another OpenVPN Process is already running."
+ usermessage = ("Another OpenVPN Process has been detect it."
+ "Please close it before starting LEAP")
+
+
#
# errors still needing some love
#
diff --git a/src/leap/eip/openvpnconnection.py b/src/leap/eip/openvpnconnection.py
index f4d1c449..a835ead9 100644
--- a/src/leap/eip/openvpnconnection.py
+++ b/src/leap/eip/openvpnconnection.py
@@ -3,6 +3,7 @@ OpenVPN Connection
"""
from __future__ import (print_function)
import logging
+import psutil
import socket
import time
from functools import partial
@@ -87,6 +88,7 @@ to be triggered for each one of them.
def run_openvpn_checks(self):
logger.debug('running openvpn checks')
+ self._check_if_running_instance()
self._set_ovpn_command()
self._check_vpn_keys()
@@ -156,9 +158,20 @@ to be triggered for each one of them.
raise eip_exceptions.EIPNoCommandError
if self.subp is not None:
logger.debug('cowardly refusing to launch subprocess again')
- return
+
self._launch_openvpn()
+ def _check_if_running_instance(self):
+ """
+ check if openvpn is already running
+ """
+ for process in psutil.get_process_list():
+ if process.name == "openvpn":
+ logger.debug('an openvpn instance is already running.')
+ raise eip_exceptions.OpenVPNAlreadyRunning
+
+ logger.debug('no openvpn instance found.')
+
def cleanup(self):
"""
terminates child subprocess