added one assert and a few comments describing how the auth stuff works
This commit is contained in:
parent
7237221108
commit
44031f32a1
32
lib/http.c
32
lib/http.c
@ -158,11 +158,19 @@ static CURLcode Curl_output_basic_proxy(struct connectdata *conn)
|
|||||||
return CURLE_OK;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Curl_http_auth_act() checks what authentication methods that are available
|
||||||
|
* and decides which one (if any) to use. It will set 'newurl' if an auth
|
||||||
|
* metod was picked.
|
||||||
|
*/
|
||||||
|
|
||||||
void Curl_http_auth_act(struct connectdata *conn)
|
void Curl_http_auth_act(struct connectdata *conn)
|
||||||
{
|
{
|
||||||
struct SessionHandle *data = conn->data;
|
struct SessionHandle *data = conn->data;
|
||||||
|
|
||||||
if(data->state.authavail) {
|
if(data->state.authavail) {
|
||||||
|
/* The order of these checks is highly relevant, as this will be the order
|
||||||
|
of preference in case of the existance of multiple accepted types. */
|
||||||
if(data->state.authavail & CURLAUTH_GSSNEGOTIATE)
|
if(data->state.authavail & CURLAUTH_GSSNEGOTIATE)
|
||||||
data->state.authwant = CURLAUTH_GSSNEGOTIATE;
|
data->state.authwant = CURLAUTH_GSSNEGOTIATE;
|
||||||
else if(data->state.authavail & CURLAUTH_DIGEST)
|
else if(data->state.authavail & CURLAUTH_DIGEST)
|
||||||
@ -341,6 +349,15 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
|||||||
while(*start && isspace((int)*start))
|
while(*start && isspace((int)*start))
|
||||||
start++;
|
start++;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Here we check if we want the specific single authentiction (using ==) and
|
||||||
|
* if we do, we initiate usage of it.
|
||||||
|
*
|
||||||
|
* If the provided authentication is wanted as one out of several accepted
|
||||||
|
* types (using &), we OR this authenticaion type to the authavail
|
||||||
|
* variable.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifdef HAVE_GSSAPI
|
#ifdef HAVE_GSSAPI
|
||||||
if (checkprefix("GSS-Negotiate", start) ||
|
if (checkprefix("GSS-Negotiate", start) ||
|
||||||
checkprefix("Negotiate", start)) {
|
checkprefix("Negotiate", start)) {
|
||||||
@ -1013,14 +1030,15 @@ CURLcode Curl_http_done(struct connectdata *conn)
|
|||||||
void Curl_http_auth_stage(struct SessionHandle *data,
|
void Curl_http_auth_stage(struct SessionHandle *data,
|
||||||
int stage)
|
int stage)
|
||||||
{
|
{
|
||||||
if(stage == 401)
|
curlassert((stage == 401) || (stage == 407));
|
||||||
data->state.authwant = data->set.httpauth;
|
|
||||||
else if(stage == 407)
|
/* We set none, one or more bits for which authentication types we accept
|
||||||
data->state.authwant = data->set.proxyauth;
|
for this stage. */
|
||||||
else
|
data->state.authwant = (stage == 401)?
|
||||||
return; /* bad input stage */
|
data->set.httpauth:data->set.proxyauth;
|
||||||
|
|
||||||
data->state.authstage = stage;
|
data->state.authstage = stage;
|
||||||
data->state.authavail = CURLAUTH_NONE;
|
data->state.authavail = CURLAUTH_NONE; /* no type available yet */
|
||||||
}
|
}
|
||||||
|
|
||||||
CURLcode Curl_http(struct connectdata *conn)
|
CURLcode Curl_http(struct connectdata *conn)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user