diff options
author | Heiko Hund | 2016-10-28 18:42:40 +0200 |
---|---|---|
committer | Gert Doering | 2016-11-14 20:34:26 +0100 |
commit | 253609124459f8df96e059bba9c164299a32318e (patch) | |
tree | 4019da1a6f0e4a19c520ef3b77d37b8e490536b0 /src | |
parent | d6ab1dc49e5c8018f58e7c3c9fe64f4289ccc77b (diff) | |
download | openvpn-253609124459f8df96e059bba9c164299a32318e.zip openvpn-253609124459f8df96e059bba9c164299a32318e.tar.gz |
Factor out %sc handling from argv_printf()
Move functionality to parse command strings into argv_parse_cmd().
That is a preparation for the upcoming refactoring of argv_printf().
Signed-off-by: Heiko Hund <heiko.hund@sophos.com>
Acked-by: David Sommerseth <davids@redhat.com>
Message-Id: <1477672963-5724-5-git-send-email-heiko.hund@sophos.com>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg12816.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
Diffstat (limited to 'src')
-rw-r--r-- | src/openvpn/argv.c | 48 | ||||
-rw-r--r-- | src/openvpn/argv.h | 1 | ||||
-rw-r--r-- | src/openvpn/errlevel.h | 2 | ||||
-rw-r--r-- | src/openvpn/init.c | 2 | ||||
-rw-r--r-- | src/openvpn/misc.c | 10 | ||||
-rw-r--r-- | src/openvpn/multi.c | 13 | ||||
-rw-r--r-- | src/openvpn/options.c | 2 | ||||
-rw-r--r-- | src/openvpn/socket.c | 7 | ||||
-rw-r--r-- | src/openvpn/ssl_verify.c | 6 |
9 files changed, 43 insertions, 48 deletions
diff --git a/src/openvpn/argv.c b/src/openvpn/argv.c index e8bb09f..f8287b7 100644 --- a/src/openvpn/argv.c +++ b/src/openvpn/argv.c @@ -198,7 +198,6 @@ argv_msg_prefix (const int msglev, const struct argv *a, const char *prefix) static void argv_printf_arglist (struct argv *a, const char *format, va_list arglist) { - struct gc_arena gc = gc_new (); char *term; const char *f = format; @@ -215,29 +214,6 @@ argv_printf_arglist (struct argv *a, const char *format, va_list arglist) s = ""; argv_append (a, string_alloc (s, NULL)); } - else if (!strcmp (term, "%sc")) - { - char *s = va_arg (arglist, char *); - if (s) - { - int nparms; - char *parms[MAX_PARMS+1]; - int i; - - nparms = parse_line (s, parms, MAX_PARMS, "SCRIPT-ARGV", 0, D_ARGV_PARSE_CMD, &gc); - if (nparms) - { - for (i = 0; i < nparms; ++i) - argv_append (a, string_alloc (parms[i], NULL)); - } - else - argv_append (a, string_alloc (s, NULL)); - } - else - { - argv_append (a, string_alloc ("", NULL)); - } - } else if (!strcmp (term, "%d")) { char numstr[64]; @@ -295,7 +271,6 @@ argv_printf_arglist (struct argv *a, const char *format, va_list arglist) argv_append (a, term); } } - gc_free (&gc); } void @@ -316,3 +291,26 @@ argv_printf_cat (struct argv *a, const char *format, ...) argv_printf_arglist (a, format, arglist); va_end (arglist); } + +void +argv_parse_cmd (struct argv *a, const char *s) +{ + int nparms; + char *parms[MAX_PARMS + 1]; + struct gc_arena gc = gc_new (); + + argv_reset (a); + argv_extend (a, 1); /* ensure trailing NULL */ + + nparms = parse_line (s, parms, MAX_PARMS, "SCRIPT-ARGV", 0, D_ARGV_PARSE_CMD, &gc); + if (nparms) + { + int i; + for (i = 0; i < nparms; ++i) + argv_append (a, string_alloc (parms[i], NULL)); + } + else + argv_append (a, string_alloc (s, NULL)); + + gc_free (&gc); +} diff --git a/src/openvpn/argv.h b/src/openvpn/argv.h index c45bec8..9aee641 100644 --- a/src/openvpn/argv.h +++ b/src/openvpn/argv.h @@ -45,6 +45,7 @@ const char *argv_str (const struct argv *a, struct gc_arena *gc, const unsigned struct argv argv_insert_head (const struct argv *a, const char *head); void argv_msg (const int msglev, const struct argv *a); void argv_msg_prefix (const int msglev, const struct argv *a, const char *prefix); +void argv_parse_cmd (struct argv *a, const char *s); void argv_printf (struct argv *a, const char *format, ...) #ifdef __GNUC__ diff --git a/src/openvpn/errlevel.h b/src/openvpn/errlevel.h index ae1f8f4..9d56eb4 100644 --- a/src/openvpn/errlevel.h +++ b/src/openvpn/errlevel.h @@ -142,7 +142,7 @@ #define D_PS_PROXY_DEBUG LOGLEV(7, 70, M_DEBUG) /* port share proxy debug */ #define D_AUTO_USERID LOGLEV(7, 70, M_DEBUG) /* AUTO_USERID debugging */ #define D_TLS_KEYSELECT LOGLEV(7, 70, M_DEBUG) /* show information on key selection for data channel */ -#define D_ARGV_PARSE_CMD LOGLEV(7, 70, M_DEBUG) /* show parse_line() errors in argv_printf %sc */ +#define D_ARGV_PARSE_CMD LOGLEV(7, 70, M_DEBUG) /* show parse_line() errors in argv_parse_cmd */ #define D_CRYPTO_DEBUG LOGLEV(7, 70, M_DEBUG) /* show detailed info from crypto.c routines */ #define D_PID_DEBUG LOGLEV(7, 70, M_DEBUG) /* show packet-id debugging info */ #define D_PF_DROPPED_BCAST LOGLEV(7, 71, M_DEBUG) /* packet filter dropped a broadcast packet */ diff --git a/src/openvpn/init.c b/src/openvpn/init.c index 1a9340c..d3cf7ab 100644 --- a/src/openvpn/init.c +++ b/src/openvpn/init.c @@ -1350,7 +1350,7 @@ do_route (const struct options *options, { struct argv argv = argv_new (); setenv_str (es, "script_type", "route-up"); - argv_printf (&argv, "%sc", options->route_script); + argv_parse_cmd (&argv, options->route_script); openvpn_run_script (&argv, es, 0, "--route-up"); argv_reset (&argv); } diff --git a/src/openvpn/misc.c b/src/openvpn/misc.c index 3d40f0b..bc8b33c 100644 --- a/src/openvpn/misc.c +++ b/src/openvpn/misc.c @@ -120,13 +120,9 @@ run_up_down (const char *command, struct argv argv = argv_new (); ASSERT (arg); setenv_str (es, "script_type", script_type); - argv_printf (&argv, - "%sc %s %d %d %s %s %s", - command, - arg, - tun_mtu, link_mtu, - ifconfig_local, ifconfig_remote, - context); + argv_parse_cmd (&argv, command); + argv_printf_cat (&argv, "%s %d %d %s %s %s", arg, tun_mtu, link_mtu, + ifconfig_local, ifconfig_remote, context); argv_msg (M_INFO, &argv); openvpn_run_script (&argv, es, S_FATAL, "--up/--down"); argv_reset (&argv); diff --git a/src/openvpn/multi.c b/src/openvpn/multi.c index dc4cff4..b497f6a 100644 --- a/src/openvpn/multi.c +++ b/src/openvpn/multi.c @@ -126,10 +126,8 @@ learn_address_script (const struct multi_context *m, { struct argv argv = argv_new (); setenv_str (es, "script_type", "learn-address"); - argv_printf (&argv, "%sc %s %s", - m->top.options.learn_address_script, - op, - mroute_addr_print (addr, &gc)); + argv_parse_cmd (&argv, m->top.options.learn_address_script); + argv_printf_cat (&argv, "%s %s", op, mroute_addr_print (addr, &gc)); if (mi) argv_printf_cat (&argv, "%s", tls_common_name (mi->context.c2.tls_multi, false)); if (!openvpn_run_script (&argv, es, 0, "--learn-address")) @@ -545,7 +543,7 @@ multi_client_disconnect_script (struct multi_context *m, { struct argv argv = argv_new (); setenv_str (mi->context.c2.es, "script_type", "client-disconnect"); - argv_printf (&argv, "%sc", mi->context.options.client_disconnect_script); + argv_parse_cmd (&argv, mi->context.options.client_disconnect_script); openvpn_run_script (&argv, mi->context.c2.es, 0, "--client-disconnect"); argv_reset (&argv); } @@ -1834,9 +1832,8 @@ multi_connection_established (struct multi_context *m, struct multi_instance *mi goto script_failed; } - argv_printf (&argv, "%sc %s", - mi->context.options.client_connect_script, - dc_file); + argv_parse_cmd (&argv, mi->context.options.client_connect_script); + argv_printf_cat (&argv, "%s", dc_file); if (openvpn_run_script (&argv, mi->context.c2.es, 0, "--client-connect")) { diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 5a5e7ef..1b9294a 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -2796,7 +2796,7 @@ check_cmd_access(const char *command, const char *opt, const char *chroot) /* Extract executable path and arguments */ argv = argv_new (); - argv_printf (&argv, "%sc", command); + argv_parse_cmd (&argv, command); /* if an executable is specified then check it; otherwise, complain */ if (argv.argv[0]) diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c index 1fbb415..a9aaa2a 100644 --- a/src/openvpn/socket.c +++ b/src/openvpn/socket.c @@ -2023,9 +2023,10 @@ ipchange_fmt (const bool include_cmd, struct argv *argv, const struct link_socke { const char *host = print_sockaddr_ex (&info->lsa->actual.dest.addr.sa, " ", PS_SHOW_PORT , gc); if (include_cmd) - argv_printf (argv, "%sc %s", - info->ipchange_command, - host); + { + argv_parse_cmd (argv, info->ipchange_command); + argv_printf_cat (argv, "%s", host); + } else argv_printf (argv, "%s", host); diff --git a/src/openvpn/ssl_verify.c b/src/openvpn/ssl_verify.c index 99a2f70..0b45972 100644 --- a/src/openvpn/ssl_verify.c +++ b/src/openvpn/ssl_verify.c @@ -516,7 +516,8 @@ verify_cert_call_command(const char *verify_command, struct env_set *es, } } - argv_printf (&argv, "%sc %d %s", verify_command, cert_depth, subject); + argv_parse_cmd (&argv, verify_command); + argv_printf_cat (&argv, "%d %s", cert_depth, subject); argv_msg_prefix (D_TLS_DEBUG, &argv, "TLS: executing verify command"); ret = openvpn_run_script (&argv, es, 0, "--tls-verify script"); @@ -983,7 +984,8 @@ verify_user_pass_script (struct tls_session *session, const struct user_pass *up setenv_untrusted (session); /* format command line */ - argv_printf (&argv, "%sc %s", session->opt->auth_user_pass_verify_script, tmp_file); + argv_parse_cmd (&argv, session->opt->auth_user_pass_verify_script); + argv_printf_cat (&argv, "%s", tmp_file); /* call command */ ret = openvpn_run_script (&argv, session->opt->es, 0, |