Uses the infrastructure provided and used in the previous patch to provide deferral support to the v1 client-connect plugin handler as well.
Signed-off-by: Fabian Knittel <fabian.knit...@lettink.de> --- src/openvpn/multi.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c index 68a7248..ab73034 100644 --- a/src/openvpn/multi.c +++ b/src/openvpn/multi.c @@ -1814,6 +1814,7 @@ multi_client_connect_call_plugin_v1 (struct multi_context *m, { enum client_connect_return ret = CC_RET_SKIPPED; #ifdef ENABLE_PLUGIN + struct client_connect_state *ccs = mi->client_connect_state; ASSERT (m); ASSERT (mi); ASSERT (option_types_found); @@ -1821,34 +1822,41 @@ multi_client_connect_call_plugin_v1 (struct multi_context *m, if (plugin_defined (mi->context.plugins, OPENVPN_PLUGIN_CLIENT_CONNECT)) { int plug_ret; - struct gc_arena gc = gc_new (); struct argv argv = argv_new (); - const char *dc_file = create_temp_file (mi->context.options.tmp_dir, "cc", &gc); - if (!dc_file) + if (!ccs_gen_config_file (mi) || + !ccs_gen_deferred_ret_file (mi)) { ret = CC_RET_FAILED; - goto script_depr_failed; + goto cleanup; } - argv_printf (&argv, "%s", dc_file); + argv_printf (&argv, "%s", ccs->config_file); plug_ret = plugin_call (mi->context.plugins, OPENVPN_PLUGIN_CLIENT_CONNECT, &argv, NULL, mi->context.c2.es); argv_reset (&argv); - if (plug_ret != OPENVPN_PLUGIN_FUNC_SUCCESS) + if (plug_ret == OPENVPN_PLUGIN_FUNC_SUCCESS) + { + multi_client_connect_post (m, mi, ccs->config_file, + option_types_found); + ret = CC_RET_SUCCEEDED; + } + else if (plug_ret == OPENVPN_PLUGIN_FUNC_DEFERRED) + ret = CC_RET_DEFERRED; + else { msg (M_WARN, "WARNING: client-connect plugin call failed"); ret = CC_RET_FAILED; } - else + +cleanup: + if (ret != CC_RET_DEFERRED) { - multi_client_connect_post (m, mi, dc_file, option_types_found); - ret = CC_RET_SUCCEEDED; + ccs_delete_config_file (mi); + ccs_delete_deferred_ret_file (mi); } -script_depr_failed: - gc_free (&gc); } #endif return ret; @@ -2141,7 +2149,7 @@ static const struct client_connect_handlers client_connect_handlers[] = { }, { main: multi_client_connect_call_plugin_v1, - deferred: multi_client_connect_fail + deferred: multi_client_handle_deferred }, { main: multi_client_connect_call_plugin_v2, -- 2.1.4