1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-22 08:08:50 -05:00

http: Post base64 decoding tidy up

Renamed copy_header_value() to Curl_copy_header_value() as this
function is now non static.

Simplified proxy flag in Curl_http_input_auth() when calling
sub-functions.

Removed unnecessary white space removal when using negotiate as it had
been missed in commit cdccb42267.
This commit is contained in:
Steve Holme 2013-11-03 10:17:26 +00:00
parent bce03fe144
commit 052f24c9b7
5 changed files with 28 additions and 31 deletions

View File

@ -187,25 +187,25 @@ char *Curl_checkheaders(struct SessionHandle *data, const char *thisheader)
* case of allocation failure. Returns an empty string if the header value * case of allocation failure. Returns an empty string if the header value
* consists entirely of whitespace. * consists entirely of whitespace.
*/ */
char *copy_header_value(const char *h) char *Curl_copy_header_value(const char *header)
{ {
const char *start; const char *start;
const char *end; const char *end;
char *value; char *value;
size_t len; size_t len;
DEBUGASSERT(h); DEBUGASSERT(header);
/* Find the end of the header name */ /* Find the end of the header name */
while(*h && (*h != ':')) while(*header && (*header != ':'))
++h; ++header;
if(*h) if(*header)
/* Skip over colon */ /* Skip over colon */
++h; ++header;
/* Find the first non-space letter */ /* Find the first non-space letter */
start = h; start = header;
while(*start && ISSPACE(*start)) while(*start && ISSPACE(*start))
start++; start++;
@ -224,7 +224,7 @@ char *copy_header_value(const char *h)
end--; end--;
/* get length of the type */ /* get length of the type */
len = end-start+1; len = end - start + 1;
value = malloc(len + 1); value = malloc(len + 1);
if(!value) if(!value)
@ -699,8 +699,7 @@ Curl_http_output_auth(struct connectdata *conn,
* proxy CONNECT loop. * proxy CONNECT loop.
*/ */
CURLcode Curl_http_input_auth(struct connectdata *conn, CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
int httpcode,
const char *auth) /* the first non-space */ const char *auth) /* the first non-space */
{ {
/* /*
@ -711,7 +710,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn,
unsigned long *availp; unsigned long *availp;
struct auth *authp; struct auth *authp;
if(httpcode == 407) { if(proxy) {
availp = &data->info.proxyauthavail; availp = &data->info.proxyauthavail;
authp = &data->state.authproxy; authp = &data->state.authproxy;
} }
@ -753,7 +752,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn,
data->state.authproblem = TRUE; data->state.authproblem = TRUE;
} }
else { else {
neg = Curl_input_negotiate(conn, (bool)(httpcode == 407), auth); neg = Curl_input_negotiate(conn, proxy, auth);
if(neg == 0) { if(neg == 0) {
DEBUGASSERT(!data->req.newurl); DEBUGASSERT(!data->req.newurl);
data->req.newurl = strdup(data->change.url); data->req.newurl = strdup(data->change.url);
@ -779,7 +778,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn,
authp->picked == CURLAUTH_NTLM_WB) { authp->picked == CURLAUTH_NTLM_WB) {
/* NTLM authentication is picked and activated */ /* NTLM authentication is picked and activated */
CURLcode ntlm = CURLcode ntlm =
Curl_input_ntlm(conn, (httpcode == 407)?TRUE:FALSE, auth); Curl_input_ntlm(conn, proxy, auth);
if(CURLE_OK == ntlm) { if(CURLE_OK == ntlm) {
data->state.authproblem = FALSE; data->state.authproblem = FALSE;
#ifdef NTLM_WB_ENABLED #ifdef NTLM_WB_ENABLED
@ -826,7 +825,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn,
* authentication isn't activated yet, as we need to store the * authentication isn't activated yet, as we need to store the
* incoming data from this header in case we are gonna use * incoming data from this header in case we are gonna use
* Digest. */ * Digest. */
dig = Curl_input_digest(conn, (httpcode == 407)?TRUE:FALSE, auth); dig = Curl_input_digest(conn, proxy, auth);
if(CURLDIGEST_FINE != dig) { if(CURLDIGEST_FINE != dig) {
infof(data, "Authentication problem. Ignoring this.\n"); infof(data, "Authentication problem. Ignoring this.\n");
@ -1824,7 +1823,7 @@ CURLcode Curl_http(struct connectdata *conn, bool *done)
custom Host: header if this is NOT a redirect, as setting Host: in the custom Host: header if this is NOT a redirect, as setting Host: in the
redirected request is being out on thin ice. Except if the host name redirected request is being out on thin ice. Except if the host name
is the same as the first one! */ is the same as the first one! */
char *cookiehost = copy_header_value(ptr); char *cookiehost = Curl_copy_header_value(ptr);
if(!cookiehost) if(!cookiehost)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
if(!*cookiehost) if(!*cookiehost)
@ -3240,7 +3239,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
} }
/* check for Content-Type: header lines to get the MIME-type */ /* check for Content-Type: header lines to get the MIME-type */
else if(checkprefix("Content-Type:", k->p)) { else if(checkprefix("Content-Type:", k->p)) {
char *contenttype = copy_header_value(k->p); char *contenttype = Curl_copy_header_value(k->p);
if(!contenttype) if(!contenttype)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
if(!*contenttype) if(!*contenttype)
@ -3252,7 +3251,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
} }
} }
else if(checkprefix("Server:", k->p)) { else if(checkprefix("Server:", k->p)) {
char *server_name = copy_header_value(k->p); char *server_name = Curl_copy_header_value(k->p);
/* Turn off pipelining if the server version is blacklisted */ /* Turn off pipelining if the server version is blacklisted */
if(conn->bundle && conn->bundle->server_supports_pipelining) { if(conn->bundle && conn->bundle->server_supports_pipelining) {
@ -3448,11 +3447,13 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
(401 == k->httpcode)) || (401 == k->httpcode)) ||
(checkprefix("Proxy-authenticate:", k->p) && (checkprefix("Proxy-authenticate:", k->p) &&
(407 == k->httpcode))) { (407 == k->httpcode))) {
char *auth = copy_header_value(k->p);
bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
char *auth = Curl_copy_header_value(k->p);
if(!auth) if(!auth)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
result = Curl_http_input_auth(conn, k->httpcode, auth); result = Curl_http_input_auth(conn, proxy, auth);
Curl_safefree(auth); Curl_safefree(auth);
@ -3463,7 +3464,7 @@ CURLcode Curl_http_readwrite_headers(struct SessionHandle *data,
checkprefix("Location:", k->p) && checkprefix("Location:", k->p) &&
!data->req.location) { !data->req.location) {
/* this is the URL that the server advises us to use instead */ /* this is the URL that the server advises us to use instead */
char *location = copy_header_value(k->p); char *location = Curl_copy_header_value(k->p);
if(!location) if(!location)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
if(!*location) if(!*location)

View File

@ -35,12 +35,12 @@ extern const struct Curl_handler Curl_handler_http;
extern const struct Curl_handler Curl_handler_https; extern const struct Curl_handler Curl_handler_https;
#endif #endif
/* Header specific function */ /* Header specific functions */
bool Curl_compareheader(const char *headerline, /* line to check */ bool Curl_compareheader(const char *headerline, /* line to check */
const char *header, /* header keyword _with_ colon */ const char *header, /* header keyword _with_ colon */
const char *content); /* content string to find */ const char *content); /* content string to find */
char *Curl_checkheaders(struct SessionHandle *data, const char *thisheader); char *Curl_checkheaders(struct SessionHandle *data, const char *thisheader);
char *copy_header_value(const char *h); char *Curl_copy_header_value(const char *header);
/* ------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------- */
/* /*
@ -82,8 +82,8 @@ CHUNKcode Curl_httpchunk_read(struct connectdata *conn, char *datap,
/* These functions are in http.c */ /* These functions are in http.c */
void Curl_http_auth_stage(struct SessionHandle *data, int stage); void Curl_http_auth_stage(struct SessionHandle *data, int stage);
CURLcode Curl_http_input_auth(struct connectdata *conn, CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
int httpcode, const char *header); const char *auth);
CURLcode Curl_http_auth_act(struct connectdata *conn); CURLcode Curl_http_auth_act(struct connectdata *conn);
CURLcode Curl_http_perhapsrewind(struct connectdata *conn); CURLcode Curl_http_perhapsrewind(struct connectdata *conn);

View File

@ -145,8 +145,6 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
const char* protocol; const char* protocol;
CURLcode error; CURLcode error;
while(*header && ISSPACE(*header))
header++;
if(checkprefix("GSS-Negotiate", header)) { if(checkprefix("GSS-Negotiate", header)) {
protocol = "GSS-Negotiate"; protocol = "GSS-Negotiate";
gss = TRUE; gss = TRUE;

View File

@ -98,9 +98,6 @@ int Curl_input_negotiate(struct connectdata *conn, bool proxy,
const char* protocol; const char* protocol;
CURLcode error; CURLcode error;
while(*header && ISSPACE(*header))
header++;
if(checkprefix("GSS-Negotiate", header)) { if(checkprefix("GSS-Negotiate", header)) {
protocol = "GSS-Negotiate"; protocol = "GSS-Negotiate";
gss = TRUE; gss = TRUE;

View File

@ -453,11 +453,12 @@ CURLcode Curl_proxyCONNECT(struct connectdata *conn,
(checkprefix("Proxy-authenticate:", line_start) && (checkprefix("Proxy-authenticate:", line_start) &&
(407 == k->httpcode))) { (407 == k->httpcode))) {
char *auth = copy_header_value(line_start); bool proxy = (k->httpcode == 407) ? TRUE : FALSE;
char *auth = Curl_copy_header_value(line_start);
if(!auth) if(!auth)
return CURLE_OUT_OF_MEMORY; return CURLE_OUT_OF_MEMORY;
result = Curl_http_input_auth(conn, k->httpcode, auth); result = Curl_http_input_auth(conn, proxy, auth);
Curl_safefree(auth); Curl_safefree(auth);