#include "hsts.h"
#include "tftp.h"
#include "strdup.h"
+#include "escape.h"
+
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
break;
#ifndef CURL_DISABLE_PROXY
- case CURLOPT_PROXYUSERPWD:
+ case CURLOPT_PROXYUSERPWD: {
/*
* user:password needed to use the proxy
*/
- result = setstropt_userpwd(va_arg(param, char *),
- &data->set.str[STRING_PROXYUSERNAME],
- &data->set.str[STRING_PROXYPASSWORD]);
+ char *u = NULL;
+ char *p = NULL;
+ result = setstropt_userpwd(va_arg(param, char *), &u, &p);
+
+ /* URL decode the components */
+ if(!result && u)
+ result = Curl_urldecode(u, 0, &data->set.str[STRING_PROXYUSERNAME], NULL,
+ REJECT_ZERO);
+ if(!result && p)
+ result = Curl_urldecode(p, 0, &data->set.str[STRING_PROXYPASSWORD], NULL,
+ REJECT_ZERO);
+ free(u);
+ free(p);
+ }
break;
case CURLOPT_PROXYUSERNAME:
/*
data->state.aptr.proxyuser : "";
const char *proxypasswd = data->state.aptr.proxypasswd ?
data->state.aptr.proxypasswd : "";
- CURLcode result = Curl_urldecode(proxyuser, 0, &conn->http_proxy.user, NULL,
- REJECT_ZERO);
- if(!result)
- result = Curl_setstropt(&data->state.aptr.proxyuser,
- conn->http_proxy.user);
- if(!result)
- result = Curl_urldecode(proxypasswd, 0, &conn->http_proxy.passwd,
- NULL, REJECT_ZERO);
- if(!result)
- result = Curl_setstropt(&data->state.aptr.proxypasswd,
- conn->http_proxy.passwd);
+ CURLcode result = CURLE_OUT_OF_MEMORY;
+
+ conn->http_proxy.user = strdup(proxyuser);
+ if(conn->http_proxy.user) {
+ conn->http_proxy.passwd = strdup(proxypasswd);
+ if(conn->http_proxy.passwd)
+ result = CURLE_OK;
+ else
+ Curl_safefree(conn->http_proxy.user);
+ }
return result;
}
<proxy>
CONNECT machine.%TESTNUMBER:%HTTPPORT HTTP/1.1\r
Host: machine.%TESTNUMBER:%HTTPPORT\r
-Proxy-Authorization: Basic dGVzdDppbmc=\r
+Proxy-Authorization: Basic dGVzdCUyMDppbmclNDE=\r
Proxy-Connection: Keep-Alive\r
\r
[DISCONNECT]
easy_setopt(c, CURLOPT_PROXY, libtest_arg2); /* set in first.c */
easy_setopt(c, CURLOPT_URL, URL);
easy_setopt(c, CURLOPT_USERPWD, "test:ing");
- easy_setopt(c, CURLOPT_PROXYUSERPWD, "test:ing");
+ easy_setopt(c, CURLOPT_PROXYUSERNAME, "test%20");
+ easy_setopt(c, CURLOPT_PROXYPASSWORD, "ing%41");
easy_setopt(c, CURLOPT_HTTPPROXYTUNNEL, 1L);
easy_setopt(c, CURLOPT_HEADER, 1L);
easy_setopt(c, CURLOPT_VERBOSE, 1L);