5
5
* packet encryption, packet authentication, and
6
6
* packet compression.
8
* Copyright (C) 2002-2008 OpenVPN Solutions LLC <info@openvpn.net>
8
* Copyright (C) 2002-2008 Telethra, Inc. <sales@openvpn.net>
10
10
* This program is free software; you can redistribute it and/or modify
11
11
* it under the terms of the GNU General Public License version 2
86
86
if (plugin_defined (plugins, OPENVPN_PLUGIN_LEARN_ADDRESS))
88
struct buffer cmd = alloc_buf_gc (256, &gc);
90
buf_printf (&cmd, "\"%s\" \"%s\"",
92
mroute_addr_print (addr, &gc));
88
struct argv argv = argv_new ();
89
argv_printf (&argv, "%s %s",
91
mroute_addr_print (addr, &gc));
94
buf_printf (&cmd, " \"%s\"", tls_common_name (mi->context.c2.tls_multi, false));
96
if (plugin_call (plugins, OPENVPN_PLUGIN_LEARN_ADDRESS, BSTR (&cmd), NULL, es) != OPENVPN_PLUGIN_FUNC_SUCCESS)
93
argv_printf_cat (&argv, "%s", tls_common_name (mi->context.c2.tls_multi, false));
94
if (plugin_call (plugins, OPENVPN_PLUGIN_LEARN_ADDRESS, &argv, NULL, es) != OPENVPN_PLUGIN_FUNC_SUCCESS)
98
96
msg (M_WARN, "WARNING: learn-address plugin call failed");
103
102
if (m->top.options.learn_address_script)
105
struct buffer cmd = alloc_buf_gc (256, &gc);
104
struct argv argv = argv_new ();
107
105
setenv_str (es, "script_type", "learn-address");
109
buf_printf (&cmd, "%s \"%s\" \"%s\"",
110
m->top.options.learn_address_script,
112
mroute_addr_print (addr, &gc));
106
argv_printf (&argv, "%s %s %s",
107
m->top.options.learn_address_script,
109
mroute_addr_print (addr, &gc));
114
buf_printf (&cmd, " \"%s\"", tls_common_name (mi->context.c2.tls_multi, false));
116
if (!system_check (BSTR (&cmd), es, S_SCRIPT, "WARNING: learn-address command failed"))
111
argv_printf_cat (&argv, "%s", tls_common_name (mi->context.c2.tls_multi, false));
112
if (!openvpn_execve_check (&argv, es, S_SCRIPT, "WARNING: learn-address command failed"))
475
472
if (mi->context.options.client_disconnect_script)
477
struct gc_arena gc = gc_new ();
478
struct buffer cmd = alloc_buf_gc (256, &gc);
474
struct argv argv = argv_new ();
480
475
setenv_str (mi->context.c2.es, "script_type", "client-disconnect");
482
buf_printf (&cmd, "%s", mi->context.options.client_disconnect_script);
484
system_check (BSTR (&cmd), mi->context.c2.es, S_SCRIPT, "client-disconnect command failed");
476
argv_printf (&argv, "%s", mi->context.options.client_disconnect_script);
477
openvpn_execve_check (&argv, mi->context.c2.es, S_SCRIPT, "client-disconnect command failed");
488
480
#ifdef MANAGEMENT_DEF_AUTH
1523
1515
/* deprecated callback, use a file for passing back return info */
1524
1516
if (plugin_defined (mi->context.plugins, OPENVPN_PLUGIN_CLIENT_CONNECT))
1518
struct argv argv = argv_new ();
1526
1519
const char *dc_file = create_temp_filename (mi->context.options.tmp_dir, "cc", &gc);
1520
argv_printf (&argv, "%s", dc_file);
1528
1521
delete_file (dc_file);
1530
if (plugin_call (mi->context.plugins, OPENVPN_PLUGIN_CLIENT_CONNECT, dc_file, NULL, mi->context.c2.es) != OPENVPN_PLUGIN_FUNC_SUCCESS)
1522
if (plugin_call (mi->context.plugins, OPENVPN_PLUGIN_CLIENT_CONNECT, &argv, NULL, mi->context.c2.es) != OPENVPN_PLUGIN_FUNC_SUCCESS)
1532
1524
msg (M_WARN, "WARNING: client-connect plugin call failed");
1533
1525
cc_succeeded = false;
1567
1560
if (mi->context.options.client_connect_script && cc_succeeded)
1569
struct buffer cmd = alloc_buf_gc (256, &gc);
1562
struct argv argv = argv_new ();
1570
1563
const char *dc_file = NULL;
1572
1565
setenv_str (mi->context.c2.es, "script_type", "client-connect");
1576
1569
delete_file (dc_file);
1578
buf_printf (&cmd, "%s %s",
1579
mi->context.options.client_connect_script,
1571
argv_printf (&argv, "%s %s",
1572
mi->context.options.client_connect_script,
1582
if (system_check (BSTR (&cmd), mi->context.c2.es, S_SCRIPT, "client-connect command failed"))
1575
if (openvpn_execve_check (&argv, mi->context.c2.es, S_SCRIPT, "client-connect command failed"))
1584
1577
multi_client_connect_post (m, mi, dc_file, option_permissions_mask, &option_types_found);
1585
1578
++cc_succeeded_count;
1588
1581
cc_succeeded = false;