Commit ca8f17a3 authored by Steve Holme's avatar Steve Holme
Browse files

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
parent fddb7b44
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -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 */