diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/http.c | 7 | ||||
| -rw-r--r-- | lib/http_digest.c | 34 | ||||
| -rw-r--r-- | lib/http_digest.h | 16 | 
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, | 
