Put in the new modules system. It's now used by passdb and rpc. I will
authorJelmer Vernooij <jelmer@samba.org>
Wed, 19 Mar 2003 18:45:19 +0000 (18:45 +0000)
committerJelmer Vernooij <jelmer@samba.org>
Wed, 19 Mar 2003 18:45:19 +0000 (18:45 +0000)
put a doc about it in dev-doc later today.
(This used to be commit af7bfee0c6902c07fdb8d3abccf4c8d6bab00b5a)

23 files changed:
source3/Makefile.in
source3/aclocal.m4
source3/configure.in
source3/lib/module.c
source3/modules/mysql.c
source3/modules/xml.c
source3/passdb/pdb_guest.c
source3/passdb/pdb_interface.c
source3/passdb/pdb_ldap.c
source3/passdb/pdb_nisplus.c
source3/passdb/pdb_smbpasswd.c
source3/passdb/pdb_tdb.c
source3/passdb/pdb_unix.c
source3/rpc_server/srv_dfs.c
source3/rpc_server/srv_lsa.c
source3/rpc_server/srv_netlog.c
source3/rpc_server/srv_pipe.c
source3/rpc_server/srv_reg.c
source3/rpc_server/srv_samr.c
source3/rpc_server/srv_spoolss.c
source3/rpc_server/srv_srvsvc.c
source3/rpc_server/srv_wkssvc.c
source3/smbd/server.c

index 6964a2bc829fa9b37bc8bf524e1c7d405ceeb446..47c05191a3bb63f40389c783e0247f4a66aa46db 100644 (file)
@@ -2,7 +2,7 @@
 # Makefile.in for Samba - rewritten for autoconf support
 # Copyright Andrew Tridgell 1992-1998
 # Copyright (C) 2001 by Martin Pool <mbp@samba.org>
-# Copyright Andrew Barteltt 2002
+# Copyright Andrew Bartlett 2002
 # Copyright (C) 2003 Anthony Liguori <aliguor@us.ibm.com>
 ###########################################################################
 
@@ -136,8 +136,9 @@ QUOTAOBJS=@QUOTAOBJS@
 
 VFS_MODULES = bin/vfs_audit.@SHLIBEXT@ bin/vfs_extd_audit.@SHLIBEXT@ bin/vfs_recycle.@SHLIBEXT@ \
        bin/vfs_netatalk.@SHLIBEXT@ bin/vfs_fake_perms.@SHLIBEXT@
-PDB_MODULES = @MODULE_MYSQL@ @MODULE_XML@
-MODULES = bin/developer.@SHLIBEXT@ 
+PDB_MODULES = @PDB_MODULES@
+RPC_MODULES = @RPC_MODULES@
+MODULES = $(VFS_MODULES) $(PDB_MODULES) $(RPC_MODULES)
 
 ######################################################################
 # object file lists
@@ -241,29 +242,7 @@ RPC_SPOOLSS_OBJ = rpc_server/srv_spoolss.o rpc_server/srv_spoolss_nt.o
 RPC_PIPE_OBJ = rpc_server/srv_pipe_hnd.o rpc_server/srv_util.o \
                rpc_server/srv_pipe.o rpc_server/srv_lsa_hnd.o
 
-# These are like they are to avoid a dependency on GNU MAKE
-@LSA_DYNAMIC_YES@RPC_MODULES1 = bin/librpc_lsarpc.@SHLIBEXT@
-@NETLOG_DYNAMIC_YES@RPC_MODULES2 = bin/librpc_NETLOGON.@SHLIBEXT@
-@SAMR_DYNAMIC_YES@RPC_MODULES3 = bin/librpc_samr.@SHLIBEXT@
-@SVC_DYNAMIC_YES@RPC_MODULES4 = bin/librpc_srvsvc.@SHLIBEXT@
-@WKS_DYNAMIC_YES@RPC_MODULES5 = bin/librpc_wkssvc.@SHLIBEXT@
-@REG_DYNAMIC_YES@RPC_MODULES6 = bin/librpc_winreg.@SHLIBEXT@
-@SPOOLSS_DYNAMIC_YES@RPC_MODULES7 = bin/librpc_spoolss.@SHLIBEXT@
-@DFS_DYNAMIC_YES@RPC_MODULES8 = bin/librpc_netdfs.@SHLIBEXT@
-RPC_MODULES = $(RPC_MODULES1) $(RPC_MODULES2) $(RPC_MODULES3) $(RPC_MODULES4) \
-       $(RPC_MODULES5) $(RPC_MODULES6) $(RPC_MODULES7) $(RPC_MODULES8)
-
-@LSA_DYNAMIC_NO@RPC_PIPE_OBJ1 = $(RPC_LSA_OBJ)
-@NETLOG_DYNAMIC_NO@RPC_PIPE_OBJ2 = $(RPC_NETLOG_OBJ)
-@SAMR_DYNAMIC_NO@RPC_PIPE_OBJ3 = $(RPC_SAMR_OBJ)
-@SVC_DYNAMIC_NO@RPC_PIPE_OBJ4 = $(RPC_SVC_OBJ)
-@WKS_DYNAMIC_NO@RPC_PIPE_OBJ5 = $(RPC_WKS_OBJ)
-@REG_DYNAMIC_NO@RPC_PIPE_OBJ6 = $(RPC_REG_OBJ)
-@SPOOLSS_DYNAMIC_NO@RPC_PIPE_OBJ7 = $(RPC_SPOOLSS_OBJ)
-@DFS_DYNAMIC_NO@RPC_PIPE_OBJ8 =        $(RPC_DFS_OBJ)
-RPC_SERVER_OBJ = $(RPC_PIPE_OBJ1) $(RPC_PIPE_OBJ2) $(RPC_PIPE_OBJ3) \
-       $(RPC_PIPE_OBJ4) $(RPC_PIPE_OBJ5) $(RPC_PIPE_OBJ6) $(RPC_PIPE_OBJ7) \
-       $(RPC_PIPE_OBJ8) $(RPC_PIPE_OBJ)
+RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ)
 
 # this includes only the low level parse code, not stuff
 # that requires knowledge of security contexts
