2008-08-09 Badlop <badlop@process-one.net>
* src/ejabberd_service.erl: Fix XEP-0114 compliance: define xmlns
- in header of error response; check the connection is attempted to
- a served component; include in response the JID of served
- component not server (thanks to Sergei Golovan)
+ in header of error response; include in response the JID of served
+ component not server (thanks to Sergei Golovan)(EJAB-717)
2008-08-01 Badlop <badlop@process-one.net>
"</stream:stream>"
).
--define(HOST_UNKNOWN_ERR,
- "<stream:stream "
- "xmlns:stream='http://etherx.jabber.org/streams'>"
- "<stream:error>Host Unknown</stream:error>"
- "</stream:stream>"
- ).
-
-define(INVALID_HANDSHAKE_ERR,
"<stream:error>Invalid Handshake</stream:error>"
"</stream:stream>"
wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
case xml:get_attr_s("xmlns", Attrs) of
"jabber:component:accept" ->
- %% Check that destination is a served component
+ %% Note: XEP-0114 requires to check that destination is a Jabber
+ %% component served by this Jabber server.
+ %% However several transports don't respect that,
+ %% so ejabberd doesn't check 'to' attribute (EJAB-717)
To = xml:get_attr_s("to", Attrs),
- case lists:member(To, StateData#state.hosts) of
- true ->
- Header = io_lib:format(?STREAM_HEADER,
- [StateData#state.streamid,
- xml:crypt(To)]),
- send_text(StateData, Header),
- {next_state, wait_for_handshake, StateData};
- _ ->
- send_text(StateData, ?HOST_UNKNOWN_ERR),
- {stop, normal, StateData}
- end;
+ Header = io_lib:format(?STREAM_HEADER,
+ [StateData#state.streamid, xml:crypt(To)]),
+ send_text(StateData, Header),
+ {next_state, wait_for_handshake, StateData};
_ ->
send_text(StateData, ?INVALID_HEADER_ERR),
{stop, normal, StateData}