From 47175adc747862af58071ad91c975f062dc66636 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Wed, 23 Aug 2017 09:00:13 +0300 Subject: [PATCH] Explicitly match against Fixes #1958 --- src/mod_privacy.erl | 42 +++++++++++++++++++++++------------------- test/privacy_tests.erl | 14 +++++++++++--- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl index 85384610d..343645ff7 100644 --- a/src/mod_privacy.erl +++ b/src/mod_privacy.erl @@ -638,25 +638,29 @@ is_ptype_match(Item, PType) -> ljid(), none | both | from | to, [binary()]) -> boolean(). is_type_match(none, _Value, _JID, _Subscription, _Groups) -> true; -is_type_match(Type, Value, JID, Subscription, Groups) -> - case Type of - jid -> - case Value of - {<<"">>, Server, <<"">>} -> - case JID of - {_, Server, _} -> true; - _ -> false - end; - {User, Server, <<"">>} -> - case JID of - {User, Server, _} -> true; - _ -> false - end; - _ -> Value == JID - end; - subscription -> Value == Subscription; - group -> lists:member(Value, Groups) - end. +is_type_match(jid, Value, JID, _Subscription, _Groups) -> + case Value of + {<<"">>, Server, <<"">>} -> + case JID of + {_, Server, _} -> true; + _ -> false + end; + {User, Server, <<"">>} -> + case JID of + {User, Server, _} -> true; + _ -> false + end; + {<<"">>, Server, Resource} -> + case JID of + {_, Server, Resource} -> true; + _ -> false + end; + _ -> Value == JID + end; +is_type_match(subscription, Value, _JID, Subscription, _Groups) -> + Value == Subscription; +is_type_match(group, Group, _JID, _Subscription, Groups) -> + lists:member(Group, Groups). -spec remove_user(binary(), binary()) -> ok. remove_user(User, Server) -> diff --git a/test/privacy_tests.erl b/test/privacy_tests.erl index cf4168262..0e40adf28 100644 --- a/test/privacy_tests.erl +++ b/test/privacy_tests.erl @@ -258,7 +258,8 @@ master_slave_cases() -> {privacy_master_slave, [sequence], [master_slave_test(deny_bare_jid), master_slave_test(deny_full_jid), - master_slave_test(deny_server_jid), + master_slave_test(deny_server_bare_jid), + master_slave_test(deny_server_full_jid), master_slave_test(deny_group), master_slave_test(deny_sub_both), master_slave_test(deny_sub_from), @@ -285,11 +286,18 @@ deny_full_jid_master(Config) -> deny_full_jid_slave(Config) -> deny_slave(Config). -deny_server_jid_master(Config) -> +deny_server_bare_jid_master(Config) -> {_, Server, _} = jid:tolower(?config(peer, Config)), deny_master(Config, {jid, Server}). -deny_server_jid_slave(Config) -> +deny_server_bare_jid_slave(Config) -> + deny_slave(Config). + +deny_server_full_jid_master(Config) -> + {_, Server, Resource} = jid:tolower(?config(peer, Config)), + deny_master(Config, {jid, jid:encode({<<"">>, Server, Resource})}). + +deny_server_full_jid_slave(Config) -> deny_slave(Config). deny_group_master(Config) ->