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:
authorAlexey Shchepin <alexey@process-one.net>2004-01-11 23:42:57 +0300
committerAlexey Shchepin <alexey@process-one.net>2004-01-11 23:42:57 +0300
commitc7d15b12df7317fadacd97e148853c130b9c3b3b (patch)
tree454dc599be5ea984b34866b10946b3673d09221d /src/ejabberd_service.erl
parent41cc38aa6fd57a37fa6a9f29be4d1cfd111ef493 (diff)
* src/ejabberd_c2s.erl: Fixed bind namespace
* src/ejabberd_ctl.erl: New module for ejabberd administration * tools/ejabberdctl: Shell script for ejabberd administration * src/mod_vcard.erl: Copyright update * src/ejabberd_service.erl: Now possible to specify access rules for service * src/ejabberd.cfg.example: Updated SVN Revision: 198
Diffstat (limited to 'src/ejabberd_service.erl')
-rw-r--r--src/ejabberd_service.erl29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/ejabberd_service.erl b/src/ejabberd_service.erl
index c1710f23f..37411b1fc 100644
--- a/src/ejabberd_service.erl
+++ b/src/ejabberd_service.erl
@@ -30,7 +30,7 @@
-include("jlib.hrl").
-record(state, {socket, receiver, streamid, sockmod,
- hosts, password}).
+ hosts, password, access}).
%-define(DBGFSM, true).
@@ -87,6 +87,10 @@ start_link(SockData, Opts) ->
%% {stop, StopReason}
%%----------------------------------------------------------------------
init([{SockMod, Socket}, Opts]) ->
+ Access = case lists:keysearch(access, 1, Opts) of
+ {value, {_, A}} -> A;
+ _ -> all
+ end,
{Hosts, Password} =
case lists:keysearch(hosts, 1, Opts) of
{value, {_, Hs, HOpts}} ->
@@ -118,7 +122,8 @@ init([{SockMod, Socket}, Opts]) ->
streamid = new_id(),
sockmod = SockMod,
hosts = Hosts,
- password = Password
+ password = Password,
+ access = Access
}}.
%%----------------------------------------------------------------------
@@ -127,8 +132,6 @@ init([{SockMod, Socket}, Opts]) ->
%% {next_state, NextStateName, NextStateData, Timeout} |
%% {stop, Reason, NewStateData}
%%----------------------------------------------------------------------
-%state_name(Event, StateData) ->
-% {next_state, state_name, StateData}.
wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
% TODO
@@ -280,12 +283,18 @@ handle_info({send_element, El}, StateName, StateData) ->
send_element(StateData, El),
{next_state, StateName, StateData};
handle_info({route, From, To, Packet}, StateName, StateData) ->
- {xmlelement, Name, Attrs, Els} = Packet,
- Attrs2 = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
- jlib:jid_to_string(To),
- Attrs),
- Text = xml:element_to_string({xmlelement, Name, Attrs2, Els}),
- send_text(StateData, Text),
+ case acl:match_rule(StateData#state.access, From) of
+ allow ->
+ {xmlelement, Name, Attrs, Els} = Packet,
+ Attrs2 = jlib:replace_from_to_attrs(jlib:jid_to_string(From),
+ jlib:jid_to_string(To),
+ Attrs),
+ Text = xml:element_to_string({xmlelement, Name, Attrs2, Els}),
+ send_text(StateData, Text);
+ deny ->
+ Err = jlib:make_error_reply(Packet, ?ERR_NOT_ALLOWED),
+ ejabberd_router:route(To, From, Err)
+ end,
{next_state, StateName, StateData}.