aboutsummaryrefslogtreecommitdiff
path: root/src/mod_roster.erl
diff options
context:
space:
mode:
Diffstat (limited to 'src/mod_roster.erl')
-rw-r--r--src/mod_roster.erl14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/mod_roster.erl b/src/mod_roster.erl
index dd211b95a..7415aa3de 100644
--- a/src/mod_roster.erl
+++ b/src/mod_roster.erl
@@ -142,7 +142,7 @@ process_iq(From, To, IQ) ->
process_local_iq(From, To, #iq{type = Type} = IQ) ->
case Type of
- set -> process_iq_set(From, To, IQ);
+ set -> try_process_iq_set(From, To, IQ);
get -> process_iq_get(From, To, IQ)
end.
@@ -455,6 +455,16 @@ get_roster_by_jid_t(LUser, LServer, LJID, odbc) ->
end
end.
+try_process_iq_set(From, To, #iq{sub_el = SubEl} = IQ) ->
+ #jid{server = Server} = From,
+ Access = gen_mod:get_module_opt(Server, ?MODULE, access, fun(A) when is_atom(A) -> A end, all),
+ case acl:match_rule(Server, Access, From) of
+ deny ->
+ IQ#iq{type = error, sub_el = [SubEl, ?ERR_NOT_ALLOWED]};
+ allow ->
+ process_iq_set(From, To, IQ)
+ end.
+
process_iq_set(From, To, #iq{sub_el = SubEl} = IQ) ->
#xmlel{children = Els} = SubEl,
lists:foreach(fun (El) -> process_item_set(From, To, El)
@@ -1508,7 +1518,7 @@ user_roster_item_parse_query(User, Server, Items,
{value, _} ->
UJID = jlib:make_jid(User, Server,
<<"">>),
- process_iq(UJID, UJID,
+ process_iq_set(UJID, UJID,
#iq{type = set,
sub_el =
#xmlel{name =