From: Francesco Chemolli Date: Wed, 2 Sep 2015 15:11:23 +0000 (+0200) Subject: Implement audit and documentation X-Git-Tag: SQUID_4_0_1~21^2~45 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c531de885c7ee532bad94a7ccc2930f18b8dc256;p=thirdparty%2Fsquid.git Implement audit and documentation --- diff --git a/src/auth/UserNameCache.cc b/src/auth/UserNameCache.cc index 2cd00804eb..32e907db5d 100644 --- a/src/auth/UserNameCache.cc +++ b/src/auth/UserNameCache.cc @@ -16,11 +16,11 @@ namespace Auth { UserNameCache::UserNameCache(const char *name) : - cachename(name) + cachename(name), cacheCleanupEventName("User cache cleanup: ") { - static std::string eventName("User Cache cleanup: "); - eventName.append(name); - eventAdd(eventName.c_str(), &UserNameCache::cleanup, this, ::Config.authenticateGCInterval, 1); + cacheCleanupEventName.append(name); + eventAdd(cacheCleanupEventName.c_str(), &UserNameCache::Cleanup, + this, ::Config.authenticateGCInterval, 1); } Auth::User::Pointer @@ -28,27 +28,15 @@ UserNameCache::lookup(const SBuf &userKey) { auto p = store_.find(userKey); if (p == store_.end()) - return User::Pointer(); + return User::Pointer(nullptr); return p->second; } void -UserNameCache::reset() +UserNameCache::Cleanup(void *data) { - store_.clear(); -} - -size_t -UserNameCache::size() -{ - return store_.size(); -} - -void -UserNameCache::cleanup(void *me) -{ - // me is this in disguise - UserNameCache *self = static_cast(me); + // data is this in disguise + UserNameCache *self = static_cast(data); // cache entries with expiretime <= expirationTime are to be evicted const time_t expirationTime = current_time.tv_sec - ::Config.authenticateTTL; const auto end = self->store_.end(); @@ -64,7 +52,10 @@ UserNameCache::insert(Auth::User::Pointer anAuth_user) store_[anAuth_user->SBUserKey()] = anAuth_user; } -std::vector UserNameCache::sortedUsersList () +// generates the list of cached usernames in a format that is convenient +// to merge with equivalent lists obtained from other UserNameCaches. +std::vector +UserNameCache::sortedUsersList() { std::vector rv(size(), nullptr); std::transform(store_.begin(), store_.end(), rv.begin(), diff --git a/src/auth/UserNameCache.h b/src/auth/UserNameCache.h index 1aa38b488b..2d718868e8 100644 --- a/src/auth/UserNameCache.h +++ b/src/auth/UserNameCache.h @@ -16,10 +16,15 @@ namespace Auth { +/** Cache of Auth::User::Pointer, keyed by Auth::User::userKey + * + * It's meant to be used as a per-authentication protocol cache, + * cleaning up objects which are past authenticate_ttl life + */ class UserNameCache { private: - /// key is Uer::userKey(), mapped value is User::Pointer + /// key is User::userKey(), mapped value is User::Pointer typedef std::unordered_map StoreType; public: @@ -36,15 +41,17 @@ public: /// add an user to the cache void insert(Auth::User::Pointer anAuth_user); - void reset(); + /// clear cache + void reset() { store_.clear(); } - size_t size(); + /// extract number of cached usernames + size_t size() { return store_.size(); } /** periodic cleanup function, removes timed-out entries * * Must be static to support EVH interface. Argument will be this */ - static void cleanup(void *); + static void Cleanup(void *); /** obtain sorted list of usernames * @@ -55,6 +62,9 @@ private: // for logs, events etc. const char *cachename; + + // must be unique to the cache and valid for the object's lifetime + std::string cacheCleanupEventName; }; } /* namespace Auth */