@@ -285,11 +264,8 @@ LOCKING_OBJ = locking/locking.o locking/brlock.o locking/posix.o
 PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o
 
 PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \
-               passdb/machine_sid.o passdb/pdb_smbpasswd.o \
-               passdb/pdb_tdb.o passdb/pdb_ldap.o \
-               passdb/pdb_unix.o passdb/pdb_guest.o passdb/util_sam_sid.o \
-               passdb/pdb_compat.o passdb/pdb_nisplus.o \
-               passdb/privileges.o 
+               passdb/machine_sid.o passdb/util_sam_sid.o passdb/pdb_compat.o \
+               passdb/privileges.o @PDB_STATIC@
 
 XML_OBJ = modules/xml.o
 MYSQL_OBJ = modules/mysql.o
@@ -304,8 +280,6 @@ SAMTEST_OBJ = torture/samtest.o torture/cmd_sam.o $(SAM_OBJ) $(LIB_OBJ) $(PARAM_
 
 GROUPDB_OBJ = groupdb/mapping.o
 
-# passdb/smbpass.o passdb/ldap.o passdb/nispass.o 
-
 PROFILE_OBJ = profile/profile.o
 
 OPLOCK_OBJ = smbd/oplock.o smbd/oplock_irix.o smbd/oplock_linux.o
@@ -617,7 +591,7 @@ NTLM_AUTH_OBJ = utils/ntlm_auth.o $(LIBNTLMSSP_OBJ) $(LIBSAMBA_OBJ) $(POPT_LIB_O
 # now the rules...
 ######################################################################
 all : SHOWFLAGS proto_exists $(SBIN_PROGS) $(BIN_PROGS) $(SHLIBS) \
-       $(TORTURE_PROGS) $(RPC_MODULES) @EXTRA_ALL_TARGETS@
+       $(TORTURE_PROGS) @EXTRA_ALL_TARGETS@
 
 pam_smbpass : SHOWFLAGS bin/pam_smbpass.@SHLIBEXT@
 
@@ -649,7 +623,7 @@ nsswitch : SHOWFLAGS bin/winbindd@EXEEXT@ bin/wbinfo@EXEEXT@ nsswitch/libnss_win
 
 wins : SHOWFLAGS nsswitch/libnss_wins.@SHLIBEXT@
 
-modules: SHOWFLAGS proto_exists $(VFS_MODULES) $(PDB_MODULES) $(MODULES)
+modules: SHOWFLAGS proto_exists $(MODULES)
 
 everything: all libsmbclient debug2html smbfilter talloctort
 
@@ -1054,11 +1028,11 @@ installbin: all installdirs
        @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(SBIN_PROGS)
        @$(SHELL) $(srcdir)/script/installbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(BIN_PROGS)
 
-       @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(RPC_MODULES)
 
 installmodules: all installdirs
        @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(VFS_MODULES)
        @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(PDB_MODULES)
+       @$(SHELL) $(srcdir)/script/installmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(RPC_MODULES)
 
 installscripts: installdirs
        @$(SHELL) $(srcdir)/script/installscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS)
@@ -1128,12 +1102,11 @@ uninstallman:
 uninstallbin:
        @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(SBINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(SBIN_PROGS)
        @$(SHELL) $(srcdir)/script/uninstallbin.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(BINDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(VARDIR) $(DESTDIR)$(BIN_PROGS)
-       @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(DESTDIR)$(RPC_MODULES)
 
 uninstallmodules:
        @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(VFSLIBDIR) $(DESTDIR)$(VFS_MODULES)
        @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(PDBLIBDIR) $(DESTDIR)$(PDB_MODULES)
-       @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(MODULES)
+       @$(SHELL) $(srcdir)/script/uninstallmodules.sh $(INSTALLPERMS) $(DESTDIR)$(BASEDIR) $(DESTDIR)$(RPCLIBDIR) $(DESTDIR)$(RPC_MODULES)
 
 uninstallscripts:
        @$(SHELL) $(srcdir)/script/uninstallscripts.sh $(INSTALLPERMS) $(DESTDIR)$(BINDIR) $(SCRIPTS)
index 87acceb2ae196d7ab068a4b2ca228bc0db4e28d2..15508206c393633cedde5e7ac8b3ecc2e9226ff5 100644 (file)
@@ -59,7 +59,7 @@ AC_DEFUN(SMB_SUBSYSTEM,
 [
        AC_SUBST($1_STATIC)
        AC_SUBST($1_MODULES)
-       AC_DEFINE_UNQUOTED([static_init_]translit([$1], [A-Z], [a-z]), ["$init_static_modules_]translit([$1], [A-Z], [a-z])["], [Static init functions])
+       AC_DEFINE_UNQUOTED([static_init_]translit([$1], [A-Z], [a-z]), [{$init_static_modules_]translit([$1], [A-Z], [a-z])[}], [Static init functions])
 ])
 
 dnl AC_PROG_CC_FLAG(flag)
index e038654f7ed09965607d15cae096eb940e0afd07..ee6a88ee6d8d3ef0ecbbe4149550d6877636b418 100644 (file)
@@ -158,41 +158,6 @@ AC_SUBST(SMBWRAPPER)
 AC_SUBST(EXTRA_BIN_PROGS)
 AC_SUBST(EXTRA_SBIN_PROGS)
 AC_SUBST(EXTRA_ALL_TARGETS)
-dnl For the DYNAMIC RPC stuff
-dnl The complicated _YES and _NO stuff allows us to avoid a dependency
-dnl on GNU Make.
-AC_SUBST(LSA_DYNAMIC_YES)
-AC_SUBST(LSA_DYNAMIC_NO)
-LSA_DYNAMIC_YES="#"
-LSA_DYNAMIC_NO=
-AC_SUBST(NETLOG_DYNAMIC_YES)
-AC_SUBST(NETLOG_DYNAMIC_NO)
-NETLOG_DYNAMIC_YES="#"
-NETLOG_DYNAMIC_NO=
-AC_SUBST(SAMR_DYNAMIC_YES)
-AC_SUBST(SAMR_DYNAMIC_NO)
-SAMR_DYNAMIC_YES="#"
-SAMR_DYNAMIC_NO=
-AC_SUBST(SVC_DYNAMIC_YES)
-AC_SUBST(SVC_DYNAMIC_NO)
-SVC_DYNAMIC_YES="#"
-SVC_DYNAMIC_NO=
-AC_SUBST(WKS_DYNAMIC_YES)
-AC_SUBST(WKS_DYNAMIC_NO)
-WKS_DYNAMIC_YES="#"
-WKS_DYNAMIC_NO=
-AC_SUBST(REG_DYNAMIC_YES)
-AC_SUBST(REG_DYNAMIC_NO)
-REG_DYNAMIC_YES="#"
-REG_DYNAMIC_NO=
-AC_SUBST(SPOOLSS_DYNAMIC_YES)
-AC_SUBST(SPOOLSS_DYNAMIC_NO)
-SPOOLSS_DYNAMIC_YES="#"
-SPOOLSS_DYNAMIC_NO=
-AC_SUBST(DFS_DYNAMIC_YES)
-AC_SUBST(DFS_DYNAMIC_NO)
-DFS_DYNAMIC_YES="#"
-DFS_DYNAMIC_NO=
 
 # compile with optimization and without debugging by default
 CFLAGS="-O ${CFLAGS}"
@@ -223,60 +188,6 @@ then
        LIBS="$LIBS -ldmalloc"  
 fi
 
-AC_ARG_ENABLE(dynrpc,  [  --enable-dynrpc         Enable dynamic RPC modules [default=no]])
-
-if test x$enable_dynrpc = xyes
-then
-       enable_dynrpc=lsa,samr,reg,wks,netlog,dfs
-fi
-
-if test x$enable_dynrpc != xno
-then
-       for i in `echo $enable_dynrpc | sed -e's/,/ /g'` 
-         do case $i in lsa)
-         LSA_DYNAMIC_YES=
-         LSA_DYNAMIC_NO="#"
-          AC_DEFINE(RPC_LSA_DYNAMIC, 1,
-                    [Define to make the LSA pipe dynamic])
-        ;; samr)
-          SAMR_DYNAMIC_YES=
-          SAMR_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_SAMR_DYNAMIC, 1, 
-                   [Define to make the SAMR pipe dynamic])
-        ;; svc)
-          SVC_DYNAMIC_YES=
-          SVC_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_SVC_DYNAMIC, 1, 
-                   [Define to make the SRVSVC pipe dynamic])
-        ;; wks)
-          WKS_DYNAMIC_YES=
-          WKS_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_WKS_DYNAMIC, 1, 
-                   [Define to make the WKSSVC pipe dynamic])
-        ;; netlog)
-          NETLOG_DYNAMIC_YES=
-          NETLOG_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_NETLOG_DYNAMIC, 1, 
-                   [Define to make the NETLOGON pipe dynamic])
-        ;; reg)
-          REG_DYNAMIC_YES=
-          REG_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_REG_DYNAMIC, 1, 
-                   [Define to make the WINREG pipe dynamic])
-        ;; spoolss)
-          SPOOLSS_DYNAMIC_YES=
-          SPOOLSS_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_SPOOLSS_DYNAMIC, 1, 
-                   [Define to make the SPOOLSS pipe dynamic])
-        ;; dfs)
-          DFS_DYNAMIC_YES=
-          DFS_DYNAMIC_NO="#"
-         AC_DEFINE(RPC_DFS_DYNAMIC, 1, 
-                   [Define to make the NETDFS pipe dynamic])
-        ;; esac
-         done
-fi
-
 dnl Checks for programs.
 AC_PROG_CC
 AC_PROG_INSTALL
