diff options
author | Michael Adam <obnox@samba.org> | 2009-04-29 01:49:53 +0200 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2009-04-29 02:20:19 +0200 |
commit | 077bcc11257697b243916fbb02cd72b3a122b9ba (patch) | |
tree | c2e02e5604f876999da6e9edf875c76dd02f902d /source3/smbd | |
parent | fb3b6576127ce837ac711e87c293d1f4cf97473c (diff) | |
download | samba-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/smbd')
-rw-r--r-- | source3/smbd/service.c | 73 |
1 files changed, 3 insertions, 70 deletions
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; } |