From d21237557c861059520981bb99b42f54bc9d7ff7 Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Thu, 3 Sep 2015 21:59:41 +0200 Subject: [PATCH] Migrate cachemgr action to UserNameCache --- src/auth/Gadgets.cc | 27 +++++++++++++++++++++++++++ src/auth/Gadgets.h | 3 +++ src/auth/User.cc | 16 +++------------- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/src/auth/Gadgets.cc b/src/auth/Gadgets.cc index 179736616a..4ab485a990 100644 --- a/src/auth/Gadgets.cc +++ b/src/auth/Gadgets.cc @@ -16,10 +16,15 @@ #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 +authenticateCachedUsersList() +{ + auto aucp_compare = [=](const Auth::User::Pointer lhs, const Auth::User::Pointer rhs) { + return lhs->SBUserKey() < rhs->SBUserKey(); + }; + std::vector 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; +} diff --git a/src/auth/Gadgets.h b/src/auth/Gadgets.h index d13e3abe4d..4174f9a083 100644 --- a/src/auth/Gadgets.h +++ b/src/auth/Gadgets.h @@ -81,6 +81,9 @@ int authenticateSchemeCount(void); /// \ingroup AuthAPI void authenticateOnCloseConnection(ConnStateData * conn); +/// \ingroup AuthAPI +std::vector authenticateCachedUsersList(); + #endif /* USE_AUTH */ #endif /* SQUID_AUTH_GADGETS_H */ diff --git a/src/auth/User.cc b/src/auth/User.cc index 261ab025ed..ad7e801676 100644 --- a/src/auth/User.cc +++ b/src/auth/User.cc @@ -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(last_discard + ::Config.authenticateGCInterval - squid_curtime)); - - /* cache dump column titles */ + auto userlist = authenticateCachedUsersList(); + storeAppendPrintf(output, "Cached Usernames: %d", static_cast(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()], -- 2.47.2