]> granicus.if.org Git - ejabberd/commitdiff
* src/ejabberd_rdbms.erl: It is now possible to use ldap or
authorMickaël Rémond <mickael.remond@process-one.net>
Wed, 25 Oct 2006 07:56:49 +0000 (07:56 +0000)
committerMickaël Rémond <mickael.remond@process-one.net>
Wed, 25 Oct 2006 07:56:49 +0000 (07:56 +0000)
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
src/ejabberd_app.erl
src/ejabberd_auth_odbc.erl
src/ejabberd_rdbms.erl [new file with mode: 0644]

index ea3b19079f340da3a46c7c203844e0c7e1f27865..912aff1a501bb315c50d0b3125ab2fcc56ba9a36 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-10-25  Mickael Remond  <mickael.remond@process-one.net>
+
+       * 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  <alexey@sevcom.net>
 
        * src/ejabberd_socket.erl: Added sockname/1 and peername/1
index c1ea274a2f6f916e3944c31a521481f198cf34b5..7c44c8fab82282f71391959a654a692d59c81e6f 100644 (file)
@@ -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
index d946bfd4847269d63ce0b7d9aeb94a080d5a9cf5..60fce6d792f25d86adb92a2fe5cf20f69d791e4b 100644 (file)
 %%% 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 (file)
index 0000000..66515af
--- /dev/null
@@ -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.