summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHolger Weiss <holger@zedat.fu-berlin.de>2016-04-24 22:00:15 +0200
committerHolger Weiss <holger@zedat.fu-berlin.de>2016-04-24 22:00:15 +0200
commitcebdfb65234bdb1a38fdfebe04b56f6819c11689 (patch)
tree66357e8fc2677185b5a0707fb85c06851ab440b8 /src
parentMatch namespace when checking for chat states (diff)
Return error when blocking message to offline user
As per XEP-0016 and XEP-0191, return a service-unavailable error when an incoming message sent to an offline user was blocked by a privacy list. The same is done for a message sent to an online user, so this avoids a presence leak.
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_sm.erl13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/ejabberd_sm.erl b/src/ejabberd_sm.erl
index b7fc3950..219d46ad 100644
--- a/src/ejabberd_sm.erl
+++ b/src/ejabberd_sm.erl
@@ -601,15 +601,12 @@ route_message(From, To, Packet, Type) ->
case Type of
headline -> ok;
_ ->
- case ejabberd_auth:is_user_exists(LUser, LServer) of
+ case ejabberd_auth:is_user_exists(LUser, LServer) andalso
+ is_privacy_allow(From, To, Packet) of
true ->
- case is_privacy_allow(From, To, Packet) of
- true ->
- ejabberd_hooks:run(offline_message_hook, LServer,
- [From, To, Packet]);
- false -> ok
- end;
- _ ->
+ ejabberd_hooks:run(offline_message_hook, LServer,
+ [From, To, Packet]);
+ false ->
Err = jlib:make_error_reply(Packet,
?ERR_SERVICE_UNAVAILABLE),
ejabberd_router:route(To, From, Err)