@@ -323,6 +234,9 @@ AC_VALIDATE_CACHE_SYSTEM_TYPE
 
 DYNEXP=
 
+dnl Add modules that have to be built by default here
+default_modules="pdb_smbpasswd pdb_tdb pdb_unix rpc_lsa rpc_samr rpc_reg rpc_wks rpc_netlog rpc_dfs rpc_srv rpc_spoolss"
+
 #
 # Config CPPFLAG settings for strange OS's that must be set
 # before other tests.
@@ -2329,6 +2243,7 @@ if test x"$with_ldap_support" = x"yes"; then
   if test x$have_ldap != xyes; then
   AC_CHECK_LIB(ldap, ldap_domain2hostlist, [LIBS="$LIBS -lldap";
        AC_DEFINE(HAVE_LDAP,1,[Whether ldap is available])])
+     default_modules="$default_modules pdb_ldap"
 
        ########################################################
        # If we have LDAP, does it's rebind procedure take 2 or 3 arguments?
@@ -2344,15 +2259,15 @@ fi
 
 ########################################################
 # Compile with MySQL support?
-AM_PATH_MYSQL([0.11.0],[MODULE_MYSQL=bin/mysql.so],[MODULE_MYSQL=])
+AM_PATH_MYSQL([0.11.0],[default_modules="$default_modules pdb_mysql"],[])
 CFLAGS="$CFLAGS $MYSQL_CFLAGS"
