diff options
Diffstat (limited to 'lib/http_digest.c')
-rw-r--r-- | lib/http_digest.c | 34 |
1 files changed, 18 insertions, 16 deletions
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*/ |