[PATCH] using lp_passdb_module_path()
Jelmer Vernooij
jelmer at nl.linux.org
Fri Mar 8 00:15:03 GMT 2002
Hi!
This small patch allows lp_passdb_module_path() to have an actual use
:) You can now do things like this in your smb.conf:
passdb module path = /home/jelmer
passdb backend = plugin:pdb_mysql.so:location
of course, this also still works:
passdb backend = plugin:/some/path/to/pdb_mysql.so:location
and this even should work:
passdb module path = /home/jelmer
passdb backend = plugin:../user/pdb_mysql.so:location
A default for passdb backend might be nice..
Jelmer
--
Jelmer Vernooij <jelmer at nl.linux.org> - http://nl.linux.org/~jelmer/
Development And Underdevelopment: http://library.thinkquest.org/C0110231/
20:37:33 up 3 days, 4:32, 9 users, load average: 0.44, 0.96, 0.92
-------------- next part --------------
Index: examples/pdb/README
===================================================================
RCS file: /cvsroot/samba/examples/pdb/README,v
retrieving revision 1.1
diff -u -3 -p -u -r1.1 README
--- examples/pdb/README 22 Feb 2002 02:57:49 -0000 1.1
+++ examples/pdb/README 7 Mar 2002 19:41:30 -0000
@@ -7,3 +7,5 @@ a pdb plugin. It just prints the name of
DEBUG. Maybe it's nice to include some of the arguments to the function in the
future too..
+To debug passdb backends, try to run gdb on the 'pdbedit' executable. That's really much easier than restarting smbd constantly and attaching with your debugger.
+
Index: source/passdb/pdb_plugin.c
===================================================================
RCS file: /cvsroot/samba/source/passdb/pdb_plugin.c,v
retrieving revision 1.1
diff -u -3 -p -u -r1.1 pdb_plugin.c
--- source/passdb/pdb_plugin.c 22 Feb 2002 02:47:53 -0000 1.1
+++ source/passdb/pdb_plugin.c 7 Mar 2002 19:41:42 -0000
@@ -27,7 +27,7 @@
NTSTATUS pdb_init_plugin(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method, const char *location)
{
void * dl_handle;
- char *plugin_location, *plugin_name, *p;
+ char *plugin_location, *plugin_name, *p, *absolute_plugin_name;
pdb_init_function plugin_init;
if (location == NULL) {
@@ -42,22 +42,40 @@ NTSTATUS pdb_init_plugin(PDB_CONTEXT *pd
plugin_location = p+1;
trim_string(plugin_location, " ", " ");
} else plugin_location = NULL;
- trim_string(plugin_name, " ", " ");
+
+ trim_string(plugin_name, " ", " ");
+
+ /* Prepend plugin name with lp_passdb_module_path() in case of
+ * a relative path */
+ if(plugin_name[0] == '/' || !lp_passdb_module_path()){
+ absolute_plugin_name = smb_xstrdup(plugin_name);
+ }else {
+ absolute_plugin_name = malloc(strlen(plugin_name)+strlen(lp_passdb_module_path()) + 4);
+ safe_strcpy(absolute_plugin_name, lp_passdb_module_path(), strlen(lp_passdb_module_path())+1);
+ /* Some unixes don't like two slashes after each other */
+ if(absolute_plugin_name[strlen(absolute_plugin_name)-1] != '/'){
+ safe_strcat(absolute_plugin_name, "/", strlen(absolute_plugin_name)+2);
+ }
+ safe_strcat(absolute_plugin_name, plugin_name, strlen(plugin_name)+strlen(absolute_plugin_name)+1);
+ }
DEBUG(5, ("Trying to load sam plugin %s\n", plugin_name));
- dl_handle = sys_dlopen(plugin_name, RTLD_NOW | RTLD_GLOBAL );
+ dl_handle = sys_dlopen(absolute_plugin_name, RTLD_NOW | RTLD_GLOBAL );
if (!dl_handle) {
- DEBUG(0, ("Failed to load sam plugin %s using sys_dlopen (%s)\n", plugin_name, sys_dlerror()));
+ DEBUG(0, ("Failed to load sam plugin %s at %s using sys_dlopen (%s)\n", plugin_name, absolute_plugin_name, sys_dlerror()));
+ SAFE_FREE(absolute_plugin_name);
return NT_STATUS_UNSUCCESSFUL;
}
plugin_init = sys_dlsym(dl_handle, "pdb_init");
if (!plugin_init){
- DEBUG(0, ("Failed to find function 'pdb_init' using sys_dlsym in sam plugin %s (%s)\n", plugin_name, sys_dlerror()));
+ DEBUG(0, ("Failed to find function 'pdb_init' using sys_dlsym in sam plugin %s at %s (%s)\n", plugin_name, absolute_plugin_name, sys_dlerror()));
+ SAFE_FREE(absolute_plugin_name);
return NT_STATUS_UNSUCCESSFUL;
}
- DEBUG(5, ("Starting sam plugin %s with location %s\n", plugin_name, plugin_location));
+ DEBUG(5, ("Starting sam plugin %s at %s with location %s\n", plugin_name, absolute_plugin_name, plugin_location));
+ SAFE_FREE(absolute_plugin_name);
return plugin_init(pdb_context, pdb_method, plugin_location);
}
More information about the samba-technical
mailing list