diff --git a/ChangeLog b/ChangeLog index ef6bf63b5..bd692189e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,8 @@ 2008-08-09 Badlop * 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-04 Jerome Sautret diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index d7216fc6e..66025fce7 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -79,13 +79,6 @@ "" ). --define(HOST_UNKNOWN_ERR, - "" - "Host Unknown" - "" - ). - -define(INVALID_HANDSHAKE_ERR, "Invalid Handshake" "" @@ -178,19 +171,15 @@ init([{SockMod, Socket}, Opts]) -> 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}