From a634cc5eccd55f1d14197da7376bb819bdf72cb6 Mon Sep 17 00:00:00 2001 From: Frank Lichtenheld Date: Mon, 22 Jan 2024 10:21:22 +0100 Subject: [PATCH] --http-proxy-user-pass: allow to specify in either order with --http-proxy Previously, when using a third argument to --http-proxy other than auto/auto-nct, order did matter between --http-proxy and --http-proxy-user-pass. Always prefer --http-proxy-user-pass when given. Change-Id: I6f402db2fb73f1206fbc1139c47d2bf4378376fa Signed-off-by: Frank Lichtenheld Acked-by: Gert Doering Message-Id: <20240122092122.8591-1-gert@greenie.muc.de> URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg28099.html Signed-off-by: Gert Doering --- src/openvpn/options.c | 4 +++- src/openvpn/proxy.c | 7 ++++++- src/openvpn/proxy.h | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/openvpn/options.c b/src/openvpn/options.c index 6975cbeaf8e..2c79a1ec847 100644 --- a/src/openvpn/options.c +++ b/src/openvpn/options.c @@ -1649,6 +1649,8 @@ show_http_proxy_options(const struct http_proxy_options *o) SHOW_STR(port); SHOW_STR(auth_method_string); SHOW_STR(auth_file); + SHOW_STR(auth_file_up); + SHOW_BOOL(inline_creds); SHOW_STR(http_version); SHOW_STR(user_agent); for (i = 0; i < MAX_CUSTOM_HTTP_HEADER && o->custom_headers[i].name; i++) @@ -6833,7 +6835,7 @@ add_option(struct options *options, struct http_proxy_options *ho; VERIFY_PERMISSION(OPT_P_GENERAL|OPT_P_INLINE); ho = init_http_proxy_options_once(&options->ce.http_proxy_options, &options->gc); - ho->auth_file = p[1]; + ho->auth_file_up = p[1]; ho->inline_creds = is_inline; } else if (streq(p[0], "http-proxy-retry") || streq(p[0], "socks-proxy-retry")) diff --git a/src/openvpn/proxy.c b/src/openvpn/proxy.c index 2e8d7a8630b..eeb39892665 100644 --- a/src/openvpn/proxy.c +++ b/src/openvpn/proxy.c @@ -271,6 +271,11 @@ get_user_pass_http(struct http_proxy_info *p, const bool force) if (!static_proxy_user_pass.defined) { unsigned int flags = GET_USER_PASS_MANAGEMENT; + const char *auth_file = p->options.auth_file; + if (p->options.auth_file_up) + { + auth_file = p->options.auth_file_up; + } if (p->queried_creds) { flags |= GET_USER_PASS_PREVIOUS_CREDS_FAILED; @@ -280,7 +285,7 @@ get_user_pass_http(struct http_proxy_info *p, const bool force) flags |= GET_USER_PASS_INLINE_CREDS; } get_user_pass(&static_proxy_user_pass, - p->options.auth_file, + auth_file, UP_TYPE_PROXY, flags); p->queried_creds = true; diff --git a/src/openvpn/proxy.h b/src/openvpn/proxy.h index 7900244706c..4e78772ba08 100644 --- a/src/openvpn/proxy.h +++ b/src/openvpn/proxy.h @@ -52,10 +52,11 @@ struct http_proxy_options { const char *auth_method_string; const char *auth_file; + const char *auth_file_up; /* specified with --http-proxy-user-pass */ const char *http_version; const char *user_agent; struct http_custom_header custom_headers[MAX_CUSTOM_HTTP_HEADER]; - bool inline_creds; + bool inline_creds; /* auth_file_up is inline credentials */ }; struct http_proxy_options_simple {