r3586: Fix some of the issues with the module init functions.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 6 Nov 2004 23:23:15 +0000 (23:23 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:05:36 +0000 (13:05 -0500)
Both subsystems and modules can now have init functions, which can be
specified in .mk files (INIT_FUNCTION = ...)

The build system will define :
 - SUBSYSTEM_init_static_modules that calls the init functions of all statically compiled modules. Failing to load will generate an error which is not fatal
 - BINARY_init_subsystems that calls the init functions (if defined) for the subsystems the binary depends on

This removes the hack with the "static bool Initialised = " and the
"lazy_init" functions
(This used to be commit 7a8244761bfdfdfb48f8264d76951ebdfbf7bd8a)

49 files changed:
source4/auth/auth.c
source4/auth/config.mk
source4/build/pidl/header.pm
source4/build/pidl/server.pm
source4/build/smb_build/depend.pl
source4/build/smb_build/public.m4
source4/build/smb_build/smb_build_h.pl
source4/client/client.c
source4/gtk/tools/gepdump.c
source4/gtk/tools/gregedit.c
source4/gtk/tools/gwcrontab.c
source4/gtk/tools/gwsam.c
source4/lib/iconv.c
source4/lib/ldb/config.m4
source4/lib/registry/common/reg_interface.c
source4/lib/registry/config.mk
source4/lib/registry/tools/regdiff.c
source4/lib/registry/tools/regpatch.c
source4/lib/registry/tools/regshell.c
source4/lib/registry/tools/regtree.c
source4/lib/socket/socket_ipv4.c
source4/lib/socket/socket_ipv6.c
source4/lib/socket/socket_unix.c
source4/libcli/auth/gensec.c
source4/libcli/auth/gensec.mk
source4/librpc/config.mk
source4/librpc/rpc/dcerpc.c
source4/ntvfs/config.mk
source4/ntvfs/ntvfs_base.c
source4/ntvfs/posix/config.mk
source4/ntvfs/unixuid/config.mk
source4/rpc_server/config.mk
source4/rpc_server/dcerpc_server.c
source4/rpc_server/remote/dcesrv_remote.c
source4/smbd/config.mk
source4/smbd/process_model.c
source4/smbd/process_model.mk
source4/smbd/rewrite.c
source4/smbd/service.c
source4/torture/gentest.c
source4/torture/locktest.c
source4/torture/masktest.c
source4/torture/torture.c
source4/utils/getntacl.c
source4/utils/ndrdump.c
source4/utils/net/net.c
source4/utils/ntlm_auth.c
source4/utils/setntacl.c
source4/utils/setnttoken.c

index ae8b29e87d2c0036f48117a32e09c89e4ba25759..58075b4c752d4fed44104c5ff164a16975ffdded 100644 (file)
@@ -480,28 +480,19 @@ const struct auth_critical_sizes *auth_interface_version(void)
 /*
   initialise the AUTH subsystem
 */
-BOOL auth_init(void)
+NTSTATUS auth_init(void)
 {
        NTSTATUS status;
        
-       /* ugly cludge, to go away */
-       static BOOL initialised;
-
-       if (initialised) {
-               return True;
-       }
-
        status = register_subsystem("auth", auth_register); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       /* FIXME: Perhaps panic if a basic backend, such as SAM, fails to initialise? */
-       static_init_auth;
-
-       initialised = True;
+       auth_init_static_modules;
+       
        DEBUG(3,("AUTH subsystem version %d initialised\n", AUTH_INTERFACE_VERSION));
-       return True;
+       return status;
 }
 
 NTSTATUS server_service_auth_init(void)
index 9272dda1931bb14c10f061d36fc480e117cf05e0..46808cba729fd2057164f61bbc755cc1263fe3bb 100644 (file)
@@ -3,6 +3,7 @@
 #######################
 # Start MODULE auth_sam
 [MODULE::auth_sam]
+INIT_FUNCTION = auth_sam_init
 INIT_OBJ_FILES = \
                auth/auth_sam.o
 REQUIRED_SUBSYSTEMS = \
@@ -13,6 +14,7 @@ REQUIRED_SUBSYSTEMS = \
 #######################
 # Start MODULE auth_builtin
 [MODULE::auth_builtin]
+INIT_FUNCTION = auth_builtin_init
 INIT_OBJ_FILES = \
                auth/auth_builtin.o
 # End MODULE auth_builtin
@@ -21,6 +23,7 @@ INIT_OBJ_FILES = \
 #######################
 # Start MODULE auth_winbind
 [MODULE::auth_winbind]
+INIT_FUNCTION = auth_winbind_init
 INIT_OBJ_FILES = \
                auth/auth_winbind.o
 REQUIRED_SUBSYSTEMS = \
@@ -31,6 +34,7 @@ REQUIRED_SUBSYSTEMS = \
 #######################
 # Start SUBSYSTEM AUTH
 [SUBSYSTEM::AUTH]
+INIT_FUNCTION = auth_init
 INIT_OBJ_FILES = \
                auth/auth.o
 ADD_OBJ_FILES = \
index 3f652bd4a19e1a5e0328a01ede93172b3f6ed53d..d1eb1d1630885cff230953af7a5d3458c8814404 100644 (file)
@@ -349,7 +349,7 @@ sub HeaderInterface($)
                $res .= "#define DCERPC_$name\_HELPSTRING $interface->{PROPERTIES}->{helpstring}\n";
 
            $res .= "\nextern const struct dcerpc_interface_table dcerpc_table_$interface->{NAME};\n";
-           $res .= "NTSTATUS dcerpc_$interface->{NAME}_init(void);\n\n";
+           $res .= "NTSTATUS dcerpc_server_$interface->{NAME}_init(void);\n\n";
     }
 
     foreach my $d (@{$data}) {
index 2c590ea642f3154f619f8e8d77c85be53b4a7fdc..01c5adacb4f0848307cc5051ad7203fca08e1904 100644 (file)
@@ -175,7 +175,7 @@ static BOOL $name\__op_interface_by_name(struct dcesrv_interface *iface, const c
        return False;   
 }
        
-NTSTATUS dcerpc_$name\_init(void)
+NTSTATUS dcerpc_server_$name\_init(void)
 {
        NTSTATUS ret;
        struct dcesrv_endpoint_server ep_server;
index a5a95eb547e285d2ae0e05747fb38c8f1cbf9f17..a45fb725e105c97711e6797884e2a29d8a1347f6 100644 (file)
@@ -147,6 +147,7 @@ sub _do_depend_subsystems($)
        foreach my $key (sort keys %{$CTX->{INPUT}{SUBSYSTEMS}}) {
                my $name = $CTX->{INPUT}{SUBSYSTEMS}{$key}{NAME};
                my @STATIC_MODULES_LIST = ();
+               my @INIT_FUNCTIONS = ();
 
                #
                # skip when the subsystem was disabled
@@ -159,28 +160,19 @@ sub _do_depend_subsystems($)
                # create the subsystems used OBJ_LIST
                #
                my @OBJ_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{SUBSYSTEMS}{$key}{INIT_OBJ_FILES}}) {
-                       push(@OBJ_LIST,$elem);
-               }
-               foreach my $elem (@{$CTX->{INPUT}{SUBSYSTEMS}{$key}{ADD_OBJ_FILES}}) {
-                       push(@OBJ_LIST,$elem);
-               }
+               push (@OBJ_LIST, @{$CTX->{INPUT}{SUBSYSTEMS}{$key}{INIT_OBJ_FILES}});
+               push (@OBJ_LIST, @{$CTX->{INPUT}{SUBSYSTEMS}{$key}{ADD_OBJ_FILES}});
 
                #
                # create the subsystems used SUBSYSTEMS_LIST
                #
                my @SUBSYSTEMS_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{SUBSYSTEMS}{$key}{REQUIRED_SUBSYSTEMS}}) {
-                       push(@SUBSYSTEMS_LIST,$elem);
-               }
-
+               push (@SUBSYSTEMS_LIST, (@{$CTX->{INPUT}{SUBSYSTEMS}{$key}{REQUIRED_SUBSYSTEMS}}));
                #
                # create the subsystems used LIBRARIES_LIST
                #
                my @LIBRARIES_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{SUBSYSTEMS}{$key}{REQUIRED_LIBRARIES}}) {
-                       push(@LIBRARIES_LIST,$elem);
-               }
+               push (@LIBRARIES_LIST, @{$CTX->{INPUT}{SUBSYSTEMS}{$key}{REQUIRED_LIBRARIES}});
 
                #
                # now collect the info from the subsystems static modules
