Support --management-query-passwords for SOCKS 5 proxies as well. Signed-off-by: Heiko Hund <heiko.h...@sophos.com> --- src/openvpn/socks.c | 38 +++++++++++++++----------------------- src/openvpn/socks.h | 4 ++-- 2 files changed, 17 insertions(+), 25 deletions(-)
diff --git a/src/openvpn/socks.c b/src/openvpn/socks.c index 235982e..e0ce5f7 100644 --- a/src/openvpn/socks.c +++ b/src/openvpn/socks.c @@ -72,14 +72,9 @@ socks_proxy_new (const char *server, ASSERT (server); ASSERT (legal_ipv4_port (port)); - strncpynt (p->server, server, sizeof (p->server)); + p->server = server; p->port = port; - - if (authfile) - strncpynt (p->authfile, authfile, sizeof (p->authfile)); - else - p->authfile[0] = 0; - + p->authfile = authfile; p->retry = retry; p->defined = true; @@ -107,13 +102,18 @@ socks_username_password_auth (struct socks_proxy_info *p, creds.defined = 0; get_user_pass (&creds, p->authfile, UP_TYPE_SOCKS, GET_USER_PASS_MANAGEMENT); - if( !creds.username || (strlen(creds.username) > 255) - || !creds.password || (strlen(creds.password) > 255) ) { - msg (M_NONFATAL, - "SOCKS username and/or password exceeds 255 characters. " - "Authentication not possible."); - return false; - } + if (creds.username == NULL || creds.password == NULL) + { + msg (D_LINK_ERRORS, "socks_username_password_auth: " + "server asked for auth but no credentials were provided"); + return false; + } + else if (strlen (creds.username) > 255 || strlen (creds.password) > 255) + { + msg (M_NONFATAL, "SOCKS username and/or password exceed 255 characters. " + "Authentication not possible."); + return false; + } openvpn_snprintf (to_send, sizeof (to_send), "\x01%c%s%c%s", (int) strlen(creds.username), creds.username, (int) strlen(creds.password), creds.password); size = send (sd, to_send, strlen(to_send), MSG_NOSIGNAL); @@ -259,16 +259,8 @@ socks_handshake (struct socks_proxy_info *p, break; case 2: /* login/password */ - if (!p->authfile[0]) - { - msg(D_LINK_ERRORS, "socks_handshake: server asked for username/login auth but we were " - "not provided any credentials"); + if (!socks_username_password_auth (p, sd, signal_received)) return false; - } - - if (!socks_username_password_auth(p, sd, signal_received)) - return false; - break; default: /* unknown auth method */ diff --git a/src/openvpn/socks.h b/src/openvpn/socks.h index b55ff6f..6afc8bd 100644 --- a/src/openvpn/socks.h +++ b/src/openvpn/socks.h @@ -41,9 +41,9 @@ struct socks_proxy_info { bool defined; bool retry; - char server[128]; + const char *server; int port; - char authfile[256]; + const char *authfile; }; void socks_adjust_frame_parameters (struct frame *frame, int proto); -- 1.7.9.5