summaryrefslogtreecommitdiff
path: root/source4/smbd
diff options
context:
space:
mode:
authorJelmer Vernooij <jelmer@samba.org>2004-11-06 23:23:15 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:36 -0500
commit71db46ea665606384f2be1be708c74c97c9adfb2 (patch)
tree24c84e12f4fc925f3ec1e69348493d7222df1e44 /source4/smbd
parentb012ab557b8f8a2f58dfbbe8b7818f3e6d8cf38f (diff)
downloadsamba-71db46ea665606384f2be1be708c74c97c9adfb2.tar.gz
samba-71db46ea665606384f2be1be708c74c97c9adfb2.tar.bz2
samba-71db46ea665606384f2be1be708c74c97c9adfb2.zip
r3586: Fix some of the issues with the module init functions.
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)
Diffstat (limited to 'source4/smbd')
-rw-r--r--source4/smbd/config.mk5
-rw-r--r--source4/smbd/process_model.c9
-rw-r--r--source4/smbd/process_model.mk6
-rw-r--r--source4/smbd/rewrite.c21
-rw-r--r--source4/smbd/service.c9
5 files changed, 19 insertions, 31 deletions
diff --git a/source4/smbd/config.mk b/source4/smbd/config.mk
index 55f040f805..7c5fe74da9 100644
--- a/source4/smbd/config.mk
+++ b/source4/smbd/config.mk
@@ -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 = \
diff --git a/source4/smbd/process_model.c b/source4/smbd/process_model.c
index 3493425774..69e321e0c2 100644
--- a/source4/smbd/process_model.c
+++ b/source4/smbd/process_model.c
@@ -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;
}
diff --git a/source4/smbd/process_model.mk b/source4/smbd/process_model.mk
index 6a4048700f..d4329e2014 100644
--- a/source4/smbd/process_model.mk
+++ b/source4/smbd/process_model.mk
@@ -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
+################################################
diff --git a/source4/smbd/rewrite.c b/source4/smbd/rewrite.c
index 0e9260535c..d22e3c28c3 100644
--- a/source4/smbd/rewrite.c
+++ b/source4/smbd/rewrite.c
@@ -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;
}
/****************************************************************************
diff --git a/source4/smbd/service.c b/source4/smbd/service.c
index 767d310e2b..fdbd5d0c80 100644
--- a/source4/smbd/service.c
+++ b/source4/smbd/service.c
@@ -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;
}