diff options
31 files changed, 58 insertions, 89 deletions
diff --git a/source4/auth/gensec/gensec.c b/source4/auth/gensec/gensec.c index aaac3ef78c..5ff925c078 100644 --- a/source4/auth/gensec/gensec.c +++ b/source4/auth/gensec/gensec.c @@ -943,9 +943,14 @@ const struct gensec_critical_sizes *gensec_interface_version(void) */ NTSTATUS gensec_init(void) { + static BOOL initialized = False; + init_module_fn static_init[] = STATIC_GENSEC_MODULES; init_module_fn *shared_init = load_samba_modules(NULL, "gensec"); + if (initialized) return NT_STATUS_OK; + initialized = False; + run_init_functions(static_init); run_init_functions(shared_init); diff --git a/source4/build/smb_build/config_mk.pm b/source4/build/smb_build/config_mk.pm index 405298eef2..b7c4ff572a 100644 --- a/source4/build/smb_build/config_mk.pm +++ b/source4/build/smb_build/config_mk.pm @@ -20,7 +20,6 @@ my $section_types = { "LDFLAGS" => "list", }, "SUBSYSTEM" => { - "INIT_FUNCTION" => "string", "OBJ_FILES" => "list", "REQUIRED_SUBSYSTEMS" => "list", @@ -64,7 +63,6 @@ my $section_types = { "MINOR_VERSION" => "string", "RELEASE_VERSION" => "string", - "INIT_FUNCTION" => "string", "OBJ_FILES" => "list", "DESCRIPTION" => "string", diff --git a/source4/build/smb_build/smb_build_h.pm b/source4/build/smb_build/smb_build_h.pm index 2bb9f35c53..52fe0da6da 100644 --- a/source4/build/smb_build/smb_build_h.pm +++ b/source4/build/smb_build/smb_build_h.pm @@ -24,39 +24,8 @@ sub _prepare_smb_build_h($) { my $depend = shift; my @defines = (); - my %declared = (); my $output = ""; - # - # loop over all binaries - # - foreach my $key (values %{$depend}) { - next if ($key->{TYPE} ne "BINARY"); - - my $NAME = $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 (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) { - next if defined($declared{$subkey}); - $output .= "NTSTATUS $subkey(void);\n"; - $declared{$subkey} = 1; - } - - foreach my $subkey (@{$key->{SUBSYSTEM_INIT_FUNCTIONS}}) { - $DEFINE->{VAL} .= "\t\tif (NT_STATUS_IS_ERR($subkey())) exit(1); \\\n"; - } - $DEFINE->{VAL} .= "\t} while(0)"; - - push(@defines,$DEFINE); - } - foreach my $key (values %{$depend}) { my $DEFINE = (); next if ($key->{TYPE} ne "LIBRARY" and $key->{TYPE} ne "SUBSYSTEM"); diff --git a/source4/client/client.c b/source4/client/client.c index fef847e8b2..fb07042496 100644 --- a/source4/client/client.c +++ b/source4/client/client.c @@ -33,7 +33,7 @@ #include "dlinklist.h" #include "system/readline.h" #include "pstring.h" -#include "smb_build.h" +#include "auth/gensec/gensec.h" static struct smbcli_state *cli; static int port = 0; @@ -3402,7 +3402,7 @@ static void remember_query_host(const char *arg, } } - smbclient_init_subsystems; + gensec_init(); if(poptPeekArg(pc)) { pstrcpy(service,poptGetArg(pc)); diff --git a/source4/gtk/tools/gepdump.c b/source4/gtk/tools/gepdump.c index ea77b19385..eab3987a9a 100644 --- a/source4/gtk/tools/gepdump.c +++ b/source4/gtk/tools/gepdump.c @@ -24,7 +24,6 @@ #include "librpc/gen_ndr/ndr_mgmt.h" #include "gtk/common/gtk-smb.h" #include "auth/gensec/gensec.h" -#include "smb_build.h" /* * Show: @@ -461,7 +460,7 @@ static GtkWidget* create_mainwindow (void) int main(int argc, char **argv) { - gepdump_init_subsystems; + dcerpc_init(); lp_load(); setup_logging(argv[0], DEBUG_STDERR); diff --git a/source4/gtk/tools/gregedit.c b/source4/gtk/tools/gregedit.c index 8c243873ca..5dd5ec1a92 100644 --- a/source4/gtk/tools/gregedit.c +++ b/source4/gtk/tools/gregedit.c @@ -22,7 +22,6 @@ #include "includes.h" #include "lib/registry/registry.h" #include "gtk/common/gtk-smb.h" -#include "smb_build.h" static GtkTreeStore *store_keys; static GtkListStore *store_vals; @@ -964,8 +963,8 @@ int main(int argc, char *argv[]) { int ret; - gregedit_init_subsystems; registry_init(); + lp_load(); setup_logging(argv[0], DEBUG_STDERR); diff --git a/source4/gtk/tools/gwcrontab.c b/source4/gtk/tools/gwcrontab.c index f294e84392..9ebc7f43fd 100644 --- a/source4/gtk/tools/gwcrontab.c +++ b/source4/gtk/tools/gwcrontab.c @@ -22,7 +22,6 @@ #include "includes.h" #include "librpc/gen_ndr/ndr_atsvc.h" #include "gtk/common/gtk-smb.h" -#include "smb_build.h" static struct dcerpc_pipe *at_pipe = NULL; static GtkWidget *mainwin; @@ -489,10 +488,9 @@ static GtkWidget*create_new_job_dialog (void) } - - int main(int argc, char **argv) +int main(int argc, char **argv) { - gwcrontab_init_subsystems; + dcerpc_init(); lp_load(); setup_logging(argv[0], DEBUG_STDERR); diff --git a/source4/gtk/tools/gwsam.c b/source4/gtk/tools/gwsam.c index 963397810c..3764afe046 100644 --- a/source4/gtk/tools/gwsam.c +++ b/source4/gtk/tools/gwsam.c @@ -23,7 +23,6 @@ #include "librpc/gen_ndr/ndr_samr.h" #include "gtk/common/select.h" #include "gtk/common/gtk-smb.h" -#include "smb_build.h" struct policy_handle sam_handle; struct dcerpc_pipe *sam_pipe = NULL; @@ -398,11 +397,8 @@ static GtkWidget* create_mainwindow (void) return mainwin; } - - - int main(int argc, char **argv) +int main(int argc, char **argv) { - gwsam_init_subsystems; lp_load(); setup_logging(argv[0], DEBUG_STDERR); diff --git a/source4/lib/com/config.mk b/source4/lib/com/config.mk index 9e66502046..12f0481b0f 100644 --- a/source4/lib/com/config.mk +++ b/source4/lib/com/config.mk @@ -1,5 +1,4 @@ [SUBSYSTEM::COM] -INIT_FUNCTION = com_init OBJ_FILES = \ tables.o \ rot.o \ diff --git a/source4/lib/com/main.c b/source4/lib/com/main.c index 123ba49b09..f2e4f6473a 100644 --- a/source4/lib/com/main.c +++ b/source4/lib/com/main.c @@ -92,8 +92,15 @@ WERROR com_get_class_object(struct com_context *ctx, struct GUID *clsid, struct NTSTATUS com_init(void) { - init_module_fn static_init[] = STATIC_COM_MODULES; - init_module_fn *shared_init = load_samba_modules(NULL, "com"); + static BOOL initialized = False; + + init_module_fn static_init[] = STATIC_COM_MODULES; + init_module_fn *shared_init; + + if (initialized) return NT_STATUS_OK; + initialized = True; + + shared_init = load_samba_modules(NULL, "com"); run_init_functions(static_init); run_init_functions(shared_init); diff --git a/source4/lib/ldb/tools/cmdline.c b/source4/lib/ldb/tools/cmdline.c index a14434622f..c134c3befd 100644 --- a/source4/lib/ldb/tools/cmdline.c +++ b/source4/lib/ldb/tools/cmdline.c @@ -28,7 +28,6 @@ #include "ldb/tools/cmdline.h" #ifdef _SAMBA_BUILD_ #include "lib/cmdline/popt_common.h" -#include "smb_build.h" #include "auth/auth.h" #endif @@ -72,7 +71,8 @@ struct ldb_cmdline *ldb_cmdline_process(struct ldb_context *ldb, int argc, const }; #ifdef _SAMBA_BUILD_ - ldbsearch_init_subsystems; + gensec_init(); + r = ldb_register_samba_handlers(ldb); if (r != 0) { goto failed; diff --git a/source4/lib/registry/reg_backend_rpc.c b/source4/lib/registry/reg_backend_rpc.c index e799b3a8e4..32ecbec6c6 100644 --- a/source4/lib/registry/reg_backend_rpc.c +++ b/source4/lib/registry/reg_backend_rpc.c @@ -389,5 +389,6 @@ WERROR reg_open_remote(struct registry_context **ctx, struct cli_credentials *cr NTSTATUS registry_rpc_init(void) { + dcerpc_init(); return registry_register(®_backend_rpc); } diff --git a/source4/lib/registry/tools/regdiff.c b/source4/lib/registry/tools/regdiff.c index 68cc56f9dd..5b876ca025 100644 --- a/source4/lib/registry/tools/regdiff.c +++ b/source4/lib/registry/tools/regdiff.c @@ -22,7 +22,6 @@ #include "includes.h" #include "lib/registry/registry.h" #include "lib/cmdline/popt_common.h" -#include "smb_build.h" int main(int argc, char **argv) { @@ -45,8 +44,6 @@ int main(int argc, char **argv) POPT_TABLEEND }; - regdiff_init_subsystems; - registry_init(); pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0); diff --git a/source4/lib/registry/tools/regpatch.c b/source4/lib/registry/tools/regpatch.c index b8b8805486..6f5c79bc0e 100644 --- a/source4/lib/registry/tools/regpatch.c +++ b/source4/lib/registry/tools/regpatch.c @@ -22,7 +22,6 @@ #include "includes.h" #include "lib/registry/registry.h" #include "lib/cmdline/popt_common.h" -#include "smb_build.h" int main(int argc, char **argv) { @@ -41,8 +40,6 @@ int main(int argc, char **argv) POPT_TABLEEND }; - regpatch_init_subsystems; - registry_init(); pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0); diff --git a/source4/lib/registry/tools/regshell.c b/source4/lib/registry/tools/regshell.c index c858b37f4a..89493c761e 100644 --- a/source4/lib/registry/tools/regshell.c +++ b/source4/lib/registry/tools/regshell.c @@ -23,7 +23,6 @@ #include "lib/registry/registry.h" #include "lib/cmdline/popt_common.h" #include "system/time.h" -#include "smb_build.h" /* * ck/cd - change key @@ -415,8 +414,6 @@ static char **reg_completion(const char *text, int start, int end) POPT_TABLEEND }; - regshell_init_subsystems; - registry_init(); pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0); diff --git a/source4/lib/registry/tools/regtree.c b/source4/lib/registry/tools/regtree.c index 9a9121379b..d8f5d68a94 100644 --- a/source4/lib/registry/tools/regtree.c +++ b/source4/lib/registry/tools/regtree.c @@ -22,7 +22,6 @@ #include "includes.h" #include "lib/registry/registry.h" #include "lib/cmdline/popt_common.h" -#include "smb_build.h" static void print_tree(int l, struct registry_key *p, int fullpath, int novals) { @@ -98,8 +97,6 @@ int main(int argc, char **argv) POPT_TABLEEND }; - regtree_init_subsystems; - registry_init(); pc = poptGetContext(argv[0], argc, (const char **) argv, long_options,0); diff --git a/source4/librpc/config.mk b/source4/librpc/config.mk index 06254a6748..03367bdf17 100644 --- a/source4/librpc/config.mk +++ b/source4/librpc/config.mk @@ -302,14 +302,9 @@ librpc/gen_ndr/tables.c: librpc/gen_ndr/ndr_*.h @$(PERL) librpc/tables.pl --output=librpc/gen_ndr/tables.c \ librpc/gen_ndr/ndr_*.h -[SUBSYSTEM::NDR_IFACE_TABLE] -NOPROTO = YES -OBJ_FILES = gen_ndr/tables.o - [SUBSYSTEM::NDR_ALL] -INIT_FUNCTION = dcerpc_table_init -OBJ_FILES = rpc/table.o -REQUIRED_SUBSYSTEMS = NDR_IFACE_TABLE NDR_AUDIOSRV NDR_ECHO NDR_DCERPC NDR_EXCHANGE \ +OBJ_FILES = rpc/table.o gen_ndr/tables.o +REQUIRED_SUBSYSTEMS = NDR_AUDIOSRV NDR_ECHO NDR_DCERPC NDR_EXCHANGE \ NDR_DSBACKUP NDR_EFS NDR_MISC NDR_LSA NDR_DFS NDR_DRSUAPI \ NDR_POLICYAGENT NDR_UNIXINFO NDR_SAMR NDR_SPOOLSS NDR_WKSSVC NDR_SRVSVC NDR_ATSVC \ NDR_EVENTLOG NDR_EPMAPPER NDR_DBGIDL NDR_DSSETUP NDR_MSGSVC NDR_WINS \ diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c index df71be7651..0269eb9919 100644 --- a/source4/librpc/rpc/dcerpc.c +++ b/source4/librpc/rpc/dcerpc.c @@ -29,6 +29,13 @@ #include "libcli/composite/composite.h" #include "auth/gensec/gensec.h" +NTSTATUS dcerpc_init(void) +{ + gensec_init(); + + return NT_STATUS_OK; +} + static void dcerpc_ship_next_request(struct dcerpc_connection *c); /* destroy a dcerpc connection */ diff --git a/source4/librpc/tables.pl b/source4/librpc/tables.pl index 5757dc000a..7ef1dbd14a 100644 --- a/source4/librpc/tables.pl +++ b/source4/librpc/tables.pl @@ -82,6 +82,11 @@ print TABLEC <<EOF; NTSTATUS dcerpc_table_init(void) { + static BOOL initialized = False; + + if (initialized) return NT_STATUS_OK; + initialized = True; + $init_fns return NT_STATUS_OK; diff --git a/source4/rpc_server/remote/dcesrv_remote.c b/source4/rpc_server/remote/dcesrv_remote.c index 4cd4b2b507..f7de3031ce 100644 --- a/source4/rpc_server/remote/dcesrv_remote.c +++ b/source4/rpc_server/remote/dcesrv_remote.c @@ -309,5 +309,8 @@ NTSTATUS dcerpc_server_remote_init(void) return ret; } + /* We need the full DCE/RPC interface table */ + dcerpc_table_init(); + return ret; } diff --git a/source4/scripting/ejs/smbcalls_rpc.c b/source4/scripting/ejs/smbcalls_rpc.c index dff04a4c40..a104f0eb16 100644 --- a/source4/scripting/ejs/smbcalls_rpc.c +++ b/source4/scripting/ejs/smbcalls_rpc.c @@ -367,6 +367,8 @@ done: */ int ejs_rpc_init(struct MprVar *obj, const char *name) { + dcerpc_table_init(); + mprSetStringCFunction(obj, "connect", ejs_rpc_connect); if (mprGetProperty(obj, "pipe_name", NULL) == NULL) { mprSetVar(obj, "pipe_name", mprString(name)); diff --git a/source4/scripting/ejs/smbscript.c b/source4/scripting/ejs/smbscript.c index 0e131e0ba5..20675dadf9 100644 --- a/source4/scripting/ejs/smbscript.c +++ b/source4/scripting/ejs/smbscript.c @@ -25,7 +25,7 @@ #include "lib/appweb/ejs/ejs.h" #include "lib/appweb/ejs/ejsInternal.h" #include "scripting/ejs/smbcalls.h" -#include "smb_build.h" +#include "auth/gensec/gensec.h" static EjsId eid; @@ -50,7 +50,7 @@ void ejs_exception(const char *reason) int exit_status, i; fault_setup(argv[0]); - smbscript_init_subsystems; + gensec_init(); mprSetCtx(mem_ctx); lp_load(); diff --git a/source4/smbd/server.c b/source4/smbd/server.c index e09c993f3c..513fa19c42 100644 --- a/source4/smbd/server.c +++ b/source4/smbd/server.c @@ -33,6 +33,7 @@ #include "registry/registry.h" #include "ntvfs/ntvfs.h" #include "ntptr/ntptr.h" +#include "auth/gensec/gensec.h" /* recursively delete a directory tree @@ -217,7 +218,7 @@ static int binary_smbd_main(const char *binary_name, int argc, const char *argv[ exit(1); } - smbd_init_subsystems; + gensec_init(); registry_init(); /* FIXME: maybe run this in the initialization function of the winreg RPC server instead? */ diff --git a/source4/torture/com/simple.c b/source4/torture/com/simple.c index 09061422f5..5d3c6250c4 100644 --- a/source4/torture/com/simple.c +++ b/source4/torture/com/simple.c @@ -38,6 +38,8 @@ static BOOL test_readwrite(TALLOC_CTX *mem_ctx, const char *host) char test_data[5]; int i; + com_init(); + com_init_ctx(&ctx, NULL); dcom_client_init(ctx, cmdline_credentials); diff --git a/source4/torture/gentest.c b/source4/torture/gentest.c index d466671252..a576b57458 100644 --- a/source4/torture/gentest.c +++ b/source4/torture/gentest.c @@ -24,7 +24,7 @@ #include "request.h" #include "libcli/raw/libcliraw.h" #include "librpc/gen_ndr/ndr_security.h" -#include "smb_build.h" +#include "auth/gensec/gensec.h" #define NSERVERS 2 #define NINSTANCES 2 @@ -2234,7 +2234,7 @@ static void usage(void) } } - gentest_init_subsystems; + gensec_init(); if (username_count == 0) { usage(); diff --git a/source4/torture/locktest.c b/source4/torture/locktest.c index a94a6f1ec9..be2d3022da 100644 --- a/source4/torture/locktest.c +++ b/source4/torture/locktest.c @@ -22,7 +22,7 @@ #include "system/filesys.h" #include "system/time.h" #include "pstring.h" -#include "smb_build.h" +#include "auth/gensec/gensec.h" static int numops = 1000; static BOOL showall; @@ -550,7 +550,7 @@ static void usage(void) servers[1] = servers[0]; } - locktest_init_subsystems; + gensec_init(); argc -= optind; argv += optind; diff --git a/source4/torture/masktest.c b/source4/torture/masktest.c index 5e8f973c4c..ca5bdf7c21 100644 --- a/source4/torture/masktest.c +++ b/source4/torture/masktest.c @@ -24,7 +24,7 @@ #include "libcli/raw/libcliraw.h" #include "system/time.h" #include "pstring.h" -#include "smb_build.h" +#include "auth/gensec/gensec.h" static struct cli_credentials *credentials; static BOOL showall = False; @@ -353,7 +353,7 @@ static void usage(void) } } - masktest_init_subsystems; + gensec_init(); argc -= optind; argv += optind; diff --git a/source4/torture/torture.c b/source4/torture/torture.c index 149ee78065..82fda0d4ff 100644 --- a/source4/torture/torture.c +++ b/source4/torture/torture.c @@ -25,7 +25,6 @@ #include "system/wait.h" #include "system/filesys.h" #include "ioctl.h" -#include "smb_build.h" int torture_nprocs=4; int torture_numops=10; @@ -2609,7 +2608,7 @@ static void max_runtime_handler(int sig) alarm(max_runtime); } - smbtorture_init_subsystems; + dcerpc_init(); dcerpc_table_init(); diff --git a/source4/utils/ndrdump.c b/source4/utils/ndrdump.c index 33bffe77b5..497726279b 100644 --- a/source4/utils/ndrdump.c +++ b/source4/utils/ndrdump.c @@ -22,7 +22,6 @@ #include "lib/cmdline/popt_common.h" #include "system/iconv.h" #include "system/filesys.h" -#include "smb_build.h" static const struct dcerpc_interface_call *find_function( const struct dcerpc_interface_table *p, diff --git a/source4/utils/net/net.c b/source4/utils/net/net.c index 17b12b7103..f82eddb763 100644 --- a/source4/utils/net/net.c +++ b/source4/utils/net/net.c @@ -44,7 +44,6 @@ #include "includes.h" #include "utils/net/net.h" #include "lib/cmdline/popt_common.h" -#include "smb_build.h" /* run a function from a function table. If not found then @@ -186,7 +185,7 @@ static int binary_net(int argc, const char **argv) return net_usage(ctx, argc, argv); } - net_init_subsystems; + dcerpc_init(); mem_ctx = talloc_init("net_context"); ctx = talloc(mem_ctx, struct net_context); diff --git a/source4/utils/ntlm_auth.c b/source4/utils/ntlm_auth.c index ffdbd2f2f6..d6b65d75d7 100644 --- a/source4/utils/ntlm_auth.c +++ b/source4/utils/ntlm_auth.c @@ -27,7 +27,6 @@ #include "lib/cmdline/popt_common.h" #include "auth/auth.h" #include "pstring.h" -#include "smb_build.h" #define SQUID_BUFFER_SIZE 2010 @@ -931,8 +930,7 @@ int main(int argc, const char **argv) return 1; } - ntlm_auth_init_subsystems; - + gensec_init(); if (opt_domain == NULL) { opt_domain = lp_workgroup(); |