diff options
Diffstat (limited to 'src/mod_roster.erl')
-rw-r--r-- | src/mod_roster.erl | 14 |
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 = |