http: Added proxy tunnel authentication message header value extraction
authorSteve Holme <steve_holme@hotmail.com>
Sat, 2 Nov 2013 11:18:39 +0000 (11:18 +0000)
committerSteve Holme <steve_holme@hotmail.com>
Sat, 2 Nov 2013 11:18:39 +0000 (11:18 +0000)
...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.

lib/http.c
lib/http.h
lib/http_proxy.c

index 55a8166..3025bef 100644 (file)
@@ -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;
index a506238..d74714d 100644 (file)
@@ -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);
 
 /* ------------------------------------------------------------------------- */
 /*
index 6a55552..97edc48 100644 (file)
@@ -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;
                   }