diff options
-rw-r--r-- | source3/lib/module.c | 28 | ||||
-rw-r--r-- | source3/modules/mysql.c | 2 | ||||
-rw-r--r-- | source3/passdb/pdb_interface.c | 5 | ||||
-rw-r--r-- | source3/utils/pdbedit.c | 2 |
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); |