[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