mirror of
https://github.com/processone/ejabberd
synced 2025-10-06 03:50:15 +02:00
Don't auto-decode forwarded payload
This commit is contained in:
parent
132033d01a
commit
7e9f1a6dc1
8 changed files with 67 additions and 65 deletions
|
@ -257,25 +257,33 @@ get_permissions(ServerHost) ->
|
|||
end.
|
||||
|
||||
forward_message(From, To, Msg) ->
|
||||
Host = From#jid.lserver,
|
||||
ServerHost = To#jid.lserver,
|
||||
Lang = xmpp:get_lang(Msg),
|
||||
case xmpp:get_subtag(Msg, #privilege{}) of
|
||||
#privilege{forwarded = #forwarded{sub_els = [#message{} = SubEl]}} ->
|
||||
case SubEl#message.from of
|
||||
#jid{lresource = <<"">>, lserver = ServerHost} ->
|
||||
ejabberd_router:route(
|
||||
xmpp:get_from(SubEl), xmpp:get_to(SubEl), SubEl);
|
||||
#privilege{forwarded = #forwarded{xml_els = [SubEl]}} ->
|
||||
try xmpp:decode(SubEl, ?NS_CLIENT, [ignore_els]) of
|
||||
#message{} = NewMsg ->
|
||||
case NewMsg#message.from of
|
||||
#jid{lresource = <<"">>, lserver = ServerHost} ->
|
||||
ejabberd_router:route(
|
||||
xmpp:get_from(NewMsg), xmpp:get_to(NewMsg), NewMsg);
|
||||
_ ->
|
||||
Lang = xmpp:get_lang(Msg),
|
||||
Txt = <<"Invalid 'from' attribute in forwarded message">>,
|
||||
Err = xmpp:err_forbidden(Txt, Lang),
|
||||
ejabberd_router:route_error(To, From, Msg, Err)
|
||||
end;
|
||||
_ ->
|
||||
Lang = xmpp:get_lang(Msg),
|
||||
Txt = <<"Invalid 'from' attribute">>,
|
||||
Err = xmpp:err_forbidden(Txt, Lang),
|
||||
Txt = <<"Message not found in forwarded payload">>,
|
||||
Err = xmpp:err_bad_request(Txt, Lang),
|
||||
ejabberd_router:route_error(To, From, Msg, Err)
|
||||
catch _:{xmpp_codec, Why} ->
|
||||
Txt = xmpp:format_error(Why),
|
||||
Err = xmpp:err_bad_request(Txt, Lang),
|
||||
ejabberd_router:route_error(To, From, Msg, Err)
|
||||
end;
|
||||
_ ->
|
||||
?ERROR_MSG("got invalid forwarded payload from external "
|
||||
"component '~s':~n~s", [Host, xmpp:pp(Msg)]),
|
||||
Lang = xmpp:get_lang(Msg),
|
||||
Txt = <<"Invalid forwarded payload">>,
|
||||
Txt = <<"Invalid <forwarded/> element">>,
|
||||
Err = xmpp:err_bad_request(Txt, Lang),
|
||||
ejabberd_router:route_error(To, From, Msg, Err)
|
||||
end.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue