mirror of
https://github.com/processone/ejabberd.git
synced 2024-11-24 16:23:40 +01:00
Better process subtag decoding errors
This commit is contained in:
parent
e15a9a2b9e
commit
614bd9dd72
@ -25,7 +25,7 @@
|
|||||||
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.17"}}},
|
{fast_tls, ".*", {git, "https://github.com/processone/fast_tls", {tag, "1.0.17"}}},
|
||||||
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.10"}}},
|
{stringprep, ".*", {git, "https://github.com/processone/stringprep", {tag, "1.0.10"}}},
|
||||||
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", "f22a56d"}},
|
{fast_xml, ".*", {git, "https://github.com/processone/fast_xml", "f22a56d"}},
|
||||||
{xmpp, ".*", {git, "https://github.com/processone/xmpp", "320e00a"}},
|
{xmpp, ".*", {git, "https://github.com/processone/xmpp", "597d78b"}},
|
||||||
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.12"}}},
|
{fast_yaml, ".*", {git, "https://github.com/processone/fast_yaml", {tag, "1.0.12"}}},
|
||||||
{jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "0.14.8"}}},
|
{jiffy, ".*", {git, "https://github.com/davisp/jiffy", {tag, "0.14.8"}}},
|
||||||
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.2"}}},
|
{p1_oauth2, ".*", {git, "https://github.com/processone/p1_oauth2", {tag, "0.6.2"}}},
|
||||||
|
@ -468,11 +468,16 @@ handle_authenticated_packet(Pkt, #{lserver := LServer, jid := JID,
|
|||||||
drop ->
|
drop ->
|
||||||
State2;
|
State2;
|
||||||
#iq{type = set, sub_els = [_]} ->
|
#iq{type = set, sub_els = [_]} ->
|
||||||
case xmpp:get_subtag(Pkt2, #xmpp_session{}) of
|
try xmpp:try_subtag(Pkt2, #xmpp_session{}) of
|
||||||
#xmpp_session{} ->
|
#xmpp_session{} ->
|
||||||
send(State2, xmpp:make_iq_result(Pkt2));
|
send(State2, xmpp:make_iq_result(Pkt2));
|
||||||
_ ->
|
_ ->
|
||||||
check_privacy_then_route(State2, Pkt2)
|
check_privacy_then_route(State2, Pkt2)
|
||||||
|
catch _:{xmpp_codec, Why} ->
|
||||||
|
Txt = xmpp:io_format_error(Why),
|
||||||
|
Lang = maps:get(lang, State),
|
||||||
|
Err = xmpp:err_bad_request(Txt, Lang),
|
||||||
|
send_error(State2, Pkt2, Err)
|
||||||
end;
|
end;
|
||||||
#presence{to = #jid{luser = LUser, lserver = LServer,
|
#presence{to = #jid{luser = LUser, lserver = LServer,
|
||||||
lresource = <<"">>}} ->
|
lresource = <<"">>}} ->
|
||||||
|
@ -614,8 +614,8 @@ process_authenticated_packet(Pkt, #{mod := Mod} = State) ->
|
|||||||
|
|
||||||
-spec process_bind(xmpp_element(), state()) -> state().
|
-spec process_bind(xmpp_element(), state()) -> state().
|
||||||
process_bind(#iq{type = set, sub_els = [_]} = Pkt,
|
process_bind(#iq{type = set, sub_els = [_]} = Pkt,
|
||||||
#{xmlns := ?NS_CLIENT, mod := Mod} = State) ->
|
#{xmlns := ?NS_CLIENT, mod := Mod, lang := MyLang} = State) ->
|
||||||
case xmpp:get_subtag(Pkt, #bind{}) of
|
try xmpp:try_subtag(Pkt, #bind{}) of
|
||||||
#bind{resource = R} ->
|
#bind{resource = R} ->
|
||||||
case Mod:bind(R, State) of
|
case Mod:bind(R, State) of
|
||||||
{ok, #{user := U, server := S, resource := NewR} = State1}
|
{ok, #{user := U, server := S, resource := NewR} = State1}
|
||||||
@ -632,6 +632,11 @@ process_bind(#iq{type = set, sub_els = [_]} = Pkt,
|
|||||||
Err = xmpp:err_not_authorized(),
|
Err = xmpp:err_not_authorized(),
|
||||||
send_error(State, Pkt, Err)
|
send_error(State, Pkt, Err)
|
||||||
end
|
end
|
||||||
|
catch _:{xmpp_codec, Why} ->
|
||||||
|
Txt = xmpp:io_format_error(Why),
|
||||||
|
Lang = select_lang(MyLang, xmpp:get_lang(Pkt)),
|
||||||
|
Err = xmpp:err_bad_request(Txt, Lang),
|
||||||
|
send_error(State, Pkt, Err)
|
||||||
end;
|
end;
|
||||||
process_bind(Pkt, #{mod := Mod} = State) ->
|
process_bind(Pkt, #{mod := Mod} = State) ->
|
||||||
try Mod:handle_unbinded_packet(Pkt, State)
|
try Mod:handle_unbinded_packet(Pkt, State)
|
||||||
|
@ -522,7 +522,7 @@ process_features(StreamFeatures,
|
|||||||
false ->
|
false ->
|
||||||
TLSRequired = is_starttls_required(State1),
|
TLSRequired = is_starttls_required(State1),
|
||||||
TLSAvailable = is_starttls_available(State1),
|
TLSAvailable = is_starttls_available(State1),
|
||||||
case xmpp:get_subtag(StreamFeatures, #starttls{}) of
|
try xmpp:try_subtag(StreamFeatures, #starttls{}) of
|
||||||
false when TLSRequired and not Encrypted ->
|
false when TLSRequired and not Encrypted ->
|
||||||
Txt = <<"Use of STARTTLS required">>,
|
Txt = <<"Use of STARTTLS required">>,
|
||||||
send_pkt(State1, xmpp:serr_policy_violation(Txt, Lang));
|
send_pkt(State1, xmpp:serr_policy_violation(Txt, Lang));
|
||||||
@ -543,14 +543,20 @@ process_features(StreamFeatures,
|
|||||||
case is_disconnected(State2) of
|
case is_disconnected(State2) of
|
||||||
true -> State2;
|
true -> State2;
|
||||||
false ->
|
false ->
|
||||||
case xmpp:get_subtag(StreamFeatures, #sasl_mechanisms{}) of
|
try xmpp:try_subtag(StreamFeatures, #sasl_mechanisms{}) of
|
||||||
#sasl_mechanisms{list = Mechs} ->
|
#sasl_mechanisms{list = Mechs} ->
|
||||||
process_sasl_mechanisms(Mechs, State2);
|
process_sasl_mechanisms(Mechs, State2);
|
||||||
false ->
|
false ->
|
||||||
process_sasl_failure(
|
process_sasl_failure(
|
||||||
<<"Peer provided no SASL mechanisms">>, State2)
|
<<"Peer provided no SASL mechanisms">>, State2)
|
||||||
|
catch _:{xmpp_codec, Why} ->
|
||||||
|
Txt = xmpp:io_format_error(Why),
|
||||||
|
process_sasl_failure(Txt, State1)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
catch _:{xmpp_codec, Why} ->
|
||||||
|
Txt = xmpp:io_format_error(Why),
|
||||||
|
process_sasl_failure(Txt, State1)
|
||||||
end
|
end
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user