Bläddra i källkod

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.
Steve Holme 9 år sedan
förälder
incheckning
efe4bab29b
3 ändrade filer med 24 tillägg och 33 borttagningar
  1. 3 4
      lib/http.c
  2. 18 16
      lib/http_digest.c
  3. 3 13
      lib/http_digest.h

+ 3 - 4
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;
             }

+ 18 - 16
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*/

+ 3 - 13
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,