summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2010-01-12 18:26:22 +0000
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2010-01-12 18:26:22 +0000
commit0c9eb1d3b3f9694c3bc3ad7cf8fdf7553789f93b (patch)
treed3a45f12f276901de60b4470b3aec7b8c4103388
parent0777d054cdd146c974e3a0b47601a61969893616 (diff)
downloadopenvpn-0c9eb1d3b3f9694c3bc3ad7cf8fdf7553789f93b.tar.gz
openvpn-0c9eb1d3b3f9694c3bc3ad7cf8fdf7553789f93b.tar.xz
openvpn-0c9eb1d3b3f9694c3bc3ad7cf8fdf7553789f93b.zip
When aborting in a non-graceful way, try to execute do_close_tun in
init.c prior to daemon exit to ensure that the tun/tap interface is closed and any added routes are deleted. git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@5367 e7ae566f-a301-0410-adde-c780ea21d3b5
-rw-r--r--error.c3
-rw-r--r--init.c16
-rw-r--r--version.m42
3 files changed, 20 insertions, 1 deletions
diff --git a/error.c b/error.c
index 1d6ed62..603796a 100644
--- a/error.c
+++ b/error.c
@@ -682,10 +682,13 @@ msg_thread_uninit (void)
void
openvpn_exit (const int status)
{
+ void tun_abort();
#ifdef ENABLE_PLUGIN
void plugin_abort (void);
#endif
+ tun_abort();
+
#ifdef WIN32
uninit_win32 ();
#endif
diff --git a/init.c b/init.c
index 20ca0a5..3748c2e 100644
--- a/init.c
+++ b/init.c
@@ -41,6 +41,8 @@
#include "occ-inline.h"
+static struct context *static_context; /* GLOBAL */
+
/*
* Crypto initialization flags
*/
@@ -1109,6 +1111,7 @@ do_open_tun (struct context *c)
SET_MTU_TUN | SET_MTU_UPPER_BOUND);
ret = true;
+ static_context = c;
}
else
{
@@ -1162,6 +1165,8 @@ do_close_tun (struct context *c, bool force)
if (force || !(c->sig->signal_received == SIGUSR1 && c->options.persist_tun))
{
+ static_context = NULL;
+
#ifdef ENABLE_MANAGEMENT
/* tell management layer we are about to close the TUN/TAP device */
if (management)
@@ -1218,6 +1223,17 @@ do_close_tun (struct context *c, bool force)
gc_free (&gc);
}
+void
+tun_abort()
+{
+ struct context *c = static_context;
+ if (c)
+ {
+ static_context = NULL;
+ do_close_tun (c, true);
+ }
+}
+
/*
* Handle delayed tun/tap interface bringup due to --up-delay or --pull
*/
diff --git a/version.m4 b/version.m4
index 48ca997..a2b40e2 100644
--- a/version.m4
+++ b/version.m4
@@ -1,5 +1,5 @@
dnl define the OpenVPN version
-define(PRODUCT_VERSION,[2.1.1])
+define(PRODUCT_VERSION,[2.1.1a])
dnl define the TAP version
define(PRODUCT_TAP_ID,[tap0901])
define(PRODUCT_TAP_WIN32_MIN_MAJOR,[9])