summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-08-23 09:00:13 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-08-23 09:00:13 +0300
commit47175adc747862af58071ad91c975f062dc66636 (patch)
treed5feefea7a71874e5ee5923780b8f72ad8b50e3f
parentIgnore some options from rebar.config (diff)
Explicitly match against <domain/resource>
Fixes #1958
-rw-r--r--src/mod_privacy.erl42
-rw-r--r--test/privacy_tests.erl14
2 files changed, 34 insertions, 22 deletions
diff --git a/src/mod_privacy.erl b/src/mod_privacy.erl
index 85384610..343645ff 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 cf416826..0e40adf2 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) ->