aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/http.c7
-rw-r--r--lib/http_digest.c34
-rw-r--r--lib/http_digest.h16
3 files changed, 24 insertions, 33 deletions
diff --git a/lib/http.c b/lib/http.c
index 989e09e20..2487bac08 100644
--- a/lib/http.c
+++ b/lib/http.c
@@ -845,7 +845,7 @@ CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
infof(data, "Ignoring duplicate digest auth header.\n");
}
else {
- CURLdigest dig;
+ CURLcode result;
*availp |= 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
* incoming data from this header in case we are gonna use
* Digest. */
- dig = Curl_input_digest(conn, proxy, auth);
-
- if(CURLDIGEST_FINE != dig) {
+ result = Curl_input_digest(conn, proxy, auth);
+ if(result) {
infof(data, "Authentication problem. Ignoring this.\n");
data->state.authproblem = TRUE;
}
diff --git a/lib/http_digest.c b/lib/http_digest.c
index 03963dbc9..19de4d41e 100644
--- a/lib/http_digest.c
+++ b/lib/http_digest.c
@@ -121,10 +121,10 @@ Proxy-Authenticate: Digest realm="testrealm", nonce="1053604598"
*/
-CURLdigest Curl_input_digest(struct connectdata *conn,
- bool proxy,
- const char *header) /* rest of the *-authenticate:
- header */
+CURLcode Curl_input_digest(struct connectdata *conn,
+ bool proxy,
+ const char *header) /* rest of the *-authenticate:
+ header */
{
char *token = NULL;
char *tmp = NULL;
@@ -163,7 +163,7 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
if(Curl_raw_equal(value, "nonce")) {
d->nonce = strdup(content);
if(!d->nonce)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
}
else if(Curl_raw_equal(value, "stale")) {
if(Curl_raw_equal(content, "true")) {
@@ -174,12 +174,12 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
else if(Curl_raw_equal(value, "realm")) {
d->realm = strdup(content);
if(!d->realm)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
}
else if(Curl_raw_equal(value, "opaque")) {
d->opaque = strdup(content);
if(!d->opaque)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
}
else if(Curl_raw_equal(value, "qop")) {
char *tok_buf;
@@ -187,7 +187,8 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
clone of the buffer since strtok_r() ruins it */
tmp = strdup(content);
if(!tmp)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
+
token = strtok_r(tmp, ",", &tok_buf);
while(token != NULL) {
if(Curl_raw_equal(token, "auth")) {
@@ -203,24 +204,25 @@ CURLdigest Curl_input_digest(struct connectdata *conn,
if(foundAuth) {
d->qop = strdup("auth");
if(!d->qop)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
}
else if(foundAuthInt) {
d->qop = strdup("auth-int");
if(!d->qop)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
}
}
else if(Curl_raw_equal(value, "algorithm")) {
d->algorithm = strdup(content);
if(!d->algorithm)
- return CURLDIGEST_NOMEM;
+ return CURLE_OUT_OF_MEMORY;
+
if(Curl_raw_equal(content, "MD5-sess"))
d->algo = CURLDIGESTALGO_MD5SESS;
else if(Curl_raw_equal(content, "MD5"))
d->algo = CURLDIGESTALGO_MD5;
else
- return CURLDIGEST_BADALGO;
+ return CURLE_BAD_CONTENT_ENCODING;
}
else {
/* 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
request */
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! */
if(!d->nonce)
- return CURLDIGEST_BAD;
+ return CURLE_BAD_CONTENT_ENCODING;
}
else
/* 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*/
diff --git a/lib/http_digest.h b/lib/http_digest.h
index c6a4e9161..42ed83c7b 100644
--- a/lib/http_digest.h
+++ b/lib/http_digest.h
@@ -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
* you should have received as part of this distribution. The terms
@@ -23,24 +23,14 @@
***************************************************************************/
#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 {
CURLDIGESTALGO_MD5,
CURLDIGESTALGO_MD5SESS
};
/* this is for digest header input */
-CURLdigest Curl_input_digest(struct connectdata *conn,
- bool proxy, const char *header);
+CURLcode Curl_input_digest(struct connectdata *conn,
+ bool proxy, const char *header);
/* this is for creating digest header output */
CURLcode Curl_output_digest(struct connectdata *conn,