-AC_SUBST(MODULE_MYSQL)
+LIBS="$LIBS $MYSQL_LIBS"
 
 ########################################################
 # Compile with XML support?
-AM_PATH_XML2([2.0.0],[MODULE_XML=bin/xml.so],[MODULE_XML=])
+AM_PATH_XML2([2.0.0],[default_modules="$default_modules pdb_xml"],[])
 CFLAGS="$CFLAGS $XML_CFLAGS"
-AC_SUBST(MODULE_XML)
+LIBS="$LIBS $XML_LIBS"
 
 #################################################
 # check for automount support
@@ -3434,6 +3349,48 @@ AC_ARG_WITH(python,
   esac ])
 AC_SUBST(PYTHON)
 
+for i in `echo $default_modules | sed -e's/,/ /g'`
+do
+       dnl Set to shared instead of static when dlopen() is available?
+       eval MODULE_$i=STATIC
+done
+
+AC_ARG_WITH(static-modules,
+[  --with-static-modules=MODULES  Comma-seperated list of names of modules to statically link in],
+[ if test $withval; then
+       for i in `echo $withval | sed -e's/,/ /g'`
+       do
+               eval MODULE_$i=STATIC
+       done
+fi ])
+
+AC_ARG_WITH(shared-modules,
+[  --with-shared-modules=MODULES  Comma-seperated list of names of modules to build shared],
+[ if test $withval; then
+       for i in `echo $withval | sed -e's/,/ /g'`
+       do
+                       eval MODULE_$i=SHARED
+       done
+fi ])
+
+SMB_MODULE($MODULE_pdb_xml, pdb_xml, modules/xml.o, bin/xml.so PDB)
+SMB_MODULE($MODULE_pdb_mysql, pdb_mysql, modules/mysql.o, bin/mysql.so, PDB)
+SMB_MODULE($MODULE_pdb_ldap, pdb_ldap, passdb/pdb_ldap.o, bin/pdb_ldap.so, PDB)
+SMB_MODULE($MODULE_pdb_smbpasswd, pdb_smbpasswd, passdb/pdb_smbpasswd.o, bin/smbpasswd.so, PDB)
+SMB_MODULE($MODULE_pdb_tdb, pdb_tdbsam, passdb/pdb_tdb.o, bin/tdb.so, PDB)
+SMB_MODULE($MODULE_pdb_nisplussam, pdb_nisplussam, passdb/pdb_nisplus.o, bin/nisplus.so, PDB)
+SMB_MODULE(STATIC, pdb_guest, passdb/pdb_guest.o, bin/pdb_guest.so, PDB)
+SMB_SUBSYSTEM(PDB)
+
+SMB_MODULE($MODULE_rpc_lsa, rpc_lsa, \$(RPC_LSA_OBJ), bin/librpc_lsa.so, RPC)
+SMB_MODULE($MODULE_rpc_reg, rpc_reg, \$(RPC_REG_OBJ), bin/librpc_reg.so, RPC)
+SMB_MODULE($MODULE_rpc_wks, rpc_wks, \$(RPC_WKS_OBJ), bin/librpc_wks.so, RPC)
+SMB_MODULE($MODULE_rpc_netlog, rpc_net, \$(RPC_NETLOG_OBJ), bin/librpc_netlog.so, RPC)
+SMB_MODULE($MODULE_rpc_dfs, rpc_dfs, \$(RPC_DFS_OBJ), bin/librpc_dfs.so, RPC)
+SMB_MODULE($MODULE_rpc_srv, rpc_srv, \$(RPC_SVC_OBJ), bin/librpc_srvsvc.so, RPC)
+SMB_MODULE($MODULE_rpc_spoolss, rpc_spoolss, \$(RPC_SPOOLSS_OBJ), bin/librpc_spoolss.so, RPC)
+SMB_SUBSYSTEM(RPC)
+
 #################################################
 # do extra things if we are running insure
 
