From 522bd935ba21e92333c53cf89daa64f32f45a567 Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Sat, 14 May 2022 12:23:05 +0200 Subject: [PATCH] fix(authn): check authenticator config existence in pre-update callback prior to this change, the authenticator existence check was done in the post-update callback, this causes confusion as teh list already contains duplication. --- apps/emqx/src/emqx_authentication_config.erl | 21 ++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/apps/emqx/src/emqx_authentication_config.erl b/apps/emqx/src/emqx_authentication_config.erl index bed8bbd31..93fcafc35 100644 --- a/apps/emqx/src/emqx_authentication_config.erl +++ b/apps/emqx/src/emqx_authentication_config.erl @@ -71,9 +71,15 @@ pre_config_update(_, UpdateReq, OldConfig) -> end. do_pre_config_update({create_authenticator, ChainName, Config}, OldConfig) -> - CertsDir = certs_dir(ChainName, Config), - NConfig = convert_certs(CertsDir, Config), - {ok, OldConfig ++ [NConfig]}; + NewId = authenticator_id(Config), + case lists:filter(fun(OldConfig0) -> authenticator_id(OldConfig0) =:= NewId end, OldConfig) of + [] -> + CertsDir = certs_dir(ChainName, Config), + NConfig = convert_certs(CertsDir, Config), + {ok, OldConfig ++ [NConfig]}; + [_] -> + {error, {already_exists, {authenticator, NewId}}} + end; do_pre_config_update({delete_authenticator, _ChainName, AuthenticatorID}, OldConfig) -> NewConfig = lists:filter( fun(OldConfig0) -> @@ -257,9 +263,12 @@ clear_certs(CertsDir, Config) -> ok = emqx_tls_lib:delete_ssl_files(CertsDir, undefined, OldSSL). get_authenticator_config(AuthenticatorID, AuthenticatorsConfig) -> - case [C0 || C0 <- AuthenticatorsConfig, AuthenticatorID == authenticator_id(C0)] of - [C | _] -> C; - [] -> {error, not_found} + case + lists:filter(fun(C) -> AuthenticatorID =:= authenticator_id(C) end, AuthenticatorsConfig) + of + [C] -> C; + [] -> {error, not_found}; + _ -> error({duplicated_authenticator_id, AuthenticatorsConfig}) end. split_by_id(ID, AuthenticatorsConfig) ->