| Message ID | 1530581086-7825-1-git-send-email-selva.nair@gmail.com |
|---|---|
| State | Superseded |
| Headers |
Return-Path: <openvpn-devel-bounces@lists.sourceforge.net> Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director10.mail.ord1d.rsapps.net ([172.30.191.6]) by backend30.mail.ord1d.rsapps.net (Dovecot) with LMTP id +xrqEbvQOlueGgAAIUCqbw for <patchwork@openvpn.net>; Mon, 02 Jul 2018 21:26:19 -0400 Received: from proxy19.mail.ord1d.rsapps.net ([172.30.191.6]) by director10.mail.ord1d.rsapps.net (Dovecot) with LMTP id P+QKAbvQOltfeQAApN4f7A ; Mon, 02 Jul 2018 21:26:19 -0400 Received: from smtp27.gate.ord1d ([172.30.191.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy19.mail.ord1d.rsapps.net with LMTP id qHVnEbvQOlu2EQAAyH2SIw ; Mon, 02 Jul 2018 21:26:19 -0400 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp27.gate.ord1d.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: 15f13942-7e60-11e8-80af-5254003773d7-1-1 Received: from [216.105.38.7] ([216.105.38.7:42485] helo=lists.sourceforge.net) by smtp27.gate.ord1d.rsapps.net (envelope-from <openvpn-devel-bounces@lists.sourceforge.net>) (ecelerity 4.2.1.56364 r(Core:4.2.1.14)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 1A/E2-19975-AB0DA3B5; Mon, 02 Jul 2018 21:26:19 -0400 Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.90_1) (envelope-from <openvpn-devel-bounces@lists.sourceforge.net>) id 1faA3w-0004yn-HR; Tue, 03 Jul 2018 01:25:00 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.90_1) (envelope-from <selva.nair@gmail.com>) id 1faA3u-0004yb-Vi for openvpn-devel@lists.sourceforge.net; Tue, 03 Jul 2018 01:24:59 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=s2N9ZxuAl1i+WHY2+jdxJLXVTDME1i4ijOY2iDFgSvM=; b=C49CSXaozwLwf6gq+oJwzL+8xJ TWUh+/Jk7DZXiLOl2zTAF4dnlnvucptKukRphHFXn5sm2IqUNfYaU7YmY7DJM4NyU7Xk05LkW7mlP /M3nd9pvcSWvkj6BMXXuf1aWQtBpJl1ek+0PBj581Qjy5BAqpUsXJ/ShmoOP/UxY+ekQ=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:MIME-Version: Content-Type:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=s2N9ZxuAl1i+WHY2+jdxJLXVTDME1i4ijOY2iDFgSvM=; b=lSiFiSPaao96bqu7il9z3D4yCV DboRBuZZNEikFwb+RwMDrn3H+VnSoVROUNVy02wTG6TMfQ2FFn5RGoPAKFjWCiWGyM7Q0G1pnrc0v W8MkKIiMEEmus1kW4QhcFxq8yomPe6+zPLXwth49aK78pkA/iqd8vTWDXvs2m/m+MdKg=; Received: from mail-io0-f178.google.com ([209.85.223.178]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) id 1faA3t-00FHUU-5A for openvpn-devel@lists.sourceforge.net; Tue, 03 Jul 2018 01:24:58 +0000 Received: by mail-io0-f178.google.com with SMTP id z19-v6so256805ioh.4 for <openvpn-devel@lists.sourceforge.net>; Mon, 02 Jul 2018 18:24:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=s2N9ZxuAl1i+WHY2+jdxJLXVTDME1i4ijOY2iDFgSvM=; b=BqYNmgBVNcB7u1ewg6+1YZJi7rlxNSXL/aOq0Lq4wLHsqbcfHFeE0ggILc+GGLkoPV aUJa69NH/j9G8tL4qftA/VSWkXaTq+Ahz/aynyNIXZykY+RyYIUq5MbI2Tjm8sNV4GqY wYk5sytElIf1mphASVusPJhPo+LJUE2MjxT7J0VTSFr2DXoJhzp/O5Lq5GMjf5Ni/1tr hUFFAYNIMt0XAO6HkfucIKbaLFcGU32xGJ178BALOmi3iJFvo17t+RzGF+L+mp08YKh6 Ebf1VPZaEpdKfcbkvjIQA/Gf+pwV98H+8TNgNWRWdR6r44YFJL8F/p8hJBVpbnu/Mc8G mt8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=s2N9ZxuAl1i+WHY2+jdxJLXVTDME1i4ijOY2iDFgSvM=; b=LOdQWw+VmwRXe4QXZyf66cnTenAUZ4JGmUzLy7+pLo5mGyADvsl/U5p+/1mHztrYUn eb07O0+/O4Sw6eGdxOKoMp5SVspp1FtL4hM799B0DkVZDSAr6Dv493INYVvAnNKny6lT 3vU3jPTSGopY4qZr2fwmIRXlkWgfsxO2Kj/0LoBXm5u5rdYKqtepX98V9qTLY84MDP68 OY9MAesTCgLYUTGTF93tFNB5q/ZscCLUuvxGnjXQikqYm/LsCAc+ObqWEMpjV8EDrG/7 /nXRqPtXtUBs/xCUGiBwcWfZXdGbvULiXtcjTo0O6UV/1a3sYuv0rsT6NgBOcph+Qosb rGKA== X-Gm-Message-State: APt69E01zZRqO6G7AuuXaJhGdojqChlmC0E8o4A79VqMeq+orYFi7dDz iOqqycmSQQIeCFH17bmI5FCU7vys X-Google-Smtp-Source: AAOMgpcNLXHHQ9HkmklxMCKS+FS5P/+xE35+8fNpj2RP+/mWxHLAhmuRUPGK3+8eYD8kOYUVBkKvdg== X-Received: by 2002:a6b:f711:: with SMTP id k17-v6mr22315948iog.219.1530581091279; Mon, 02 Jul 2018 18:24:51 -0700 (PDT) Received: from saturn.home.sansel.ca (CPE40167ea0e1c2-CM788df74daaa0.cpe.net.cable.rogers.com. [99.228.215.92]) by smtp.gmail.com with ESMTPSA id 185-v6sm94395itl.29.2018.07.02.18.24.49 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 02 Jul 2018 18:24:50 -0700 (PDT) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Mon, 2 Jul 2018 21:24:46 -0400 Message-Id: <1530581086-7825-1-git-send-email-selva.nair@gmail.com> X-Mailer: git-send-email 2.1.4 X-Spam-Report: Spam Filtering performed by mx.sourceforge.net. See http://spamassassin.org/tag/ for more details. 2.4 DNS_FROM_AHBL_RHSBL RBL: Envelope sender listed in dnsbl.ahbl.org [listed in gmail.com.rhsbl.ahbl.org. IN] [A] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (selva.nair[at]gmail.com) -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [209.85.223.178 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1faA3t-00FHUU-5A Subject: [Openvpn-devel] [PATCH] Make up/down script errors not FATAL X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: <openvpn-devel.lists.sourceforge.net> List-Unsubscribe: <https://lists.sourceforge.net/lists/options/openvpn-devel>, <mailto:openvpn-devel-request@lists.sourceforge.net?subject=unsubscribe> List-Archive: <http://sourceforge.net/mailarchive/forum.php?forum_name=openvpn-devel> List-Post: <mailto:openvpn-devel@lists.sourceforge.net> List-Help: <mailto:openvpn-devel-request@lists.sourceforge.net?subject=help> List-Subscribe: <https://lists.sourceforge.net/lists/listinfo/openvpn-devel>, <mailto:openvpn-devel-request@lists.sourceforge.net?subject=subscribe> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox |
| Series |
[Openvpn-devel] Make up/down script errors not FATAL
|
|
Commit Message
Selva Nair
July 2, 2018, 3:24 p.m. UTC
From: Selva Nair <selva.nair@gmail.com> Instead log only a warning. This helps user interfaces enforce a safer script-security setting without causing a FATAL error. Signed-off-by: Selva Nair <selva.nair@gmail.com> --- Note: All other scripts are called with flag = 0 and will only trigger a warning message if openvpn_execve fails. src/openvpn/init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
Comments
Hi. On Mon, Jul 2, 2018 at 9:24 PM, <selva.nair@gmail.com> wrote: > > From: Selva Nair <selva.nair@gmail.com> > > Instead log only a warning. > > This helps user interfaces enforce a safer script-security setting > without causing a FATAL error. Can you expand on that? What "safer script secuity settings' do you have in mind? Tunnelblick (and I think all Linux) use script-security 2 to allow for up/down scripts that implement DNS and other settings. My initial reaction is that I'd rather a problem in the up/down scripts generates a fatal error, so if there's a problem in the Tunnelblick scripts somebody will report it. In my experience, almost nobody pays attention to warnings, and mostly, those who do are worried about warning that don't matter. Best regards, Jon Bullard ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Hi Jon, On Mon, Jul 2, 2018 at 11:13 PM, Jonathan K. Bullard <jkbullard@gmail.com> wrote: > Hi. > > On Mon, Jul 2, 2018 at 9:24 PM, <selva.nair@gmail.com> wrote: >> >> From: Selva Nair <selva.nair@gmail.com> >> >> Instead log only a warning. >> >> This helps user interfaces enforce a safer script-security setting >> without causing a FATAL error. > > > Can you expand on that? What "safer script secuity settings' do you > have in mind? Tunnelblick (and I think all Linux) use script-security > 2 to allow for up/down scripts that implement DNS and other settings. > > My initial reaction is that I'd rather a problem in the up/down > scripts generates a fatal error, so if there's a problem in the > Tunnelblick scripts somebody will report it. In my experience, almost > nobody pays attention to warnings, and mostly, those who do are > worried about warning that don't matter. This is in reaction to https://medium.com/tenable-techblog/reverse-shell-from-an- openvpn-configuration-file-73fd8b1d38da In OpenVPN Windows GUI I'm considering to enforce "--script-security 1" (SSEC_BUILT_IN). See the discussion here: https://github.com/OpenVPN/openvpn-gui/issues/270 Selva <div dir="ltr">Hi Jon,<br><br>On Mon, Jul 2, 2018 at 11:13 PM, Jonathan K. Bullard <<a href="mailto:jkbullard@gmail.com" target="_blank">jkbullard@gmail.com</a>> wrote:<br>> Hi.<br>><br>> On Mon, Jul 2, 2018 at 9:24 PM, <<a href="mailto:selva.nair@gmail.com" target="_blank">selva.nair@gmail.com</a>> wrote:<br>>><br>>> From: Selva Nair <<a href="mailto:selva.nair@gmail.com" target="_blank">selva.nair@gmail.com</a>><br>>><br>>> Instead log only a warning.<br>>><br>>> This helps user interfaces enforce a safer script-security setting<br>>> without causing a FATAL error.<br>><br>><br>> Can you expand on that? What "safer script secuity settings' do you<br>> have in mind? Tunnelblick (and I think all Linux) use script-security<br>> 2 to allow for up/down scripts that implement DNS and other settings.<br>><br>> My initial reaction is that I'd rather a problem in the up/down<br>> scripts generates a fatal error, so if there's a problem in the<br>> Tunnelblick scripts somebody will report it. In my experience, almost<br>> nobody pays attention to warnings, and mostly, those who do are<br>> worried about warning that don't matter.<br><br>This is in reaction to<br><br><a href="https://medium.com/tenable-techblog/reverse-shell-from-an-openvpn-configuration-file-73fd8b1d38da" target="_blank">https://medium.com/tenable-tec<wbr>hblog/reverse-shell-from-an-<wbr>openvpn-configuration-file-73f<wbr>d8b1d38da</a><br><br>In OpenVPN Windows GUI I'm considering to enforce "--script-security 1" (SSEC_BUILT_IN). See the discussion here:<br><br><a href="https://github.com/OpenVPN/openvpn-gui/issues/270" target="_blank">https://github.com/OpenVPN/ope<wbr>nvpn-gui/issues/270</a><div><br><div>Selva</div></div></div> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
Hi, On Mon, Jul 02, 2018 at 11:13:01PM -0400, Jonathan K. Bullard wrote: > My initial reaction is that I'd rather a problem in the up/down > scripts generates a fatal error, so if there's a problem in the > Tunnelblick scripts somebody will report it. In my experience, almost > nobody pays attention to warnings, and mostly, those who do are > worried about warning that don't matter. From how I read Selva's mail, an error in the script will still create a fatal error. The difference is that today, if you have --script-security 1 and a --up config, that combination will cause an error, while after the change, this will only cause a warning. Selva, did I read that correctly? gert
On 03/07/18 09:49, Selva Nair wrote: > Hi Jon, > > On Mon, Jul 2, 2018 at 11:13 PM, Jonathan K. Bullard <jkbullard@gmail.com > <mailto:jkbullard@gmail.com>> wrote: >> Hi. >> >> On Mon, Jul 2, 2018 at 9:24 PM, <selva.nair@gmail.com > <mailto:selva.nair@gmail.com>> wrote: >>> >>> From: Selva Nair <selva.nair@gmail.com <mailto:selva.nair@gmail.com>> >>> >>> Instead log only a warning. >>> >>> This helps user interfaces enforce a safer script-security setting >>> without causing a FATAL error. >> >> >> Can you expand on that? What "safer script secuity settings' do you >> have in mind? Tunnelblick (and I think all Linux) use script-security >> 2 to allow for up/down scripts that implement DNS and other settings. >> >> My initial reaction is that I'd rather a problem in the up/down >> scripts generates a fatal error, so if there's a problem in the >> Tunnelblick scripts somebody will report it. In my experience, almost >> nobody pays attention to warnings, and mostly, those who do are >> worried about warning that don't matter. +1 > > This is in reaction to > > https://medium.com/tenable-techblog/reverse-shell-from-an-openvpn-configuration-file-73fd8b1d38da > <https://medium.com/tenable-techblog/reverse-shell-from-an-openvpn-configuration-file-73fd8b1d38da> > > In OpenVPN Windows GUI I'm considering to enforce "--script-security 1" > (SSEC_BUILT_IN). See the discussion here: > > https://github.com/OpenVPN/openvpn-gui/issues/270 This I am much more in favour of. I've already added a longer GitHub comment with a bit different perspective, as well as looking more into the future of what we're doing with OpenVPN 3 - where OpenVPN processes generally will not run any scripts or even support it. TL;DR: Reduce the possibility to run scripts to an absolute minimum (if at all). If having this possibility run them with as few privileges as possible, and scripts to run is preferred to be configured outside of the OpenVPN configuration file. The latter argument of configuring scripts outside of the configuration file is simply trying to end up with a single configuration file which would be functional on all devices. A configuration file with Windows scripts won't work on a non-Windows box and vice versa - some configuration files might not even work across Linux distributions even. So let the OpenVPN configuration files be as generic as possible, focusing on getting a connection to a remote server. And configure the rest outside of the OpenVPN configuration profile.
Hi, On 03/07/18 16:23, David Sommerseth wrote: > TL;DR: Reduce the possibility to run scripts to an absolute minimum (if at > all). If having this possibility run them with as few privileges as possible, > and scripts to run is preferred to be configured outside of the OpenVPN > configuration file. > > The latter argument of configuring scripts outside of the configuration file > is simply trying to end up with a single configuration file which would be > functional on all devices. A configuration file with Windows scripts won't > work on a non-Windows box and vice versa - some configuration files might not > even work across Linux distributions even. So let the OpenVPN configuration > files be as generic as possible, focusing on getting a connection to a remote > server. And configure the rest outside of the OpenVPN configuration profile. > I have previously proposed to use an udev-compatible mechanism to run scripts. In this scenario OpenVPN only needs to trigger "signals" and then whoever is listening (i.e. udev/hotplug) will take care of handling them. This could even be DBus driven. However, this can work on Linux. Anybody knows of a similar mechanism for Windows and macOS? Cheers,
Hi, On Tue, Jul 3, 2018 at 3:09 AM, Gert Doering <gert@greenie.muc.de> wrote: > Hi, > > On Mon, Jul 02, 2018 at 11:13:01PM -0400, Jonathan K. Bullard wrote: > > My initial reaction is that I'd rather a problem in the up/down > > scripts generates a fatal error, so if there's a problem in the > > Tunnelblick scripts somebody will report it. In my experience, almost > > nobody pays attention to warnings, and mostly, those who do are > > worried about warning that don't matter. > > From how I read Selva's mail, an error in the script will still create > a fatal error. > > The difference is that today, if you have --script-security 1 and a --up > config, that combination will cause an error, while after the change, this > will only cause a warning. > > Selva, did I read that correctly? > Unfortunately no. This patch will trigger only a warning for both a script error and inability execute the script due to script-security setting. If actual errors in up/down scripts should trigger M_FATAL, we can change the patch to just bypass the script execution if script security is < 2. It would be a bit ugly like this: - openvpn_run_script(&argv, es, 0, "--up/--down"); + openvpn_run_script(&argv, es, (script_security >= SSEC_SCRIPTS)? S_FATAL : 0, "--up/--down"); For some reason the code path involved is somewhat convoluted: First we log a warning that external scripts require script_security >= 2. But fully knowing its going to fail we still call openvpn_run_script(). The flag that say error out or warn is set in this call and script permission is checked just before executing: openvpn_run_script() --> openvpn_execve_check() --> openvpn_execve_allowed() When the latter returns an error due to script-security, openvpn_execve_check() fails with a slightly misleading message. Selva <div dir="ltr">Hi,<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 3, 2018 at 3:09 AM, Gert Doering <span dir="ltr"><<a href="mailto:gert@greenie.muc.de" target="_blank">gert@greenie.muc.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br> <span class="m_4065982707826998152gmail-"><br> On Mon, Jul 02, 2018 at 11:13:01PM -0400, Jonathan K. Bullard wrote:<br> > My initial reaction is that I'd rather a problem in the up/down<br> > scripts generates a fatal error, so if there's a problem in the<br> > Tunnelblick scripts somebody will report it. In my experience, almost<br> > nobody pays attention to warnings, and mostly, those who do are<br> > worried about warning that don't matter.<br> <br> </span>From how I read Selva's mail, an error in the script will still create<br> a fatal error. <br> <br> The difference is that today, if you have --script-security 1 and a --up <br> config, that combination will cause an error, while after the change, this <br> will only cause a warning.<br> <br> Selva, did I read that correctly?<br></blockquote><div><br></div><div>Unfortunately no. This patch will trigger only a warning for both a script error</div><div>and inability execute the script due to script-security setting.</div><div><br></div><div>If actual errors in up/down scripts should trigger M_FATAL, we can change the</div><div>patch to just bypass the script execution if script security is < 2. It would be a</div><div>bit ugly like this:</div><div><br></div><div><div>- openvpn_run_script(&argv, es, 0, "--up/--down");</div><div>+ openvpn_run_script(&argv, es, (script_security >= SSEC_SCRIPTS)? S_FATAL : 0, "--up/--down");</div></div><div><br></div><div><br></div><div>For some reason the code path involved is somewhat convoluted:</div><div><br></div><div>First we log a warning that external scripts require script_security >= 2.</div><div>But fully knowing its going to fail we still call openvpn_run_script(). The flag</div><div>that say error out or warn is set in this call and script permission is</div><div>checked just before executing:</div><div><br></div><div>openvpn_run_script() --> openvpn_execve_check() --> openvpn_execve_allowed()</div><div><br></div><div>When the latter returns an error due to script-security, openvpn_execve_check()</div><div>fails with a slightly misleading message.</div><div><br></div><div>Selva</div></div></div></div> ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot
diff --git a/src/openvpn/init.c b/src/openvpn/init.c index b748357..6673734 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -174,7 +174,7 @@ run_up_down(const char *command, argv_printf_cat(&argv, "%s %d %d %s %s %s", arg, tun_mtu, link_mtu, ifconfig_local, ifconfig_remote, context); argv_msg(M_INFO, &argv); - openvpn_run_script(&argv, es, S_FATAL, "--up/--down"); + openvpn_run_script(&argv, es, 0, "--up/--down"); argv_reset(&argv); }