Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Scholz <christoph.scholz@gmail.com>2019-01-13 13:37:08 +0300
committerHolger Weiss <holger@zedat.fu-berlin.de>2019-02-26 00:21:30 +0300
commite257bc3d328ab98c7cd85c3839d2918782adf408 (patch)
treee6be6dc971663bd2a77ad32bb6702394a2bcb25e /src/mod_mam.erl
parentbc38afa8b808fc43595a6a6297368697280ca368 (diff)
acl for mam_preferences
Diffstat (limited to 'src/mod_mam.erl')
-rw-r--r--src/mod_mam.erl30
1 files changed, 20 insertions, 10 deletions
diff --git a/src/mod_mam.erl b/src/mod_mam.erl
index f1f481260..ee38f5011 100644
--- a/src/mod_mam.erl
+++ b/src/mod_mam.erl
@@ -631,15 +631,22 @@ process_iq(#iq{from = #jid{luser = LUser, lserver = LServer},
default = Default,
always = Always0,
never = Never0}]} = IQ) ->
- Always = lists:usort(get_jids(Always0)),
- Never = lists:usort(get_jids(Never0)),
- case write_prefs(LUser, LServer, LServer, Default, Always, Never) of
- ok ->
- NewPrefs = prefs_el(Default, Always, Never, NS),
- xmpp:make_iq_result(IQ, NewPrefs);
- _Err ->
- Txt = <<"Database failure">>,
- xmpp:make_error(IQ, xmpp:err_internal_server_error(Txt, Lang))
+ Access = gen_mod:get_module_opt(LServer, ?MODULE, access_preferences),
+ case acl:match_rule(LServer, Access, jid:make(LUser, LServer)) of
+ allow ->
+ Always = lists:usort(get_jids(Always0)),
+ Never = lists:usort(get_jids(Never0)),
+ case write_prefs(LUser, LServer, LServer, Default, Always, Never) of
+ ok ->
+ NewPrefs = prefs_el(Default, Always, Never, NS),
+ xmpp:make_iq_result(IQ, NewPrefs);
+ _Err ->
+ Txt = <<"Database failure">>,
+ xmpp:make_error(IQ, xmpp:err_internal_server_error(Txt, Lang))
+ end;
+ deny ->
+ Txt = <<"MAM preference modification denied by service policy">>,
+ xmpp:make_error(IQ, xmpp:err_forbidden(Txt, Lang))
end;
process_iq(#iq{from = #jid{luser = LUser, lserver = LServer},
to = #jid{lserver = LServer}, lang = Lang,
@@ -1257,7 +1264,9 @@ mod_opt_type(default) ->
mod_opt_type(request_activates_archiving) ->
fun (B) when is_boolean(B) -> B end;
mod_opt_type(clear_archive_on_room_destroy) ->
- fun (B) when is_boolean(B) -> B end.
+ fun (B) when is_boolean(B) -> B end;
+mod_opt_type(access_preferences) ->
+ fun acl:access_rules_validator/1.
mod_options(Host) ->
[{assume_mam_usage, false},
@@ -1265,6 +1274,7 @@ mod_options(Host) ->
{request_activates_archiving, false},
{compress_xml, false},
{clear_archive_on_room_destroy, true},
+ {access_preferences, all},
{db_type, ejabberd_config:default_db(Host, ?MODULE)},
{use_cache, ejabberd_config:use_cache(Host)},
{cache_size, ejabberd_config:cache_size(Host)},