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

http: Added calls to Curl_auth_is_<mechansism>_supported()

Hooked up the HTTP authentication layer to query the new 'is mechanism
supported' functions when deciding what mechanism to use.

As per commit 00417fd66c existing functionality is maintained for now.
This commit is contained in:
Steve Holme 2016-03-20 12:18:23 +00:00
parent d1bfb1cf54
commit 2708d4259b

View File

@ -784,11 +784,14 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
while(*auth) { while(*auth) {
#ifdef USE_SPNEGO #ifdef USE_SPNEGO
if(checkprefix("Negotiate", auth)) { if(checkprefix("Negotiate", auth)) {
if((authp->avail & CURLAUTH_NEGOTIATE) ||
Curl_auth_is_spnego_supported()) {
*availp |= CURLAUTH_NEGOTIATE; *availp |= CURLAUTH_NEGOTIATE;
authp->avail |= CURLAUTH_NEGOTIATE; authp->avail |= CURLAUTH_NEGOTIATE;
if(authp->picked == CURLAUTH_NEGOTIATE) { if(authp->picked == CURLAUTH_NEGOTIATE) {
if(negdata->state == GSS_AUTHSENT || negdata->state == GSS_AUTHNONE) { if(negdata->state == GSS_AUTHSENT ||
negdata->state == GSS_AUTHNONE) {
CURLcode result = Curl_input_negotiate(conn, proxy, auth); CURLcode result = Curl_input_negotiate(conn, proxy, auth);
if(!result) { if(!result) {
DEBUGASSERT(!data->req.newurl); DEBUGASSERT(!data->req.newurl);
@ -804,13 +807,18 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
} }
} }
} }
}
else else
#endif #endif
#ifdef USE_NTLM #ifdef USE_NTLM
/* NTLM support requires the SSL crypto libs */ /* NTLM support requires the SSL crypto libs */
if(checkprefix("NTLM", auth)) { if(checkprefix("NTLM", auth)) {
if((authp->avail & CURLAUTH_NTLM) ||
(authp->avail & CURLAUTH_NTLM_WB) ||
Curl_auth_is_ntlm_supported()) {
*availp |= CURLAUTH_NTLM; *availp |= CURLAUTH_NTLM;
authp->avail |= CURLAUTH_NTLM; authp->avail |= CURLAUTH_NTLM;
if(authp->picked == CURLAUTH_NTLM || if(authp->picked == CURLAUTH_NTLM ||
authp->picked == CURLAUTH_NTLM_WB) { authp->picked == CURLAUTH_NTLM_WB) {
/* NTLM authentication is picked and activated */ /* NTLM authentication is picked and activated */
@ -845,6 +853,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
} }
} }
} }
}
else else
#endif #endif
#ifndef CURL_DISABLE_CRYPTO_AUTH #ifndef CURL_DISABLE_CRYPTO_AUTH
@ -852,15 +861,17 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
if((authp->avail & CURLAUTH_DIGEST) != 0) { if((authp->avail & CURLAUTH_DIGEST) != 0) {
infof(data, "Ignoring duplicate digest auth header.\n"); infof(data, "Ignoring duplicate digest auth header.\n");
} }
else { else if((authp->avail & CURLAUTH_DIGEST) ||
Curl_auth_is_digest_supported()) {
CURLcode result; CURLcode result;
*availp |= CURLAUTH_DIGEST; *availp |= CURLAUTH_DIGEST;
authp->avail |= CURLAUTH_DIGEST; authp->avail |= CURLAUTH_DIGEST;
/* We call this function on input Digest headers even if Digest /* We call this function on input Digest headers even if Digest
* 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 going to use
* Digest. */ * Digest */
result = Curl_input_digest(conn, proxy, auth); result = Curl_input_digest(conn, proxy, auth);
if(result) { if(result) {
infof(data, "Authentication problem. Ignoring this.\n"); infof(data, "Authentication problem. Ignoring this.\n");