]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Bug 4066: Digest auth nonce indefinite rollover
authorFrederic Bourgeois <fredbmail@free.fr>
Tue, 20 Jan 2015 10:29:45 +0000 (02:29 -0800)
committerAmos Jeffries <squid3@treenet.co.nz>
Tue, 20 Jan 2015 10:29:45 +0000 (02:29 -0800)
src/auth/digest/Config.cc
src/auth/digest/UserRequest.cc

index e0177578384f653faac026d3cec305b9c20f349e..beaf946e7d7018698da962373b5f23b93b5bd210 100644 (file)
@@ -1013,12 +1013,7 @@ Auth::Digest::Config::decode(char const *proxy_auth, const char *aRequestRealm)
         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);
index 19ea3115de3b0d0a5969c8cd99ef73066bc82ea7..6ff06f6367e3fc0e51b37efca119951eb6ae3499 100644 (file)
@@ -173,10 +173,14 @@ Auth::Digest::UserRequest::authenticate(HttpRequest * request, ConnStateData *,
     }
 
     /* 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;
     }