summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/lib/module.c28
-rw-r--r--source3/modules/mysql.c2
-rw-r--r--source3/passdb/pdb_interface.c5
-rw-r--r--source3/utils/pdbedit.c2
4 files changed, 31 insertions, 6 deletions
diff --git a/source3/lib/module.c b/source3/lib/module.c
index bf37078bb9..e400945a8b 100644
--- a/source3/lib/module.c
+++ b/source3/lib/module.c
@@ -80,7 +80,7 @@ int smb_probe_module(const char *subsystem, const char *module)
pstring full_path;
/* Check for absolute path */
- if(module[0] == '/')return smb_load_module(module);
+ if(strchr_m(module, '/'))return smb_load_module(module);
pstrcpy(full_path, lib_path(subsystem));
pstrcat(full_path, "/");
@@ -117,7 +117,31 @@ int smb_probe_module(const char *subsystem, const char *module)
void init_modules(void)
{
+ /* FIXME: This can cause undefined symbol errors :
+ * smb_register_vfs() isn't available in nmbd, for example */
if(lp_preload_modules())
smb_load_modules(lp_preload_modules());
- /* FIXME: load static modules */
+}
+
+
+/*************************************************************************
+ * This functions /path/to/foobar.so -> foobar
+ ************************************************************************/
+void module_path_get_name(char *path, pstring name)
+{
+ char *s;
+
+ /* First, make the path relative */
+ s = strrchr_m(path, '/');
+ if(s) pstrcpy(name, s+1);
+ else pstrcpy(name, path);
+
+ if (dyn_SHLIBEXT && *dyn_SHLIBEXT && strlen(dyn_SHLIBEXT) < strlen(name)) {
+ int n = strlen(name) - strlen(dyn_SHLIBEXT);
+
+ /* Remove extension if necessary */
+ if (name[n-1] == '.' && !strcmp(name+n, dyn_SHLIBEXT)) {
+ name[n-1] = '\0';
+ }
+ }
}
diff --git a/source3/modules/mysql.c b/source3/modules/mysql.c
index 40694d6e7d..684eb96645 100644
--- a/source3/modules/mysql.c
+++ b/source3/modules/mysql.c
@@ -933,7 +933,7 @@ static NTSTATUS mysqlsam_init(struct pdb_context * pdb_context, struct pdb_metho
data->pwent = NULL;
if (!location) {
- DEBUG(0, ("No identifier specified. See README for details\n"));
+ DEBUG(0, ("No identifier specified. Check the Samba HOWTO Collection for details\n"));
return NT_STATUS_INVALID_PARAMETER;
}
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
index 4d9ec7beea..95f587b076 100644
--- a/source3/passdb/pdb_interface.c
+++ b/source3/passdb/pdb_interface.c
@@ -64,9 +64,12 @@ BOOL smb_register_passdb(const char *name, pdb_init_function init, int version)
struct pdb_init_function_entry *pdb_find_backend_entry(const char *name)
{
struct pdb_init_function_entry *entry = backends;
+ pstring stripped;
+
+ module_path_get_name(name, stripped);
while(entry) {
- if (strequal(entry->name, name)) return entry;
+ if (strequal(entry->name, stripped)) return entry;
entry = entry->next;
}
diff --git a/source3/utils/pdbedit.c b/source3/utils/pdbedit.c
index f33dbd9f1c..bf42fb805f 100644
--- a/source3/utils/pdbedit.c
+++ b/source3/utils/pdbedit.c
@@ -563,8 +563,6 @@ int main (int argc, char **argv)
exit(1);
}
- init_modules();
-
if (!init_names())
exit(1);