is_user_exists_in_other_modules/3,
remove_user/2,
remove_user/3,
+ remove_host/1,
plain_password_required/1,
store_type/1,
entropy/1
]).
-export([start/1
+ ,stop/1
,start_modules/2
,stop_modules/2
- ,start_methods/2
- ,stop_methods/2
]).
-export([auth_modules/1]).
lists:foreach(fun start/1, ?MYHOSTS).
start(Host) ->
+ ejabberd_hooks:add(remove_host, list_to_binary(Host), ?MODULE, remove_host, 150),
start_modules(Host, auth_modules(Host)).
+stop(Host) ->
+ ejabberd_hooks:delete(remove_host, list_to_binary(Host), ?MODULE, remove_host, 150),
+ stop_modules(Host, auth_modules(Host)).
+
+remove_host(HostB) when is_binary(HostB) ->
+ lists:foreach(
+ fun({Username, Host}) ->
+ ejabberd_auth:remove_user(Username, Host)
+ end,
+ ejabberd_auth:get_vh_registered_users(binary_to_list(HostB))).
+
start_modules(Host, Modules) when is_list(Modules) ->
lists:foreach(fun (M) -> start_modules(Host, M) end, Modules);
start_modules(Host, Module) when is_atom(Module) ->
stop_modules(Host, Module) when is_atom(Module) ->
Module:stop(Host).
-start_methods(Host, Methods) when is_list(Methods) ->
- lists:foreach(fun (M) -> start_methods(Host, M) end, Methods);
-start_methods(Host, Method) when is_atom(Method) ->
- start_modules(Host, module_name(Method)).
-
-stop_methods(Host, Methods) when is_list(Methods) ->
- lists:foreach(fun (M) -> stop_methods(Host, M) end, Methods);
-stop_methods(Host, Method) when is_atom(Method) ->
- stop_modules(Host, module_name(Method)).
-
-
%% @spec (Server) -> bool()
%% Server = string()
%% Server = string()
%% @doc Return the list of authenticated modules for a given host.
-auth_modules(Server) when is_list(Server) ->
- LServer = exmpp_stringprep:nameprep(Server),
- Method = ejabberd_config:get_local_option({auth_method, ejabberd:normalize_host(LServer)}),
+auth_modules(Server) ->
+ Method = ejabberd_config:get_local_option({auth_method, Server}),
Methods = if
Method == undefined -> [];
is_list(Method) -> Method;
case registered(Host) of
false -> {error, host_process_not_registered};
true ->
- remove(Host),
+ remove_host_info(Host),
?MODULE:register(Host, Config)
end.
-
+
%% Removes a vhost from the system,
%% XXX deleting all ODBC data.
remove(Host) when is_list(Host) ->
+ HostB = list_to_binary(Host),
+ ejabberd_hooks:run(remove_host, HostB, [HostB]),
+ remove_host_info(Host).
+
+remove_host_info(Host) ->
true = exmpp_stringprep:is_node(Host),
ID = get_clusterid(),
gen_storage:dirty_delete_where(
gen_mod:start_module(Host, Module, Args)
end, Modules)
end,
- case auth_method(Host) of
- {host_method, HostMethod} ->
- ejabberd_auth:start_methods(Host, HostMethod)
- end,
+ ejabberd_auth:start(Host),
ok.
lists:foreach(fun(Module) ->
gen_mod:stop_module_keep_config(Host, Module)
end, gen_mod:loaded_modules(Host)),
- case auth_method(Host) of
- {host_method, Method} ->
- ejabberd_auth:stop_methods(Host, Method)
- end.
+ ejabberd_auth:stop(Host).
%% Get the current vhost list from a variety of sources (ODBC, internal)
get_hosts(ejabberd) -> ?MYHOSTS;
AddHosts = NewHosts -- OldHosts,
{AddHosts,RemoveHosts}.
-%% XXX - this should be part of auth, not hosts.
-auth_method(Host) ->
- case ejabberd_config:get_host_option(Host, auth_method) of
- undefined ->
- [Default] = ejabberd_config:get_host_option(global, auth_method),
- {host_method, Default};
- Other ->
- {host_method, Other}
- end.
-
configure_static_hosts() ->
?DEBUG("Node startup - configuring hosts: ~p", [?MYHOSTS]),
%% Add a null configuration for all MYHOSTS - this ensures
register_room/3,
migrate/1,
get_vh_rooms/1,
+ remove_host/1,
can_use_nick/3]).
%% gen_server callbacks
end
end, Rs).
+remove_host(MyHostB) when is_binary(MyHostB) ->
+ Host = gen_mod:get_module_opt_host(binary_to_list(MyHostB), ?MODULE, "conference.@HOST@"),
+ ?INFO_MSG("Removing rooms of MUC service ~p", [Host]),
+ lists:foreach(
+ fun(#muc_online_room{name_host = {NameB, HostB}, pid = Pid}) ->
+ gen_fsm:send_all_state_event(Pid, destroy),
+ forget_room(HostB, NameB)
+ end,
+ get_vh_rooms(list_to_binary(Host))).
+
%%====================================================================
%% gen_server callbacks
%%====================================================================
RoomShaper = gen_mod:get_opt(room_shaper, Opts, none),
ejabberd_router:register_route(MyHostStr),
ejabberd_hooks:add(node_hash_update, ?MODULE, migrate, 100),
+ ejabberd_hooks:add(remove_host, Host, ?MODULE, remove_host, 50),
load_permanent_rooms(MyHost, Host,
{Access, AccessCreate, AccessAdmin, AccessPersistent},
HistorySize,
%%--------------------------------------------------------------------
terminate(_Reason, State) ->
ejabberd_hooks:delete(node_hash_update, ?MODULE, migrate, 100),
+ ejabberd_hooks:delete(remove_host, State#state.server_host, ?MODULE, remove_host, 50),
ejabberd_router:unregister_route(binary_to_list(State#state.host)),
ok.