]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Migrate cachemgr action to UserNameCache
authorFrancesco Chemolli <kinkie@squid-cache.org>
Thu, 3 Sep 2015 19:59:41 +0000 (21:59 +0200)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Thu, 3 Sep 2015 19:59:41 +0000 (21:59 +0200)
src/auth/Gadgets.cc
src/auth/Gadgets.h
src/auth/User.cc

index 179736616a29424402c6ac221629d2a5390c9d3c..4ab485a990ec681798ef499f6f86d8e6c00ecac0 100644 (file)
 #include "acl/Acl.h"
 #include "acl/FilledChecklist.h"
 #include "auth/AclProxyAuth.h"
+#include "auth/basic/User.h"
 #include "auth/Config.h"
+#include "auth/digest/User.h"
 #include "auth/Gadgets.h"
+#include "auth/negotiate/User.h"
+#include "auth/ntlm/User.h"
 #include "auth/Scheme.h"
 #include "auth/User.h"
+#include "auth/UserNameCache.h"
 #include "auth/UserRequest.h"
 #include "client_side.h"
 #include "globals.h"
@@ -128,3 +133,25 @@ AuthUserHashPointer::user() const
     return auth_user;
 }
 
+std::vector<Auth::User::Pointer>
+authenticateCachedUsersList()
+{
+    auto aucp_compare = [=](const Auth::User::Pointer lhs, const Auth::User::Pointer rhs) {
+        return lhs->SBUserKey() < rhs->SBUserKey();
+    };
+    std::vector<Auth::User::Pointer> v1, v2, rv;
+    auto u1 = Auth::Basic::User::Cache()->sortedUsersList();
+    auto u2 = Auth::Digest::User::Cache()->sortedUsersList();
+    v1.reserve(u1.size()+u2.size());
+    std::merge(u1.begin(), u1.end(),u2.begin(), u2.end(),
+               std::back_inserter(v1), aucp_compare);
+    u1 = Auth::Negotiate::User::Cache()->sortedUsersList();
+    u2 = Auth::Ntlm::User::Cache()->sortedUsersList();
+    v2.reserve(u1.size()+u2.size());
+    std::merge(u1.begin(), u1.end(),u2.begin(), u2.end(),
+               std::back_inserter(v2), aucp_compare);
+    rv.reserve(v1.size()+v2.size());
+    std::merge(v1.begin(), v1.end(),v2.begin(), v2.end(),
+               std::back_inserter(rv), aucp_compare);
+    return rv;
+}
index d13e3abe4d924b3dce0f5dfee8b689bba022d1ab..4174f9a0836ead3e4fc3adee2e06280329bce411 100644 (file)
@@ -81,6 +81,9 @@ int authenticateSchemeCount(void);
 /// \ingroup AuthAPI
 void authenticateOnCloseConnection(ConnStateData * conn);
 
+/// \ingroup AuthAPI
+std::vector<Auth::User::Pointer> authenticateCachedUsersList();
+
 #endif /* USE_AUTH */
 #endif /* SQUID_AUTH_GADGETS_H */
 
index 261ab025ed0e88658d26250f4c1032530f1bf418..ad7e801676cae167b451e8fbb27b4e2af0302c76 100644 (file)
@@ -324,14 +324,8 @@ Auth::User::BuildUserKey(const char *username, const char *realm)
 void
 Auth::User::UsernameCacheStats(StoreEntry *output)
 {
-    AuthUserHashPointer *usernamehash;
-
-    /* overview of username cache */
-    storeAppendPrintf(output, "Cached Usernames: %d of %d\n", proxy_auth_username_cache->count, proxy_auth_username_cache->size);
-    storeAppendPrintf(output, "Next Garbage Collection in %d seconds.\n",
-                      static_cast<int32_t>(last_discard + ::Config.authenticateGCInterval - squid_curtime));
-
-    /* cache dump column titles */
+    auto userlist = authenticateCachedUsersList();
+    storeAppendPrintf(output, "Cached Usernames: %d", static_cast<int32_t>(userlist.size()));
     storeAppendPrintf(output, "\n%-15s %-9s %-9s %-9s %s\n",
                       "Type",
                       "State",
@@ -339,11 +333,7 @@ Auth::User::UsernameCacheStats(StoreEntry *output)
                       "Cache TTL",
                       "Username");
     storeAppendPrintf(output, "--------------- --------- --------- --------- ------------------------------\n");
-
-    hash_first(proxy_auth_username_cache);
-    while ((usernamehash = ((AuthUserHashPointer *) hash_next(proxy_auth_username_cache)))) {
-        Auth::User::Pointer auth_user = usernamehash->user();
-
+    for ( auto auth_user : userlist ) {
         storeAppendPrintf(output, "%-15s %-9s %-9d %-9d %s\n",
                           Auth::Type_str[auth_user->auth_type],
                           CredentialState_str[auth_user->credentials()],