From: Amos Jeffries Date: Wed, 20 May 2009 06:59:04 +0000 (+1200) Subject: Author: Matthias Pitzl X-Git-Tag: SQUID_3_2_0_1~1007 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3d29d59a69c421c543360b98e3e5d2a23bfb2450;p=thirdparty%2Fsquid.git Author: Matthias Pitzl Bug 2644: auth scheme initialization is broken Allocates auth schemas dynamically when needed. TODO: de-allocate somehow on shutdown to stop the leakage this adds --- diff --git a/src/auth/basic/basicScheme.cc b/src/auth/basic/basicScheme.cc index f2f213cece..86a7911f8c 100644 --- a/src/auth/basic/basicScheme.cc +++ b/src/auth/basic/basicScheme.cc @@ -36,7 +36,9 @@ AuthScheme & basicScheme::GetInstance() { - return _instance; + if (_instance == NULL) + _instance = new basicScheme(); + return *_instance; } basicScheme::basicScheme() @@ -50,4 +52,4 @@ basicScheme::type () const return "basic"; } -basicScheme basicScheme::_instance; +basicScheme *basicScheme::_instance = NULL; diff --git a/src/auth/basic/basicScheme.h b/src/auth/basic/basicScheme.h index f431b10154..98e2092460 100644 --- a/src/auth/basic/basicScheme.h +++ b/src/auth/basic/basicScheme.h @@ -55,7 +55,7 @@ public: basicScheme &operator=(basicScheme const &); private: - static basicScheme _instance; + static basicScheme *_instance; }; #endif /* SQUID_BASICSCHEME_H */ diff --git a/src/auth/digest/digestScheme.cc b/src/auth/digest/digestScheme.cc index 69802ee7fb..649cd6136a 100644 --- a/src/auth/digest/digestScheme.cc +++ b/src/auth/digest/digestScheme.cc @@ -36,7 +36,9 @@ AuthScheme & digestScheme::GetInstance() { - return _instance; + if (_instance == NULL) + _instance = new digestScheme(); + return *_instance; } digestScheme::digestScheme() @@ -50,4 +52,4 @@ digestScheme::type () const return "digest"; } -digestScheme digestScheme::_instance; +digestScheme *digestScheme::_instance = NULL; diff --git a/src/auth/digest/digestScheme.h b/src/auth/digest/digestScheme.h index 156044fe79..5d534eb6d5 100644 --- a/src/auth/digest/digestScheme.h +++ b/src/auth/digest/digestScheme.h @@ -55,7 +55,7 @@ public: digestScheme &operator=(digestScheme const &); private: - static digestScheme _instance; + static digestScheme *_instance; }; #endif /* SQUID_DIGESTSCHEME_H */ diff --git a/src/auth/negotiate/negotiateScheme.cc b/src/auth/negotiate/negotiateScheme.cc index 07cbc5762c..499375effa 100644 --- a/src/auth/negotiate/negotiateScheme.cc +++ b/src/auth/negotiate/negotiateScheme.cc @@ -36,7 +36,9 @@ AuthScheme & negotiateScheme::GetInstance() { - return _instance; + if (_instance == NULL) + _instance = new negotiateScheme(); + return *_instance; } negotiateScheme::negotiateScheme() @@ -50,4 +52,4 @@ negotiateScheme::type () const return "negotiate"; } -negotiateScheme negotiateScheme::_instance; +negotiateScheme *negotiateScheme::_instance = NULL; diff --git a/src/auth/negotiate/negotiateScheme.h b/src/auth/negotiate/negotiateScheme.h index 8923683f9c..bde9a59769 100644 --- a/src/auth/negotiate/negotiateScheme.h +++ b/src/auth/negotiate/negotiateScheme.h @@ -55,7 +55,7 @@ public: negotiateScheme &operator=(negotiateScheme const &); private: - static negotiateScheme _instance; + static negotiateScheme *_instance; }; #endif /* SQUID_negotiateSCHEME_H */ diff --git a/src/auth/ntlm/ntlmScheme.cc b/src/auth/ntlm/ntlmScheme.cc index 973b8b94b6..8f5f74c2a1 100644 --- a/src/auth/ntlm/ntlmScheme.cc +++ b/src/auth/ntlm/ntlmScheme.cc @@ -36,7 +36,9 @@ AuthScheme & ntlmScheme::GetInstance() { - return _instance; + if (_instance == NULL) + _instance = new ntlmScheme(); + return *_instance; } ntlmScheme::ntlmScheme() @@ -50,4 +52,4 @@ ntlmScheme::type () const return "ntlm"; } -ntlmScheme ntlmScheme::_instance; +ntlmScheme *ntlmScheme::_instance = NULL; diff --git a/src/auth/ntlm/ntlmScheme.h b/src/auth/ntlm/ntlmScheme.h index 94f10a9b33..f9b037c9a4 100644 --- a/src/auth/ntlm/ntlmScheme.h +++ b/src/auth/ntlm/ntlmScheme.h @@ -55,7 +55,7 @@ public: ntlmScheme &operator=(ntlmScheme const &); private: - static ntlmScheme _instance; + static ntlmScheme *_instance; }; #endif /* SQUID_ntlmSCHEME_H */