diff options
| author | Kali Kaneko <kali@leap.se> | 2013-08-06 02:45:41 +0200 | 
|---|---|---|
| committer | Kali Kaneko <kali@leap.se> | 2013-08-07 11:52:25 +0200 | 
| commit | 03ebed92556e965d5bc39b256e77cf9cf18fb11b (patch) | |
| tree | 4b95e65095870743efed1213119a83c64240e4d9 | |
| parent | d6bf9b3e11ff87488a5f508acebf8f20ad026166 (diff) | |
Allow to change openvpn verbosity in logs
| -rw-r--r-- | changes/feature_3305_openvpn_verbosity | 1 | ||||
| -rw-r--r-- | src/leap/app.py | 2 | ||||
| -rw-r--r-- | src/leap/gui/mainwindow.py | 7 | ||||
| -rw-r--r-- | src/leap/services/eip/vpnlaunchers.py | 26 | ||||
| -rw-r--r-- | src/leap/services/eip/vpnprocess.py | 27 | 
5 files changed, 50 insertions, 13 deletions
| diff --git a/changes/feature_3305_openvpn_verbosity b/changes/feature_3305_openvpn_verbosity new file mode 100644 index 00000000..d838861f --- /dev/null +++ b/changes/feature_3305_openvpn_verbosity @@ -0,0 +1 @@ +  o Accept flag for changing openvpn verbosity in logs. Closes: #3305 diff --git a/src/leap/app.py b/src/leap/app.py index 6ba27813..34eac6dc 100644 --- a/src/leap/app.py +++ b/src/leap/app.py @@ -142,6 +142,7 @@ def main():      bypass_checks = getattr(opts, 'danger', False)      debug = opts.debug      logfile = opts.log_file +    openvpn_verb = opts.openvpn_verb      logger = add_logger_handlers(debug, logfile)      replace_stdout_stderr_with_logging(logger) @@ -202,6 +203,7 @@ def main():      window = MainWindow(          lambda: twisted_main.quit(app),          standalone=standalone, +        openvpn_verb=openvpn_verb,          bypass_checks=bypass_checks)      sigint_window = partial(sigint_handler, window, logger=logger) diff --git a/src/leap/gui/mainwindow.py b/src/leap/gui/mainwindow.py index 87dd4f5c..8195d23a 100644 --- a/src/leap/gui/mainwindow.py +++ b/src/leap/gui/mainwindow.py @@ -99,7 +99,9 @@ class MainWindow(QtGui.QMainWindow):      user_stopped_eip = False      def __init__(self, quit_callback, -                 standalone=False, bypass_checks=False): +                 standalone=False, +                 openvpn_verb=1, +                 bypass_checks=False):          """          Constructor for the client main window @@ -210,7 +212,7 @@ class MainWindow(QtGui.QMainWindow):          self._smtp_bootstrapper.download_config.connect(              self._smtp_bootstrapped_stage) -        self._vpn = VPN() +        self._vpn = VPN(openvpn_verb=openvpn_verb)          self._vpn.qtsigs.state_changed.connect(              self._status_panel.update_vpn_state)          self._vpn.qtsigs.status_changed.connect( @@ -1059,6 +1061,7 @@ class MainWindow(QtGui.QMainWindow):              self._status_panel.eip_started() +            # XXX refactor into status_panel method?              self._action_eip_startstop.setText(self.tr("Turn OFF"))              self._action_eip_startstop.disconnect(self)              self._action_eip_startstop.triggered.connect( diff --git a/src/leap/services/eip/vpnlaunchers.py b/src/leap/services/eip/vpnlaunchers.py index 0151c1c6..95d95c0e 100644 --- a/src/leap/services/eip/vpnlaunchers.py +++ b/src/leap/services/eip/vpnlaunchers.py @@ -352,7 +352,7 @@ class LinuxVPNLauncher(VPNLauncher):          return None      def get_vpn_command(self, eipconfig=None, providerconfig=None, -                        socket_host=None, socket_port="unix"): +                        socket_host=None, socket_port="unix", openvpn_verb=1):          """          Returns the platform dependant vpn launching command. It will          look for openvpn in the regular paths and algo in @@ -375,6 +375,9 @@ class LinuxVPNLauncher(VPNLauncher):                              socket, or port otherwise          :type socket_port: str +        :param openvpn_verb: openvpn verbosity wanted +        :type openvpn_verb: int +          :return: A VPN command ready to be launched          :rtype: list          """ @@ -404,7 +407,7 @@ class LinuxVPNLauncher(VPNLauncher):              args.append(openvpn)              openvpn = first(pkexec) -        # TODO: handle verbosity +        args += ['--verb', '%d' % (openvpn_verb,)]          gateway_selector = VPNGatewaySelector(eipconfig)          gateways = gateway_selector.get_gateways() @@ -604,7 +607,7 @@ class DarwinVPNLauncher(VPNLauncher):          return self.COCOASUDO, args      def get_vpn_command(self, eipconfig=None, providerconfig=None, -                        socket_host=None, socket_port="unix"): +                        socket_host=None, socket_port="unix", openvpn_verb=1):          """          Returns the platform dependant vpn launching command @@ -623,6 +626,9 @@ class DarwinVPNLauncher(VPNLauncher):                              socket, or port otherwise          :type socket_port: str +        :param openvpn_verb: openvpn verbosity wanted +        :type openvpn_verb: int +          :return: A VPN command ready to be launched          :rtype: list          """ @@ -651,7 +657,7 @@ class DarwinVPNLauncher(VPNLauncher):          openvpn = first(openvpn_possibilities)          args = [openvpn] -        # TODO: handle verbosity +        args += ['--verb', '%d' % (openvpn_verb,)]          gateway_selector = VPNGatewaySelector(eipconfig)          gateways = gateway_selector.get_gateways() @@ -768,9 +774,10 @@ class WindowsVPNLauncher(VPNLauncher):      OPENVPN_BIN = 'openvpn_leap.exe'      # XXX UPDOWN_FILES ... we do not have updown files defined yet! +    # (and maybe we won't)      def get_vpn_command(self, eipconfig=None, providerconfig=None, -                        socket_host=None, socket_port="9876"): +                        socket_host=None, socket_port="9876", openvpn_verb=1):          """          Returns the platform dependant vpn launching command. It will          look for openvpn in the regular paths and algo in @@ -780,14 +787,20 @@ class WindowsVPNLauncher(VPNLauncher):          :param eipconfig: eip configuration object          :type eipconfig: EIPConfig +          :param providerconfig: provider specific configuration          :type providerconfig: ProviderConfig +          :param socket_host: either socket path (unix) or socket IP          :type socket_host: str +          :param socket_port: either string "unix" if it's a unix          socket, or port otherwise          :type socket_port: str +        :param openvpn_verb: the openvpn verbosity wanted +        :type openvpn_verb: int +          :return: A VPN command ready to be launched          :rtype: list          """ @@ -810,8 +823,7 @@ class WindowsVPNLauncher(VPNLauncher):          openvpn = first(openvpn_possibilities)          args = [] - -        # TODO: handle verbosity +        args += ['--verb', '%d' % (openvpn_verb,)]          gateway_selector = VPNGatewaySelector(eipconfig)          gateways = gateway_selector.get_gateways() diff --git a/src/leap/services/eip/vpnprocess.py b/src/leap/services/eip/vpnprocess.py index c4bdb30c..5b07a3cf 100644 --- a/src/leap/services/eip/vpnprocess.py +++ b/src/leap/services/eip/vpnprocess.py @@ -80,7 +80,9 @@ class VPN(object):      TERMINATE_MAXTRIES = 10      TERMINATE_WAIT = 1  # secs -    def __init__(self): +    OPENVPN_VERB = "openvpn_verb" + +    def __init__(self, **kwargs):          """          Instantiate empty attributes and get a copy          of a QObject containing the QSignals that we will pass along @@ -92,6 +94,8 @@ class VPN(object):          self._reactor = reactor          self._qtsigs = VPNSignals() +        self._openvpn_verb = kwargs.get(self.OPENVPN_VERB, None) +      @property      def qtsigs(self):          return self._qtsigs @@ -108,9 +112,12 @@ class VPN(object):          """          self._stop_pollers()          kwargs['qtsigs'] = self.qtsigs +        kwargs['openvpn_verb'] = self._openvpn_verb          # start the main vpn subprocess          vpnproc = VPNProcess(*args, **kwargs) +                             #qtsigs=self.qtsigs, +                             #openvpn_verb=self._openvpn_verb)          if vpnproc.get_openvpn_process():              logger.info("Another vpn process is running. Will try to stop it.") @@ -566,7 +573,12 @@ class VPNManager(object):                  # we should check that cmdline BEGINS                  # with openvpn or with our wrapper                  # (pkexec / osascript / whatever) -                if "openvpn" in ' '.join(p.cmdline): + +                # This needs more work, see #3268, but for the moment +                # we need to be able to filter out arguments in the form +                # --openvpn-foo, since otherwise we are shooting ourselves +                # in the feet. +                if any(map(lambda s: s.startswith("openvpn"), p.cmdline)):                      openvpn_process = p                      break              except psutil.error.AccessDenied: @@ -645,7 +657,7 @@ class VPNProcess(protocol.ProcessProtocol, VPNManager):      """      def __init__(self, eipconfig, providerconfig, socket_host, socket_port, -                 qtsigs): +                 qtsigs, openvpn_verb):          """          :param eipconfig: eip configuration object          :type eipconfig: EIPConfig @@ -663,6 +675,10 @@ class VPNProcess(protocol.ProcessProtocol, VPNManager):          :param qtsigs: a QObject containing the Qt signals used to notify the                         UI.          :type qtsigs: QObject + +        :param openvpn_verb: the desired level of verbosity in the +                             openvpn invocation +        :type openvpn_verb: int          """          VPNManager.__init__(self, qtsigs=qtsigs)          leap_assert_type(eipconfig, EIPConfig) @@ -682,6 +698,8 @@ class VPNProcess(protocol.ProcessProtocol, VPNManager):          self._last_status = None          self._alive = False +        self._openvpn_verb = openvpn_verb +      # processProtocol methods      def connectionMade(self): @@ -757,7 +775,8 @@ class VPNProcess(protocol.ProcessProtocol, VPNManager):              eipconfig=self._eipconfig,              providerconfig=self._providerconfig,              socket_host=self._socket_host, -            socket_port=self._socket_port) +            socket_port=self._socket_port, +            openvpn_verb=self._openvpn_verb)          return map(str, cmd)      # shutdown | 
