diff options
| author | Mickaël Rémond <mickael.remond@process-one.net> | 2006-10-25 07:56:49 +0000 | 
|---|---|---|
| committer | Mickaël Rémond <mickael.remond@process-one.net> | 2006-10-25 07:56:49 +0000 | 
| commit | b2a944a4a2ddb8d46a3d6447d1f2253ce0aaa605 (patch) | |
| tree | 1f45fb6297dac8b32e9866b93148455d58013a5b /src | |
| parent | * src/ejabberd_socket.erl: Added sockname/1 and peername/1 (diff) | |
* 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
Diffstat (limited to 'src')
| -rw-r--r-- | src/ejabberd_app.erl | 1 | ||||
| -rw-r--r-- | src/ejabberd_auth_odbc.erl | 8 | ||||
| -rw-r--r-- | src/ejabberd_rdbms.erl | 54 | 
3 files changed, 55 insertions, 8 deletions
| 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 <mickael.remond@process-one.net> +%%% Purpose : Manage the start of the database modules when needed +%%% Created : 31 Jan 2003 by Alexey Shchepin <alexey@sevcom.net> +%%% 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. | 