@@ -204,35 +196,29 @@ sub _do_depend_subsystems($)
                        # add it to the STATIC_MODULES_LIST
                        #
                        push(@STATIC_MODULES_LIST,$subkey);
+                       push (@INIT_FUNCTIONS, $CTX->{INPUT}{MODULES}{$subkey}{INIT_FUNCTION}) if $CTX->{INPUT}{MODULES}{$subkey}{INIT_FUNCTION} ne "";
 
                        #
                        # add OBJS of static modules to the subsystems used OBJ_LIST
                        #
-                       foreach my $elem (@{$CTX->{INPUT}{MODULES}{$subkey}{INIT_OBJ_FILES}}) {
-                               push(@OBJ_LIST,$elem);
-                       }
-                       foreach my $elem (@{$CTX->{INPUT}{MODULES}{$subkey}{ADD_OBJ_FILES}}) {
-                               push(@OBJ_LIST,$elem);
-                       }
+                       push (@OBJ_LIST, (@{$CTX->{INPUT}{MODULES}{$subkey}{INIT_OBJ_FILES}}));
+                       push (@OBJ_LIST, (@{$CTX->{INPUT}{MODULES}{$subkey}{ADD_OBJ_FILES}}));
 
                        #
                        # add SUBSYSTEMS of static modules to the subsystems used SUBSYSTEMS_LIST
                        #
-                       foreach my $elem (@{$CTX->{INPUT}{MODULES}{$subkey}{REQUIRED_SUBSYSTEMS}}) {
-                               push(@SUBSYSTEMS_LIST,$elem);
-                       }
+                       push (@SUBSYSTEMS_LIST, (@{$CTX->{INPUT}{MODULES}{$subkey}{REQUIRED_SUBSYSTEMS}}));
 
                        #
                        # add LIBRARIES of static modules to  the subsystems used LIBRARIES_LIST
                        #
-                       foreach my $elem (@{$CTX->{INPUT}{MODULES}{$subkey}{REQUIRED_LIBRARIES}}) {
-                               push(@LIBRARIES_LIST,$elem);
-                       }
+                       push (@LIBRARIES_LIST, (@{$CTX->{INPUT}{MODULES}{$subkey}{REQUIRED_LIBRARIES}}));
                }
 
                #
                # set the lists
                #
+               @{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{INIT_FUNCTIONS}} = @INIT_FUNCTIONS;
                @{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{OBJ_LIST}} = @OBJ_LIST;
                @{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{STATIC_MODULES_LIST}} = @STATIC_MODULES_LIST;
                @{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{SUBSYSTEMS_LIST}} = @SUBSYSTEMS_LIST;
@@ -303,9 +289,7 @@ sub _do_depend_shared_modules($)
                # create the shared modules used SUBSYSTEMS_LIST
                #
                my @SUBSYSTEMS_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{MODULES}{$key}{REQUIRED_SUBSYSTEMS}}) {
-                       push(@SUBSYSTEMS_LIST,$elem);
-               }
+               push (@SUBSYSTEMS_LIST, (@{$CTX->{INPUT}{MODULES}{$key}{REQUIRED_SUBSYSTEMS}}));
 
                #
                # now try to resolve the dependencies for the shared module
@@ -316,9 +300,7 @@ sub _do_depend_shared_modules($)
                # create the shared modules used LIBRARIES_LIST
                #
                my @LIBRARIES_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{MODULES}{$key}{REQUIRED_LIBRARIES}}) {
-                       push(@LIBRARIES_LIST,$elem);
-               }
+               push (@LIBRARIES_LIST, @{$CTX->{INPUT}{MODULES}{$key}{REQUIRED_LIBRARIES}});
 
                #
                # add the LIBARARIES of each subsysetm in the @SUBSYSTEMS_LIST
@@ -361,9 +343,7 @@ sub _do_depend_libraries($)
                # create the libraries used SUBSYSTEMS_LIST
                #
                my @SUBSYSTEMS_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{LIBRARIES}{$key}{REQUIRED_SUBSYSTEMS}}) {
-                       push(@SUBSYSTEMS_LIST,$elem);
-               }
+               push (@SUBSYSTEMS_LIST, @{$CTX->{INPUT}{LIBRARIES}{$key}{REQUIRED_SUBSYSTEMS}});
 
                #
                # now try to resolve the dependencies for the library
@@ -374,9 +354,7 @@ sub _do_depend_libraries($)
                # create the libraries used LIBRARIES_LIST
                #
                my @LIBRARIES_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{LIBRARIES}{$key}{REQUIRED_LIBRARIES}}) {
-                       push(@LIBRARIES_LIST,$elem);
-               }
+               push (@LIBRARIES_LIST, @{$CTX->{INPUT}{LIBRARIES}{$key}{REQUIRED_LIBRARIES}});
 
                #
                # add the LIBARARIES of each subsysetm in the @SUBSYSTEMS_LIST
@@ -419,22 +397,26 @@ sub _do_depend_binaries($)
                # create the binaries used SUBSYSTEMS_LIST
                #
                my @SUBSYSTEMS_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{BINARIES}{$key}{REQUIRED_SUBSYSTEMS}}) {
-                       push(@SUBSYSTEMS_LIST,$elem);
-               }
+               push (@SUBSYSTEMS_LIST, @{$CTX->{INPUT}{BINARIES}{$key}{REQUIRED_SUBSYSTEMS}});
 
                #
                # now try to resolve the dependencies for the binary
                #
                @SUBSYSTEMS_LIST = _do_calc_subsystem_list($CTX, \@SUBSYSTEMS_LIST);
 
