diff --git a/apps/emqx_retainer/src/emqx_retainer.app.src b/apps/emqx_retainer/src/emqx_retainer.app.src index 27baf5e88..941038d73 100644 --- a/apps/emqx_retainer/src/emqx_retainer.app.src +++ b/apps/emqx_retainer/src/emqx_retainer.app.src @@ -1,6 +1,6 @@ {application, emqx_retainer, [{description, "EMQ X Retainer"}, - {vsn, "4.4.3"}, % strict semver, bump manually! + {vsn, "4.4.4"}, % strict semver, bump manually! {modules, []}, {registered, [emqx_retainer_sup]}, {applications, [kernel,stdlib]}, diff --git a/apps/emqx_retainer/src/emqx_retainer.appup.src b/apps/emqx_retainer/src/emqx_retainer.appup.src index 045afb570..54413bfa2 100644 --- a/apps/emqx_retainer/src/emqx_retainer.appup.src +++ b/apps/emqx_retainer/src/emqx_retainer.appup.src @@ -1,15 +1,27 @@ %% -*- mode: erlang -*- %% Unless you know what you are doing, DO NOT edit manually!! {VSN, - [{"4.4.2",[{load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, - {"4.4.1",[{load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, + [{"4.4.3",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}]}, + {"4.4.2",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]} + ]}, + {"4.4.1",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]} + ]}, {"4.4.0", - [{load_module,emqx_retainer_cli,brutal_purge,soft_purge,[]}, + [{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_cli,brutal_purge,soft_purge,[]}, {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], - [{"4.4.2",[{load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, - {"4.4.1",[{load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, + [{"4.4.3",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}]}, + {"4.4.2",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]} + ]}, + {"4.4.1",[{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]} + ]}, {"4.4.0", - [{load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}, - {load_module,emqx_retainer_cli,brutal_purge,soft_purge,[]}]}, + [{load_module,emqx_retainer,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_cli,brutal_purge,soft_purge,[]}, + {load_module,emqx_retainer_sup,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}]}. diff --git a/apps/emqx_retainer/src/emqx_retainer.erl b/apps/emqx_retainer/src/emqx_retainer.erl index 3bafc6a1d..84e49c5be 100644 --- a/apps/emqx_retainer/src/emqx_retainer.erl +++ b/apps/emqx_retainer/src/emqx_retainer.erl @@ -22,6 +22,7 @@ -include_lib("emqx/include/emqx.hrl"). -include_lib("emqx/include/logger.hrl"). -include_lib("stdlib/include/ms_transform.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). -logger_header("[Retainer]"). @@ -74,11 +75,12 @@ on_session_subscribed(_, Topic, #{rh := Rh, is_new := IsNew}) -> %% @private dispatch(Pid, Topic) -> - Msgs = case emqx_topic:wildcard(Topic) of - false -> read_messages(Topic); - true -> match_messages(Topic) - end, + MsgsT = case emqx_topic:wildcard(Topic) of + false -> read_messages(Topic); + true -> match_messages(Topic) + end, Now = erlang:system_time(millisecond), + Msgs = drop_banned_messages(MsgsT), [Pid ! {deliver, Topic, refresh_timestamp_expiry(Msg, Now)} || Msg <- sort_retained(Msgs)]. %% RETAIN flag set to 1 and payload containing zero bytes @@ -332,3 +334,21 @@ refresh_timestamp_expiry(Msg = #message{headers = refresh_timestamp_expiry(Msg, Now) -> Msg#message{timestamp = Now}. + +drop_banned_messages(Msgs) -> + lists:filter(fun(Msg) -> + case emqx_banned:look_up({clientid, Msg#message.from}) of + [] -> + true; + _ -> + ?tp( + notice, + ignore_retained_message_deliver, + #{ + reason => "client is banned", + clientid => Msg#message.from + } + ), + false + end + end, Msgs). diff --git a/apps/emqx_retainer/test/emqx_retainer_SUITE.erl b/apps/emqx_retainer/test/emqx_retainer_SUITE.erl index 787c49bcb..6e2f7b1ca 100644 --- a/apps/emqx_retainer/test/emqx_retainer_SUITE.erl +++ b/apps/emqx_retainer/test/emqx_retainer_SUITE.erl @@ -23,6 +23,7 @@ -include_lib("eunit/include/eunit.hrl"). -include_lib("common_test/include/ct.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). all() -> emqx_ct:all(?MODULE). @@ -189,6 +190,53 @@ t_stop_publish_clear_msg(_) -> ok = emqtt:disconnect(C1). +t_deliver_when_banned(_) -> + Client1 = <<"c1">>, + Client2 = <<"c2">>, + + {ok, C1} = emqtt:start_link([{clientid, Client1}, {clean_start, true}, {proto_ver, v5}]), + {ok, _} = emqtt:connect(C1), + + lists:foreach( + fun(I) -> + Topic = erlang:list_to_binary(io_lib:format("retained/~p", [I])), + Msg = emqx_message:make(Client2, 0, Topic, <<"this is a retained message">>), + Msg2 = emqx_message:set_flag(retain, Msg), + emqx:publish(Msg2) + end, + lists:seq(1, 3) + ), + + Now = erlang:system_time(second), + Who = {clientid, Client2}, + + emqx_banned:create(#{ + who => Who, + by => <<"test">>, + reason => <<"test">>, + at => Now, + until => Now + 120 + }), + timer:sleep(100), + + snabbkaffe:start_trace(), + + {ok, SubRef} = + snabbkaffe_collector:subscribe(?match_event(#{?snk_kind := ignore_retained_message_deliver}), + _NEvents = 3, + _Timeout = 10000, + 0), + + {ok, #{}, [0]} = emqtt:subscribe(C1, <<"retained/+">>, [{qos, 0}, {rh, 0}]), + {ok, Trace} = snabbkaffe_collector:receive_events(SubRef), + ?assertEqual(3, length(?of_kind(ignore_retained_message_deliver, Trace))), + + snabbkaffe:stop(), + + emqx_banned:delete(Who), + {ok, #{}, [0]} = emqtt:unsubscribe(C1, <<"retained/+">>), + ok = emqtt:disconnect(C1). + %%-------------------------------------------------------------------- %% Helper functions %%-------------------------------------------------------------------- diff --git a/changes/v4.4.15-en.md b/changes/v4.4.15-en.md index 88ad61ca6..f0cd4dad6 100644 --- a/changes/v4.4.15-en.md +++ b/changes/v4.4.15-en.md @@ -4,6 +4,12 @@ - Added Ubuntu 22.04 package release [#9831](https://github.com/emqx/emqx/pull/9831). +- Improve the integration of the `banned` and the `delayed` feature [#9790](https://github.com/emqx/emqx/pull/9790). + Now when publishing a delayed message will check first if its source client is banned, if true, this publish will be ignored. + +- Security enhancement for retained messages [#9790](https://github.com/emqx/emqx/pull/9790). + The retained messages will not be published if the publisher client is banned. + ## Bug fixes - Fix the problem that new MQTT TLS connections failed to establish after release hot upgrade [#9810](https://github.com/emqx/emqx/pull/9810). diff --git a/changes/v4.4.15-zh.md b/changes/v4.4.15-zh.md index 6d2859e82..a08c3d8db 100644 --- a/changes/v4.4.15-zh.md +++ b/changes/v4.4.15-zh.md @@ -4,6 +4,12 @@ - 发布 Ubuntu 22.04 安装包 [#9831](https://github.com/emqx/emqx/pull/9831)。 +- 增强 `封禁` 和 `延迟消息` 这两个功能的集成性 [#9790](https://github.com/emqx/emqx/pull/9790)。 + 现在发送延迟消息前,会先检查消息的来源客户端是否被封禁了,如果是,这条延迟消息将会被忽略。 + +- 增强 `保留消息` 的安全性 [#9790](https://github.com/emqx/emqx/pull/9790)。 + 现在投递保留消息前,会先过滤掉来源客户端被封禁了的那些消息。 + ## 修复 - 修复版本热升级之后,新的 MQTT TLS 连接建立失败的问题 [#9810](https://github.com/emqx/emqx/pull/9810)。 diff --git a/lib-ce/emqx_modules/src/emqx_mod_delayed.erl b/lib-ce/emqx_modules/src/emqx_mod_delayed.erl index 14d91f4b3..8f2a816ba 100644 --- a/lib-ce/emqx_modules/src/emqx_mod_delayed.erl +++ b/lib-ce/emqx_modules/src/emqx_mod_delayed.erl @@ -21,6 +21,7 @@ -include_lib("emqx/include/emqx.hrl"). -include_lib("emqx/include/logger.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). -logger_header("[Delayed]"). @@ -228,7 +229,20 @@ do_publish(Key = {Ts, _Id}, Now, Acc) when Ts =< Now -> case mnesia:dirty_read(?TAB, Key) of [] -> ok; [#delayed_message{msg = Msg}] -> - emqx_pool:async_submit(fun emqx:publish/1, [Msg]) + case emqx_banned:look_up({clientid, Msg#message.from}) of + [] -> + emqx_pool:async_submit(fun emqx:publish/1, [Msg]); + _ -> + ?tp( + notice, + ignore_delayed_message_publish, + #{ + reason => "client is banned", + clienid => Msg#message.from + } + ), + ok + end end, do_publish(mnesia:dirty_next(?TAB, Key), Now, [Key|Acc]). diff --git a/lib-ce/emqx_modules/src/emqx_modules.app.src b/lib-ce/emqx_modules/src/emqx_modules.app.src index 05c9a73ec..a2694a5e6 100644 --- a/lib-ce/emqx_modules/src/emqx_modules.app.src +++ b/lib-ce/emqx_modules/src/emqx_modules.app.src @@ -1,6 +1,6 @@ {application, emqx_modules, [{description, "EMQ X Module Management"}, - {vsn, "4.4.8"}, + {vsn, "4.4.9"}, {modules, []}, {applications, [kernel,stdlib]}, {mod, {emqx_modules_app, []}}, diff --git a/lib-ce/emqx_modules/src/emqx_modules.appup.src b/lib-ce/emqx_modules/src/emqx_modules.appup.src index 0abd3a3e9..3f43fd093 100644 --- a/lib-ce/emqx_modules/src/emqx_modules.appup.src +++ b/lib-ce/emqx_modules/src/emqx_modules.appup.src @@ -1,7 +1,9 @@ %% -*- mode: erlang -*- %% Unless you know what you are doing, DO NOT edit manually!! {VSN, - [{"4.4.7",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]}, + [{"4.4.8",[{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}]}, + {"4.4.7",[{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}, + {load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]}, {"4.4.6", [{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}, {load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}]}, @@ -40,7 +42,9 @@ {load_module,emqx_mod_sup,brutal_purge,soft_purge,[]}, {load_module,emqx_mod_trace_api,brutal_purge,soft_purge,[]}]}, {<<".*">>,[]}], - [{"4.4.7",[{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]}, + [{"4.4.8",[{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}]}, + {"4.4.7",[{load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}, + {load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}]}, {"4.4.6", [{load_module,emqx_mod_rewrite,brutal_purge,soft_purge,[]}, {load_module,emqx_mod_delayed,brutal_purge,soft_purge,[]}]}, diff --git a/lib-ce/emqx_modules/test/emqx_mod_delayed_SUITE.erl b/lib-ce/emqx_modules/test/emqx_mod_delayed_SUITE.erl index 306a1a03d..715e541f0 100644 --- a/lib-ce/emqx_modules/test/emqx_mod_delayed_SUITE.erl +++ b/lib-ce/emqx_modules/test/emqx_mod_delayed_SUITE.erl @@ -26,6 +26,7 @@ -include_lib("common_test/include/ct.hrl"). -include_lib("eunit/include/eunit.hrl"). -include_lib("emqx/include/emqx.hrl"). +-include_lib("snabbkaffe/include/snabbkaffe.hrl"). %%-------------------------------------------------------------------- %% Setups @@ -78,3 +79,46 @@ t_delayed_message(_) -> EmptyKey = mnesia:dirty_all_keys(emqx_mod_delayed), ?assertEqual([], EmptyKey), ok = emqx_mod_delayed:unload([]). + +t_banned_delayed(_) -> + ok = emqx_mod_delayed:load([]), + ClientId1 = <<"bc1">>, + ClientId2 = <<"bc2">>, + + Now = erlang:system_time(second), + Who = {clientid, ClientId2}, + emqx_banned:create(#{ + who => Who, + by => <<"test">>, + reason => <<"test">>, + at => Now, + until => Now + 120 + }), + + snabbkaffe:start_trace(), + + {ok, SubRef} = + snabbkaffe_collector:subscribe(?match_event(#{?snk_kind := ignore_delayed_message_publish}), + _NEvents = 2, + _Timeout = 10000, + 0), + + lists:foreach( + fun(ClientId) -> + Msg = emqx_message:make(ClientId, <<"$delayed/1/bc">>, <<"payload">>), + emqx_mod_delayed:on_message_publish(Msg) + end, + [ClientId1, ClientId1, ClientId1, ClientId2, ClientId2] + ), + + ?assertMatch({ok, [#{?snk_kind := ignore_delayed_message_publish}, + #{?snk_kind := ignore_delayed_message_publish} + ]}, + snabbkaffe_collector:receive_events(SubRef)), + + snabbkaffe:stop(), + + emqx_banned:delete(Who), + EmptyKey = mnesia:dirty_all_keys(emqx_mod_delayed), + ?assertEqual([], EmptyKey), + ok = emqx_mod_delayed:unload([]). diff --git a/src/emqx.appup.src b/src/emqx.appup.src index d25adf12f..cf5bdafd9 100644 --- a/src/emqx.appup.src +++ b/src/emqx.appup.src @@ -2,27 +2,31 @@ %% Unless you know what you are doing, DO NOT edit manually!! {VSN, [{"4.4.14", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, {"4.4.13", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, @@ -32,7 +36,8 @@ {load_module,emqx_session,brutal_purge,soft_purge,[]}, {load_module,emqx_channel,brutal_purge,soft_purge,[]}]}, {"4.4.10", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -54,7 +59,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.9", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -82,7 +88,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.8", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -111,7 +118,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.7", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -140,7 +148,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.6", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -169,7 +178,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.5", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -200,7 +210,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.4", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, @@ -238,7 +249,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.3", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, {add_module,emqx_crl_cache}, @@ -282,7 +294,8 @@ {apply,{application,set_env, [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {"4.4.2", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {add_module,emqx_cover}, {add_module,emqx_ocsp_cache}, {add_module,emqx_crl_cache}, @@ -430,27 +443,31 @@ [gen_rpc,insecure_auth_fallback_allowed,true]}}]}, {<<".*">>,[]}], [{"4.4.14", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}]}, {"4.4.13", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.12", - [{load_module,emqx_misc,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_misc,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_cm,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}]}, {"4.4.11", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_relup,brutal_purge,soft_purge,[]}, {load_module,emqx_app,brutal_purge,soft_purge,[]}, @@ -460,7 +477,8 @@ {load_module,emqx_session,brutal_purge,soft_purge,[]}, {delete_module,emqx_cover}]}, {"4.4.10", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -479,7 +497,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.9", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -503,7 +522,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.8", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -528,7 +548,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.7", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -553,7 +574,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.6", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -578,7 +600,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.5", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -605,7 +628,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.4", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_packet,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, @@ -639,7 +663,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.3", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, {load_module,emqx_hooks,brutal_purge,soft_purge,[]}, @@ -678,7 +703,8 @@ {delete_module,emqx_crl_cache}, {delete_module,emqx_ocsp_cache}]}, {"4.4.2", - [{load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, + [{load_module,emqx_banned,brutal_purge,soft_purge,[]}, + {load_module,emqx_rule_actions_trans,brutal_purge,soft_purge,[]}, {load_module,emqx_listeners,brutal_purge,soft_purge,[]}, {load_module,emqx_kernel_sup,brutal_purge,soft_purge,[]}, {load_module,emqx_router_helper,brutal_purge,soft_purge,[]}, diff --git a/src/emqx_banned.erl b/src/emqx_banned.erl index 6cc1580be..ba5259c52 100644 --- a/src/emqx_banned.erl +++ b/src/emqx_banned.erl @@ -36,6 +36,7 @@ , create/1 , delete/1 , info/1 + , look_up/1 ]). %% gen_server callbacks @@ -111,6 +112,9 @@ delete(Who) -> info(InfoKey) -> mnesia:table_info(?BANNED_TAB, InfoKey). +look_up(Who) -> + mnesia:dirty_read(?BANNED_TAB, Who). + %%-------------------------------------------------------------------- %% gen_server callbacks %%-------------------------------------------------------------------- @@ -158,4 +162,3 @@ expire_banned_items(Now) -> mnesia:delete_object(?BANNED_TAB, B, sticky_write); (_, _Acc) -> ok end, ok, ?BANNED_TAB). -