From 49b51db2311fb4b5c91d6c29556ff89e3cea4c55 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 28 Apr 2022 22:27:44 +0800 Subject: [PATCH 1/3] fix(gw): fix deep_merge can't update the configuration correctly --- apps/emqx_gateway/src/emqx_gateway_conf.erl | 25 +++++++++------------ 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/apps/emqx_gateway/src/emqx_gateway_conf.erl b/apps/emqx_gateway/src/emqx_gateway_conf.erl index 7cc26906b..4628d856a 100644 --- a/apps/emqx_gateway/src/emqx_gateway_conf.erl +++ b/apps/emqx_gateway/src/emqx_gateway_conf.erl @@ -478,12 +478,9 @@ pre_config_update(_, {update_authn, GwName, Conf}, RawConf) -> of undefined -> badres_authn(not_found, GwName); - _ -> - {ok, - emqx_map_lib:deep_merge( - RawConf, - #{GwName => #{?AUTHN_BIN => Conf}} - )} + Authn -> + NAuthn = maps:merge(Authn, Conf), + {ok, emqx_map_lib:deep_put([GwName, ?AUTHN_BIN], RawConf, NAuthn)} end; pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) -> case @@ -502,17 +499,15 @@ pre_config_update(_, {update_authn, GwName, {LType, LName}, Conf}, RawConf) -> Auth -> NListener = maps:put( ?AUTHN_BIN, - emqx_map_lib:deep_merge(Auth, Conf), + maps:merge(Auth, Conf), Listener ), - NGateway = #{ - GwName => - #{ - <<"listeners">> => - #{LType => #{LName => NListener}} - } - }, - {ok, emqx_map_lib:deep_merge(RawConf, NGateway)} + {ok, + emqx_map_lib:deep_put( + [GwName, <<"listeners">>, LType, LName], + RawConf, + NListener + )} end end; pre_config_update(_, {remove_authn, GwName}, RawConf) -> From f983ce2562459ab6e98334650e7cab282ce6fb22 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 28 Apr 2022 22:46:59 +0800 Subject: [PATCH 2/3] fix(lwm2m): correct ConnAck properties to map --- apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl index 15175c39f..61b08239a 100644 --- a/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl +++ b/apps/emqx_gateway/src/lwm2m/emqx_lwm2m_channel.erl @@ -344,7 +344,7 @@ ensure_connected( clientinfo = ClientInfo } ) -> - _ = run_hooks(Ctx, 'client.connack', [ConnInfo, connection_accepted, []]), + _ = run_hooks(Ctx, 'client.connack', [ConnInfo, connection_accepted, #{}]), NConnInfo = ConnInfo#{connected_at => erlang:system_time(millisecond)}, ok = run_hooks(Ctx, 'client.connected', [ClientInfo, NConnInfo]), From fd5b66230202b883d126afb66f339759ea2b3fc9 Mon Sep 17 00:00:00 2001 From: JianBo He Date: Thu, 28 Apr 2022 22:47:42 +0800 Subject: [PATCH 3/3] fix(stomp): sync clientid from clientinfo to conninfo --- apps/emqx_gateway/src/stomp/emqx_stomp_channel.erl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/apps/emqx_gateway/src/stomp/emqx_stomp_channel.erl b/apps/emqx_gateway/src/stomp/emqx_stomp_channel.erl index d137d7eab..4ef48d264 100644 --- a/apps/emqx_gateway/src/stomp/emqx_stomp_channel.erl +++ b/apps/emqx_gateway/src/stomp/emqx_stomp_channel.erl @@ -262,6 +262,17 @@ enrich_clientinfo( ), {ok, NPacket, Channel#channel{clientinfo = NClientInfo}}. +assign_clientid_to_conninfo( + Packet, + Channel = #channel{ + conninfo = ConnInfo, + clientinfo = ClientInfo + } +) -> + ClientId = maps:get(clientid, ClientInfo), + NConnInfo = maps:put(clientid, ClientId, ConnInfo), + {ok, Packet, Channel#channel{conninfo = NConnInfo}}. + feedvar(Override, Packet, ConnInfo, ClientInfo) -> Envs = #{ 'ConnInfo' => ConnInfo, @@ -409,6 +420,7 @@ handle_in(Packet = ?PACKET(?CMD_CONNECT), Channel) -> fun run_conn_hooks/2, fun negotiate_version/2, fun enrich_clientinfo/2, + fun assign_clientid_to_conninfo/2, fun set_log_meta/2, %% TODO: How to implement the banned in the gateway instance? %, fun check_banned/2