From c7d15b12df7317fadacd97e148853c130b9c3b3b Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Sun, 11 Jan 2004 20:42:57 +0000 Subject: * 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 --- src/ejabberd_service.erl | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) (limited to 'src/ejabberd_service.erl') 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}. -- cgit v1.2.3