aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-14 17:09:25 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-02-14 17:09:25 +0300
commit6fd89f5fe0ecb39d1e8f6b60bb403d03cbf92582 (patch)
treeb591d6e801e6337ce52b95fa90f350cdf3fb3fa5 /src
parentUse newer p1_utils (diff)
Attach IP metadata to every stanza received from stream
Diffstat (limited to 'src')
-rw-r--r--src/ejabberd_c2s.erl18
-rw-r--r--src/ejabberd_s2s_in.erl3
-rw-r--r--src/ejabberd_service.erl4
3 files changed, 15 insertions, 10 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl
index 28072a5f7..56f66d52c 100644
--- a/src/ejabberd_c2s.erl
+++ b/src/ejabberd_c2s.erl
@@ -428,22 +428,24 @@ handle_unauthenticated_packet(Pkt, #{lserver := LServer} = State) ->
handle_authenticated_packet(Pkt, #{lserver := LServer} = State) when not ?is_stanza(Pkt) ->
ejabberd_hooks:run_fold(c2s_authenticated_packet,
LServer, State, [Pkt]);
-handle_authenticated_packet(Pkt, #{lserver := LServer, jid := JID} = State) ->
+handle_authenticated_packet(Pkt, #{lserver := LServer, jid := JID,
+ ip := {IP, _}} = State) ->
+ Pkt1 = xmpp:put_meta(Pkt, ip, IP),
State1 = ejabberd_hooks:run_fold(c2s_authenticated_packet,
- LServer, State, [Pkt]),
+ LServer, State, [Pkt1]),
#jid{luser = LUser} = JID,
- {Pkt1, State2} = ejabberd_hooks:run_fold(
- user_send_packet, LServer, {Pkt, State1}, []),
- case Pkt1 of
+ {Pkt2, State2} = ejabberd_hooks:run_fold(
+ user_send_packet, LServer, {Pkt1, State1}, []),
+ case Pkt2 of
drop ->
State2;
#presence{to = #jid{luser = LUser, lserver = LServer,
lresource = <<"">>}} ->
- process_self_presence(State2, Pkt1);
+ process_self_presence(State2, Pkt2);
#presence{} ->
- process_presence_out(State2, Pkt1);
+ process_presence_out(State2, Pkt2);
_ ->
- check_privacy_then_route(State2, Pkt1)
+ check_privacy_then_route(State2, Pkt2)
end.
handle_cdata(Data, #{lserver := LServer} = State) ->
diff --git a/src/ejabberd_s2s_in.erl b/src/ejabberd_s2s_in.erl
index 3b4b6a989..52ee3be5e 100644
--- a/src/ejabberd_s2s_in.erl
+++ b/src/ejabberd_s2s_in.erl
@@ -200,7 +200,8 @@ handle_unauthenticated_packet(Pkt, #{server_host := LServer} = State) ->
handle_authenticated_packet(Pkt, #{server_host := LServer} = State) when not ?is_stanza(Pkt) ->
ejabberd_hooks:run_fold(s2s_in_authenticated_packet, LServer, State, [Pkt]);
-handle_authenticated_packet(Pkt, State) ->
+handle_authenticated_packet(Pkt0, #{ip := {IP, _}} = State) ->
+ Pkt = xmpp:put_meta(Pkt0, ip, IP),
From = xmpp:get_from(Pkt),
To = xmpp:get_to(Pkt),
case check_from_to(From, To, State) of
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index ad7903c9e..c6d4c957d 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -184,7 +184,9 @@ handle_auth_failure(_, Mech, Reason,
Reason]),
State.
-handle_authenticated_packet(Pkt, #{lang := Lang} = State) when ?is_stanza(Pkt) ->
+handle_authenticated_packet(Pkt0, #{ip := {IP, _}, lang := Lang} = State)
+ when ?is_stanza(Pkt0) ->
+ Pkt = xmpp:put_meta(Pkt0, ip, IP),
From = xmpp:get_from(Pkt),
case check_from(From, State) of
true ->