fix: including subscription id keeps correct return code for qos > 0

When subscription id is set, the return code was set to 0 rather than
the provided qos number due to earlier fix of acl check order.
This commit is contained in:
Tobias Lindahl 2021-05-31 08:55:16 +02:00
parent 18484577b1
commit 90529e18c6
1 changed files with 3 additions and 3 deletions

View File

@ -407,7 +407,8 @@ handle_in(Packet = ?SUBSCRIBE_PACKET(PacketId, Properties, TopicFilters),
case emqx_packet:check(Packet) of
ok ->
TopicFilters0 = parse_topic_filters(TopicFilters),
TupleTopicFilters0 = check_sub_acls(TopicFilters0, Channel),
TopicFilters1 = put_subid_in_subopts(Properties, TopicFilters0),
TupleTopicFilters0 = check_sub_acls(TopicFilters1, Channel),
case emqx_zone:get_env(Zone, acl_deny_action, ignore) =:= disconnect andalso
lists:any(fun({_TopicFilter, ReasonCode}) ->
ReasonCode =:= ?RC_NOT_AUTHORIZED
@ -419,8 +420,7 @@ handle_in(Packet = ?SUBSCRIBE_PACKET(PacketId, Properties, TopicFilters),
_Fun(lists:keyreplace(Key, 1, TupleList, Tuple), More);
_Fun(TupleList, []) -> TupleList
end,
TopicFilters1 = [ TopicFilter || {TopicFilter, 0} <- TupleTopicFilters0],
TopicFilters2 = put_subid_in_subopts(Properties, TopicFilters1),
TopicFilters2 = [ TopicFilter || {TopicFilter, 0} <- TupleTopicFilters0],
TopicFilters3 = run_hooks('client.subscribe',
[ClientInfo, Properties],
TopicFilters2),