]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Pass event name from Cache() creator functions
authorAmos Jeffries <squid3@treenet.co.nz>
Wed, 9 Sep 2015 14:03:19 +0000 (07:03 -0700)
committerAmos Jeffries <squid3@treenet.co.nz>
Wed, 9 Sep 2015 14:03:19 +0000 (07:03 -0700)
We cannot use any kind of smart storage in the CredentialsCache class
because that would now result in the c-strign being deallocated when
there is potentially an event still existing and using it.

It cannot be dynamically created and deleted because ownership is split
between event and the cache itself. Neither is in a good position to
control a dynamic strings lifetime. So make it a goblal const char*.

src/auth/CredentialsCache.cc
src/auth/CredentialsCache.h
src/auth/basic/User.cc
src/auth/digest/User.cc
src/auth/negotiate/User.cc
src/auth/ntlm/User.cc

index 70c08fdf235bb17a021bae71c7ac0c9d1210108d..17d8c6ba3e4464493c8b9786c4bcfe30362ffef2 100644 (file)
@@ -57,12 +57,11 @@ private:
 
 CBDATA_CLASS_INIT(CredentialsCache);
 
-CredentialsCache::CredentialsCache(const char *name) :
+CredentialsCache::CredentialsCache(const char *name, const char * const prettyEvName) :
     gcScheduled_(false),
-    cacheCleanupEventName("User cache cleanup: ")
+    cacheCleanupEventName(prettyEvName)
 {
     debugs(29, 5, "initializing " << name << " username cache");
-    cacheCleanupEventName.append(name);
     RegisterRunner(new Auth::CredentialCacheRr(name, this));
 }
 
@@ -135,7 +134,7 @@ CredentialsCache::scheduleCleanup()
 {
     if (!gcScheduled_ && store_.size()) {
         gcScheduled_ = true;
-        eventAdd(cacheCleanupEventName.c_str(), &CredentialsCache::Cleanup,
+        eventAdd(cacheCleanupEventName, &CredentialsCache::Cleanup,
                  this, ::Config.authenticateGCInterval, 1);
     }
 }
index a428876e96e79aa415227d4eae05cce25d977054..9c91f6afc5471bc3e0ec5d9d4235e4ca2a74a381 100644 (file)
@@ -27,7 +27,7 @@ private:
     typedef std::unordered_map<SBuf, Auth::User::Pointer> StoreType;
 
 public:
-    explicit CredentialsCache(const char *name);
+    explicit CredentialsCache(const char *name, const char * const eventName);
 
     ~CredentialsCache() = default;
     CredentialsCache(const CredentialsCache&) = delete;
@@ -73,10 +73,8 @@ private:
 
     StoreType store_;
 
-    // c_str() raw pointer is used in event. std::string must not reallocate
-    // after ctor and until shutdown
-    // must be unique
-    std::string cacheCleanupEventName;
+    // c-string raw pointer used as event name
+    const char * const cacheCleanupEventName;
 };
 
 } /* namespace Auth */
index 9c732a254ddf814ffc7db64c45ee347cf95b65b2..4a3749a9b03cb5dc606b084a255adcc94e80025e 100644 (file)
@@ -83,7 +83,7 @@ Auth::Basic::User::updateCached(Auth::Basic::User *from)
 CbcPointer<Auth::CredentialsCache>
 Auth::Basic::User::Cache()
 {
-    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("basic"));
+    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("basic", "GC Basic user credentials"));
     return p;
 }
 
index 81788f10fbd680e2bbb226e9ba038b324cc44abe..9e4a43080196ab050ddcbceec63cbe9e81c092b7 100644 (file)
@@ -76,7 +76,7 @@ Auth::Digest::User::currentNonce()
 CbcPointer<Auth::CredentialsCache>
 Auth::Digest::User::Cache()
 {
-    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("digest"));
+    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("digest","GC Digest user credentials"));
     return p;
 }
 
index 3a264d86c9f17287e0dde2c3bdef0e01ea7cc26b..56d15475f75a4074b2d18a2006810df86e7a91c5 100644 (file)
@@ -31,7 +31,7 @@ Auth::Negotiate::User::ttl() const
 CbcPointer<Auth::CredentialsCache>
 Auth::Negotiate::User::Cache()
 {
-    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("negotiate"));
+    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("negotiate", "GC Negotiate user credentials"));
     return p;
 }
 
index bd03c96b871b071bf8e2b6d4f3335a2a8c49a0eb..f613737684b2eaed87a9d00d85ad54849fbd9c6e 100644 (file)
@@ -31,7 +31,7 @@ Auth::Ntlm::User::ttl() const
 CbcPointer<Auth::CredentialsCache>
 Auth::Ntlm::User::Cache()
 {
-    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("ntlm"));
+    static CbcPointer<Auth::CredentialsCache> p(new Auth::CredentialsCache("ntlm", "GC NTLM user credentials"));
     return p;
 }