summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}