diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-09-21 10:45:11 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-09-21 10:45:11 +0300 |
commit | ceda0737666760e5fa93bed0a9ab160778d29358 (patch) | |
tree | e56129704f4818a4496ef092e9331254441c163c /src | |
parent | a4ec06445593728af35149a2a111527f8515e43c (diff) |
Add tests for external component
Diffstat (limited to 'src')
-rw-r--r-- | src/ejabberd_c2s.erl | 2 | ||||
-rw-r--r-- | src/ejabberd_service.erl | 29 |
2 files changed, 15 insertions, 16 deletions
diff --git a/src/ejabberd_c2s.erl b/src/ejabberd_c2s.erl index e98a9eb8f..7dc9960e6 100644 --- a/src/ejabberd_c2s.erl +++ b/src/ejabberd_c2s.erl @@ -494,7 +494,7 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> catch _:{xmpp_codec, Why} -> Txt = xmpp:format_error(Why), send_header(StateData, ?MYNAME, <<"1.0">>, ?MYLANG), - send_element(StateData, xmpp:serr_not_well_formed(Txt, ?MYLANG)), + send_element(StateData, xmpp:serr_invalid_xml(Txt, ?MYLANG)), {stop, normal, StateData} end; wait_for_stream(timeout, StateData) -> diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 002d74949..f4338593d 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -125,7 +125,12 @@ init([{SockMod, Socket}, Opts]) -> wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> try xmpp:decode(#xmlel{name = Name, attrs = Attrs}) of - #stream_start{xmlns = ?NS_COMPONENT, to = To} when is_record(To, jid) -> + #stream_start{xmlns = NS_COMPONENT, stream_xmlns = NS_STREAM} + when NS_COMPONENT /= ?NS_COMPONENT; NS_STREAM /= ?NS_STREAM -> + send_header(StateData, ?MYNAME), + send_element(StateData, xmpp:serr_invalid_namespace()), + {stop, normal, StateData}; + #stream_start{to = To} when is_record(To, jid) -> Host = To#jid.lserver, send_header(StateData, Host), HostOpts = case dict:is_key(Host, StateData#state.host_opts) of @@ -141,13 +146,9 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) -> end, {next_state, wait_for_handshake, StateData#state{host = Host, host_opts = HostOpts}}; - #stream_start{xmlns = ?NS_COMPONENT} -> - send_header(StateData, ?MYNAME), - send_element(StateData, xmpp:serr_improper_addressing()), - {stop, normal, StateData}; #stream_start{} -> send_header(StateData, ?MYNAME), - send_element(StateData, xmpp:serr_invalid_namespace()), + send_element(StateData, xmpp:serr_improper_addressing()), {stop, normal, StateData} catch _:{xmpp_codec, Why} -> Txt = xmpp:format_error(Why), @@ -203,7 +204,8 @@ stream_established(El, StateData) when ?is_stanza(El) -> To = xmpp:get_to(El), Lang = xmpp:get_lang(El), if From == undefined orelse To == undefined -> - send_error(StateData, El, xmpp:err_jid_malformed()); + Txt = <<"Missing 'from' or 'to' attribute">>, + send_error(StateData, El, xmpp:err_jid_malformed(Txt, Lang)); true -> FromJID = case StateData#state.check_from of false -> @@ -214,19 +216,16 @@ stream_established(El, StateData) when ?is_stanza(El) -> From; _ -> %% The default is the standard behaviour in XEP-0114 - case From of - #jid{lserver = Server} -> - case dict:is_key(Server, StateData#state.host_opts) of - true -> From; - false -> error - end; - _ -> error + Server = From#jid.lserver, + case dict:is_key(Server, StateData#state.host_opts) of + true -> From; + false -> error end end, if FromJID /= error -> ejabberd_router:route(FromJID, To, El); true -> - Txt = <<"Incorrect value of 'from' or 'to' attribute">>, + Txt = <<"Improper domain part of 'from' attribute">>, send_error(StateData, El, xmpp:err_not_allowed(Txt, Lang)) end end, |