index 4e2fe48af70dc887c961ddb393e4178645d962e0..bf37078bb92d540d4f70c11605fc155fc1b2e11f 100644 (file)
@@ -87,6 +87,8 @@ int smb_probe_module(const char *subsystem, const char *module)
        pstrcat(full_path, module);
        pstrcat(full_path, ".");
        pstrcat(full_path, shlib_ext());
+
+       DEBUG(5, ("Probing module %s: Trying to load from %s\n", module, full_path));
        
        return smb_load_module(full_path);
 }
index 1d5819295b034ce737b3d27a0a0fd8e59d9c5f2e..47883ca7f7d7ce86c49bfa6e02b355166c6af8cb 100644 (file)
@@ -1032,12 +1032,7 @@ static NTSTATUS mysqlsam_init(struct pdb_context * pdb_context, struct pdb_metho
        return NT_STATUS_OK;
 }
 
-int init_module(void);
-
-int init_module() 
+int pdb_mysql_init(void) 
 {
-       if(smb_register_passdb("mysql", mysqlsam_init, PASSDB_INTERFACE_VERSION))
-               return 0;
-
-       return 1;
+       return smb_register_passdb("mysql", mysqlsam_init, PASSDB_INTERFACE_VERSION);
 }
index ead3e3a874806e4ebe07bf0c53a8906b64fed5a4..85b9e81b7f1320e18ef4c36876bafc339ef3f85b 100644 (file)
@@ -564,12 +564,7 @@ NTSTATUS xmlsam_init(PDB_CONTEXT * pdb_context, PDB_METHODS ** pdb_method,
        return NT_STATUS_OK;
 }
 
-int init_module(void);
-
-int init_module() 
+int pdb_xml_init(void) 
 {
-       if(smb_register_passdb("xml", xmlsam_init, PASSDB_INTERFACE_VERSION))
-               return 0;
-
-       return 1;
+       return smb_register_passdb("xml", xmlsam_init, PASSDB_INTERFACE_VERSION);
 }
index 3f0f06d18d01e15a05e6ad4377bc03f7e12d041b..f5a15057e092c5e927ee294f822fa00592ac86ed 100644 (file)
@@ -121,3 +121,9 @@ NTSTATUS pdb_init_guestsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, c
        /* There's not very much to initialise here */
        return NT_STATUS_OK;
 }
+
+int pdb_guest_init(void)
+{
+    return smb_register_passdb("guest", pdb_init_guestsam, PASSDB_INTERFACE_VERSION);
+}
+
index 48a039b3dee18b32ef835fbf438c3cb687798ac6..9819df75ec158cf0968522eb3d4ca55472d1c193 100644 (file)
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
 
