]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Implement audit and documentation
authorFrancesco Chemolli <kinkie@squid-cache.org>
Wed, 2 Sep 2015 15:11:23 +0000 (17:11 +0200)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Wed, 2 Sep 2015 15:11:23 +0000 (17:11 +0200)
src/auth/UserNameCache.cc
src/auth/UserNameCache.h

index 2cd00804eb11fee413f21c4e52f41755da957071..32e907db5ded8c3bf058efdfa73fceaf2915047b 100644 (file)
 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<UserNameCache *>(me);
+    // data is this in disguise
+    UserNameCache *self = static_cast<UserNameCache *>(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<Auth::User::Pointer> 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<Auth::User::Pointer>
+UserNameCache::sortedUsersList()
 {
     std::vector<Auth::User::Pointer> rv(size(), nullptr);
     std::transform(store_.begin(), store_.end(), rv.begin(),
index 1aa38b488bd4be781866abb42982a2bfed36c320..2d718868e815e111a19d2417c8e158efa8de53f0 100644 (file)
 
 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<SBuf, Auth::User::Pointer> 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 */