summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2012-04-03 13:22:41 +1000
committerAndrew Bartlett <abartlet@samba.org>2012-04-03 14:25:12 +1000
commit4d53e7c2ba59d4572a6198785e49eeaf88cd1a02 (patch)
treeb58ba928ed5c73ac5c0e408e5997d50080853092 /lib
parentc7a3b8ae21523f6af2c3e3fea1a0d3fcf9706d4c (diff)
downloadsamba-4d53e7c2ba59d4572a6198785e49eeaf88cd1a02.tar.gz
samba-4d53e7c2ba59d4572a6198785e49eeaf88cd1a02.tar.bz2
samba-4d53e7c2ba59d4572a6198785e49eeaf88cd1a02.zip
lib/util: Add smb_load_module that returns DEBUG(0) errors on failure
These errors are very important when trying to work out why a module does not load, and this rework allows them to be shown when loading vfs modules. Andrew Bartlett
Diffstat (limited to 'lib')
-rw-r--r--lib/util/modules.c76
-rw-r--r--lib/util/samba_modules.h1
2 files changed, 39 insertions, 38 deletions
diff --git a/lib/util/modules.c b/lib/util/modules.c
index 52a04be457..05d1dac50f 100644
--- a/lib/util/modules.c
+++ b/lib/util/modules.c
@@ -159,13 +159,42 @@ init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem)
/* Load a dynamic module. Only log a level 0 error if we are not checking
for the existence of a module (probling). */
-static NTSTATUS do_smb_load_module(const char *module_name, bool is_probe)
+static NTSTATUS do_smb_load_module(const char *subsystem,
+ const char *module_name, bool is_probe)
{
void *handle;
init_module_fn init;
NTSTATUS status;
- init = load_module(module_name, is_probe, &handle);
+ char *full_path = NULL;
+ TALLOC_CTX *ctx = talloc_stackframe();
+
+ /* Check for absolute path */
+
+ /* if we make any 'samba multibyte string'
+ calls here, we break
+ for loading string modules */
+
+ DEBUG(5, ("%s module '%s'\n", is_probe ? "Probing" : "Loading", module_name));
+
+ if (subsystem && module_name[0] != '/') {
+ full_path = talloc_asprintf(ctx,
+ "%s/%s.%s",
+ modules_path(ctx, subsystem),
+ module_name,
+ shlib_ext());
+ if (!full_path) {
+ TALLOC_FREE(ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
+
+ DEBUG(5, ("%s module '%s': Trying to load from %s\n",
+ is_probe ? "Probing": "Loading", module_name, full_path));
+ init = load_module(full_path, is_probe, &handle);
+ } else {
+ init = load_module(module_name, is_probe, &handle);
+ }
+
if (!init) {
return NT_STATUS_UNSUCCESSFUL;
}
@@ -175,7 +204,7 @@ static NTSTATUS do_smb_load_module(const char *module_name, bool is_probe)
status = init();
if (!NT_STATUS_IS_OK(status)) {
DEBUG(0, ("Module '%s' initialization failed: %s\n",
- module_name, get_friendly_nt_error_msg(status)));
+ module_name, get_friendly_nt_error_msg(status)));
dlclose(handle);
}
@@ -190,7 +219,7 @@ int smb_load_modules(const char **modules)
int success = 0;
for(i = 0; modules[i]; i++){
- if(NT_STATUS_IS_OK(do_smb_load_module(modules[i], false))) {
+ if(NT_STATUS_IS_OK(do_smb_load_module(NULL, modules[i], false))) {
success++;
}
}
@@ -202,39 +231,10 @@ int smb_load_modules(const char **modules)
NTSTATUS smb_probe_module(const char *subsystem, const char *module)
{
- char *full_path = NULL;
- TALLOC_CTX *ctx = talloc_stackframe();
- NTSTATUS status;
-
- /* Check for absolute path */
-
- /* if we make any 'samba multibyte string'
- calls here, we break
- for loading string modules */
-
- DEBUG(5, ("Probing module '%s'\n", module));
-
- if (module[0] == '/') {
- status = do_smb_load_module(module, true);
- TALLOC_FREE(ctx);
- return status;
- }
-
- full_path = talloc_asprintf(ctx,
- "%s/%s.%s",
- modules_path(ctx, subsystem),
- module,
- shlib_ext());
- if (!full_path) {
- TALLOC_FREE(ctx);
- return NT_STATUS_NO_MEMORY;
- }
-
- DEBUG(5, ("Probing module '%s': Trying to load from %s\n",
- module, full_path));
-
- status = do_smb_load_module(full_path, true);
+ return do_smb_load_module(subsystem, module, true);
+}
- TALLOC_FREE(ctx);
- return status;
+NTSTATUS smb_load_module(const char *subsystem, const char *module)
+{
+ return do_smb_load_module(subsystem, module, false);
}
diff --git a/lib/util/samba_modules.h b/lib/util/samba_modules.h
index 5eb2a0dd1c..2f40811929 100644
--- a/lib/util/samba_modules.h
+++ b/lib/util/samba_modules.h
@@ -55,5 +55,6 @@ init_module_fn *load_samba_modules(TALLOC_CTX *mem_ctx, const char *subsystem);
int smb_load_modules(const char **modules);
NTSTATUS smb_probe_module(const char *subsystem, const char *module);
+NTSTATUS smb_load_module(const char *subsystem, const char *module);
#endif /* _SAMBA_MODULES_H */