+               my @INIT_FUNCTIONS = ();
+
+               foreach my $subkey (@SUBSYSTEMS_LIST)
+               {
+                       push (@INIT_FUNCTIONS, $CTX->{INPUT}{SUBSYSTEMS}{$subkey}{INIT_FUNCTION}) if $CTX->{INPUT}{SUBSYSTEMS}{$subkey}{INIT_FUNCTION} ne "";
+                       
+               }
+
                #
                # create the binaries used LIBRARIES_LIST
                #
                my @LIBRARIES_LIST = ();
-               foreach my $elem (@{$CTX->{INPUT}{BINARIES}{$key}{REQUIRED_LIBRARIES}}) {
-                       push(@LIBRARIES_LIST,$elem);
-               }
+               push (@LIBRARIES_LIST, @{$CTX->{INPUT}{BINARIES}{$key}{REQUIRED_LIBRARIES}});
 
                #
                # add the LIBARARIES of each subsysetm in the @SUBSYSTEMS_LIST
@@ -446,6 +428,7 @@ sub _do_depend_binaries($)
                #
                @{$CTX->{DEPEND}{BINARIES}{$key}{SUBSYSTEMS_LIST}} = @SUBSYSTEMS_LIST;
                @{$CTX->{DEPEND}{BINARIES}{$key}{LIBRARIES_LIST}} = @LIBRARIES_LIST;
+               @{$CTX->{DEPEND}{BINARIES}{$key}{INIT_FUNCTIONS}} = @INIT_FUNCTIONS;
        }
 
        return;
