mirror of
https://github.com/processone/ejabberd.git
synced 2024-12-26 17:38:45 +01:00
don't route PEP error messsages to a client
This commit is contained in:
parent
95e085beb7
commit
839b406903
@ -3769,7 +3769,9 @@ extended_headers(Jids) ->
|
||||
[{xmlelement, "address", [{"type", "replyto"}, {"jid", Jid}], []} || Jid <- Jids].
|
||||
|
||||
|
||||
feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To, {xmlelement, "message", _, _} = El}, in) ->
|
||||
feature_check_packet(allow, _User, Server, Pres,
|
||||
{#jid{lserver = LServer}, _To,
|
||||
{xmlelement, "message", MsgAttrs, _} = El}, in) ->
|
||||
Host = host(Server),
|
||||
case LServer of
|
||||
%% If the sender Server equals Host, the message comes from the Pubsub server
|
||||
@ -3781,7 +3783,19 @@ feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To,
|
||||
{xmlelement, _, Attrs, _} = EventEl ->
|
||||
case xml:get_attr_s("xmlns", Attrs) of
|
||||
?NS_PUBSUB_EVENT ->
|
||||
Feature = xml:get_path_s(EventEl, [{elem, "items"}, {attr, "node"}]),
|
||||
case xml:get_attr_s("type", MsgAttrs) of
|
||||
"error" ->
|
||||
%% Filter error-repsonse of PEP message
|
||||
%% to avoid routing it to client
|
||||
deny;
|
||||
_ when Pres /= undefined ->
|
||||
%% Yes, sometimes Pres = undefined,
|
||||
%% very rare though.
|
||||
%% Seems like this is a bug: should
|
||||
%% be fixed in ejabberd_s2s.erl
|
||||
Feature = xml:get_path_s(
|
||||
EventEl, [{elem, "items"},
|
||||
{attr, "node"}]),
|
||||
case is_feature_supported(Pres, Feature) of
|
||||
true ->
|
||||
allow;
|
||||
@ -3793,6 +3807,9 @@ feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To,
|
||||
end;
|
||||
_ ->
|
||||
allow
|
||||
end;
|
||||
_ ->
|
||||
allow
|
||||
end
|
||||
end;
|
||||
feature_check_packet(Acc, _User, _Server, _Pres, _Packet, _Direction) ->
|
||||
|
@ -3634,7 +3634,9 @@ extended_headers(Jids) ->
|
||||
[{xmlelement, "address", [{"type", "replyto"}, {"jid", Jid}], []} || Jid <- Jids].
|
||||
|
||||
|
||||
feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To, {xmlelement, "message", _, _} = El}, in) ->
|
||||
feature_check_packet(allow, _User, Server, Pres,
|
||||
{#jid{lserver = LServer}, _To,
|
||||
{xmlelement, "message", MsgAttrs, _} = El}, in) ->
|
||||
Host = host(Server),
|
||||
case LServer of
|
||||
%% If the sender Server equals Host, the message comes from the Pubsub server
|
||||
@ -3646,7 +3648,19 @@ feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To,
|
||||
{xmlelement, _, Attrs, _} = EventEl ->
|
||||
case xml:get_attr_s("xmlns", Attrs) of
|
||||
?NS_PUBSUB_EVENT ->
|
||||
Feature = xml:get_path_s(EventEl, [{elem, "items"}, {attr, "node"}]),
|
||||
case xml:get_attr_s("type", MsgAttrs) of
|
||||
"error" ->
|
||||
%% Filter error-repsonse of PEP message
|
||||
%% to avoid routing it to client
|
||||
deny;
|
||||
_ when Pres /= undefined ->
|
||||
%% Yes, sometimes Pres = undefined,
|
||||
%% very rare though.
|
||||
%% Seems like this is a bug: should
|
||||
%% be fixed in ejabberd_s2s.erl
|
||||
Feature = xml:get_path_s(
|
||||
EventEl, [{elem, "items"},
|
||||
{attr, "node"}]),
|
||||
case is_feature_supported(Pres, Feature) of
|
||||
true ->
|
||||
allow;
|
||||
@ -3658,6 +3672,9 @@ feature_check_packet(allow, _User, Server, Pres, {#jid{lserver = LServer}, _To,
|
||||
end;
|
||||
_ ->
|
||||
allow
|
||||
end;
|
||||
_ ->
|
||||
allow
|
||||
end
|
||||
end;
|
||||
feature_check_packet(Acc, _User, _Server, _Pres, _Packet, _Direction) ->
|
||||
|
Loading…
Reference in New Issue
Block a user