Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: authentication should be array, not struct #8924

Merged
merged 6 commits into from
Oct 17, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGES-5.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
* Fix empty variable interpolation in authentication and authorization. Placeholders for undefined variables are rendered now as empty strings and do not cause errors anymore. [#8963](https://github.com/emqx/emqx/pull/8963)
* Fix the latency statistics error of the slow subscription module when `stats_type` is `internal` or `response`. [#8986](https://github.com/emqx/emqx/pull/8986)
* Redispatch shared subscription messages. [#9104](https://github.com/emqx/emqx/pull/9104)
* Ensure authentication type is an array, not struct. [#8923](https://github.com/emqx/emqx/pull/8923)

# 5.0.8

Expand All @@ -24,6 +25,7 @@
* Speed up dispatching of shared subscription messages in a cluster [#8893](https://github.com/emqx/emqx/pull/8893)
* Fix the extra / prefix when CoAP gateway parsing client topics. [#8658](https://github.com/emqx/emqx/pull/8658)
* Speed up updating the configuration, When some nodes in the cluster are down. [#8857](https://github.com/emqx/emqx/pull/8857)

* Fix delayed publish inaccurate caused by os time change. [#8926](https://github.com/emqx/emqx/pull/8926)
* Fix that EMQX can't start when the retainer is disabled [#8911](https://github.com/emqx/emqx/pull/8911)
* Fix that redis authn will deny the unknown users [#8934](https://github.com/emqx/emqx/pull/8934)
Expand Down
5 changes: 1 addition & 4 deletions apps/emqx/src/emqx_authentication_config.erl
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
pre_config_update(_, UpdateReq, OldConfig) ->
try do_pre_config_update(UpdateReq, to_list(OldConfig)) of
{error, Reason} -> {error, Reason};
{ok, NewConfig} -> {ok, return_map(NewConfig)}
{ok, NewConfig} -> {ok, NewConfig}
catch
throw:Reason ->
{error, Reason}
Expand Down Expand Up @@ -225,9 +225,6 @@ do_check_config(Type, Config, Module) ->
throw({bad_authenticator_config, #{type => Type, reason => E}})
end.

return_map([L]) -> L;
return_map(L) -> L.

to_list(undefined) -> [];
to_list(M) when M =:= #{} -> [];
to_list(M) when is_map(M) -> [M];
Expand Down
6 changes: 3 additions & 3 deletions apps/emqx/src/emqx_config.erl
Original file line number Diff line number Diff line change
Expand Up @@ -414,9 +414,9 @@ check_config(SchemaMod, RawConf) ->
check_config(SchemaMod, RawConf, Opts0) ->
Opts1 = #{
return_plain => true,
%% TODO: evil, remove, required should be declared in schema
required => false,
format => map
format => map,
%% Don't check lazy types, such as authenticate
check_lazy => false
},
Opts = maps:merge(Opts0, Opts1),
{AppEnvs, CheckedConf} =
Expand Down
1 change: 1 addition & 0 deletions apps/emqx/src/emqx_schema.erl
Original file line number Diff line number Diff line change
Expand Up @@ -2276,6 +2276,7 @@ validate_alarm_actions(Actions) ->
Error -> {error, Error}
end.

parse_user_lookup_fun({Fun, _} = Lookup) when is_function(Fun, 3) -> Lookup;
parse_user_lookup_fun(StrConf) ->
[ModStr, FunStr] = string:tokens(str(StrConf), ": "),
Mod = list_to_atom(ModStr),
Expand Down
4 changes: 3 additions & 1 deletion apps/emqx_authn/src/emqx_authn.erl
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,9 @@ do_check_config(#{<<"mechanism">> := Mec} = Config, Opts) ->
#{?CONF_NS_BINARY => Config},
Opts#{atom_key => true}
)
end.
end;
do_check_config(_Config, _Opts) ->
throw({invalid_config, "mechanism_field_required"}).

atom(Bin) ->
try
Expand Down
38 changes: 24 additions & 14 deletions apps/emqx_authn/src/emqx_authn_app.erl
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@
start(_StartType, _StartArgs) ->
ok = mria_rlog:wait_for_shards([?AUTH_SHARD], infinity),
{ok, Sup} = emqx_authn_sup:start_link(),
ok = initialize(),
{ok, Sup}.
case initialize() of
ok -> {ok, Sup};
{error, Reason} -> {error, Reason}
end.

stop(_State) ->
ok = deinitialize(),
Expand All @@ -49,18 +51,26 @@ stop(_State) ->
%%------------------------------------------------------------------------------

initialize() ->
ok = ?AUTHN:register_providers(emqx_authn:providers()),

lists:foreach(
fun({ChainName, RawAuthConfigs}) ->
AuthConfig = emqx_authn:check_configs(RawAuthConfigs),
?AUTHN:initialize_authentication(
ChainName,
AuthConfig
)
end,
chain_configs()
).
try
ok = ?AUTHN:register_providers(emqx_authn:providers()),

lists:foreach(
fun({ChainName, RawAuthConfigs}) ->
AuthConfig = emqx_authn:check_configs(RawAuthConfigs),
?AUTHN:initialize_authentication(
ChainName,
AuthConfig
)
end,
chain_configs()
)
of
ok -> ok
catch
throw:Reason ->
?SLOG(error, #{msg => "failed_to_initialize_authentication", reason => Reason}),
{error, {failed_to_initialize_authentication, Reason}}
end.

deinitialize() ->
ok = ?AUTHN:deregister_providers(provider_types()),
Expand Down