Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/processone/ejabberd.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMickaël Rémond <mickael.remond@process-one.net>2007-06-28 18:32:48 +0400
committerMickaël Rémond <mickael.remond@process-one.net>2007-06-28 18:32:48 +0400
commit525b8e9374e2f2c62efdfaf0da3d3c5f9cbb05a5 (patch)
tree4f2b0207283e68cefcaf21a2d6397a50b328d99f /src/ejabberd_service.erl
parent12ab036236d626420ae57d3aa75f60af7950bfa7 (diff)
* 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
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r--src/ejabberd_service.erl37
1 files changed, 26 insertions, 11 deletions
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