diff options
author | Alexey Shchepin <alexey@process-one.net> | 2004-01-11 23:42:57 +0300 |
---|---|---|
committer | Alexey Shchepin <alexey@process-one.net> | 2004-01-11 23:42:57 +0300 |
commit | c7d15b12df7317fadacd97e148853c130b9c3b3b (patch) | |
tree | 454dc599be5ea984b34866b10946b3673d09221d /src/ejabberd_service.erl | |
parent | 41cc38aa6fd57a37fa6a9f29be4d1cfd111ef493 (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.erl | 29 |
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}. |