#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"
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;
+}
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",
"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()],