diff options
author | Daniel Stenberg <daniel@haxx.se> | 2012-02-24 23:33:14 +0100 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2012-02-24 23:33:14 +0100 |
commit | 79b6f4a2d37a17795e61b5ae9579f11bed9ad3cc (patch) | |
tree | b17677476ee9524fb176214726b727080ea1ec81 /lib/http_proxy.c | |
parent | 5430007222e0325a1c5e0359ecde43886cef61af (diff) | |
download | curl-79b6f4a2d37a17795e61b5ae9579f11bed9ad3cc.tar.gz |
CONNECT: fix ipv6 address in the Request-Line
Commit 466150bc64d fixed the Host: header with CONNECT, but I then
forgot the preceeding request-line. Now this too uses [brackets]
properly if a ipv6 numerical address was given.
Bug: http://curl.haxx.se/bug/view.cgi?id=3493129
Reported by: "Blacat"
Diffstat (limited to 'lib/http_proxy.c')
-rw-r--r-- | lib/http_proxy.c | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/lib/http_proxy.c b/lib/http_proxy.c index 1c2aa59c8..b12d37011 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -124,11 +124,15 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, const char *useragent=""; const char *http = (conn->proxytype == CURLPROXY_HTTP_1_0) ? "1.0" : "1.1"; + char *hostheader= /* host:port with IPv6 support */ + aprintf("%s%s%s:%hu", conn->bits.ipv6_ip?"[":"", + hostname, conn->bits.ipv6_ip?"]":"", + remote_port); + if(!hostheader) + return CURLE_OUT_OF_MEMORY; if(!Curl_checkheaders(data, "Host:")) { - host = aprintf("Host: %s%s%s:%hu\r\n", conn->bits.ipv6_ip?"[":"", - hostname, conn->bits.ipv6_ip?"]":"", - remote_port); + host = aprintf("Host: %s\r\n", hostheader); if(!host) { free(req_buffer); return CURLE_OUT_OF_MEMORY; @@ -141,24 +145,24 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, data->set.str[STRING_USERAGENT]) useragent = conn->allocptr.uagent; - /* Send the connect request to the proxy */ - /* BLOCKING */ result = Curl_add_bufferf(req_buffer, - "CONNECT %s:%hu HTTP/%s\r\n" - "%s" /* Host: */ - "%s" /* Proxy-Authorization */ - "%s" /* User-Agent */ - "%s", /* Proxy-Connection */ - hostname, remote_port, http, - host, - conn->allocptr.proxyuserpwd? - conn->allocptr.proxyuserpwd:"", - useragent, - proxyconn); + "CONNECT %s HTTP/%s\r\n" + "%s" /* Host: */ + "%s" /* Proxy-Authorization */ + "%s" /* User-Agent */ + "%s", /* Proxy-Connection */ + hostheader, + http, + host, + conn->allocptr.proxyuserpwd? + conn->allocptr.proxyuserpwd:"", + useragent, + proxyconn); if(host && *host) free(host); + free(hostheader); if(CURLE_OK == result) result = Curl_add_custom_headers(conn, req_buffer); @@ -168,7 +172,8 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, result = Curl_add_bufferf(req_buffer, "\r\n"); if(CURLE_OK == result) { - /* Now send off the request */ + /* Send the connect request to the proxy */ + /* BLOCKING */ result = Curl_add_buffer_send(req_buffer, conn, &data->info.request_size, 0, sockindex); |