aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Holme <steve_holme@hotmail.com>2013-04-20 08:51:16 +0100
committerSteve Holme <steve_holme@hotmail.com>2013-04-20 09:16:21 +0100
commitca8f17a303d6acb0badd15dd030b87664d576745 (patch)
tree2fddbd99a3c6c80627eb0c8d6212e6caffff453d
parentfddb7b44a79d78e05043e1c97e069308b6b85f79 (diff)
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
-rw-r--r--src/tool_paramhlp.c20
1 files changed, 16 insertions, 4 deletions
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, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2013, Daniel Stenberg, <daniel@haxx.se>, 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 */