summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2009-04-29 01:49:53 +0200
committerMichael Adam <obnox@samba.org>2009-04-29 02:20:19 +0200
commit077bcc11257697b243916fbb02cd72b3a122b9ba (patch)
treec2e02e5604f876999da6e9edf875c76dd02f902d /source3
parentfb3b6576127ce837ac711e87c293d1f4cf97473c (diff)
downloadsamba-077bcc11257697b243916fbb02cd72b3a122b9ba.tar.gz
samba-077bcc11257697b243916fbb02cd72b3a122b9ba.tar.bz2
samba-077bcc11257697b243916fbb02cd72b3a122b9ba.zip
s3:smbd/service: switch load_registry_service/shares to use loadparm routines
instead of reading the registry directly with tdb and activating the configure options by hand. This eliminates the need for repeating checks done in loadparm. For instance it disables registry shares without path in the server as is the case with text based shares. Michael
Diffstat (limited to 'source3')
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/param/loadparm.c2
-rw-r--r--source3/smbd/service.c73
3 files changed, 5 insertions, 71 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 6dd9c7e7e8..2eb838fd2a 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4080,6 +4080,7 @@ bool lp_invert_boolean(const char *str, const char **inverse_str);
bool lp_canonicalize_boolean(const char *str, const char**canon_str);
bool service_ok(int iService);
bool process_registry_service(const char *service_name);
+bool process_registry_shares(void);
bool lp_config_backend_is_registry(void);
bool lp_config_backend_is_file(void);
bool lp_file_list_changed(void);
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 380b9e1b8c..7b794020a1 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -6883,7 +6883,7 @@ static bool process_registry_globals(void)
return process_registry_service(GLOBAL_NAME);
}
-static bool process_registry_shares(void)
+bool process_registry_shares(void)
{
WERROR werr;
uint32_t count;
diff --git a/source3/smbd/service.c b/source3/smbd/service.c
index e33f04d971..c66a4d3f8c 100644
--- a/source3/smbd/service.c
+++ b/source3/smbd/service.c
@@ -220,16 +220,6 @@ bool set_current_service(connection_struct *conn, uint16 flags, bool do_chdir)
static int load_registry_service(const char *servicename)
{
- struct registry_key *key;
- char *path;
- WERROR err;
-
- uint32 i;
- char *value_name;
- struct registry_value *value;
-
- int res = -1;
-
if (!lp_registry_shares()) {
return -1;
}
@@ -242,79 +232,22 @@ static int load_registry_service(const char *servicename)
return -2;
}
- if (asprintf(&path, "%s\\%s", KEY_SMBCONF, servicename) == -1) {
- return -1;
- }
-
- err = reg_open_path(NULL, path, REG_KEY_READ, get_root_nt_token(),
- &key);
- SAFE_FREE(path);
-
- if (!W_ERROR_IS_OK(err)) {
+ if (!process_registry_service(servicename)) {
return -1;
}
- res = lp_add_service(servicename, -1);
- if (res == -1) {
- goto error;
- }
-
- for (i=0;
- W_ERROR_IS_OK(reg_enumvalue(key, key, i, &value_name, &value));
- i++) {
- switch (value->type) {
- case REG_DWORD: {
- char *tmp;
- if (asprintf(&tmp, "%d", value->v.dword) == -1) {
- continue;
- }
- lp_do_parameter(res, value_name, tmp);
- SAFE_FREE(tmp);
- break;
- }
- case REG_SZ: {
- lp_do_parameter(res, value_name, value->v.sz.str);
- break;
- }
- default:
- /* Ignore all the rest */
- break;
- }
-
- TALLOC_FREE(value_name);
- TALLOC_FREE(value);
- }
-
- error:
-
- TALLOC_FREE(key);
- return res;
+ return lp_servicenumber(servicename);
}
void load_registry_shares(void)
{
- struct registry_key *key;
- char *name;
- WERROR err;
- int i;
-
DEBUG(8, ("load_registry_shares()\n"));
if (!lp_registry_shares()) {
return;
}
- err = reg_open_path(NULL, KEY_SMBCONF, REG_KEY_READ,
- get_root_nt_token(), &key);
- if (!(W_ERROR_IS_OK(err))) {
- return;
- }
-
- for (i=0; W_ERROR_IS_OK(reg_enumkey(key, key, i, &name, NULL)); i++) {
- load_registry_service(name);
- TALLOC_FREE(name);
- }
+ process_registry_shares();
- TALLOC_FREE(key);
return;
}