* This is used to link auth_users into the username cache.
* Because some schemes may link in aliases to a user,
* the link is not part of the AuthUser structure itself.
- *
- \todo Inheritance in a struct? this should be a class.
*/
-struct AuthUserHashPointer : public hash_link {
+class AuthUserHashPointer : public hash_link {
/* first two items must be same as hash_link */
public:
- static void removeFromCache(void *anAuthUserHashPointer);
MEMPROXY_CLASS(AuthUserHashPointer);
- AuthUserHashPointer(AuthUser::Pointer );
+ AuthUserHashPointer(AuthUser::Pointer);
+ ~AuthUserHashPointer() { auth_user = NULL; };
AuthUser::Pointer user() const;
+ static void removeFromCache(void *anAuthUserHashPointer);
private:
AuthUser::Pointer auth_user;
assert(RefCountCount() == 0);
/* were they linked in by username ? */
-
if (usernamehash) {
- assert(usernamehash->user() == this);
debugs(29, 5, "AuthUser::~AuthUser: removing usernamehash entry '" << usernamehash << "'");
- hash_remove_link(proxy_auth_username_cache,
- (hash_link *) usernamehash);
+ hash_remove_link(proxy_auth_username_cache, (hash_link *) usernamehash);
/* don't free the key as we use the same user string as the auth_user
* structure */
delete usernamehash;
* and re-using current valid credentials.
*/
hash_remove_link(proxy_auth_username_cache, usernamehash);
+ /* resolve the circular references of AuthUserHashPointer<->AuthUser by cutting before deleting. */
+ if(auth_user->usernamehash == usernamehash)
+ auth_user->usernamehash = NULL;
delete usernamehash;
}
}