Skip to content

Commit 0ee8a76

Browse files
committed
mod_privacy: honor the 'order' attribute
When checking a packet against the active privacy list, make sure that the matching item with the lowest 'order' attribute is used. Bug-url: #2529 Signed-off-by: Eugene Crosser [email protected]
1 parent c3f62c0 commit 0ee8a76

File tree

1 file changed

+32
-15
lines changed

1 file changed

+32
-15
lines changed

src/mod_privacy.erl

Lines changed: 32 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -584,30 +584,47 @@ do_check_packet(#jid{luser = LUser, lserver = LServer}, List, Packet, Dir) ->
584584
roster_get_jid_info, LServer,
585585
{none, none, []},
586586
[LUser, LServer, LJID]),
587-
check_packet_aux(List, PType2, LJID, Subscription, Groups)
587+
{Action, _Order} = check_packet_aux(allow, last, List, PType2, LJID,
588+
Subscription, Groups),
589+
Action
588590
end.
589591

590-
-spec check_packet_aux([listitem()],
592+
-spec check_packet_aux(allow | deny, last | integer(), [listitem()],
591593
message | iq | presence_in | presence_out | other,
592594
ljid(), none | both | from | to, [binary()]) ->
593595
allow | deny.
594596
%% Ptype = mesage | iq | presence_in | presence_out | other
595-
check_packet_aux([], _PType, _JID, _Subscription,
597+
check_packet_aux(Lastaction, Lastorder, [], _PType, _JID, _Subscription,
596598
_Groups) ->
597-
allow;
598-
check_packet_aux([Item | List], PType, JID,
599+
?DEBUG("Finally: ~p", [{Lastaction, Lastorder}]),
600+
{Lastaction, Lastorder};
601+
check_packet_aux(Lastaction, Lastorder, [Item | List], PType, JID,
599602
Subscription, Groups) ->
600-
#listitem{type = Type, value = Value, action = Action} =
603+
?DEBUG("Check packet ~p against rule ~p, previously ~p",
604+
[{PType, JID, Subscription, Groups}, Item, {Lastaction, Lastorder}]),
605+
#listitem{type = Type, value = Value, action = Action, order = Order} =
601606
Item,
602-
case is_ptype_match(Item, PType) of
603-
true ->
604-
case is_type_match(Type, Value, JID, Subscription, Groups) of
605-
true -> Action;
606-
false ->
607-
check_packet_aux(List, PType, JID, Subscription, Groups)
608-
end;
609-
false ->
610-
check_packet_aux(List, PType, JID, Subscription, Groups)
607+
Higherprio = case Lastorder of
608+
last -> true;
609+
_ when Lastorder > Order -> true;
610+
_ -> false
611+
end,
612+
?DEBUG("Higher priority rule? ~p", [Higherprio]),
613+
case Higherprio of
614+
true ->
615+
Ptypematch = is_ptype_match(Item, PType),
616+
Typematch = is_type_match(Type, Value, JID, Subscription, Groups),
617+
?DEBUG("ptype match? ~p, type match? ~p", [Ptypematch, Typematch]),
618+
case Ptypematch and Typematch of
619+
true ->
620+
?DEBUG("Using action ~p from this rule", [Action]),
621+
check_packet_aux(Action, Order, List, PType, JID,
622+
Subscription, Groups);
623+
false -> check_packet_aux(Lastaction, Lastorder, List,
624+
PType, JID, Subscription, Groups)
625+
end;
626+
false -> check_packet_aux(Lastaction, Lastorder, List, PType, JID,
627+
Subscription, Groups)
611628
end.
612629

613630
-spec is_ptype_match(listitem(),

0 commit comments

Comments
 (0)