diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 03b768bdf..a150116a9 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -185,14 +185,20 @@ handle_auth_failure(_, Mech, Reason, Reason]), State. -handle_authenticated_packet(Pkt0, #{ip := {IP, _}, lang := Lang} = State) +handle_authenticated_packet(Pkt0, #{server := Server, 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 -> - ejabberd_router:route(Pkt), - State; + {Pkt2, State2} = ejabberd_hooks:run_fold(component_send_packet, Server, {Pkt, State}, []), + case Pkt2 of + drop -> + ok; + _ -> + ejabberd_router:route(Pkt2) + end, + State2; false -> Txt = <<"Improper domain part of 'from' attribute">>, Err = xmpp:serr_invalid_from(Txt, Lang),