From cffdb06b66233d58f2bee763cc14e4eaba3b6454 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Fri, 16 Feb 2018 20:50:22 +0300 Subject: [PATCH] Cache 'isuser' queries to external auth program --- src/ejabberd_auth.erl | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/ejabberd_auth.erl b/src/ejabberd_auth.erl index df75be9eb..03eee9de4 100644 --- a/src/ejabberd_auth.erl +++ b/src/ejabberd_auth.erl @@ -526,7 +526,10 @@ db_get_password(User, Server, Mod) -> UseCache = use_cache(Mod, Server), case erlang:function_exported(Mod, get_password, 2) of false when UseCache -> - ets_cache:lookup(?AUTH_CACHE, {User, Server}); + case ets_cache:lookup(?AUTH_CACHE, {User, Server}) of + {ok, exists} -> error; + Other -> Other + end; false -> error; true when UseCache -> @@ -544,7 +547,20 @@ db_user_exists(User, Server, Mod) -> error -> case Mod:store_type(Server) of external -> - Mod:user_exists(User, Server); + case ets_cache:update( + ?AUTH_CACHE, {User, Server}, {ok, exists}, + fun() -> + case Mod:user_exists(User, Server) of + true -> {ok, exists}; + false -> error; + {error, _} = Err -> Err + end + end, cache_nodes(Mod, Server)) of + {ok, _} -> + true; + error -> + false + end; _ -> false end -- 2.40.0