mirror of
https://github.com/moparisthebest/curl
synced 2024-12-22 08:08:50 -05:00
http_digest: Use CURLcode instead of CURLdigest
To provide consistent behaviour between the various HTTP authentication functions use CURLcode based error codes for Curl_input_digest() especially as the calling code doesn't use the specific error code just that it failed.
This commit is contained in:
parent
54c8728cd7
commit
efe4bab29b
@ -845,7 +845,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
|
|||||||
infof(data, "Ignoring duplicate digest auth header.\n");
|
infof(data, "Ignoring duplicate digest auth header.\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
CURLdigest dig;
|
CURLcode result;
|
||||||
*availp |= CURLAUTH_DIGEST;
|
*availp |= CURLAUTH_DIGEST;
|
||||||
authp->avail |= CURLAUTH_DIGEST;
|
authp->avail |= CURLAUTH_DIGEST;
|
||||||
|
|
||||||
@ -853,9 +853,8 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
|
|||||||
* 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, proxy, auth);
|
result = Curl_input_digest(conn, proxy, auth);
|
||||||
|
if(result) {
|
||||||
if(CURLDIGEST_FINE != dig) {
|
|
||||||
infof(data, "Authentication problem. Ignoring this.\n");
|
infof(data, "Authentication problem. Ignoring this.\n");
|
||||||
data->state.authproblem = TRUE;
|
data->state.authproblem = TRUE;
|
||||||
}
|
}
|
||||||
|
@ -121,7 +121,7 @@ Proxy-Authenticate: Digest realm="testrealm", nonce="1053604598"
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
CURLdigest Curl_input_digest(struct connectdata *conn,
|
CURLcode Curl_input_digest(struct connectdata *conn,
|
||||||
bool proxy,
|
bool proxy,
|
||||||
const char *header) /* rest of the *-authenticate:
|
const char *header) /* rest of the *-authenticate:
|
||||||
header */
|
header */
|
||||||
@ -163,7 +163,7 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
if(Curl_raw_equal(value, "nonce")) {
|
if(Curl_raw_equal(value, "nonce")) {
|
||||||
d->nonce = strdup(content);
|
d->nonce = strdup(content);
|
||||||
if(!d->nonce)
|
if(!d->nonce)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
else if(Curl_raw_equal(value, "stale")) {
|
else if(Curl_raw_equal(value, "stale")) {
|
||||||
if(Curl_raw_equal(content, "true")) {
|
if(Curl_raw_equal(content, "true")) {
|
||||||
@ -174,12 +174,12 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
else if(Curl_raw_equal(value, "realm")) {
|
else if(Curl_raw_equal(value, "realm")) {
|
||||||
d->realm = strdup(content);
|
d->realm = strdup(content);
|
||||||
if(!d->realm)
|
if(!d->realm)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
else if(Curl_raw_equal(value, "opaque")) {
|
else if(Curl_raw_equal(value, "opaque")) {
|
||||||
d->opaque = strdup(content);
|
d->opaque = strdup(content);
|
||||||
if(!d->opaque)
|
if(!d->opaque)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
else if(Curl_raw_equal(value, "qop")) {
|
else if(Curl_raw_equal(value, "qop")) {
|
||||||
char *tok_buf;
|
char *tok_buf;
|
||||||
@ -187,7 +187,8 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
clone of the buffer since strtok_r() ruins it */
|
clone of the buffer since strtok_r() ruins it */
|
||||||
tmp = strdup(content);
|
tmp = strdup(content);
|
||||||
if(!tmp)
|
if(!tmp)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
|
||||||
token = strtok_r(tmp, ",", &tok_buf);
|
token = strtok_r(tmp, ",", &tok_buf);
|
||||||
while(token != NULL) {
|
while(token != NULL) {
|
||||||
if(Curl_raw_equal(token, "auth")) {
|
if(Curl_raw_equal(token, "auth")) {
|
||||||
@ -203,24 +204,25 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
if(foundAuth) {
|
if(foundAuth) {
|
||||||
d->qop = strdup("auth");
|
d->qop = strdup("auth");
|
||||||
if(!d->qop)
|
if(!d->qop)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
else if(foundAuthInt) {
|
else if(foundAuthInt) {
|
||||||
d->qop = strdup("auth-int");
|
d->qop = strdup("auth-int");
|
||||||
if(!d->qop)
|
if(!d->qop)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(Curl_raw_equal(value, "algorithm")) {
|
else if(Curl_raw_equal(value, "algorithm")) {
|
||||||
d->algorithm = strdup(content);
|
d->algorithm = strdup(content);
|
||||||
if(!d->algorithm)
|
if(!d->algorithm)
|
||||||
return CURLDIGEST_NOMEM;
|
return CURLE_OUT_OF_MEMORY;
|
||||||
|
|
||||||
if(Curl_raw_equal(content, "MD5-sess"))
|
if(Curl_raw_equal(content, "MD5-sess"))
|
||||||
d->algo = CURLDIGESTALGO_MD5SESS;
|
d->algo = CURLDIGESTALGO_MD5SESS;
|
||||||
else if(Curl_raw_equal(content, "MD5"))
|
else if(Curl_raw_equal(content, "MD5"))
|
||||||
d->algo = CURLDIGESTALGO_MD5;
|
d->algo = CURLDIGESTALGO_MD5;
|
||||||
else
|
else
|
||||||
return CURLDIGEST_BADALGO;
|
return CURLE_BAD_CONTENT_ENCODING;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* unknown specifier, ignore it! */
|
/* unknown specifier, ignore it! */
|
||||||
@ -240,17 +242,17 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
|
|||||||
'stale=true'. This means we provided bad credentials in the previous
|
'stale=true'. This means we provided bad credentials in the previous
|
||||||
request */
|
request */
|
||||||
if(before && !d->stale)
|
if(before && !d->stale)
|
||||||
return CURLDIGEST_BAD;
|
return CURLE_BAD_CONTENT_ENCODING;
|
||||||
|
|
||||||
/* We got this header without a nonce, that's a bad Digest line! */
|
/* We got this header without a nonce, that's a bad Digest line! */
|
||||||
if(!d->nonce)
|
if(!d->nonce)
|
||||||
return CURLDIGEST_BAD;
|
return CURLE_BAD_CONTENT_ENCODING;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
/* else not a digest, get out */
|
/* else not a digest, get out */
|
||||||
return CURLDIGEST_NONE;
|
return CURLE_BAD_CONTENT_ENCODING;
|
||||||
|
|
||||||
return CURLDIGEST_FINE;
|
return CURLE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/
|
/* convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -23,23 +23,13 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "curl_setup.h"
|
#include "curl_setup.h"
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
CURLDIGEST_NONE, /* not a digest */
|
|
||||||
CURLDIGEST_BAD, /* a digest, but one we don't like */
|
|
||||||
CURLDIGEST_BADALGO, /* unsupported algorithm requested */
|
|
||||||
CURLDIGEST_NOMEM,
|
|
||||||
CURLDIGEST_FINE, /* a digest we act on */
|
|
||||||
|
|
||||||
CURLDIGEST_LAST /* last entry in this enum, don't use */
|
|
||||||
} CURLdigest;
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
CURLDIGESTALGO_MD5,
|
CURLDIGESTALGO_MD5,
|
||||||
CURLDIGESTALGO_MD5SESS
|
CURLDIGESTALGO_MD5SESS
|
||||||
};
|
};
|
||||||
|
|
||||||
/* this is for digest header input */
|
/* this is for digest header input */
|
||||||
CURLdigest Curl_input_digest(struct connectdata *conn,
|
CURLcode Curl_input_digest(struct connectdata *conn,
|
||||||
bool proxy, const char *header);
|
bool proxy, const char *header);
|
||||||
|
|
||||||
/* this is for creating digest header output */
|
/* this is for creating digest header output */
|
||||||
|
Loading…
Reference in New Issue
Block a user