1
0
mirror of https://github.com/moparisthebest/curl synced 2024-12-21 23:58: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:
Daniel Stenberg 2003-09-04 10:55:20 +00:00
parent 8fae12b2f1
commit 1f9b0e70ab
3 changed files with 24 additions and 3 deletions

View File

@ -166,6 +166,12 @@ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...)
case CURLINFO_PRIVATE: case CURLINFO_PRIVATE:
*param_charp = data->set.private; *param_charp = data->set.private;
break; break;
case CURLINFO_HTTPAUTH_AVAIL:
*param_longp = data->info.httpauthavail;
break;
case CURLINFO_PROXYAUTH_AVAIL:
*param_longp = data->info.proxyauthavail;
break;
default: default:
return CURLE_BAD_FUNCTION_ARGUMENT; return CURLE_BAD_FUNCTION_ARGUMENT;
} }

View File

@ -287,9 +287,17 @@ CURLcode Curl_http_auth(struct connectdata *conn,
*/ */
struct SessionHandle *data = conn->data; struct SessionHandle *data = conn->data;
char *start = (httpcode == 407) ? long *availp;
header+strlen("Proxy-authenticate:"): char *start;
header+strlen("WWW-Authenticate:");
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 * Switch from proxy to web authentication and back if needed
*/ */
@ -305,6 +313,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
#ifdef GSSAPI #ifdef GSSAPI
if (checkprefix("GSS-Negotiate", start)) { if (checkprefix("GSS-Negotiate", start)) {
*availp |= CURLAUTH_GSSNEGOTIATE;
if(data->state.authwant == CURLAUTH_GSSNEGOTIATE) { if(data->state.authwant == CURLAUTH_GSSNEGOTIATE) {
/* if exactly this is wanted, go */ /* if exactly this is wanted, go */
int neg = Curl_input_negotiate(conn, start); int neg = Curl_input_negotiate(conn, start);
@ -320,6 +329,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
#ifdef USE_SSLEAY #ifdef USE_SSLEAY
/* NTLM support requires the SSL crypto libs */ /* NTLM support requires the SSL crypto libs */
if(checkprefix("NTLM", start)) { if(checkprefix("NTLM", start)) {
*availp |= CURLAUTH_NTLM;
if(data->state.authwant == CURLAUTH_NTLM) { if(data->state.authwant == CURLAUTH_NTLM) {
/* NTLM authentication is activated */ /* NTLM authentication is activated */
CURLntlm ntlm = CURLntlm ntlm =
@ -337,6 +347,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
else else
#endif #endif
if(checkprefix("Digest", start)) { if(checkprefix("Digest", start)) {
*availp |= CURLAUTH_DIGEST;
if(data->state.authwant == CURLAUTH_DIGEST) { if(data->state.authwant == CURLAUTH_DIGEST) {
/* Digest authentication is activated */ /* Digest authentication is activated */
CURLdigest dig = CURLDIGEST_BAD; CURLdigest dig = CURLDIGEST_BAD;
@ -363,6 +374,7 @@ CURLcode Curl_http_auth(struct connectdata *conn,
} }
} }
else if(checkprefix("Basic", start)) { else if(checkprefix("Basic", start)) {
*availp |= CURLAUTH_BASIC;
if((data->state.authwant == CURLAUTH_BASIC) && (httpcode == 401)) { if((data->state.authwant == CURLAUTH_BASIC) && (httpcode == 401)) {
/* We asked for Basic authentication but got a 401 back /* We asked for Basic authentication but got a 401 back
anyway, which basicly means our name+password isn't anyway, which basicly means our name+password isn't

View File

@ -575,6 +575,9 @@ struct PureInfo {
long header_size; /* size of read header(s) in bytes */ long header_size; /* size of read header(s) in bytes */
long request_size; /* the amount of bytes sent in the request(s) */ long request_size; /* the amount of bytes sent in the request(s) */
long proxyauthavail;
long httpauthavail;
char *contenttype; /* the content type of the object */ char *contenttype; /* the content type of the object */
}; };