24
1
mirror of https://github.com/processone/ejabberd.git synced 2024-06-02 21:17:12 +02:00

* src/mod_muc/mod_muc_room.erl: Kick non-members when room

reconfigured to be member-only or when membership is revoked in
member-only room, allowed "true" and "false" in x:data forms
(thanks to Sergei Golovan)

* src/mod_configure.erl: Added "Host" parameter to get_form and
set_form functions (thanks to Sergei Golovan)

* src/ejabberd_s2s_out.erl: Bugfix

* src/msgs/es.msg: Updated (thanks to Badlop)

* src/web/ejabberd_web.erl: Bugfix (thanks to Badlop)

* src/mod_irc/mod_irc.erl: Updated copyright dates
* src/mod_muc/mod_muc.erl: Likewise
* src/mod_pubsub/mod_pubsub.erl: Likewise
* src/mod_vcard.erl: Likewise
* src/mod_vcard_ldap.erl: Likewise
* src/mod_vcard_odbc.erl: Likewise
* src/web/ejabberd_web_admin.erl: Likewise

SVN Revision: 500
This commit is contained in:
Alexey Shchepin 2006-02-06 05:12:54 +00:00
parent cf10843071
commit 0cc168a9aa
13 changed files with 166 additions and 74 deletions

View File

@ -1,3 +1,27 @@
2006-02-05 Alexey Shchepin <alexey@sevcom.net>
* src/mod_muc/mod_muc_room.erl: Kick non-members when room
reconfigured to be member-only or when membership is revoked in
member-only room, allowed "true" and "false" in x:data forms
(thanks to Sergei Golovan)
* src/mod_configure.erl: Added "Host" parameter to get_form and
set_form functions (thanks to Sergei Golovan)
* src/ejabberd_s2s_out.erl: Bugfix
* src/msgs/es.msg: Updated (thanks to Badlop)
* src/web/ejabberd_web.erl: Bugfix (thanks to Badlop)
* src/mod_irc/mod_irc.erl: Updated copyright dates
* src/mod_muc/mod_muc.erl: Likewise
* src/mod_pubsub/mod_pubsub.erl: Likewise
* src/mod_vcard.erl: Likewise
* src/mod_vcard_ldap.erl: Likewise
* src/mod_vcard_odbc.erl: Likewise
* src/web/ejabberd_web_admin.erl: Likewise
2006-02-03 Alexey Shchepin <alexey@sevcom.net> 2006-02-03 Alexey Shchepin <alexey@sevcom.net>
* src/ejabberd_auth_odbc.erl: Added ejabberd_odbc_sup to ejabberd * src/ejabberd_auth_odbc.erl: Added ejabberd_odbc_sup to ejabberd

View File

