Commit 3b59696a authored by Steve Holme's avatar Steve Holme
Browse files

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.
parent cdccb422
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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);

/* ------------------------------------------------------------------------- */
/*
+9 −2
Original line number Diff line number Diff line
@@ -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;
                  }