-/** List of various built-in passdb modules */
-static const struct {
-    const char *name;
-    /* Function to create a member of the pdb_methods list */
-    pdb_init_function init;
-} builtin_pdb_init_functions[] = {
-       { "smbpasswd", pdb_init_smbpasswd },
-       { "smbpasswd_nua", pdb_init_smbpasswd_nua },
-       { "tdbsam", pdb_init_tdbsam },
-       { "tdbsam_nua", pdb_init_tdbsam_nua },
-       { "ldapsam", pdb_init_ldapsam },
-       { "ldapsam_nua", pdb_init_ldapsam_nua },
-       { "unixsam", pdb_init_unixsam },
-       { "guest", pdb_init_guestsam },
-       { "nisplussam", pdb_init_nisplussam },
-       { NULL, NULL}
-};
-
-static struct pdb_init_function_entry *backends;
-static void lazy_initialize_passdb(void);
-
-static void lazy_initialize_passdb()
-{
-       int i;
-       static BOOL initialised = False;
-       
-       if(!initialised) {
-               initialised = True;
+static struct pdb_init_function_entry *backends = NULL;
 
-               for(i = 0; builtin_pdb_init_functions[i].name; i++) {
-                       smb_register_passdb(builtin_pdb_init_functions[i].name, builtin_pdb_init_functions[i].init, PASSDB_INTERFACE_VERSION);
-               }
-       }
+static void lazy_initialize_passdb(void)
+{
+       static BOOL initialized = FALSE;
+       if(initialized)return;
+       static_init_pdb;
+       initialized = TRUE;
 }
 
 BOOL smb_register_passdb(const char *name, pdb_init_function init, int version) 
@@ -451,13 +426,18 @@ static NTSTATUS make_pdb_methods_name(struct pdb_methods **methods, struct pdb_c
        entry = pdb_find_backend_entry(module_name);
        
        /* Try to find a module that contains this module */
-       if(!entry) { 
-               smb_probe_module("passdb", module_name);
-               entry = pdb_find_backend_entry(module_name);
+       if (!entry) { 
+               DEBUG(2,("No builtin backend found, trying to load plugin\n"));
+               if(smb_probe_module("passdb", module_name) && !(entry = pdb_find_backend_entry(module_name))) {
+                       DEBUG(0,("Plugin is available, but doesn't register passdb backend %s\n", module_name));
+                       SAFE_FREE(module_name);
+                       return NT_STATUS_UNSUCCESSFUL;
+               }
        }
        
        /* No such backend found */
        if(!entry) { 
+               DEBUG(0,("No builtin nor plugin backend for %s found\n", module_name));
                SAFE_FREE(module_name);
                return NT_STATUS_INVALID_PARAMETER;
        }
index 2571ecd33aaa78b618a6337c4c9c566dcda3b41f..98ddc72ed145a601b593682d36b2ed7e7e32c0cb 100644 (file)
@@ -28,7 +28,6 @@
 #undef DBGC_CLASS
 #define DBGC_CLASS DBGC_PASSDB
 
-#ifdef HAVE_LDAP
 /* TODO:
 *  persistent connections: if using NSS LDAP, many connections are made
 *      however, using only one within Samba would be nice
@@ -2611,20 +2610,9 @@ NTSTATUS pdb_init_ldapsam_nua(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method
        return NT_STATUS_OK;
 }
 
-
-#else
-
-NTSTATUS pdb_init_ldapsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
+int pdb_ldap_init(void)
 {
-       DEBUG(0, ("ldap not detected at configure time, ldapsam not availalble!\n"));
-       return NT_STATUS_UNSUCCESSFUL;
+       smb_register_passdb("ldapsam", pdb_init_ldapsam, PASSDB_INTERFACE_VERSION);
+       smb_register_passdb("ldapsam_nua", pdb_init_ldapsam_nua, PASSDB_INTERFACE_VERSION);
+       return TRUE;
 }
-
-NTSTATUS pdb_init_ldapsam_nua(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
-{
-       DEBUG(0, ("ldap not dectected at configure time, ldapsam_nua not available!\n"));
-       return NT_STATUS_UNSUCCESSFUL;
-}
-
-
-#endif
index 0a42c36ea022706448d572550ed1d824bd0ce821..73d65af1c6fac2c875847a7b74bdade95c73994f 100644 (file)
@@ -24,8 +24,6 @@
 
 #include "includes.h"
 
-#ifdef WITH_NISPLUS_SAM
-
 #ifdef BROKEN_NISPLUS_INCLUDE_FILES
 
 /*
@@ -1555,11 +1553,7 @@ NTSTATUS pdb_init_nisplussam (PDB_CONTEXT * pdb_context,
        return NT_STATUS_OK;
 }
 
-#else
-NTSTATUS pdb_init_nisplussam (PDB_CONTEXT * c, PDB_METHODS ** m,
-                             const char *l)
+int pdb_nisplus_init(void)
 {
-       DEBUG (0, ("nisplus sam not compiled in!\n"));
-       return NT_STATUS_UNSUCCESSFUL;
+       return smb_register_passdb("nisplussam", pdb_init_nisplussam, PASSDB_INTERFACE_VERSION);
 }
-#endif /* WITH_NISPLUS_SAM */
index b5a2bbbfe7ccd711daa952b5d24d03652c308acd..bcbeb7480828c7d3285fdcfa95ee69ca0c63830e 100644 (file)
@@ -1579,3 +1579,10 @@ NTSTATUS pdb_init_smbpasswd_nua(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_meth
 
        return NT_STATUS_OK;
 }
+
+int pdb_smbpasswd_init(void) 
+{
+       smb_register_passdb("smbpasswd", pdb_init_smbpasswd, PASSDB_INTERFACE_VERSION);
+       smb_register_passdb("smbpasswd_nua", pdb_init_smbpasswd_nua, PASSDB_INTERFACE_VERSION);
+       return TRUE;
+}
index c48c9567b16f176bd7ffbd2181844de329ef33b8..da6fcf70fc1ad86115e0c8089a93ee5953091778 100644 (file)
@@ -37,8 +37,6 @@ static int tdbsam_debug_level = DBGC_ALL;
 
 #endif
 
-#ifdef WITH_TDB_SAM
-
 #define PDB_VERSION            "20010830"
 #define PASSDB_FILE_NAME       "passdb.tdb"
 #define TDB_FORMAT_STRING      "ddddddBBBBBBBBBBBBddBBwdwdBdd"
@@ -988,20 +986,9 @@ NTSTATUS pdb_init_tdbsam_nua(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method,
        return NT_STATUS_OK;
 }
 
-
-#else
-
-NTSTATUS pdb_init_tdbsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
+int pdb_tdbsam_init(void)
 {
-       DEBUG(0, ("tdbsam not compiled in!\n"));
-       return NT_STATUS_UNSUCCESSFUL;
+    smb_register_passdb("tdbsam", pdb_init_tdbsam, PASSDB_INTERFACE_VERSION);
+    smb_register_passdb("tdbsam_nua", pdb_init_tdbsam_nua, PASSDB_INTERFACE_VERSION);
 }
 
-NTSTATUS pdb_init_tdbsam_nua(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
-{
-       DEBUG(0, ("tdbsam_nua not compiled in!\n"));
-       return NT_STATUS_UNSUCCESSFUL;
-}
-
-
-#endif
index 07acd08a4e5b36491f467581156790f11fabb8fe..dcdf5cf50b169e70d08469a58ad9481687b466dd 100644 (file)
@@ -123,3 +123,8 @@ NTSTATUS pdb_init_unixsam(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, co
        /* There's not very much to initialise here */
        return NT_STATUS_OK;
 }
+
+int pdb_unix_init(void)
+{
+       return smb_register_passdb("unixsam", pdb_init_unixsam, PASSDB_INTERFACE_VERSION);
+}
index 14c1cb4088edaea0de6fca414fd718f2e90d1e25..0807efd550c08b5fa5bac1753cd02ca1fa538225 100644 (file)
@@ -158,11 +158,7 @@ static BOOL api_dfs_enum(pipes_struct *p)
 \pipe\netdfs commands
 ********************************************************************/
 
-#ifdef RPC_DFS_DYNAMIC
-int init_module(void)
-#else
 int rpc_dfs_init(void)
-#endif
 {
   struct api_struct api_netdfs_cmds[] =
     {
index 0e4039326b6aac8c302ba390ba852a4c467d4f03..bfa706acf245a2575c0aeef9e67a102242a8e6c8 100644 (file)
@@ -771,11 +771,7 @@ static BOOL api_lsa_remove_acct_rights(pipes_struct *p)
  \PIPE\ntlsa commands
  ***************************************************************************/
 
-#ifdef RPC_LSA_DYNAMIC
-int init_module(void)
-#else
 int rpc_lsa_init(void)
-#endif
 {
   static const struct api_struct api_lsa_cmds[] =
     {
index c9e4fc1b1f621d30f765c44e1247f0511b4f71c0..7dc0f57f34f6ebf7486c971fa4fb53aa9b76edc6 100644 (file)
@@ -321,11 +321,7 @@ static BOOL api_net_logon_ctrl(pipes_struct *p)
  array of \PIPE\NETLOGON operations
  ********************************************************************/
 
-#ifdef RPC_NETLOG_DYNAMIC
-int init_module(void)
-#else
 int rpc_net_init(void)
-#endif
 {
   static struct api_struct api_net_cmds [] =
     {
index f6deac68f8281684f6d4206ac58ac93f91755f0e..d6b774c5663405a8a85f0b21f2182849dd33fd14 100644 (file)
@@ -454,41 +454,6 @@ failed authentication on named pipe %s.\n", domain, user_name, wks, p->name ));
  The switch table for the pipe names and the functions to handle them.
  *******************************************************************/
 
-struct api_cmd
-{
-  const char *name;
-  int (*init)(void);
-};
-
-static struct api_cmd api_fd_commands[] =
-{
-#ifndef RPC_LSA_DYNAMIC
-    { "lsarpc",   rpc_lsa_init },
-#endif
-#ifndef RPC_SAMR_DYNAMIC
-    { "samr",     rpc_samr_init },
-#endif
-#ifndef RPC_SVC_DYNAMIC
-    { "srvsvc",   rpc_srv_init },
-#endif
-#ifndef RPC_WKS_DYNAMIC
-    { "wkssvc",   rpc_wks_init },
-#endif
-#ifndef RPC_NETLOG_DYNAMIC
-    { "NETLOGON", rpc_net_init },
-#endif
-#ifndef RPC_REG_DYNAMIC
-    { "winreg",   rpc_reg_init },
-#endif
-#ifndef RPC_SPOOLSS_DYNAMIC
-    { "spoolss",  rpc_spoolss_init },
-#endif
-#ifndef RPC_DFS_DYNAMIC
-    { "netdfs",   rpc_dfs_init },
-#endif
-    { NULL, NULL }
-};
-
 struct rpc_table
 {
   struct
@@ -791,28 +756,6 @@ int rpc_pipe_register_commands(const char *clnt, const char *srv, const struct a
         return size;
 }
 
-/*******************************************************************
- Register commands to an RPC pipe
-*******************************************************************/
-int rpc_load_module(const char *module)
-{
-        pstring full_path;
-               int status;
-        
-        pstrcpy(full_path, lib_path("rpc"));
-        pstrcat(full_path, "/librpc_");
-        pstrcat(full_path, module);
-        pstrcat(full_path, ".");
-        pstrcat(full_path, shlib_ext());
-               
-               if (!(status = smb_load_module(full_path)))  {
-                DEBUG(0, ("Could not load requested pipe %s as %s\n", 
-                    module, full_path));
-        }
-        
-               return status;
-}
-
 /*******************************************************************
  Respond to a pipe bind request.
 *******************************************************************/
@@ -851,14 +794,7 @@ BOOL api_pipe_bind_req(pipes_struct *p, prs_struct *rpc_in_p)
        }
 
        if (i == rpc_lookup_size) {
-                for (i = 0; api_fd_commands[i].name; i++) {
-                       if (strequal(api_fd_commands[i].name, p->name)) {
-                               api_fd_commands[i].init();
-                               break;
-                       }
-                }
-
-                if (!api_fd_commands[i].name && !rpc_load_module(p->name)) {
+                               if (!smb_probe_module("rpc", p->name)) {
                        DEBUG(3,("api_pipe_bind_req: Unknown pipe name %s in bind request.\n",
                                 p->name ));
                        if(!setup_bind_nak(p))
@@ -1273,16 +1209,7 @@ BOOL api_pipe_request(pipes_struct *p)
 
 
        if (i == rpc_lookup_size) {
-               for (i = 0; api_fd_commands[i].name; i++) {
-                        if (strequal(api_fd_commands[i].name, p->name)) {
-                                api_fd_commands[i].init();
-                                break;
-                        }
-                }
-
-                if (!api_fd_commands[i].name) {
-                       rpc_load_module(p->name);
-                }
+               smb_probe_module("rpc", p->name);
 
                 for (i = 0; i < rpc_lookup_size; i++) {
                         if (strequal(rpc_lookup[i].pipe.clnt, p->name)) {
index 8fc1d42b2fb09c2a93d59211ab1cc0f68f6e8871..f72d8e4f295354054d5bf4b536783e56b0a882d4 100644 (file)
@@ -373,11 +373,7 @@ static BOOL api_reg_save_key(pipes_struct *p)
  array of \PIPE\reg operations
  ********************************************************************/
 
-#ifdef RPC_REG_DYNAMIC
-int init_module(void)
-#else
 int rpc_reg_init(void)
-#endif
 {
   static struct api_struct api_reg_cmds[] =
     {
index b75195ceefd9433428fbe3655f841ac1c1f3a83a..67c092775b974a39c405f8a93db8e0cc65b04f3a 100644 (file)
@@ -1443,11 +1443,7 @@ static BOOL api_samr_set_dom_info(pipes_struct *p)
  array of \PIPE\samr operations
  ********************************************************************/
 
-#ifdef RPC_SAMR_DYNAMIC
-int init_module(void)
-#else
 int rpc_samr_init(void)
-#endif
 {
   static struct api_struct api_samr_cmds [] =
     {
index 3023922a5b31f6efa255e222556f1ae7d3d0cb8d..a7dd7a6cef5a0f2e2ce7874377359492f9033e92 100755 (executable)
@@ -1580,11 +1580,7 @@ static BOOL api_spoolss_replycloseprinter(pipes_struct *p)
 \pipe\spoolss commands
 ********************************************************************/
 
-#ifdef RPC_SPOOLSS_DYNAMIC
-int init_module(void)
-#else
 int rpc_spoolss_init(void)
-#endif
 {
   struct api_struct api_spoolss_cmds[] = 
     {
index 7c5e317c8776a1c4c4e679bf31badff3d33a533a..96820ae74bc3b1b6d6791f02f3f7815bc35d8e3c 100644 (file)
@@ -526,11 +526,7 @@ static BOOL api_srv_net_file_set_secdesc(pipes_struct *p)
 \PIPE\srvsvc commands
 ********************************************************************/
 
-#ifdef RPC_SVC_DYNAMIC
-int init_module(void)
-#else
 int rpc_srv_init(void)
-#endif
 {
   static const struct api_struct api_srv_cmds[] =
     {
index e0d662ea8018efaf5fb641d352b068101058a1c5..ddcbadd1d44dad780f90830e8cd7c0daf10dac4e 100644 (file)
@@ -60,11 +60,7 @@ static BOOL api_wks_query_info(pipes_struct *p)
  \PIPE\wkssvc commands
  ********************************************************************/
 
-#ifdef RPC_WKS_DYNAMIC
-int init_module(void)
-#else
 int rpc_wks_init(void)
-#endif
 {
   static struct api_struct api_wks_cmds[] =
     {
index aff402df6686b5525c28c04ee327eca7458bfd32..96d936d3a8a9de86cffbcb7a8e5bcb91a930b2b2 100644 (file)
@@ -411,9 +411,6 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_
                                        return False;
                                }
 
-                               /* Load DSO's */
-                               init_modules();
-
                                return True; 
                        }
                        /* The parent doesn't need this socket */
@@ -866,6 +863,10 @@ static BOOL init_structs(void )
        if(!initialize_password_db(False))
                exit(1);
 
+       static_init_rpc;
+
+       init_modules();
+
        uni_group_cache_init(); /* Non-critical */
        
        /* possibly reload the services file. */