From ca8f17a303d6acb0badd15dd030b87664d576745 Mon Sep 17 00:00:00 2001 From: Steve Holme Date: Sat, 20 Apr 2013 08:51:16 +0100 Subject: tool_paramhlp: Fixed options being included in username Fix to prevent the options from being displayed when curl requests the user's password if the following command line is specified: --user username;options --- src/tool_paramhlp.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/tool_paramhlp.c') diff --git a/src/tool_paramhlp.c b/src/tool_paramhlp.c index 5d6f8bbc5..97540d11b 100644 --- a/src/tool_paramhlp.c +++ b/src/tool_paramhlp.c @@ -5,7 +5,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2012, Daniel Stenberg, , et al. + * Copyright (C) 1998 - 2013, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -322,13 +322,19 @@ ParameterError str2offset(curl_off_t *val, const char *str) ParameterError checkpasswd(const char *kind, /* for what purpose */ char **userpwd) /* pointer to allocated string */ { - char *ptr; + char *psep; + char *osep; if(!*userpwd) return PARAM_OK; - ptr = strchr(*userpwd, ':'); - if(!ptr) { + /* Attempt to find the password separator */ + psep = strchr(*userpwd, ':'); + + /* Attempt to find the options separator */ + osep = strchr(*userpwd, ';'); + + if(!psep && **userpwd != ';') { /* no password present, prompt for one */ char passwd[256] = ""; char prompt[256]; @@ -336,6 +342,9 @@ ParameterError checkpasswd(const char *kind, /* for what purpose */ size_t userlen = strlen(*userpwd); char *passptr; + if(osep) + *osep = '\0'; + /* build a nice-looking prompt */ curlx_msnprintf(prompt, sizeof(prompt), "Enter %s password for user '%s':", @@ -345,6 +354,9 @@ ParameterError checkpasswd(const char *kind, /* for what purpose */ getpass_r(prompt, passwd, sizeof(passwd)); passwdlen = strlen(passwd); + if(osep) + *osep = ';'; + /* extend the allocated memory area to fit the password too */ passptr = realloc(*userpwd, passwdlen + 1 + /* an extra for the colon */ -- cgit v1.2.3