diff options
author | Steve Holme <steve_holme@hotmail.com> | 2013-11-02 11:18:39 +0000 |
---|---|---|
committer | Steve Holme <steve_holme@hotmail.com> | 2013-11-02 11:18:39 +0000 |
commit | 3b59696a93e7bbc7ec7ad0371ddac02a7d990cd6 (patch) | |
tree | 3d8bb3340a33bc6f181a17638c3160dafbd1639c | |
parent | cdccb422671aebd198ed338ac6111cfde303f1cc (diff) |
http: Added proxy tunnel authentication message header value extraction
...following recent changes to Curl_base64_decode() rather than trying
to parse a header line for the authentication mechanisms which is CRLF
terminated and inline zero terminate it.
-rw-r--r-- | lib/http.c | 2 | ||||
-rw-r--r-- | lib/http.h | 3 | ||||
-rw-r--r-- | lib/http_proxy.c | 11 |
3 files changed, 12 insertions, 4 deletions
diff --git a/lib/http.c b/lib/http.c index 55a8166de..3025beff1 100644 --- a/lib/http.c +++ b/lib/http.c @@ -187,7 +187,7 @@ char *Curl_checkheaders(struct SessionHandle *data, const char *thisheader) * case of allocation failure. Returns an empty string if the header value * consists entirely of whitespace. */ -static char *copy_header_value(const char *h) +char *copy_header_value(const char *h) { const char *start; const char *end; diff --git a/lib/http.h b/lib/http.h index a506238a6..d74714d58 100644 --- a/lib/http.h +++ b/lib/http.h @@ -35,11 +35,12 @@ extern const struct Curl_handler Curl_handler_http; extern const struct Curl_handler Curl_handler_https; #endif +/* Header specific function */ bool Curl_compareheader(const char *headerline, /* line to check */ const char *header, /* header keyword _with_ colon */ const char *content); /* content string to find */ - char *Curl_checkheaders(struct SessionHandle *data, const char *thisheader); +char *copy_header_value(const char *h); /* ------------------------------------------------------------------------- */ /* diff --git a/lib/http_proxy.c b/lib/http_proxy.c index 6a555525d..97edc486e 100644 --- a/lib/http_proxy.c +++ b/lib/http_proxy.c @@ -452,8 +452,15 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn, (401 == k->httpcode)) || (checkprefix("Proxy-authenticate:", line_start) && (407 == k->httpcode))) { - result = Curl_http_input_auth(conn, k->httpcode, - line_start); + + char *auth = copy_header_value(line_start); + if(!auth) + return CURLE_OUT_OF_MEMORY; + + result = Curl_http_input_auth(conn, k->httpcode, auth); + + Curl_safefree(auth); + if(result) return result; } |