diff options
-rw-r--r-- | lib/http_proxy.c | 19 | ||||
-rw-r--r-- | tests/data/DISABLED | 1 |
2 files changed, 17 insertions, 3 deletions
diff --git a/lib/http_proxy.c b/lib/http_proxy.c index d144990c5..8fc9c6222 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -284,8 +284,7 @@ static CURLcode CONNECT(struct Curl_easy *data, /* This only happens if we've looped here due to authentication reasons, and we don't really use the newly cloned URL here then. Just free() it. */ - free(data->req.newurl); - data->req.newurl = NULL; + Curl_safefree(data->req.newurl); /* initialize send-buffer */ Curl_dyn_init(req, DYN_HTTP_REQUEST); @@ -805,6 +804,14 @@ static CURLcode CONNECT(struct Curl_easy *data, goto error; } + infof(data, "Establish HTTP proxy tunnel to %s:%d", + hostname, remote_port); + + /* This only happens if we've looped here due to authentication + reasons, and we don't really use the newly cloned URL here + then. Just free() it. */ + Curl_safefree(data->req.newurl); + result = CONNECT_host(data, conn, hostname, remote_port, &hostheader, &host); if(result) @@ -945,6 +952,14 @@ static CURLcode CONNECT(struct Curl_easy *data, default: break; } + + /* If we are supposed to continue and request a new URL, which basically + * means the HTTP authentication is still going on so if the tunnel + * is complete we start over in INIT state */ + if(data->req.newurl && (TUNNEL_COMPLETE == s->tunnel_state)) { + infof(data, "CONNECT request done, loop to make another"); + connect_init(data, TRUE); /* reinit */ + } } while(data->req.newurl); result = CURLE_OK; diff --git a/tests/data/DISABLED b/tests/data/DISABLED index 7d1005f66..4b43e198e 100644 --- a/tests/data/DISABLED +++ b/tests/data/DISABLED @@ -40,7 +40,6 @@ # hyper support remains EXPERIMENTAL as long as there's a test number # listed below %if hyper -206 207 209 213 |