diff options
author | Simo Sorce <idra@samba.org> | 2003-11-15 00:47:29 +0000 |
---|---|---|
committer | Simo Sorce <idra@samba.org> | 2003-11-15 00:47:29 +0000 |
commit | e762e323897cd4ba3445016b6904136264082d25 (patch) | |
tree | 2268d5a8a60d321e8ec0a504d9f5510acc99061d /source3/param/modconf.c | |
parent | 7301471a6a12244cd398e3c81c310ffc2b663c53 (diff) | |
download | samba-e762e323897cd4ba3445016b6904136264082d25.tar.gz samba-e762e323897cd4ba3445016b6904136264082d25.tar.bz2 samba-e762e323897cd4ba3445016b6904136264082d25.zip |
Split smbldap in a core file and a utility file
Add module support for configuration loading
Add a first implementation of config_ldap module to put samba configuration
on ldap
It worked on my test machine, please try it out and send bugfixes :-)
have fun,
Simo.
INSTRUCTIONS:
Just add something like this to your smb.conf file:
config backend = config_ldap:ldap://localhost
config_ldap:basedn = dc=samba,dc=org
the config tree must follow this scheme:
ou=foo, dc=samba, dc=org <- global section
|- sambaOptionName=log level, ou=foo, ... <- options
|- ...
|- sambaShareName=testlc, ou=foo, ... == [testlc]
|- sambaOptionName=path, sambaShareName=testlc, ou=foo, ... <- option
here is a sample ldif:
# foo, samba, org
dn: ou=foo, dc=samba, dc=org
objectClass: organizationalUnit
objectClass: sambaConfig
ou: foo
description: Test Foo
# log level, foo, samba, org
dn: sambaOptionName=log level, ou=foo, dc=samba, dc=org
objectClass: sambaConfigOption
sambaOptionName: log level
sambaIntegerOption: 10
description: log level 10 is suitable for good debugging
# testlc, foo, samba, org
dn: sambaShareName=testlc, ou=foo, dc=samba, dc=org
objectClass: sambaShare
sambaShareName: testlc
description: share to test ldap config module actually works
# path, testlc, foo, samba, org
dn: sambaOptionName=path, sambaShareName=testlc, ou=foo, dc=samba, dc=org
objectClass: sambaConfigOption
sambaOptionName: path
sambaStringOption: /tmp
description: Path for share testlc
# read only, testlc, foo, samba, org
dn: sambaOptionName=read only, sambaShareName=testlc, ou=foo, dc=samba,
dc=org
objectClass: sambaConfigOption
sambaOptionName: read only
sambaBoolOption: TRUE
description: Share testlc is read only
# guest ok, testlc, foo, samba, org
dn: sambaOptionName=guest ok, sambaShareName=testlc, ou=foo, dc=samba,
dc=org
objectClass: sambaConfigOption
sambaOptionName: guest ok
sambaBoolOption: TRUE
description: Guest users are allowed to connect to testlc share
(This used to be commit 207968eafc2c2a185e50e2132702d7bab2142aba)
Diffstat (limited to 'source3/param/modconf.c')
-rw-r--r-- | source3/param/modconf.c | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/source3/param/modconf.c b/source3/param/modconf.c new file mode 100644 index 0000000000..a9ab6f9b4a --- /dev/null +++ b/source3/param/modconf.c @@ -0,0 +1,96 @@ +/* + Unix SMB/CIFS implementation. + Configuration Modules Support + Copyright (C) Simo Sorce 2003 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*/ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_IDMAP + +struct modconf_struct { + char *name; + struct config_functions *fns; +}; + +static struct modconf_struct module; + +NTSTATUS smb_register_config(int version, const char *name, struct config_functions *fns) +{ + if ((version != SAMBA_CONFIG_INTERFACE_VERSION)) { + DEBUG(0, ("smb_register_config: Failed to register config module.\n" + "The module has been compiled with a different interface version (%d).\n" + "The supported version is: %d\n", + version, SAMBA_CONFIG_INTERFACE_VERSION)); + return NT_STATUS_OBJECT_TYPE_MISMATCH; + } + + if (!name || !name[0]) { + DEBUG(0,("smb_register_config: Name missing!\n")); + return NT_STATUS_INVALID_PARAMETER; + } + + module.name = smb_xstrdup(name); + module.fns = fns; + DEBUG(5, ("smb_register_config: Successfully registeres config backend '%s'\n", name)); + return NT_STATUS_OK; +} + +/********************************************************************** + * Init the configuration module + *********************************************************************/ + +BOOL modconf_init(const char *config_backend) +{ + NTSTATUS ret; + BOOL bret = False; + char *name; + char *params; + + /* nothing to do */ + if (!config_backend) + return True; + + name = smb_xstrdup(config_backend); + if ((params = strchr(name, ':')) != NULL ) { + *params = '\0'; + params++; + } + + ret = smb_probe_module("config", name); + + if (NT_STATUS_IS_OK(ret) && NT_STATUS_IS_OK(module.fns->init(params))) + bret = True; + + SAFE_FREE(name); + return bret; +} + +BOOL modconf_load(BOOL (*sfunc)(const char *),BOOL (*pfunc)(const char *, const char *)) +{ + if (module.fns) { + if (NT_STATUS_IS_OK(module.fns->load(sfunc, pfunc))) { + return True; + } + } + return False; +} + +NTSTATUS modconf_close(void) +{ + return module.fns->close(); +} |