summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2009-04-29 01:49:53 +0200
committerKarolin Seeger <kseeger@samba.org>2009-04-29 13:00:54 +0200
commitf29ab6bbb7309ce25df6a68d64d443bd54533411 (patch)
treec21c1184fc95dfc40f71ee5877a0fe8f59a6c20c
parent6950d7b0302a70bc62ff1eeb3cf16e220523d1c7 (diff)
downloadsamba-f29ab6bbb7309ce25df6a68d64d443bd54533411.tar.gz
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 (cherry picked from commit 077bcc11257697b243916fbb02cd72b3a122b9ba) (cherry picked from commit 502bfe9352d36ee909d7210a9d0ec0b6c7db5149)
-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 36580e95505..1f883cf53cc 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -4257,6 +4257,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 2dd233c24a0..27f1dbb5b08 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -6849,7 +6849,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 eb16a2601e3..ab2371c875a 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;
}