From b2a944a4a2ddb8d46a3d6447d1f2253ce0aaa605 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micka=C3=ABl=20R=C3=A9mond?= Date: Wed, 25 Oct 2006 07:56:49 +0000 Subject: [PATCH] * src/ejabberd_rdbms.erl: It is now possible to use ldap or internal authentication with some other modules using relationnal database storage (EJAB-152). Refactored relational databases connections initialisation. * src/ejabberd_auth_odbc.erl: Likewise. odbc supervisor startup is now delegated to the ejabberd rdbms module. * src/ejabberd_app.erl: Likewise. SVN Revision: 664 --- ChangeLog | 9 +++++++ src/ejabberd_app.erl | 1 + src/ejabberd_auth_odbc.erl | 8 ------ src/ejabberd_rdbms.erl | 54 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 src/ejabberd_rdbms.erl diff --git a/ChangeLog b/ChangeLog index ea3b19079..912aff1a5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2006-10-25 Mickael Remond + + * src/ejabberd_rdbms.erl: It is now possible to use ldap or internal + authentication with some other modules using relationnal database + storage. Refactored relational databases connections initialisation. + * src/ejabberd_auth_odbc.erl: Likewise. odbc supervisor startup is now + delegated to the ejabberd rdbms module. + * src/ejabberd_app.erl: Likewise. + 2006-10-17 Alexey Shchepin * src/ejabberd_socket.erl: Added sockname/1 and peername/1 diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl index c1ea274a2..7c44c8fab 100644 --- a/src/ejabberd_app.erl +++ b/src/ejabberd_app.erl @@ -28,6 +28,7 @@ start(normal, _Args) -> gen_mod:start(), ejabberd_config:start(), Sup = ejabberd_sup:start_link(), + ejabberd_rdbms:start(), ejabberd_auth:start(), cyrsasl:start(), % Profiling diff --git a/src/ejabberd_auth_odbc.erl b/src/ejabberd_auth_odbc.erl index d946bfd48..60fce6d79 100644 --- a/src/ejabberd_auth_odbc.erl +++ b/src/ejabberd_auth_odbc.erl @@ -34,14 +34,6 @@ %%% API %%%---------------------------------------------------------------------- start(Host) -> - ChildSpec = - {gen_mod:get_module_proc(Host, ejabberd_odbc_sup), - {ejabberd_odbc_sup, start_link, [Host]}, - temporary, - infinity, - supervisor, - [ejabberd_odbc_sup]}, - supervisor:start_child(ejabberd_sup, ChildSpec), ejabberd_ctl:register_commands( Host, [{"registered-users", "list all registered users"}], diff --git a/src/ejabberd_rdbms.erl b/src/ejabberd_rdbms.erl new file mode 100644 index 000000000..66515af4f --- /dev/null +++ b/src/ejabberd_rdbms.erl @@ -0,0 +1,54 @@ +%%%---------------------------------------------------------------------- +%%% File : ejabberd_rdbms.erl +%%% Author : Mickael Remond +%%% Purpose : Manage the start of the database modules when needed +%%% Created : 31 Jan 2003 by Alexey Shchepin +%%% Id : $Id: $ +%%%---------------------------------------------------------------------- + +-module(ejabberd_rdbms). +-author('alexey@sevcom.net'). +-svn('$Revision: $ '). + +-export([start/0]). +-include("ejabberd.hrl"). + +start() -> + %% Check if ejabberd has been compiled with ODBC + case catch ejabberd_odbc_sup:module_info() of + {'EXIT',{undef,_}} -> + ?INFO_MSG("ejabberd has not been compiled with relational database support. Skipping database startup.", []); + _ -> + %% If compiled with ODBC, start ODBC on the needed host + start_hosts() + end. + +%% Start relationnal DB module on the nodes where it is needed +start_hosts() -> + lists:foreach( + fun(Host) -> + case needs_odbc(Host) of + true -> start_odbc(Host); + false -> ok + end + end, ?MYHOSTS). + +%% Start the ODBC module on the given host +start_odbc(Host) -> + ChildSpec = + {gen_mod:get_module_proc(Host, ejabberd_odbc_sup), + {ejabberd_odbc_sup, start_link, [Host]}, + temporary, + infinity, + supervisor, + [ejabberd_odbc_sup]}, + supervisor:start_child(ejabberd_sup, ChildSpec). + +%% Returns true if we have configured odbc_server for the given host +needs_odbc(Host) -> + LHost = jlib:nameprep(Host), + case ejabberd_config:get_local_option({odbc_server, LHost}) of + undefined -> + false; + _ -> true + end. -- 2.40.0