summaryrefslogtreecommitdiffstats
path: root/init.c
diff options
context:
space:
mode:
authorjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2005-10-04 11:51:44 +0000
committerjames <james@e7ae566f-a301-0410-adde-c780ea21d3b5>2005-10-04 11:51:44 +0000
commite1791bb11ae85366dfb4d0173a8d7b5751a7a407 (patch)
tree69539ecf35a7fa509aa8cef03175a62e2297c5e3 /init.c
parent059e0dc5d403939a9bf98563c41173f2616f777d (diff)
downloadopenvpn-e1791bb11ae85366dfb4d0173a8d7b5751a7a407.tar.gz
openvpn-e1791bb11ae85366dfb4d0173a8d7b5751a7a407.tar.xz
openvpn-e1791bb11ae85366dfb4d0173a8d7b5751a7a407.zip
Added support for openvpn_plugin_select_initialization_point_v1
2.1_beta1 git-svn-id: http://svn.openvpn.net/projects/openvpn/branches/BETA21/openvpn@591 e7ae566f-a301-0410-adde-c780ea21d3b5
Diffstat (limited to 'init.c')
-rw-r--r--init.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/init.c b/init.c
index f537668..f6e125c 100644
--- a/init.c
+++ b/init.c
@@ -2119,16 +2119,25 @@ do_signal_on_tls_errors (struct context *c)
#ifdef ENABLE_PLUGIN
void
-open_plugins (struct context *c, const bool import_options)
+init_plugins (struct context *c)
{
if (c->options.plugin_list && !c->plugins)
{
+ c->plugins = plugin_list_init (c->options.plugin_list);
+ c->plugins_owned = true;
+ }
+}
+
+void
+open_plugins (struct context *c, const bool import_options, int init_point)
+{
+ if (c->plugins && c->plugins_owned)
+ {
if (import_options)
{
struct plugin_return pr, config;
plugin_return_init (&pr);
- c->plugins = plugin_list_open (c->options.plugin_list, &pr, c->c2.es);
- c->plugins_owned = true;
+ plugin_list_open (c->plugins, c->options.plugin_list, &pr, c->c2.es, init_point);
plugin_return_get_column (&pr, &config, "config");
if (plugin_return_defined (&config))
{
@@ -2149,8 +2158,7 @@ open_plugins (struct context *c, const bool import_options)
}
else
{
- c->plugins = plugin_list_open (c->options.plugin_list, NULL, c->c2.es);
- c->plugins_owned = true;
+ plugin_list_open (c->plugins, c->options.plugin_list, NULL, c->c2.es, init_point);
}
}
}
@@ -2360,7 +2368,7 @@ init_instance (struct context *c, const struct env_set *env, const unsigned int
#ifdef ENABLE_PLUGIN
/* initialize plugins */
if (c->mode == CM_P2P || c->mode == CM_TOP)
- open_plugins (c, false);
+ open_plugins (c, false, OPENVPN_PLUGIN_INIT_PRE_DAEMON);
#endif
/* should we enable fast I/O? */
@@ -2464,6 +2472,12 @@ init_instance (struct context *c, const struct env_set *env, const unsigned int
/* do one-time inits, and possibily become a daemon here */
do_init_first_time (c);
+#ifdef ENABLE_PLUGIN
+ /* initialize plugins */
+ if (c->mode == CM_P2P || c->mode == CM_TOP)
+ open_plugins (c, false, OPENVPN_PLUGIN_INIT_POST_DAEMON);
+#endif
+
/*
* Actually do UID/GID downgrade, and chroot, if requested.
* May be delayed by --client, --pull, or --up-delay.
@@ -2478,6 +2492,12 @@ init_instance (struct context *c, const struct env_set *env, const unsigned int
if (c->mode == CM_P2P || child)
do_init_timers (c, false);
+#ifdef ENABLE_PLUGIN
+ /* initialize plugins */
+ if (c->mode == CM_P2P || c->mode == CM_TOP)
+ open_plugins (c, false, OPENVPN_PLUGIN_INIT_POST_UID_CHANGE);
+#endif
+
/* Check for signals */
if (IS_SIG (c))
goto sig;