From 525b8e9374e2f2c62efdfaf0da3d3c5f9cbb05a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Thu, 28 Jun 2007 14:32:48 +0000 Subject: * src/ejabberd_service.erl: Added an option to disable from attribute checks in packets coming from an external component (EJAB-275) * doc/guide.tex: Likewise SVN Revision: 804 --- src/ejabberd_service.erl | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) (limited to 'src/ejabberd_service.erl') diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl index 0d635b512..7d866f6f1 100644 --- a/src/ejabberd_service.erl +++ b/src/ejabberd_service.erl @@ -34,9 +34,10 @@ -include("jlib.hrl"). -record(state, {socket, sockmod, streamid, - hosts, password, access}). + hosts, password, access, + check_from}). -%-define(DBGFSM, true). +%-Define(DBGFSM, true). -ifdef(DBGFSM). -define(FSMOPTS, [{debug, [trace]}]). @@ -128,13 +129,18 @@ init([{SockMod, Socket}, Opts]) -> {value, {_, S}} -> S; _ -> none end, + CheckFrom = case lists:keysearch(service_check_from, 1, Opts) of + {value, {_, CF}} -> CF; + _ -> true + end, SockMod:change_shaper(Socket, Shaper), {ok, wait_for_stream, #state{socket = Socket, sockmod = SockMod, streamid = new_id(), hosts = Hosts, password = Password, - access = Access + access = Access, + check_from = CheckFrom }}. %%---------------------------------------------------------------------- @@ -205,14 +211,23 @@ stream_established({xmlstreamelement, El}, StateData) -> NewEl = jlib:remove_attr("xmlns", El), {xmlelement, Name, Attrs, _Els} = NewEl, From = xml:get_attr_s("from", Attrs), - FromJID1 = jlib:string_to_jid(From), - FromJID = case FromJID1 of - #jid{lserver = Server} -> - case lists:member(Server, StateData#state.hosts) of - true -> FromJID1; - false -> error - end; - _ -> error + FromJID = case StateData#state.check_from of + %% If the admin does not want to check the from field + %% when accept packets from any address. + %% In this case, the component can send packet of + %% behalf of the server users. + false -> jlib:string_to_jid(From); + %% The default is the standard behaviour in XEP-0114 + _ -> + FromJID1 = jlib:string_to_jid(From), + case FromJID1 of + #jid{lserver = Server} -> + case lists:member(Server, StateData#state.hosts) of + true -> FromJID1; + false -> error + end; + _ -> error + end end, To = xml:get_attr_s("to", Attrs), ToJID = case To of -- cgit v1.2.3