]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 4066: Digest auth nonce indefinite rollover
authorFrederic Bourgeois <fredbmail@free.fr>
Mon, 19 Jan 2015 16:42:41 +0000 (08:42 -0800)
committerAmos Jeffries <squid3@treenet.co.nz>
Mon, 19 Jan 2015 16:42:41 +0000 (08:42 -0800)
src/auth/digest/UserRequest.cc
src/auth/digest/auth_digest.cc

index 9107d739f6f0e4fb042e6a00a131d5571d50dbc8..011f10941ec3adb524ea42c21dee2384603f234c 100644 (file)
@@ -152,10 +152,14 @@ Auth::Digest::UserRequest::authenticate(HttpRequest * request, ConnStateData * c
     }
 
     /* check for stale nonce */
-    if (!authDigestNonceIsValid(digest_request->nonce, digest_request->nc)) {
-        debugs(29, 3, "user '" << auth_user->username() << "' validated OK but nonce stale");
-        auth_user->credentials(Auth::Handshake);
-        digest_request->setDenyMessage("Stale nonce");
+    /* check Auth::Pending to avoid loop */
+
+    if (!authDigestNonceIsValid(digest_request->nonce, digest_request->nc) && user()->credentials() != Auth::Pending) {
+        debugs(29, 3, auth_user->username() << "' validated OK but nonce stale: " << digest_request->nonceb64);
+        /* Pending prevent banner and makes a ldap control */
+        auth_user->credentials(Auth::Pending);
+        nonce->flags.valid = false;
+        authDigestNoncePurge(nonce);
         return;
     }
 
index 7cc32766d77f322d278f9aa96e6393768321d3e3..610f5471754220e28f7e1f2e89309b6ccf5b9e7d 100644 (file)
@@ -1038,12 +1038,7 @@ Auth::Digest::Config::decode(char const *proxy_auth)
         debugs(29, 2, "Username for the nonce does not equal the username for the request");
         nonce = NULL;
     }
-    /* check for stale nonce */
-    if (authDigestNonceIsStale(nonce)) {
-        debugs(29, 3, "The received nonce is stale from " << username);
-        digest_request->setDenyMessage("Stale nonce");
-        nonce = NULL;
-    }
+
     if (!nonce) {
         /* we couldn't find a matching nonce! */
         debugs(29, 2, "Unexpected or invalid nonce received from " << username);