diff --git a/src/emqx_access_control.erl b/src/emqx_access_control.erl index 1b9d76937..2b9cb4211 100644 --- a/src/emqx_access_control.erl +++ b/src/emqx_access_control.erl @@ -156,16 +156,19 @@ handle_call({register_mod, Type, Mod, Opts, Seq}, _From, State) -> reply(case lists:keymember(Mod, 1, Mods) of true -> {error, already_exists}; false -> - case catch Mod:init(Opts) of - {ok, ModState} -> - NewMods = lists:sort(fun({_, _, Seq1}, {_, _, Seq2}) -> - Seq1 >= Seq2 - end, [{Mod, ModState, Seq} | Mods]), - ets:insert(?TAB, {tab_key(Type), NewMods}), ok; - {error, Error} -> - {error, Error}; - {'EXIT', Reason} -> - {error, Reason} + try + case Mod:init(Opts) of + {ok, ModState} -> + NewMods = lists:sort(fun({_, _, Seq1}, {_, _, Seq2}) -> + Seq1 >= Seq2 + end, [{Mod, ModState, Seq} | Mods]), + ets:insert(?TAB, {tab_key(Type), NewMods}), + ok + end + catch + _:Error -> + emqx_logger:error("[AccessControl] Failed to init ~s: ~p", [Mod, Error]), + {error, Error} end end, State); diff --git a/src/emqx_access_rule.erl b/src/emqx_access_rule.erl index 47b20676b..72a3d09b2 100644 --- a/src/emqx_access_rule.erl +++ b/src/emqx_access_rule.erl @@ -44,11 +44,7 @@ compile({A, Who, Access, Topic}) when ?ALLOW_DENY(A), ?PUBSUB(Access), is_binary {A, compile(who, Who), Access, [compile(topic, Topic)]}; compile({A, Who, Access, TopicFilters}) when ?ALLOW_DENY(A), ?PUBSUB(Access) -> - {A, compile(who, Who), Access, [compile(topic, Topic) || Topic <- TopicFilters]}; - -compile(Rule) -> - emqx_logger:error("[ACCESS_RULE] Malformed rule: ~p", [Rule]), - {error, bad_rule}. + {A, compile(who, Who), Access, [compile(topic, Topic) || Topic <- TopicFilters]}. compile(who, all) -> all; diff --git a/src/emqx_acl_internal.erl b/src/emqx_acl_internal.erl index 328993a78..1effd1709 100644 --- a/src/emqx_acl_internal.erl +++ b/src/emqx_acl_internal.erl @@ -63,9 +63,7 @@ load_rules_from_file(AclFile) -> emqx_logger:error("[ACL_INTERNAL] Failed to read ~s: ~p", [AclFile, Reason]), {error, Reason} end. - -filter(_PubSub, {error, _}) -> - false; + filter(_PubSub, {allow, all}) -> true; filter(_PubSub, {deny, all}) -> diff --git a/test/emqx_access_SUITE.erl b/test/emqx_access_SUITE.erl index 5d0bcf049..b49c90d80 100644 --- a/test/emqx_access_SUITE.erl +++ b/test/emqx_access_SUITE.erl @@ -355,8 +355,7 @@ compile_rule(_) -> {deny, all, subscribe, [ [<<"$SYS">>, '#'], ['#'] ]} = compile({deny, all, subscribe, ["$SYS/#", "#"]}), {allow, all} = compile({allow, all}), - {deny, all} = compile({deny, all}), - {error, bad_rule} = compile({test, malformed}). + {deny, all} = compile({deny, all}). match_rule(_) -> User = #{client_id => <<"testClient">>, username => <<"TestUser">>, peername => {{127,0,0,1}, 2948}},