[PATCH] Re: Plugable passdb (SAM) modules
Simo Sorce
idra at samba.org
Tue Jan 22 04:29:03 GMT 2002
Absolutely the dlopen() is the way to go in the last!
I would prefer to have all modules loaded as "extern"!
And this is what we (jerry, abartlet, and others ) have talked about if I recall correctly.
/Simo, that's in real hurry
On Tue, Jan 22, 2002 at 01:08:10PM +0100, Stefan (metze) Metzmacher wrote:
>
>
> Re: Plugable passdb (SAM) modules
>
> you wrote:
> >The purpose of posting the patch is to get comments: Is this something people
> >want, or something that people will object to?
>
> This is what some people want!!
>
> With witch version of samba the patches apply cleanly?
>
> you wrote:
> >+/** List of various built-in passdb modules */
> >+
> >+const struct pdb_init_function builtin_pdb_init_functions[] = {
> >+ { "smbpasswd", pdb_init_smbpasswd },
> >+ { "tdbsam", pdb_init_tdbsam },
> >+#if 0
> >+ { "ldap", pdb_init_ldap },
> >+ { "nisplus", pdb_init_nisplus },
> >+ { "unix", pdb_init_unix },
> >+#endif
> >+ { NULL, NULL}
> >+};
>
> To do builtin modules is quite nice for standart passdb modules, but if
> anybody want to use other passdb backends like mysql or other databases, I
> thing it's usefull to allow loading of new (extern) modules without
> recompile your smbd. They should be load via dlopen(); They have there own
> conf-file and there location is spezified by the "passdb module" parameter.
>
> in smb.conf:
> passdb backen = extern
> passdb module = /usr/local/samba/passdb/pdb_extern.so
>
> this is my approch:
>
> /** List of various built-in passdb modules */
> const struct pdb_init_function builtin_pdb_init_functions[] = {
> { "smbpasswd", pdb_init_smbpasswd },
> { "tdbsam", pdb_init_tdbsam },
> { "ldap", pdb_init_ldap },
> { "nisplus", pdb_init_nisplus },
> { "unix", pdb_init_unix },
> /* to load an external passdb module via dlopen(), if you use a new module
> without recompile your smbd. */
> { "extern", pdb_init_extern },
> { NULL, NULL}
> };
>
>
> NTSTATUS pdb_init_extern(PDB_CONTEXT *pdb_context, PDB_METHODS **pdb_method)
> {
> void * dl_handle;
> char *dl_error;
> NTSTATUS (*extern_init)( PDB_CONTEXT *pdb_context, PDB_METHODS
> **pdb_method);
>
> dl_handle = dlopen( lp_passdb_module(), RTLD );
> if (!dl_handle) return NT_STATUS_UNSUCCESSFUL;
>
> extern_init = dlsym(dl_handle, "init");
> if ((dl_error = dlerror()) != NULL) return NT_STATUS_UNSUCCESSFUL;
>
> return extern_init(pdb_context,pdb_method);
> }
>
>
>
> MfG
> metze
>
> Stefan "metze" Metzmacher <metze at metzemix.de>
>
>
--
Simo Sorce idra at samba.org
-------------------------------
Samba Team http://www.samba.org
More information about the samba-technical
mailing list