mirror of
https://github.com/moparisthebest/curl
synced 2024-12-21 15:48:49 -05:00
Based on Joerg Mueller-Tolk's patch, this introduces support for
CURLINFO_HTTPAUTH_AVAIL and CURLINFO_PROXYAUTH_AVAIL
This commit is contained in:
parent
8fae12b2f1
commit
1f9b0e70ab
@ -166,6 +166,12 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
|
||||
case CURLINFO_PRIVATE:
|
||||
*param_charp = data->set.private;
|
||||
break;
|
||||
case CURLINFO_HTTPAUTH_AVAIL:
|
||||
*param_longp = data->info.httpauthavail;
|
||||
break;
|
||||
case CURLINFO_PROXYAUTH_AVAIL:
|
||||
*param_longp = data->info.proxyauthavail;
|
||||
break;
|
||||
default:
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
}
|
||||
|
18
lib/http.c
18
lib/http.c
@ -287,9 +287,17 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
||||
*/
|
||||
struct SessionHandle *data = conn->data;
|
||||
|
||||
char *start = (httpcode == 407) ?
|
||||
header+strlen("Proxy-authenticate:"):
|
||||
header+strlen("WWW-Authenticate:");
|
||||
long *availp;
|
||||
char *start;
|
||||
|
||||
if (httpcode == 407) {
|
||||
start = header+strlen("Proxy-authenticate:");
|
||||
availp = &data->info.proxyauthavail;
|
||||
}
|
||||
else {
|
||||
start = header+strlen("WWW-Authenticate:");
|
||||
availp = &data->info.httpauthavail;
|
||||
}
|
||||
/*
|
||||
* Switch from proxy to web authentication and back if needed
|
||||
*/
|
||||
@ -305,6 +313,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
||||
|
||||
#ifdef GSSAPI
|
||||
if (checkprefix("GSS-Negotiate", start)) {
|
||||
*availp |= CURLAUTH_GSSNEGOTIATE;
|
||||
if(data->state.authwant == CURLAUTH_GSSNEGOTIATE) {
|
||||
/* if exactly this is wanted, go */
|
||||
int neg = Curl_input_negotiate(conn, start);
|
||||
@ -320,6 +329,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
||||
#ifdef USE_SSLEAY
|
||||
/* NTLM support requires the SSL crypto libs */
|
||||
if(checkprefix("NTLM", start)) {
|
||||
*availp |= CURLAUTH_NTLM;
|
||||
if(data->state.authwant == CURLAUTH_NTLM) {
|
||||
/* NTLM authentication is activated */
|
||||
CURLntlm ntlm =
|
||||
@ -337,6 +347,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
||||
else
|
||||
#endif
|
||||
if(checkprefix("Digest", start)) {
|
||||
*availp |= CURLAUTH_DIGEST;
|
||||
if(data->state.authwant == CURLAUTH_DIGEST) {
|
||||
/* Digest authentication is activated */
|
||||
CURLdigest dig = CURLDIGEST_BAD;
|
||||
@ -363,6 +374,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
|
||||
}
|
||||
}
|
||||
else if(checkprefix("Basic", start)) {
|
||||
*availp |= CURLAUTH_BASIC;
|
||||
if((data->state.authwant == CURLAUTH_BASIC) && (httpcode == 401)) {
|
||||
/* We asked for Basic authentication but got a 401 back
|
||||
anyway, which basicly means our name+password isn't
|
||||
|
@ -575,6 +575,9 @@ struct PureInfo {
|
||||
long header_size; /* size of read header(s) in bytes */
|
||||
long request_size; /* the amount of bytes sent in the request(s) */
|
||||
|
||||
long proxyauthavail;
|
||||
long httpauthavail;
|
||||
|
||||
char *contenttype; /* the content type of the object */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user