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:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-02-17 18:53:35 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2018-02-17 18:53:35 +0300
commit5704a980c5b000fdd094fa9adaf1e18c9cfb9ce6 (patch)
treec411386b8f1f912ec978ae5b54412bc258c05e42
parentcffdb06b66233d58f2bee763cc14e4eaba3b6454 (diff)
Introduce 'access' option for mod_block_stranger
The option is supposed to be used when `allow_local_users` and `allow_transports` are not enough. It's an ACL where `deny` means the message will be rejected (or a CAPTCHA would be generated for a presence), and `allow` means the sender is whitelisted and the stanza will pass through. The default value is `none`, which means nothing is whitelisted.
-rw-r--r--src/mod_block_strangers.erl14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/mod_block_strangers.erl b/src/mod_block_strangers.erl
index b60003c84..d6d5c50cb 100644
--- a/src/mod_block_strangers.erl
+++ b/src/mod_block_strangers.erl
@@ -199,8 +199,10 @@ need_check(Pkt) ->
false
end,
AllowLocalUsers = gen_mod:get_module_opt(LServer, ?MODULE, allow_local_users),
- not (IsEmpty orelse ((AllowLocalUsers orelse From#jid.luser == <<"">>)
- andalso ejabberd_router:is_my_host(From#jid.lserver))).
+ Access = gen_mod:get_module_opt(LServer, ?MODULE, access),
+ not (IsEmpty orelse acl:match_rule(LServer, Access, From) == allow
+ orelse ((AllowLocalUsers orelse From#jid.luser == <<"">>)
+ andalso ejabberd_router:is_my_host(From#jid.lserver))).
-spec check_subscription(jid(), jid()) -> boolean().
check_subscription(From, To) ->
@@ -265,10 +267,14 @@ mod_opt_type(allow_local_users) ->
mod_opt_type(allow_transports) ->
fun (B) when is_boolean(B) -> B end;
mod_opt_type(captcha) ->
- fun (B) when is_boolean(B) -> B end.
+ fun (B) when is_boolean(B) -> B end;
+mod_opt_type(access) ->
+ fun acl:access_rules_validator/1.
+
mod_options(_) ->
- [{drop, true},
+ [{access, none},
+ {drop, true},
{log, false},
{captcha, false},
{allow_local_users, true},