]> granicus.if.org Git - ejabberd/commitdiff
Attach IP metadata to every stanza received from stream
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 14 Feb 2017 14:09:25 +0000 (17:09 +0300)
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>
Tue, 14 Feb 2017 14:09:25 +0000 (17:09 +0300)
src/ejabberd_c2s.erl
src/ejabberd_s2s_in.erl
src/ejabberd_service.erl

index 28072a5f7c2806587470b03b2ce14949c6517d46..56f66d52c65abb4c2afbfc6334c77f382b7ee285 100644 (file)
@@ -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) ->
index 3b4b6a989446a605abca0a495f29c161b1df6d53..52ee3be5e9cdc3a539f8afb0dc4ef123820d9ce6 100644 (file)
@@ -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
index ad7903c9e1be28af484b17aed4c45f5714e43b7e..c6d4c957da5bab42d75126e889d7dd78bbd137b9 100644 (file)
@@ -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 ->