From: Steve Holme Date: Sat, 20 Apr 2013 07:51:16 +0000 (+0100) Subject: tool_paramhlp: Fixed options being included in username X-Git-Tag: curl-7_31_0~140 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ca8f17a303d6acb0badd15dd030b87664d576745;p=curl 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 --- 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 */