@ -25,6 +25,7 @@
wait_for_features/2, wait_for_features/2,
wait_for_auth_result/2, wait_for_auth_result/2,
wait_for_starttls_proceed/2, wait_for_starttls_proceed/2,
reopen_socket/2,
stream_established/2, stream_established/2,
handle_event/3, handle_event/3,
handle_sync_event/4, handle_sync_event/4,
@ -209,9 +210,8 @@ wait_for_stream({xmlstreamstart, Name, Attrs}, StateData) ->
?INFO_MSG("restarted: ~p", [{StateData#state.myname, ?INFO_MSG("restarted: ~p", [{StateData#state.myname,
StateData#state.server}]), StateData#state.server}]),
% TODO: clear message queue % TODO: clear message queue
(StateData#state.sockmod):close(StateData#state.socket), ejabberd_receiver:close(StateData#state.receiver),
gen_fsm:send_event(self(), init), {next_state, reopen_socket, StateData#state{socket = undefined,
{next_state, open_socket, StateData#state{socket = undefined,
use_v10 = false}}; use_v10 = false}};
_ -> _ ->
send_text(StateData, ?INVALID_NAMESPACE_ERR), send_text(StateData, ?INVALID_NAMESPACE_ERR),
@ -351,9 +351,8 @@ wait_for_features({xmlstreamelement, El}, StateData) ->
StartTLSRequired and (not StateData#state.tls) -> StartTLSRequired and (not StateData#state.tls) ->
?INFO_MSG("restarted: ~p", [{StateData#state.myname, ?INFO_MSG("restarted: ~p", [{StateData#state.myname,
StateData#state.server}]), StateData#state.server}]),
(StateData#state.sockmod):close(StateData#state.socket), ejabberd_receiver:close(StateData#state.receiver),
gen_fsm:send_event(self(), init), {next_state, reopen_socket,
{next_state, open_socket,
StateData#state{socket = undefined, StateData#state{socket = undefined,
use_v10 = false}}; use_v10 = false}};
true -> true ->
@ -409,9 +408,8 @@ wait_for_auth_result({xmlstreamelement, El}, StateData) ->
?NS_SASL -> ?NS_SASL ->
?INFO_MSG("restarted: ~p", [{StateData#state.myname, ?INFO_MSG("restarted: ~p", [{StateData#state.myname,
StateData#state.server}]), StateData#state.server}]),
(StateData#state.sockmod):close(StateData#state.socket), ejabberd_receiver:close(StateData#state.receiver),
gen_fsm:send_event(self(), init), {next_state, reopen_socket,
{next_state, open_socket,
StateData#state{socket = undefined}}; StateData#state{socket = undefined}};
_ -> _ ->
send_text(StateData, send_text(StateData,
@ -498,6 +496,19 @@ wait_for_starttls_proceed(closed, StateData) ->
{stop, normal, StateData}. {stop, normal, StateData}.
reopen_socket({xmlstreamelement, El}, StateData) ->
{next_state, reopen_socket, StateData};
reopen_socket({xmlstreamend, Name}, StateData) ->
{next_state, reopen_socket, StateData};
reopen_socket({xmlstreamerror, _}, StateData) ->
{next_state, reopen_socket, StateData};
reopen_socket(timeout, StateData) ->
{stop, normal, StateData};
reopen_socket(closed, StateData) ->
gen_fsm:send_event(self(), init),
{next_state, open_socket, StateData}.
stream_established({xmlstreamelement, El}, StateData) -> stream_established({xmlstreamelement, El}, StateData) ->
?INFO_MSG("stream established", []), ?INFO_MSG("stream established", []),
case is_verify_res(El) of case is_verify_res(El) of

View File

@ -645,7 +645,7 @@ adhoc_local_commands(Acc, From, #jid{lserver = LServer} = To,
Acc Acc
end. end.
adhoc_local_commands(_From, _To, adhoc_local_commands(_From, #jid{lserver = LServer} = _To,
#adhoc_request{lang = Lang, #adhoc_request{lang = Lang,
node = Node, node = Node,
sessionid = SessionID, sessionid = SessionID,
@ -665,7 +665,7 @@ adhoc_local_commands(_From, _To,
#adhoc_response{status = canceled}); #adhoc_response{status = canceled});
XData == false, ActionIsExecute -> XData == false, ActionIsExecute ->
%% User requests form %% User requests form
case get_form(LNode, Lang) of case get_form(LServer, LNode, Lang) of
{result, Form} -> {result, Form} ->
adhoc:produce_response( adhoc:produce_response(
Request, Request,
@ -680,7 +680,7 @@ adhoc_local_commands(_From, _To,
invalid -> invalid ->
{error, ?ERR_BAD_REQUEST}; {error, ?ERR_BAD_REQUEST};
Fields -> Fields ->
case set_form(LNode, Lang, Fields) of case set_form(LServer, LNode, Lang, Fields) of
{result, _Res} -> {result, _Res} ->
adhoc:produce_response( adhoc:produce_response(
#adhoc_response{lang = Lang, #adhoc_response{lang = Lang,
@ -730,7 +730,7 @@ adhoc_local_commands(_From, _To,
get_form(["running nodes", ENode, "DB"], Lang) -> get_form(_Host, ["running nodes", ENode, "DB"], Lang) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -766,12 +766,12 @@ get_form(["running nodes", ENode, "DB"], Lang) ->
end end
end; end;
get_form(["running nodes", ENode, "modules", "stop"], Lang) -> get_form(Host, ["running nodes", ENode, "modules", "stop"], Lang) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
Node -> Node ->
case rpc:call(Node, gen_mod, loaded_modules, []) of case rpc:call(Node, gen_mod, loaded_modules, [Host]) of
{badrpc, _Reason} -> {badrpc, _Reason} ->
{error, ?ERR_INTERNAL_SERVER_ERROR}; {error, ?ERR_INTERNAL_SERVER_ERROR};
Modules -> Modules ->
@ -793,7 +793,7 @@ get_form(["running nodes", ENode, "modules", "stop"], Lang) ->
end end
end; end;
get_form(["running nodes", ENode, "modules", "start"], Lang) -> get_form(_Host, ["running nodes", ENode, "modules", "start"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -812,7 +812,7 @@ get_form(["running nodes", ENode, "modules", "start"], Lang) ->
} }
]}]}; ]}]};
get_form(["running nodes", ENode, "backup", "backup"], Lang) -> get_form(_Host, ["running nodes", ENode, "backup", "backup"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -831,7 +831,7 @@ get_form(["running nodes", ENode, "backup", "backup"], Lang) ->
} }
]}]}; ]}]};
get_form(["running nodes", ENode, "backup", "restore"], Lang) -> get_form(_Host, ["running nodes", ENode, "backup", "restore"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -850,7 +850,7 @@ get_form(["running nodes", ENode, "backup", "restore"], Lang) ->
} }
]}]}; ]}]};
get_form(["running nodes", ENode, "backup", "textfile"], Lang) -> get_form(_Host, ["running nodes", ENode, "backup", "textfile"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -869,7 +869,7 @@ get_form(["running nodes", ENode, "backup", "textfile"], Lang) ->
} }
]}]}; ]}]};
get_form(["running nodes", ENode, "import", "file"], Lang) -> get_form(_Host, ["running nodes", ENode, "import", "file"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -888,7 +888,7 @@ get_form(["running nodes", ENode, "import", "file"], Lang) ->
} }
]}]}; ]}]};
get_form(["running nodes", ENode, "import", "dir"], Lang) -> get_form(_Host, ["running nodes", ENode, "import", "dir"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -907,7 +907,7 @@ get_form(["running nodes", ENode, "import", "dir"], Lang) ->
} }
]}]}; ]}]};
get_form(["config", "hostname"], Lang) -> get_form(_Host, ["config", "hostname"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -925,7 +925,7 @@ get_form(["config", "hostname"], Lang) ->
[{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]} [{xmlelement, "value", [], [{xmlcdata, ?MYNAME}]}]}
]}]}; ]}]};
get_form(["config", "acls"], Lang) -> get_form(_Host, ["config", "acls"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -950,7 +950,7 @@ get_form(["config", "acls"], Lang) ->
} }
]}]}; ]}]};
get_form(["config", "access"], Lang) -> get_form(_Host, ["config", "access"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -981,7 +981,7 @@ get_form(["config", "access"], Lang) ->
} }
]}]}; ]}]};
get_form(["config", "remusers"], Lang) -> get_form(Host, ["config", "remusers"], Lang) ->
{result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}], {result, [{xmlelement, "x", [{"xmlns", ?NS_XDATA}],
[{xmlelement, "title", [], [{xmlelement, "title", [],
[{xmlcdata, [{xmlcdata,
@ -991,7 +991,7 @@ get_form(["config", "remusers"], Lang) ->
[{xmlcdata, [{xmlcdata,
translate:translate( translate:translate(
Lang, "Choose users to remove")}]}] ++ Lang, "Choose users to remove")}]}] ++
case catch ejabberd_auth:dirty_get_registered_users() of case catch ejabberd_auth:get_vh_registered_users(Host) of
{'EXIT', _Reason} -> {'EXIT', _Reason} ->
[]; [];
Users -> Users ->
@ -1001,12 +1001,12 @@ get_form(["config", "remusers"], Lang) ->
end end
}]}; }]};
get_form(_, _Lang) -> get_form(_Host, _, _Lang) ->
{error, ?ERR_SERVICE_UNAVAILABLE}. {error, ?ERR_SERVICE_UNAVAILABLE}.
set_form(["running nodes", ENode, "DB"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "DB"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1040,7 +1040,7 @@ set_form(["running nodes", ENode, "DB"], _Lang, XData) ->
{result, []} {result, []}
end; end;
set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) -> set_form(Host, ["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1050,7 +1050,7 @@ set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
case Vals of case Vals of
["1"] -> ["1"] ->
Module = list_to_atom(Var), Module = list_to_atom(Var),
rpc:call(Node, gen_mod, stop_module, [Module]); rpc:call(Node, gen_mod, stop_module, [Host, Module]);
_ -> _ ->
ok ok
end end
@ -1058,7 +1058,7 @@ set_form(["running nodes", ENode, "modules", "stop"], _Lang, XData) ->
{result, []} {result, []}
end; end;
set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) -> set_form(Host, ["running nodes", ENode, "modules", "start"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1079,7 +1079,7 @@ set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) ->
rpc:call(Node, rpc:call(Node,
gen_mod, gen_mod,
start_module, start_module,
[Module, Args]) [Host, Module, Args])
end, Modules), end, Modules),
{result, []}; {result, []};
_ -> _ ->
@ -1094,7 +1094,7 @@ set_form(["running nodes", ENode, "modules", "start"], _Lang, XData) ->
end; end;
set_form(["running nodes", ENode, "backup", "backup"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "backup", "backup"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1117,7 +1117,7 @@ set_form(["running nodes", ENode, "backup", "backup"], _Lang, XData) ->
end; end;
set_form(["running nodes", ENode, "backup", "restore"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "backup", "restore"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1141,7 +1141,7 @@ set_form(["running nodes", ENode, "backup", "restore"], _Lang, XData) ->
end; end;
set_form(["running nodes", ENode, "backup", "textfile"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "backup", "textfile"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1164,7 +1164,7 @@ set_form(["running nodes", ENode, "backup", "textfile"], _Lang, XData) ->
end; end;
set_form(["running nodes", ENode, "import", "file"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "import", "file"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1181,7 +1181,7 @@ set_form(["running nodes", ENode, "import", "file"], _Lang, XData) ->
end; end;
set_form(["running nodes", ENode, "import", "dir"], _Lang, XData) -> set_form(_Host, ["running nodes", ENode, "import", "dir"], _Lang, XData) ->
case search_running_node(ENode) of case search_running_node(ENode) of
false -> false ->
{error, ?ERR_ITEM_NOT_FOUND}; {error, ?ERR_ITEM_NOT_FOUND};
@ -1198,7 +1198,7 @@ set_form(["running nodes", ENode, "import", "dir"], _Lang, XData) ->
end; end;
set_form(["config", "hostname"], _Lang, XData) -> set_form(_Host, ["config", "hostname"], _Lang, XData) ->
case lists:keysearch("hostname", 1, XData) of case lists:keysearch("hostname", 1, XData) of
false -> false ->
{error, ?ERR_BAD_REQUEST}; {error, ?ERR_BAD_REQUEST};
@ -1211,7 +1211,7 @@ set_form(["config", "hostname"], _Lang, XData) ->
{error, ?ERR_BAD_REQUEST} {error, ?ERR_BAD_REQUEST}
end; end;
set_form(["config", "acls"], _Lang, XData) -> set_form(_Host, ["config", "acls"], _Lang, XData) ->
case lists:keysearch("acls", 1, XData) of case lists:keysearch("acls", 1, XData) of
{value, {_, Strings}} -> {value, {_, Strings}} ->
String = lists:foldl(fun(S, Res) -> String = lists:foldl(fun(S, Res) ->
@ -1237,7 +1237,7 @@ set_form(["config", "acls"], _Lang, XData) ->
{error, ?ERR_BAD_REQUEST} {error, ?ERR_BAD_REQUEST}
end; end;
set_form(["config", "access"], _Lang, XData) -> set_form(_Host, ["config", "access"], _Lang, XData) ->
SetAccess = SetAccess =
fun(Rs) -> fun(Rs) ->
mnesia:transaction( mnesia:transaction(
@ -1283,19 +1283,19 @@ set_form(["config", "access"], _Lang, XData) ->
{error, ?ERR_BAD_REQUEST} {error, ?ERR_BAD_REQUEST}
end; end;
set_form(["config", "remusers"], _Lang, XData) -> set_form(Host, ["config", "remusers"], _Lang, XData) ->
lists:foreach( lists:foreach(
fun({Var, Vals}) -> fun({Var, Vals}) ->
case Vals of case Vals of
["1"] -> ["1"] ->
catch ejabberd_auth:remove_user(Var); catch ejabberd_auth:remove_user(Var, Host);
_ -> _ ->
ok ok
end end
end, XData), end, XData),
{result, []}; {result, []};
set_form(_, _Lang, _XData) -> set_form(_Host, _, _Lang, _XData) ->
{error, ?ERR_SERVICE_UNAVAILABLE}. {error, ?ERR_SERVICE_UNAVAILABLE}.

View File

@ -307,7 +307,7 @@ iq_get_vcard(Lang) ->
"http://ejabberd.jabberstudio.org/"}]}, "http://ejabberd.jabberstudio.org/"}]},
{xmlelement, "DESC", [], {xmlelement, "DESC", [],
[{xmlcdata, translate:translate(Lang, "ejabberd IRC module\n" [{xmlcdata, translate:translate(Lang, "ejabberd IRC module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
process_register(Host, From, To, #iq{} = IQ) -> process_register(Host, From, To, #iq{} = IQ) ->
case catch process_irc_register(Host, From, To, IQ) of case catch process_irc_register(Host, From, To, IQ) of

View File

@ -581,7 +581,7 @@ iq_get_vcard(Lang) ->
"http://ejabberd.jabberstudio.org/"}]}, "http://ejabberd.jabberstudio.org/"}]},
{xmlelement, "DESC", [], {xmlelement, "DESC", [],
[{xmlcdata, translate:translate(Lang, "ejabberd MUC module\n" [{xmlcdata, translate:translate(Lang, "ejabberd MUC module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
broadcast_service_message(Host, Msg) -> broadcast_service_message(Host, Msg) ->

View File

@ -1564,6 +1564,18 @@ process_admin_items_set(UJID, Items, Lang, StateData) ->
catch send_kickban_presence( catch send_kickban_presence(
JID, Reason, "307", SD), JID, Reason, "307", SD),
set_role(JID, none, SD); set_role(JID, none, SD);
{JID, affiliation, none, Reason} ->
case (SD#state.config)#config.members_only of
true ->
catch send_kickban_presence(
JID, Reason, "321", SD),
SD1 = set_affiliation(JID, none, SD),
set_role(JID, none, SD1);
_ ->
SD1 = set_affiliation(JID, none, SD),
send_update_presence(JID, SD1),
SD1
end;
{JID, affiliation, outcast, Reason} -> {JID, affiliation, outcast, Reason} ->
catch send_kickban_presence( catch send_kickban_presence(
JID, Reason, "301", SD), JID, Reason, "301", SD),
@ -2105,7 +2117,9 @@ set_config(XEl, StateData) ->
-define(SET_BOOL_XOPT(Opt, Val), -define(SET_BOOL_XOPT(Opt, Val),
case Val of case Val of
"0" -> set_xoption(Opts, Config#config{Opt = false}); "0" -> set_xoption(Opts, Config#config{Opt = false});
"false" -> set_xoption(Opts, Config#config{Opt = false});
"1" -> set_xoption(Opts, Config#config{Opt = true}); "1" -> set_xoption(Opts, Config#config{Opt = true});
"true" -> set_xoption(Opts, Config#config{Opt = true});
_ -> {error, ?ERR_BAD_REQUEST} _ -> {error, ?ERR_BAD_REQUEST}
end). end).
@ -2160,7 +2174,28 @@ change_config(Config, StateData) ->
{false, false} -> {false, false} ->
ok ok
end, end,
{result, [], NSD}. case {(StateData#state.config)#config.members_only,
Config#config.members_only} of
{false, true} ->
NSD1 = remove_nonmembers(NSD),
{result, [], NSD1};
_ ->
{result, [], NSD}
end.
remove_nonmembers(StateData) ->
lists:foldl(
fun({_LJID, #user{jid = JID}}, SD) ->
Affiliation = get_affiliation(JID, SD),
case Affiliation of
none ->
catch send_kickban_presence(
JID, "", "322", SD),
set_role(JID, none, SD);
_ ->
SD
end
end, StateData, ?DICT:to_list(StateData#state.users)).
-define(CASE_CONFIG_OPT(Opt), -define(CASE_CONFIG_OPT(Opt),

View File

@ -395,7 +395,7 @@ iq_get_vcard(Lang) ->
[{xmlcdata, translate:translate( [{xmlcdata, translate:translate(
Lang, Lang,
"ejabberd pub/sub module\n" "ejabberd pub/sub module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
iq_pubsub(Host, From, Type, SubEl) -> iq_pubsub(Host, From, Type, SubEl) ->

View File

@ -147,7 +147,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
translate:translate( translate:translate(
Lang, Lang,
"Erlang Jabber Server\n" "Erlang Jabber Server\n"
"Copyright (c) 2002-2005 Alexey Shchepin")}]}, "Copyright (c) 2002-2006 Alexey Shchepin")}]},
{xmlelement, "BDAY", [], {xmlelement, "BDAY", [],
[{xmlcdata, "2002-11-16"}]} [{xmlcdata, "2002-11-16"}]}
]}]} ]}]}
@ -416,7 +416,7 @@ iq_get_vcard(Lang) ->
[{xmlcdata, translate:translate( [{xmlcdata, translate:translate(
Lang, Lang,
"ejabberd vCard module\n" "ejabberd vCard module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) -> find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
find_xdata_el1(SubEls). find_xdata_el1(SubEls).

View File

@ -108,7 +108,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
translate:translate( translate:translate(
Lang, Lang,
"Erlang Jabber Server\n" "Erlang Jabber Server\n"
"Copyright (c) 2002-2005 Alexey Shchepin")}]}, "Copyright (c) 2002-2006 Alexey Shchepin")}]},
{xmlelement, "BDAY", [], {xmlelement, "BDAY", [],
[{xmlcdata, "2002-11-16"}]} [{xmlcdata, "2002-11-16"}]}
]}]} ]}]}
@ -374,7 +374,7 @@ iq_get_vcard(Lang) ->
[{xmlcdata, translate:translate( [{xmlcdata, translate:translate(
Lang, Lang,
"ejabberd vCard module\n" "ejabberd vCard module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) -> find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
find_xdata_el1(SubEls). find_xdata_el1(SubEls).

View File

@ -111,7 +111,7 @@ process_local_iq(_From, _To, #iq{type = Type, lang = Lang, sub_el = SubEl} = IQ)
translate:translate( translate:translate(
Lang, Lang,
"Erlang Jabber Server\n" "Erlang Jabber Server\n"
"Copyright (c) 2002-2005 Alexey Shchepin")}]}, "Copyright (c) 2002-2006 Alexey Shchepin")}]},
{xmlelement, "BDAY", [], {xmlelement, "BDAY", [],
[{xmlcdata, "2002-11-16"}]} [{xmlcdata, "2002-11-16"}]}
]}]} ]}]}
@ -413,7 +413,7 @@ iq_get_vcard(Lang) ->
[{xmlcdata, translate:translate( [{xmlcdata, translate:translate(
Lang, Lang,
"ejabberd vCard module\n" "ejabberd vCard module\n"
"Copyright (c) 2003-2005 Alexey Shchepin")}]}]. "Copyright (c) 2003-2006 Alexey Shchepin")}]}].
find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) -> find_xdata_el({xmlelement, _Name, _Attrs, SubEls}) ->
find_xdata_el1(SubEls). find_xdata_el1(SubEls).

View File

@ -116,7 +116,7 @@
{"Only service administrators are allowed to send service messages", "Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}. {"Only service administrators are allowed to send service messages", "Solo los administradores del servicio tienen permiso para enviar mensajes de servicio"}.
{"Conference room does not exist", "La sala de conferencias no existe"}. {"Conference room does not exist", "La sala de conferencias no existe"}.
{"Access denied by service policy", "Acceso denegado por la política del servicio"}. {"Access denied by service policy", "Acceso denegado por la política del servicio"}.
{"You must fill in field \"nick\" in the form", "Debes rellenar el campo \"apodo\" en el formulario"}. {"You must fill in field \"Nickname\" in the form", "Debes rellenar el campo \"Apodo\" en el formulario"}.
{"Specified nickname is already registered", "El apodo especificado ya está registrado, tendrás que buscar otro"}. {"Specified nickname is already registered", "El apodo especificado ya está registrado, tendrás que buscar otro"}.
{"Room creation is denied by service policy", "Se te ha denegado crear la sala por política del servicio"}. {"Room creation is denied by service policy", "Se te ha denegado crear la sala por política del servicio"}.
{"ejabberd MUC module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo de MUC para ejabbed\nCopyright (c) 2002-2005 Alexey Shchepin"}. {"ejabberd MUC module\nCopyright (c) 2003-2005 Alexey Shchepin", "Módulo de MUC para ejabbed\nCopyright (c) 2002-2005 Alexey Shchepin"}.
@ -126,20 +126,20 @@
{"You need an x:data capable client to configure room", "Necesitas un cliente con soporte de x:data para configurar la sala"}. {"You need an x:data capable client to configure room", "Necesitas un cliente con soporte de x:data para configurar la sala"}.
{"Configuration for ", "Configuración para "}. {"Configuration for ", "Configuración para "}.
{"Room title", "Título de la sala"}. {"Room title", "Título de la sala"}.
{"Allow users to change subject?", "Permitir a los usuarios cambiar el asunto"}. {"Allow users to change subject", "Permitir a los usuarios cambiar el asunto"}.
{"Allow users to query other users?", "Permitir a los usuarios consultar a otros usuarios"}. {"Allow users to query other users", "Permitir a los usuarios consultar a otros usuarios"}.
{"Allow users to send private messages?", "Permitir a los usuarios enviar mensajes privados"}. {"Allow users to send private messages", "Permitir a los usuarios enviar mensajes privados"}.
{"Make room public searchable?", "Hacer la sala públicamente visible"}. {"Make room public searchable", "Sala públicamente visible"}.
{"Make participants list public?", "Hacer pública la lista de participantes"}. {"Make participants list public", "La lista de participantes es pública"}.
{"Make room persistent?", "Hacer la sala permanente"}. {"Make room persistent", "Sala permanente"}.
{"Make room moderated?", "Hacer la sala moderada"}. {"Make room moderated", "Sala moderada"}.
{"Default users as members?", "Los usuarios son miembros por defecto"}. {"Default users as participants", "Los usuarios on participantes por defecto"}.
{"Make room members only?", "Hacer la sala sólo para miembros"}. {"Make room members-only", "Sala sólo para miembros"}.
{"Allow users to send invites?", "Permitir a los usuarios enviar invitaciones"}. {"Allow users to send invites", "Permitir a los usuarios enviar invitaciones"}.
{"Make room password protected?", "Proteger la sala con contraseña"}. {"Make room password protected", "Proteger la sala con contraseña"}.
{"Password", "Contraseña"}. {"Password", "Contraseña"}.
{"Make room anonymous?", "Hacer anónima la sala"}. {"This room is not anonymous", "Sala no anónima"}.
{"Enable logging?", "Guardar históricos"}. {"Enable logging", "Guardar históricos"}.
{"Only moderators and participants are allowed to change subject in this room", "Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}. {"Only moderators and participants are allowed to change subject in this room", "Solo los moderadores y participantes pueden cambiar el asunto de esta sala"}.
{"Only moderators are allowed to change subject in this room", "Solo los moderadores pueden cambiar el asunto de esta sala"}. {"Only moderators are allowed to change subject in this room", "Solo los moderadores pueden cambiar el asunto de esta sala"}.
{"Visitors are not allowed to send messages to all occupants", "Los visitantes no pueden enviar mensajes a todos los ocupantes"}. {"Visitors are not allowed to send messages to all occupants", "Los visitantes no pueden enviar mensajes a todos los ocupantes"}.
@ -165,6 +165,9 @@
{"Invalid role: ~s", "Rol no válido: ~s"}. {"Invalid role: ~s", "Rol no válido: ~s"}.
{"Owner privileges required", "Se requieren privilegios de propietario de la sala"}. {"Owner privileges required", "Se requieren privilegios de propietario de la sala"}.
{"private, ", "privado"}. {"private, ", "privado"}.
{"Make room semianonymous", "Hacer la sala semianónima"}.
{"Description", "Descripción"}.
{"Number of occupants", "Número de ocupantes"}.
% mod_irc/mod_irc.erl % mod_irc/mod_irc.erl
{"You need an x:data capable client to configure mod_irc settings", "Necesitas un cliente con soporte de x:data para configurar las opciones de mod_irc"}. {"You need an x:data capable client to configure mod_irc settings", "Necesitas un cliente con soporte de x:data para configurar las opciones de mod_irc"}.
@ -289,6 +292,25 @@
{"JID", "JID"}. {"JID", "JID"}.
{"Fill in fields to search for any matching Jabber User", "Rellena campos para buscar usuarios Jabber que concuerden"}. {"Fill in fields to search for any matching Jabber User", "Rellena campos para buscar usuarios Jabber que concuerden"}.
% mod_adhoc.erl
{"Commands", "Comandos"}.
{"Ping", "Ping"}.
{"Pong", "Pong"}.
% mod_announce.erl
{"Really delete message of the day?", "¿Está seguro de quere borrar el mensaje del dia?"}.
{"Subject", "Asunto"}.
{"Message body", "Cuerpo del mensaje"}.
{"No body provided for announce message", "No se ha proporcionado cuerpo de mensaje para el anuncio"}.
{"Announcements", "Anuncios"}.
{"Send announcement to all users", "Enviar anuncio a todos los usuarios"}.
{"Send announcement to all online users", "Enviar anuncio a todos los usuarios conectados"}.
{"Send announcement to all online users on all hosts", "Enviar anuncio a todos los usuarios conectados en todos los dominios"}.
{"Set message of the day and send to online users", "Poner mensaje del dia y enviar a todos los usuarios conectados"}.
{"Update message of the day (don't send)", "Actualizar mensaje del dia, pero no enviarlo"}.
{"Delete message of the day", "Borrar mensaje del dia"}.
% Local Variables: % Local Variables:
% mode: erlang % mode: erlang
% End: % End:

View File

@ -84,7 +84,7 @@ process_get({_, true},
Host, Request#request{path = RPath, Host, Request#request{path = RPath,
us = US}) us = US})
end; end;
undefined -> unauthorized ->
{401, {401,
[{"WWW-Authenticate", "basic realm=\"ejabberd\""}], [{"WWW-Authenticate", "basic realm=\"ejabberd\""}],
ejabberd_web:make_xhtml([{xmlelement, "h1", [], ejabberd_web:make_xhtml([{xmlelement, "h1", [],
@ -113,7 +113,7 @@ process_get({_, true},
end end
end; end;
_ -> _ ->
undefined unauthorized
end, end,
case US of case US of
{User, Server} -> {User, Server} ->
@ -126,7 +126,7 @@ process_get({_, true},
global, Request#request{path = RPath, global, Request#request{path = RPath,
us = US}) us = US})
end; end;
undefined -> unauthorized ->
{401, {401,
[{"WWW-Authenticate", "basic realm=\"ejabberd\""}], [{"WWW-Authenticate", "basic realm=\"ejabberd\""}],
ejabberd_web:make_xhtml([{xmlelement, "h1", [], ejabberd_web:make_xhtml([{xmlelement, "h1", [],

View File

@ -95,7 +95,7 @@ make_xhtml(Els, global, Lang) ->
[?XAE("div", [?XAE("div",
[{"id", "copyright"}], [{"id", "copyright"}],
[?XCT("p", [?XCT("p",
"ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One") "ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One")
])])]) ])])])
]}}; ]}};
@ -150,7 +150,7 @@ make_xhtml(Els, Host, Lang) ->
[?XAE("div", [?XAE("div",
[{"id", "copyright"}], [{"id", "copyright"}],
[?XCT("p", [?XCT("p",
"ejabberd (c) 2002-2005 Alexey Shchepin, 2004-2005 Process One") "ejabberd (c) 2002-2006 Alexey Shchepin, 2004-2006 Process One")
])])]) ])])])
]}}. ]}}.