summaryrefslogtreecommitdiffstats
path: root/options.c
diff options
context:
space:
mode:
authorDavid Sommerseth <davids@redhat.com>2012-01-24 12:32:46 +0100
committerDavid Sommerseth <davids@redhat.com>2012-01-25 18:00:10 +0100
commit415421c24ac5b62d59fb8f03076521cba6f126cc (patch)
tree7340ff0ec74131afb722445878e2a5b667331d6a /options.c
parent62c613d46dc495d747074ca030d2cbdfd255c386 (diff)
downloadopenvpn-415421c24ac5b62d59fb8f03076521cba6f126cc.tar.gz
openvpn-415421c24ac5b62d59fb8f03076521cba6f126cc.tar.xz
openvpn-415421c24ac5b62d59fb8f03076521cba6f126cc.zip
Add --route-pre-down/OPENVPN_PLUGIN_ROUTE_PREDOWN script/plug-in hook
This patchs adds a script/plug-in hook which is called right before the network routes are taken down. This gives external processes a possibility to tear down communication over the VPN before the VPN disappears. One use case can be to mount a networked file system over the VPN via --route-up. And then to unmount this file system via --route-pre-down Signed-off-by: David Sommerseth <davids@redhat.com> Acked-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'options.c')
-rw-r--r--options.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/options.c b/options.c
index e7e6565..0fbe368 100644
--- a/options.c
+++ b/options.c
@@ -216,6 +216,7 @@ static const char usage_message[] =
" be added immediately after tun/tap open. On Windows, wait\n"
" up to w seconds for TUN/TAP adapter to come up.\n"
"--route-up cmd : Execute shell cmd after routes are added.\n"
+ "--route-pre-down cmd : Execute shell cmd before routes are removed.\n"
"--route-noexec : Don't add routes automatically. Instead pass routes to\n"
" --route-up script using environmental variables.\n"
"--route-nopull : When used with --client or --pull, accept options pushed\n"
@@ -2739,6 +2740,8 @@ options_postprocess_filechecks (struct options *options)
R_OK|X_OK, "--ipchange script");
errs |= check_file_access (CHKACC_FILE, options->route_script,
R_OK|X_OK, "--route-up script");
+ errs |= check_file_access (CHKACC_FILE, options->route_predown_script,
+ R_OK|X_OK, "--route-pre-down script");
errs |= check_file_access (CHKACC_FILE, options->learn_address_script,
R_OK|X_OK, "--learn-address script");
#endif /* P2MP_SERVER */
@@ -5217,6 +5220,14 @@ add_option (struct options *options,
warn_multiple_script (options->route_script, "route-up");
options->route_script = p[1];
}
+ else if (streq (p[0], "route-pre-down") && p[1])
+ {
+ VERIFY_PERMISSION (OPT_P_SCRIPT);
+ if (!no_more_than_n_args (msglevel, p, 2, NM_QUOTE_HINT))
+ goto err;
+ warn_multiple_script (options->route_predown_script, "route-pre-down");
+ options->route_predown_script = p[1];
+ }
else if (streq (p[0], "route-noexec"))
{
VERIFY_PERMISSION (OPT_P_SCRIPT);