summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Sommerseth <dazo@users.sourceforge.net>2010-11-15 21:44:59 +0100
committerDavid Sommerseth <dazo@users.sourceforge.net>2010-11-18 18:54:49 +0100
commit2ff54d66a22402caf08709ec22730e20c193ecbd (patch)
treeb2770c6a410df244196f5d9c86f74a5c831e3c85
parent6af422162fbc1c505526157ecf630e37694dbc7b (diff)
downloadopenvpn-2ff54d66a22402caf08709ec22730e20c193ecbd.tar.gz
openvpn-2ff54d66a22402caf08709ec22730e20c193ecbd.tar.xz
openvpn-2ff54d66a22402caf08709ec22730e20c193ecbd.zip
Use stricter snprintf() formatting in socks_username_password_auth() (v3)
commit fc1fa9ffc7e3356458ec3 added a new function which needs to have a stricter string formatting. This was detected due to a compiler warning. This patch makes sure that the length of username and password is not longer than 255 bytes. It also adds extra checks to avoid NULL pointer issues with strlen() on these two parameters. Signed-off-by: David Sommerseth <dazo@users.sourceforge.net> Acked-by: Gert Doering <gert@greenie.muc.de>
-rw-r--r--socks.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/socks.c b/socks.c
index 58b3648..c7c0473 100644
--- a/socks.c
+++ b/socks.c
@@ -112,10 +112,17 @@ socks_username_password_auth (struct socks_proxy_info *p,
ssize_t size;
creds.defined = 0;
-
get_user_pass (&creds, p->authfile, UP_TYPE_SOCKS, GET_USER_PASS_MANAGEMENT);
- snprintf (to_send, sizeof (to_send), "\x01%c%s%c%s", strlen(creds.username),
- creds.username, strlen(creds.password), creds.password);
+
+ 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;
+ }
+ 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);
if (size != strlen (to_send))