index 479ca9685dfbfb1680ceac2f41db0677654fcc6d..74e54b0a0e8bc54069b909082e06711522c611a2 100644 (file)
@@ -217,6 +217,7 @@ SMB_INFO_MODULES="$SMB_INFO_MODULES
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{ADD_OBJ_FILES}} = str2array(\"$5\");
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{REQUIRED_LIBRARIES}} = str2array(\"$6\");
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{REQUIRED_SUBSYSTEMS}} = str2array(\"$7\");
+\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{INIT_FUNCTION} = \"\";
 #
 \$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{CHOSEN_BUILD} = \"$[SMB_MODULE_][$1]\";
 # End MODULE $1
@@ -255,6 +256,7 @@ SMB_INFO_MODULES="$SMB_INFO_MODULES
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{ADD_OBJ_FILES}} = module_get_array(\"$4\", \"$1\", \"ADD_OBJ_FILES\");
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{REQUIRED_LIBRARIES}} = module_get_array(\"$4\", \"$1\", \"REQUIRED_LIBRARIES\");
 @{\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{REQUIRED_SUBSYSTEMS}} = module_get_array(\"$4\", \"$1\", \"REQUIRED_SUBSYSTEMS\");
+\$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{INIT_FUNCTION} = module_get_var(\"$4\", \"$1\", \"INIT_FUNCTION\");
 #
 \$SMB_BUILD_CTX->{INPUT}{MODULES}{$1}{CHOSEN_BUILD} = \"$[SMB_MODULE_][$1]\";
 # End MODULE $1
@@ -303,6 +305,7 @@ SMB_INFO_SUBSYSTEMS="$SMB_INFO_SUBSYSTEMS
 \$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{NAME} = \"$1\";
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{INIT_OBJ_FILES}} = str2array(\"$2\");
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{ADD_OBJ_FILES}} = str2array(\"$3\");
+\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{INIT_FUNCTION} = \"\";
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{REQUIRED_LIBRARIES}} = str2array(\"$4\");
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{REQUIRED_SUBSYSTEMS}} = str2array(\"$5\");
 #
@@ -336,6 +339,7 @@ SMB_INFO_SUBSYSTEMS="$SMB_INFO_SUBSYSTEMS
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{ADD_OBJ_FILES}} = subsystem_get_array(\"$2\", \"$1\", \"ADD_OBJ_FILES\");
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{REQUIRED_LIBRARIES}} = subsystem_get_array(\"$2\", \"$1\", \"REQUIRED_LIBRARIES\");
 @{\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{REQUIRED_SUBSYSTEMS}} = subsystem_get_array(\"$2\", \"$1\", \"REQUIRED_SUBSYSTEMS\");
+\$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{INIT_FUNCTION} = subsystem_get_var(\"$2\", \"$1\", \"INIT_FUNCTION\");
 #
 \$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{ENABLE} = \"$[SMB_SUBSYSTEM_ENABLE_][$1]\";
 \$SMB_BUILD_CTX->{INPUT}{SUBSYSTEMS}{$1}{NOPROTO} = \"$[SMB_SUBSYSTEM_NOPROTO_][$1]\";
index 59e96574bdbc462e75bf6eb0753bad9739b241cb..cd6cb295253717b297792cdcc0856c920d236c54 100644 (file)
@@ -36,15 +36,40 @@ sub _prepare_smb_build_h($)
                # Static modules
                # 
                $DEFINE->{COMMENT} = "SUBSYSTEM $NAME INIT";
-               $DEFINE->{KEY} = "static_init_$name";
+               $DEFINE->{KEY} = $name . "_init_static_modules";
                $DEFINE->{VAL} = "do { \\\n";
-               foreach my $subkey (@{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{STATIC_MODULES_LIST}}) {
-                       $DEFINE->{VAL} .= "\t\t$subkey\_init(); \\\n";
+               foreach my $subkey (@{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{INIT_FUNCTIONS}}) {
+                       $DEFINE->{VAL} .= "\t\textern NTSTATUS $subkey(void); \\\n";
+               }
+               
+               foreach my $subkey (@{$CTX->{DEPEND}{SUBSYSTEMS}{$key}{INIT_FUNCTIONS}}) {
+                       $DEFINE->{VAL} .= "\t\t$subkey(); \\\n";
                }
                $DEFINE->{VAL} .= "\t} while(0)";
                
                push(@{$CTX->{OUTPUT}{SMB_BUILD_H}},$DEFINE);
+       }
 
+       #
+       # loop over all binaries
+       #
+       foreach my $key (sort keys %{$CTX->{DEPEND}{BINARIES}}) {
+               my $NAME = $CTX->{INPUT}{BINARIES}{$key}{NAME};
+               my $DEFINE = ();
+               my $name = lc($NAME);
+
+               #
+               # Static modules
+               # 
+               $DEFINE->{COMMENT} = "BINARY $NAME INIT";
+               $DEFINE->{KEY} = $name . "_init_subsystems";
+               $DEFINE->{VAL} = "do { \\\n";
+               foreach my $subkey (@{$CTX->{DEPEND}{BINARIES}{$key}{INIT_FUNCTIONS}}) {
+                       $DEFINE->{VAL} .= "\t\tif (NT_STATUS_IS_ERR($subkey())) exit(1); \\\n";
+               }
+               $DEFINE->{VAL} .= "\t} while(0)";
+               
+               push(@{$CTX->{OUTPUT}{SMB_BUILD_H}},$DEFINE);
        }
 
        #
@@ -54,10 +79,13 @@ sub _prepare_smb_build_h($)
                next if ($CTX->{INPUT}{MODULES}{$key}{BUILD} ne "SHARED");
 
                my $name = $CTX->{INPUT}{MODULES}{$key}{NAME};
+               my $func = $CTX->{INPUT}{MODULES}{$key}{INIT_FUNCTION};
+               next if $func eq "";
+
                my $DEFINE = ();
                
                $DEFINE->{COMMENT} = "$name is built shared";
-               $DEFINE->{KEY} = "$name\_init";
+               $DEFINE->{KEY} = $func;
                $DEFINE->{VAL} = "init_module";
 
                push(@{$CTX->{OUTPUT}{SMB_BUILD_H}},$DEFINE);
index 82377e82a94a6ed23bd9f8cf44dedf7fa0127f5b..9c797e863cf5cefff213a850962c9e223f228ab3 100644 (file)
@@ -3022,6 +3022,7 @@ static void remember_query_host(const char *arg,
                POPT_TABLEEND
        };
        
+       smbclient_init_subsystems;
 
 #ifdef KANJI
        pstrcpy(term_code, KANJI);
index 6e5a9757d4738a2cc4e89ecfb9ed04edfd6daf22..07eea756c10c51e6826366eb9b4b372e58b038d6 100644 (file)
@@ -422,6 +422,7 @@ static GtkWidget* create_mainwindow (void)
 int main(int argc, char **argv)
 {
        gtk_init(&argc, &argv);
+       gepdump_init_subsystems;
        lp_load(dyn_CONFIGFILE,True,False,False);
        load_interfaces();
        setup_logging("gepdump", True);
index f5c2fd595725d596ae097c316e9028e4a6f60878..31df3086f24f4f01e624e1aecad8dc5b8ab6b4b1 100644 (file)
@@ -816,6 +816,8 @@ static GtkWidget* create_savefilewin (void)
                POPT_TABLEEND
        };
 
+       gregedit_init_subsystems;
+
        lp_load(dyn_CONFIGFILE,True,False,False);
        load_interfaces();
 
index b1176a3fa8bf624f93fbee1894eb5aa51bb13210..dcedba2e88146ea6c3b1de147afc671fc9a51deb 100644 (file)
@@ -492,6 +492,7 @@ static GtkWidget*create_new_job_dialog (void)
 
  int main(int argc, char **argv)
 {
+       gwcrontab_init_subsystems;
        lp_load(dyn_CONFIGFILE,True,False,False);
        load_interfaces();
 
index 18fd578f64c28ff542a934e03c475729e88679cb..9dc7ebea7354d02c31f16e5d7e7d82451b5d4a7e 100644 (file)
@@ -412,6 +412,7 @@ create_mainwindow (void)
 
  int main(int argc, char **argv)
 {
+       gwsam_init_subsystems;
        lp_load(dyn_CONFIGFILE,True,False,False);
        load_interfaces();
        setup_logging("gwsam", True);
index a08e0ee69a9072ef09875539dce5c03bdb3de7fb..085ec0ec2f0d525baad798a454704422b94737d8 100644 (file)
@@ -100,7 +100,9 @@ static void lazy_initialize_iconv(void)
        if (!initialized) {
                initialized = True;
                register_subsystem("charset", charset_register_backend);
-               
+
+               charset_init_static_modules;
+
                for(i = 0; builtin_functions[i].name; i++) 
                        register_backend("charset", &builtin_functions[i]);
        }
index c48e9e161b60573ba3f2113577329e726ad6dc6e..a4e7a0dba93b4660f77c0a8c9bf622bce01bfb8c 100644 (file)
@@ -2,12 +2,12 @@ if test x"$with_ldap_support" = x"yes"; then
     SMB_MODULE_DEFAULT(libldb_ldap,STATIC)
 fi
 
+SMB_SUBSYSTEM_MK(LIBLDB,lib/ldb/config.mk)
+
 SMB_MODULE_MK(libldb_ldap,LIBLDB,NOT,lib/ldb/config.mk)
 
 SMB_MODULE_MK(libldb_tdb,LIBLDB,STATIC,lib/ldb/config.mk)
 
-SMB_SUBSYSTEM_MK(LIBLDB,lib/ldb/config.mk)
-
 if test x"$experimental" = x"yes"; then
        SMB_LIBRARY_ENABLE(libldb,YES)
 fi
index b2d659258dae7f20d289517e2d6bca3c70fc506e..0399fc26aac6f311d1f1e66ad878502b26a26a96 100644 (file)
@@ -59,24 +59,19 @@ NTSTATUS registry_register(const void *_function)
        return NT_STATUS_OK;
 }
 
-static BOOL registry_init(void)
+NTSTATUS registry_init(void)
 {
-       static BOOL initialised;
        NTSTATUS status;
        
-       if(initialised) {
-               return True;
-       }
-       
        status = register_subsystem("registry", registry_register);
        if (NT_STATUS_IS_ERR(status)) {
                DEBUG(0, ("Error registering registry subsystem: %s\n", nt_errstr(status)));
-               return False;
+               return status;
        }
 
-       initialised = True;
-       static_init_registry;
-       return True;
+       registry_init_static_modules;
+
+       return NT_STATUS_OK;
 }
 
 /* Find a backend in the list of available backends */
@@ -84,8 +79,6 @@ static struct reg_init_function_entry *reg_find_backend_entry(const char *name)
 {
        struct reg_init_function_entry *entry;
 
-       if(registry_init() == False) return NULL;
-
        entry = backends;
 
        while(entry) {
index 659e705d5ddcaa8ab05ee1369eab8b42feacd03f..dacd6d5295e815c2bd12d32abdbcd26585119c7c 100644 (file)
@@ -3,6 +3,7 @@
 ################################################
 # Start MODULE registry_nt4
 [MODULE::registry_nt4]
+INIT_FUNCTION = registry_nt4_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_nt4/reg_backend_nt4.o
 # End MODULE registry_nt4
@@ -11,6 +12,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE registry_w95
 [MODULE::registry_w95]
+INIT_FUNCTION = registry_w95_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_w95/reg_backend_w95.o
 # End MODULE registry_w95
@@ -19,6 +21,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE registry_dir
 [MODULE::registry_dir]
+INIT_FUNCTION = registry_dir_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_dir/reg_backend_dir.o
 # End MODULE registry_dir
@@ -27,6 +30,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE registry_rpc
 [MODULE::registry_rpc]
+INIT_FUNCTION = registry_rpc_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_rpc/reg_backend_rpc.o
 REQUIRED_SUBSYSTEMS = \
@@ -37,6 +41,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE registry_gconf
 [MODULE::registry_gconf]
+INIT_FUNCTION = registry_gconf_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_gconf/reg_backend_gconf.o
 REQUIRED_LIBRARIES = \
@@ -47,6 +52,7 @@ REQUIRED_LIBRARIES = \
 ################################################
 # Start MODULE registry_ldb
 [MODULE::registry_ldb]
+INIT_FUNCTION = registry_ldb_init
 INIT_OBJ_FILES = \
                lib/registry/reg_backend_ldb/reg_backend_ldb.o
 REQUIRED_SUBSYSTEMS = \
@@ -57,6 +63,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start SUBSYSTEM REGISTRY
 [SUBSYSTEM::REGISTRY]
+INIT_FUNCTION = registry_init
 INIT_OBJ_FILES = \
                lib/registry/common/reg_interface.o
 ADD_OBJ_FILES = \
index 80f4a5c49fb2be65dd151c025ad1f868d1200adc..55c8f1e72fcd0b37e35d0e6d5549e6f67decba47 100644 (file)
@@ -131,6 +131,7 @@ static void writediff(struct registry_key *oldkey, struct registry_key *newkey,
                POPT_TABLEEND
        };
 
+       regdiff_init_subsystems;
 
        if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
                fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
index d70d7b8457202a0b47ea093eab17a1c94013feef..a8b2f83ee1417ba6fb3f2eb69ab3a8fe86a55410 100644 (file)
@@ -771,6 +771,7 @@ static int nt_apply_reg_command_file(struct registry_context *r, const char *cmd
                POPT_TABLEEND
        };
 
+       regpatch_init_subsystems;
 
        if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
                fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
index d705a0b802347341e0ef17d92a80725792c9ea4c..8d044f6fa2d641d7cbe02383e183bc1ab8c3700a 100644 (file)
@@ -356,6 +356,7 @@ static char **reg_completion(const char *text, int start, int end)
                POPT_TABLEEND
        };
 
+       regshell_init_subsystems;
 
        if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
                fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
index a8225c026d9e973752a139805c19dbd8112f0f5b..ced7a00f94a00bed7a29eddbbe57a1c1459d557e 100644 (file)
@@ -88,6 +88,7 @@ static void print_tree(int l, struct registry_key *p, int fullpath, int novals)
                POPT_TABLEEND
        };
 
+       regtree_init_subsystems;
 
        if (!lp_load(dyn_CONFIGFILE,True,False,False)) {
                fprintf(stderr, "Can't load %s - run testparm to debug it\n", dyn_CONFIGFILE);
index eebbd61219b3064ba02c51e7f65d7ac443289b3e..88570512a4c3d8a0c1c2772c6829199f920ef291 100644 (file)
@@ -336,8 +336,3 @@ const struct socket_ops *socket_ipv4_ops(void)
 {
        return &ipv4_tcp_ops;
 }
-
-NTSTATUS socket_ipv4_init(void)
-{
-       return NT_STATUS_OK;
-}
index c8683446ec09a25a31222f46514d3832b8619206..1685f17572474da364f9cc56a6391a37e778c3f4 100644 (file)
@@ -354,8 +354,3 @@ const struct socket_ops *socket_ipv6_ops(void)
 {
        return &ipv6_tcp_ops;
 }
-
-NTSTATUS socket_ipv6_init(void)
-{
-       return NT_STATUS_OK;
-}
index 0ba4797219cd4b323192b9a4479a84ce1ce7de1f..e35453e6e0e26d9561e31d1eef2ef927edf4f651 100644 (file)
@@ -273,8 +273,3 @@ const struct socket_ops *socket_unixdom_ops(void)
 {
        return &unixdom_ops;
 }
-
-NTSTATUS socket_unixdom_init(void)
-{
-       return NT_STATUS_OK;
-}
index aab1928687b1bee5102752e91c7a2b0f2cd60281..6bc33ab66d2b4919676478b65f708240d8f8d698 100644 (file)
@@ -120,11 +120,6 @@ const char **gensec_security_oids(TALLOC_CTX *mem_ctx, const char *skip)
 */
 static NTSTATUS gensec_start(TALLOC_CTX *mem_ctx, struct gensec_security **gensec_security) 
 {
-       /* awaiting a correct fix from metze */
-       if (!gensec_init()) {
-               return NT_STATUS_INTERNAL_ERROR;
-       }
-
        (*gensec_security) = talloc_p(mem_ctx, struct gensec_security);
        if (!(*gensec_security)) {
                return NT_STATUS_NO_MEMORY;
@@ -806,25 +801,17 @@ const struct gensec_critical_sizes *gensec_interface_version(void)
 /*
   initialise the GENSEC subsystem
 */
-BOOL gensec_init(void)
+NTSTATUS gensec_init(void)
 {
-       static BOOL initialised;
-       NTSTATUS status;
-
-       /* this is *completely* the wrong way to do this */
-       if (initialised) {
-               return True;
-       }
-
-       status = register_subsystem("gensec", gensec_register); 
+       NTSTATUS status = register_subsystem("gensec", gensec_register); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       static_init_gensec;
+       gensec_init_static_modules;
+
        gensec_dcerpc_schannel_init();
 
-       initialised = True;
        DEBUG(3,("GENSEC subsystem version %d initialised\n", GENSEC_INTERFACE_VERSION));
-       return True;
+       return NT_STATUS_OK;
 }
index bab79ea2fd271d13da19aee4107ebbf7770ff8e6..1372a91ea2cb951a87165c9502ac424f5bb86d2d 100644 (file)
@@ -1,6 +1,7 @@
 #################################
 # Start SUBSYSTEM GENSEC
 [SUBSYSTEM::GENSEC]
+INIT_FUNCTION = gensec_init
 INIT_OBJ_FILES = libcli/auth/gensec.o
 REQUIRED_SUBSYSTEMS = \
                SCHANNELDB
@@ -10,6 +11,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE gensec_krb5
 [MODULE::gensec_krb5]
+INIT_FUNCTION = gensec_krb5_init
 INIT_OBJ_FILES = libcli/auth/gensec_krb5.o 
 ADD_OBJ_FILES = \
                libcli/auth/clikrb5.o \
@@ -24,6 +26,7 @@ REQUIRED_LIBRARIES = KRB5
 ################################################
 # Start MODULE gensec_spnego
 [MODULE::gensec_spnego]
+INIT_FUNCTION = gensec_spnego_init
 INIT_OBJ_FILES = libcli/auth/spnego.o
 ADD_OBJ_FILES = \
                libcli/auth/spnego_parse.o
@@ -34,6 +37,7 @@ REQUIRED_SUBSYSTEMS = GENSEC
 ################################################
 # Start MODULE gensec_ntlmssp
 [MODULE::gensec_ntlmssp]
+INIT_FUNCTION = gensec_ntlmssp_init
 INIT_OBJ_FILES = libcli/auth/gensec_ntlmssp.o
 ADD_OBJ_FILES = \
                libcli/auth/ntlmssp.o \
index a359f13f548cc64c831afbe6f14f9a4a3c3a5341..09e2a278c4bdd3ff99293a037c70cf1ed487ac7b 100644 (file)
@@ -30,6 +30,7 @@ ADD_OBJ_FILES = \
 ################################################
 # Start SUBSYSTEM LIBNDR_GEN
 [SUBSYSTEM::LIBNDR_GEN]
+INIT_FUNCTION = librpc_init
 INIT_OBJ_FILES = \
                librpc/gen_ndr/tables.o
 ADD_OBJ_FILES = \
index 3c05c303af334941d6540475b07432d244c31909..27292bc8c36056caf7627b141562ee751e1ef94d 100644 (file)
 #include "dlinklist.h"
 #include "librpc/gen_ndr/ndr_epmapper.h"
 
+NTSTATUS librpc_init(void)
+{
+       /* FIXME: Register module registration function here */
+       return NT_STATUS_OK;
+}
+
 /* initialise a dcerpc pipe. */
 struct dcerpc_pipe *dcerpc_pipe_init(void)
 {
index e2320e06849dff64c7f7b121cced0bac1eb9b8c6..c15470076fd3c239f771f2410b7096a2f08a8c4b 100644 (file)
@@ -3,6 +3,7 @@
 ################################################
 # Start MODULE ntvfs_cifs
 [MODULE::ntvfs_cifs]
+INIT_FUNCTION = ntvfs_cifs_init 
 INIT_OBJ_FILES = \
                ntvfs/cifs/vfs_cifs.o
 REQUIRED_SUBSYSTEMS = \
@@ -13,6 +14,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE ntvfs_simple
 [MODULE::ntvfs_simple]
+INIT_FUNCTION = ntvfs_simple_init 
 INIT_OBJ_FILES = \
                ntvfs/simple/vfs_simple.o
 ADD_OBJ_FILES = \
@@ -23,6 +25,7 @@ ADD_OBJ_FILES = \
 ################################################
 # Start MODULE ntvfs_print
 [MODULE::ntvfs_print]
+INIT_FUNCTION = ntvfs_print_init 
 INIT_OBJ_FILES = \
                ntvfs/print/vfs_print.o
 # End MODULE ntvfs_print
@@ -31,6 +34,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE ntvfs_ipc
 [MODULE::ntvfs_ipc]
+INIT_FUNCTION = ntvfs_ipc_init 
 INIT_OBJ_FILES = \
                ntvfs/ipc/vfs_ipc.o \
                ntvfs/ipc/ipc_rap.o \
@@ -43,6 +47,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE ntvfs_nbench
 [MODULE::ntvfs_nbench]
+INIT_FUNCTION = ntvfs_nbench_init 
 INIT_OBJ_FILES = \
                ntvfs/nbench/vfs_nbench.o
 # End MODULE ntvfs_nbench
@@ -51,6 +56,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start SUBSYSTEM NTVFS
 [SUBSYSTEM::NTVFS]
+INIT_FUNCTION = ntvfs_init
 INIT_OBJ_FILES = \
                ntvfs/ntvfs_base.o
 ADD_OBJ_FILES = \
index cc83b5347341347674fe7bb64f001059c68558bc..c168467eae00b3c06590f38c47473d9e0f12cc01 100644 (file)
@@ -119,20 +119,19 @@ const struct ntvfs_critical_sizes *ntvfs_interface_version(void)
 /*
   initialise the NTVFS subsystem
 */
-BOOL ntvfs_init(void)
+NTSTATUS ntvfs_init(void)
 {
        NTSTATUS status;
 
        status = register_subsystem("ntvfs", ntvfs_register); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       /* FIXME: Perhaps panic if a basic backend, such as IPC, fails to initialise? */
-       static_init_ntvfs;
+       ntvfs_init_static_modules;
 
        DEBUG(3,("NTVFS subsystem version %d initialised\n", NTVFS_INTERFACE_VERSION));
-       return True;
+       return status;
 }
 
 
index dd7246821654efd86754e50f11a381554ce26e89..f54d2e24fb916bd572f41cac21f29e54ac810cf6 100644 (file)
@@ -1,6 +1,7 @@
 ################################################
 # Start MODULE ntvfs_posix
 [MODULE::ntvfs_posix]
+INIT_FUNCTION = ntvfs_posix_init 
 INIT_OBJ_FILES = \
                ntvfs/posix/vfs_posix.o
 ADD_OBJ_FILES = \
index 76e7aebc765406707a88d9447763529445287ab3..611be650d13962ddeb8c39b74bac8d3c91f853e7 100644 (file)
@@ -1,6 +1,7 @@
 ################################################
 # Start MODULE ntvfs_unixuid
 [MODULE::ntvfs_unixuid]
+INIT_FUNCTION = ntvfs_unixuid_init
 INIT_OBJ_FILES = \
                ntvfs/unixuid/vfs_unixuid.o
 # End MODULE ntvfs_unixuid
index 784665c80b5540a0c8632c4b30f1d3cfb03f55ba..a513377077eaa969713cbe78cd68d240d747aa56 100644 (file)
@@ -14,6 +14,7 @@ ADD_OBJ_FILES = \
 ################################################
 # Start MODULE dcerpc_IOXIDResolver
 [MODULE::dcerpc_IOXIDResolver]
+INIT_FUNCTION = dcerpc_server_IOXIDResolver_init
 INIT_OBJ_FILES = \
                rpc_server/dcom/oxidresolver.o
 REQUIRED_SUBSYSTEMS = \
@@ -24,6 +25,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_IRemoteActivation
 [MODULE::dcerpc_IRemoteActivation]
+INIT_FUNCTION = dcerpc_server_IRemoteActivation_init
 INIT_OBJ_FILES = \
                rpc_server/dcom/remact.o
 REQUIRED_SUBSYSTEMS = \
@@ -59,6 +61,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE dcerpc_rpcecho
 [MODULE::dcerpc_rpcecho]
+INIT_FUNCTION = dcerpc_server_rpcecho_init
 INIT_OBJ_FILES = \
                rpc_server/echo/rpc_echo.o
 # End MODULE dcerpc_rpcecho
@@ -67,6 +70,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE dcerpc_epmapper
 [MODULE::dcerpc_epmapper]
+INIT_FUNCTION = dcerpc_server_epmapper_init
 INIT_OBJ_FILES = \
                rpc_server/epmapper/rpc_epmapper.o
 # End MODULE dcerpc_epmapper
@@ -75,6 +79,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE dcerpc_remote
 [MODULE::dcerpc_remote]
+INIT_FUNCTION = dcerpc_server_remote_init
 INIT_OBJ_FILES = \
                rpc_server/remote/dcesrv_remote.o
 REQUIRED_SUBSYSTEMS = \
@@ -85,6 +90,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_srvsvc
 [MODULE::dcerpc_srvsvc]
+INIT_FUNCTION = dcerpc_server_srvsvc_init
 INIT_OBJ_FILES = \
                rpc_server/srvsvc/dcesrv_srvsvc.o
 REQUIRED_SUBSYSTEMS = \
@@ -95,6 +101,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_wkssvc
 [MODULE::dcerpc_wkssvc]
+INIT_FUNCTION = dcerpc_server_wkssvc_init
 INIT_OBJ_FILES = \
                rpc_server/wkssvc/dcesrv_wkssvc.o
 REQUIRED_SUBSYSTEMS = \
@@ -105,6 +112,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_samr
 [MODULE::dcerpc_samr]
+INIT_FUNCTION = dcerpc_server_samr_init
 INIT_OBJ_FILES = \
                rpc_server/samr/dcesrv_samr.o
 ADD_OBJ_FILES = \
@@ -118,6 +126,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_winreg
 [MODULE::dcerpc_winreg]
+INIT_FUNCTION = dcerpc_server_winreg_init
 INIT_OBJ_FILES = \
                rpc_server/winreg/rpc_winreg.o
 REQUIRED_SUBSYSTEMS = \
@@ -128,6 +137,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_netlogon
 [MODULE::dcerpc_netlogon]
+INIT_FUNCTION = dcerpc_server_netlogon_init
 INIT_OBJ_FILES = \
                rpc_server/netlogon/dcerpc_netlogon.o
 REQUIRED_SUBSYSTEMS = \
@@ -139,6 +149,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_lsa
 [MODULE::dcerpc_lsarpc]
+INIT_FUNCTION = dcerpc_server_lsarpc_init
 INIT_OBJ_FILES = \
                rpc_server/lsa/dcesrv_lsa.o
 REQUIRED_SUBSYSTEMS = \
@@ -150,6 +161,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_spoolss
 [MODULE::dcerpc_spoolss]
+INIT_FUNCTION = dcerpc_server_spoolss_init
 INIT_OBJ_FILES = \
                rpc_server/spoolss/dcesrv_spoolss.o \
                rpc_server/spoolss/spoolssdb.o
@@ -161,6 +173,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE dcerpc_drsuapi
 [MODULE::dcerpc_drsuapi]
+INIT_FUNCTION = dcerpc_server_drsuapi_init
 INIT_OBJ_FILES = \
                rpc_server/drsuapi/dcesrv_drsuapi.o
 ADD_OBJ_FILES = \
@@ -174,6 +187,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start SUBSYSTEM DCERPC
 [SUBSYSTEM::DCERPC]
+INIT_FUNCTION = dcerpc_server_init
 INIT_OBJ_FILES = \
                rpc_server/dcerpc_server.o
 ADD_OBJ_FILES = \
index 3aeb7033d1bf538f5a1d11e80a62db375b479883..70b7d18f3982885b57a78606c754a2efefcfebae 100644 (file)
@@ -1165,20 +1165,19 @@ const struct dcesrv_critical_sizes *dcerpc_module_version(void)
 /*
   initialise the DCERPC subsystem
 */
-BOOL subsystem_dcerpc_init(void)
+NTSTATUS dcerpc_server_init(void)
 {
        NTSTATUS status;
 
        status = register_subsystem("dcerpc", dcerpc_register_ep_server); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       /* FIXME: Perhaps panic if a basic endpoint server, such as EPMAPPER, fails to initialise? */
-       static_init_dcerpc;
+       dcerpc_init_static_modules;
 
        DEBUG(3,("DCERPC subsystem version %d initialised\n", DCERPC_MODULE_VERSION));
-       return True;
+       return NT_STATUS_OK;
 }
 
 static const struct server_service_ops dcesrv_ops = {
index 7bb461bd6f58f67567a67c18ab775a36f69a4fed..fbd6f65a1aeeb5d88f70262168006008613ee26d 100644 (file)
@@ -183,7 +183,7 @@ static BOOL remote_op_interface_by_name(struct dcesrv_interface *iface, const ch
        return False;   
 }
 
-NTSTATUS dcerpc_remote_init(void)
+NTSTATUS dcerpc_server_remote_init(void)
 {
        NTSTATUS ret;
        struct dcesrv_endpoint_server ep_server;
index 55f040f8050c4e3a2b75fee0d72c8bba2f325063..7c5fe74da963fc65f43360c7cdbddcb10d5600b2 100644 (file)
@@ -3,6 +3,7 @@
 ################################################
 # Start MODULE server_service_auth
 [MODULE::server_service_auth]
+INIT_FUNCTION = server_service_auth_init
 REQUIRED_SUBSYSTEMS = \
                AUTH
 # End MODULE server_auth
@@ -11,6 +12,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE server_service_smb
 [MODULE::server_service_smb]
+INIT_FUNCTION = server_service_smb_init
 REQUIRED_SUBSYSTEMS = \
                SMB
 # End MODULE server_smb
@@ -19,6 +21,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE server_service_rpc
 [MODULE::server_service_rpc]
+INIT_FUNCTION = server_service_rpc_init
 REQUIRED_SUBSYSTEMS = \
                DCERPC
 # End MODULE server_rpc
@@ -27,6 +30,7 @@ REQUIRED_SUBSYSTEMS = \
 ################################################
 # Start MODULE server_service_ldap
 [MODULE::server_service_ldap]
+INIT_FUNCTION = server_service_ldap_init
 REQUIRED_SUBSYSTEMS = \
                LDAP
 # End MODULE server_ldap
@@ -35,6 +39,7 @@ REQUIRED_SUBSYSTEMS = \
 #######################
 # Start SUBSYSTEM SERVICE
 [SUBSYSTEM::SERVER_SERVICE]
+INIT_FUNCTION = server_service_init
 INIT_OBJ_FILES = \
                smbd/service.o
 REQUIRED_SUBSYSTEMS = \
index 3493425774905d672ff1a6752d49ec0ddc448d9b..69e321e0c2d791de04e6e6973f6c54484db1fa07 100644 (file)
@@ -118,18 +118,17 @@ const struct process_model_critical_sizes *process_model_version(void)
 /*
   initialise the PROCESS_MODEL subsystem
 */
-BOOL process_model_init(void)
+NTSTATUS process_model_init(void)
 {
        NTSTATUS status;
 
        status = register_subsystem("process_model", register_process_model); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       /* FIXME: Perhaps panic if a basic process model, such as simple, fails to initialise? */
-       static_init_process_model;
+       process_model_init_static_modules;
 
        DEBUG(3,("PROCESS subsystem version %d initialised\n", PROCESS_MODEL_VERSION));
-       return True;
+       return NT_STATUS_OK; 
 }
index 6a4048700fd4d19d521bf4052969ac563ebcfa5f..d4329e201456de97e4530680a85ad150e5702875 100644 (file)
@@ -3,6 +3,7 @@
 ################################################
 # Start MODULE process_model_single
 [MODULE::process_model_single]
+INIT_FUNCTION = process_model_single_init 
 INIT_OBJ_FILES = \
                smbd/process_single.o
 # End MODULE process_model_single
@@ -11,6 +12,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE process_model_standard
 [MODULE::process_model_standard]
+INIT_FUNCTION = process_model_standard_init 
 INIT_OBJ_FILES = \
                smbd/process_standard.o
 # End MODULE process_model_standard
@@ -19,6 +21,7 @@ INIT_OBJ_FILES = \
 ################################################
 # Start MODULE process_model_thread
 [MODULE::process_model_thread]
+INIT_FUNCTION = process_model_thread_init 
 INIT_OBJ_FILES = \
                smbd/process_thread.o
 REQUIRED_LIBRARIES = \
@@ -29,8 +32,9 @@ REQUIRED_LIBRARIES = \
 ################################################
 # Start SUBSYSTEM PROCESS_MODEL
 [SUBSYSTEM::PROCESS_MODEL]
+INIT_FUNCTION = process_model_init
 INIT_OBJ_FILES = \
                smbd/process_model.o
 #
 # End SUBSYSTEM PROCESS_MODEL
-################################################
\ No newline at end of file
+################################################
index 0e9260535cc17f216f0f180fd2bc3c70577aea83..d22e3c28c342a6934d63ef68159823e7287c9cff 100644 (file)
@@ -41,26 +41,7 @@ void init_subsystems(void)
                exit(1);
        }
 
-       /* Setup the PROCESS_MODEL subsystem */
-       if (!process_model_init())
-               exit(1);
-
-       /* Setup the SERVER_SERVICE subsystem */
-       if (!server_service_init())
-               exit(1);
-
-       /* Setup the AUTH subsystem */
-       if (!auth_init())
-               exit(1);
-
-       /* Setup the NTVFS subsystem */
-       if (!ntvfs_init())
-               exit(1);
-
-       /* Setup the DCERPC subsystem */
-       if (!subsystem_dcerpc_init())
-               exit(1);
-
+       smbd_init_subsystems;
 }
 
 /****************************************************************************
index 767d310e2bfca254cf3493beee6ee723a81eab63..fdbd5d0c801c7371a755fada9c20f28da39bdb8a 100644 (file)
@@ -321,20 +321,19 @@ static NTSTATUS register_server_service_ops(const void *_ops)
 /*
   initialise the SERVER SERVICE subsystem
 */
-BOOL server_service_init(void)
+NTSTATUS server_service_init(void)
 {
        NTSTATUS status;
 
        status = register_subsystem("service", register_server_service_ops); 
        if (!NT_STATUS_IS_OK(status)) {
-               return False;
+               return status;
        }
 
-       /* FIXME: Perhaps panic if a basic endpoint server, such as EPMAPER, fails to initialise? */
-       static_init_server_service;
+       server_service_init_static_modules;
 
        DEBUG(3,("SERVER SERVICE subsystem version %d initialised\n", SERVER_SERVICE_VERSION));
-       return True;
+       return NT_STATUS_OK;
 }
 
 
index 310dec1bc745316f2d476c721786c67ed68ef634..563703bd2a79c7762fa0d6654e42259c7916d48b 100644 (file)
@@ -2107,6 +2107,8 @@ static void usage(void)
 
        setup_logging(argv[0], DEBUG_STDOUT);
 
+       gentest_init_subsystems;
+
        for (i=0;i<NSERVERS;i++) {
                const char *share = argv[1+i];
                if (!split_unc_name(share, &servers[i].server_name, &servers[i].share_name)) {
index 6c55190d6b535a751503b82f8fdf58cc2f5c8e1f..9725bc37ec751a77dce1a51582a08375b6eb7692 100644 (file)
@@ -459,6 +459,8 @@ static void usage(void)
        int opt;
        int seed, server, i;
 
+       locktest_init_subsystems;
+
        setlinebuf(stdout);
 
        setup_logging("locktest", DEBUG_STDOUT);
index ad5f70300852b2b71e0944dfea5e7a76a7d0d5da..bb0abf4b3e1ad7310bc0b02f478c643fb26e1b26 100644 (file)
@@ -277,6 +277,8 @@ static void usage(void)
        char *p;
        int seed;
 
+       masktest_init_subsystems;
+
        setlinebuf(stdout);
 
        setup_logging("masktest", DEBUG_STDOUT);
index e7472ffa46ec5760b6bc5ee3bdcf96b738a1aa99..883fe4b017ac9b0572642eaf04899bc2a97de10f 100644 (file)
@@ -2632,6 +2632,8 @@ static BOOL is_binding_string(const char *binding_string)
                POPT_TABLEEND
        };
 
+       smbtorture_init_subsystems;
+
        setup_logging("smbtorture", DEBUG_STDOUT);
 
 #ifdef HAVE_SETBUFFER
index 6045e720139427799f44ceafef8eeee58d3ee6f1..034224c66d2d24e9ba60c565def7bbfd2de557a5 100644 (file)
@@ -99,6 +99,8 @@ int main(int argc, char **argv)
        struct ndr_pull *ndr;
        NTSTATUS result;
 
+       static_init_getntacl;
+
        mem_ctx = talloc_init("getntacl");
 
        /* Fetch ACL data */
index 1edf8eda6c76b8f4bcd3a3406ce00b5c4b065955..826f0c6c6e812fbccf55c54c2e16ab13db781f01 100644 (file)
@@ -109,6 +109,8 @@ static void show_functions(const struct dcerpc_interface_table *p)
                POPT_TABLEEND
        };
 
+       ndrdump_init_subsystems;
+
        DEBUGLEVEL = 10;
 
        setup_logging("ndrdump", DEBUG_STDOUT);
index 380afd61203f2dac37509d9d636858d7583b45d3..dcd663d3fd5d02c5cca5da5e4d535ad1812c5b29 100644 (file)
@@ -232,5 +232,6 @@ static int binary_net(int argc, const char **argv)
 
  int main(int argc, const char **argv)
 {
+       net_init_subsystems;
        return binary_net(argc, argv);
 }
index 8d7f750af6e53ec93f78994507be2ec70247c7ec..5cc02ffbb25ba8d98b687e7efcfbf68fbbe3fa22 100644 (file)
@@ -861,6 +861,8 @@ enum {
                POPT_TABLEEND
        };
 
+       ntlm_auth_init_subsystems;
+
        /* Samba client initialisation */
 
        setup_logging("ntlm_auth", DEBUG_STDERR);
index 3565da2a796974609a17fecd7fef8a2f2059d63e..cd9f262e12a480a4f7327b513d9fabd7f2af7e2e 100644 (file)
@@ -61,6 +61,8 @@ static void setntacl(char *filename, struct security_descriptor *sd)
        TALLOC_CTX *mem_ctx;
        struct security_acl *acl;
 
+       static_init_ntacl;
+
        setup_logging("setntacl", DEBUG_STDOUT);
 
        mem_ctx = talloc_init("setntacl");
index 06544d0bc7e4b552d2b4e6fa676ce99591d06954..ccdd7a55783f04c9badc076176cd7f35b2019a5b 100644 (file)
@@ -41,6 +41,8 @@ int main(int argc, char **argv)
        NTSTATUS status;
        TALLOC_CTX *mem_ctx;
 
+       static_init_setnttoken;
+
        setup_logging("setnttoken", DEBUG_STDOUT);
 
        mem_ctx = talloc_init("setnttoken");