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:
Diffstat (limited to 'src/ejabberd_c2s.erl')
-rw-r--r--src/ejabberd_c2s.erl19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 55b42fa6c..8af5f47a7 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -1291,6 +1291,25 @@ handle_info({route, From, To, Packet}, StateName, StateData) ->
case exmpp_iq:is_request(Packet) of
true ->
case exmpp_iq:get_request(Packet) of
+ #xmlel{ns = ?NS_LAST_ACTIVITY} ->
+ LFrom = jlib:short_prepd_jid(From),
+ LBFrom = jlib:short_prepd_bare_jid(From),
+ DummyPresence = exmpp_presence:presence(available, ""),
+ HasFromSub = (?SETS:is_element(LFrom, StateData#state.pres_f) orelse ?SETS:is_element(LBFrom, StateData#state.pres_f))
+ andalso is_privacy_allow(StateData, To, From, DummyPresence, out),
+ case HasFromSub of
+ true ->
+ case privacy_check_packet(StateData, From, To, Packet, in) of
+ allow ->
+ {true, Attrs, StateData};
+ deny ->
+ {false, Attrs, StateData}
+ end;
+ _ ->
+ Err = exmpp_server_session:error(Packet, 'forbidden'),
+ send_element(StateData, Err),
+ {false, Attrs, StateData}
+ end;
_ ->
case privacy_check_packet(StateData, From, To, Packet, in) of
allow ->