From: Francesco Chemolli Date: Thu, 3 Sep 2015 16:21:31 +0000 (+0200) Subject: Convert Negotiate to new cache X-Git-Tag: SQUID_4_0_1~21^2~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7c8c3d0a30914929f5c161b83e3bd2db8c3e206c;p=thirdparty%2Fsquid.git Convert Negotiate to new cache --- diff --git a/src/auth/negotiate/UserRequest.cc b/src/auth/negotiate/UserRequest.cc index 7699dc0767..8c44f21146 100644 --- a/src/auth/negotiate/UserRequest.cc +++ b/src/auth/negotiate/UserRequest.cc @@ -9,9 +9,11 @@ #include "squid.h" #include "AccessLogEntry.h" #include "auth/negotiate/Config.h" +#include "auth/negotiate/User.h" #include "auth/negotiate/UserRequest.h" #include "auth/State.h" #include "auth/User.h" +#include "auth/UserNameCache.h" #include "client_side.h" #include "fatal.h" #include "format/Format.h" @@ -331,29 +333,15 @@ Auth::Negotiate::UserRequest::HandleReply(void *data, const Helper::Reply &reply /* connection is authenticated */ debugs(29, 4, HERE << "authenticated user " << auth_user_request->user()->username()); -#if !NEWCACHE - /* see if this is an existing user */ - AuthUserHashPointer *usernamehash = static_cast(hash_lookup(proxy_auth_username_cache, auth_user_request->user()->userKey())); - Auth::User::Pointer local_auth_user = lm_request->user(); - while (usernamehash && (usernamehash->user()->auth_type != Auth::AUTH_NEGOTIATE || - strcmp(usernamehash->user()->userKey(), auth_user_request->user()->userKey()) != 0)) - usernamehash = static_cast(usernamehash->next); - if (usernamehash) { - /* we can't seamlessly recheck the username due to the - * challenge-response nature of the protocol. - * Just free the temporary auth_user after merging as - * much of it new state into the existing one as possible */ - usernamehash->user()->absorb(local_auth_user); - /* from here on we are working with the original cached credentials. */ - local_auth_user = usernamehash->user(); - auth_user_request->user(local_auth_user); - } else { - /* store user in hash's */ + auto local_auth_user = lm_request->user(); + auto cached_user = Auth::Negotiate::User::Cache()->lookup(auth_user_request->user()->SBUserKey()); + if (!cached_user) { local_auth_user->addToNameCache(); + } else { + cached_user->absorb(local_auth_user); + local_auth_user = cached_user; + auth_user_request->user(local_auth_user); } -#else - -#endif /* set these to now because this is either a new login from an * existing user or a new user */ local_auth_user->expiretime = current_time.tv_sec;