From 99dfd664881f92dd1972f872c7471c5665869b86 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Mon, 21 Jan 2008 00:40:10 +0100 Subject: Rename lib/util_reg_smbconf.c to registry/reg_init_smbconf.c This actually is a counterpart to reg_init_full, in that is does open and initialize the registry too, but only registeres the backends necessary to access the SMBCONF key. Michael (This used to be commit 01bda3ab359fb3868c1dc849044f613bf2bc563e) --- source3/registry/reg_init_smbconf.c | 97 +++++++++++++++++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 source3/registry/reg_init_smbconf.c (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c new file mode 100644 index 0000000000..6452b0b15b --- /dev/null +++ b/source3/registry/reg_init_smbconf.c @@ -0,0 +1,97 @@ +/* + * Unix SMB/CIFS implementation. + * Registry helper routines + * Copyright (C) Michael Adam 2007 + * + * 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 3 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, see . + */ + +#include "includes.h" + +#undef DBGC_CLASS +#define DBGC_CLASS DBGC_REGISTRY + +extern REGISTRY_OPS smbconf_reg_ops; + +/* + * create a fake token just with enough rights to + * locally access the registry: + * + * - builtin administrators sid + * - disk operators privilege + */ +NTSTATUS registry_create_admin_token(TALLOC_CTX *mem_ctx, + NT_USER_TOKEN **ptoken) +{ + NTSTATUS status; + NT_USER_TOKEN *token = NULL; + + if (ptoken == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + + token = TALLOC_ZERO_P(mem_ctx, NT_USER_TOKEN); + if (token == NULL) { + DEBUG(1, ("talloc failed\n")); + status = NT_STATUS_NO_MEMORY; + goto done; + } + token->privileges = se_disk_operators; + status = add_sid_to_array(token, &global_sid_Builtin_Administrators, + &token->user_sids, &token->num_sids); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(1, ("Error adding builtin administrators sid " + "to fake token.\n")); + goto done; + } + + *ptoken = token; + +done: + return status; +} + +/* + * init the smbconf portion of the registry. + * for use in places where not the whole registry is needed, + * e.g. utils/net_conf.c and loadparm.c + */ +bool registry_init_regdb(void) +{ + bool ret = false; + int saved_errno = 0; + static REGISTRY_HOOK smbconf_reg_hook = {KEY_SMBCONF, &smbconf_reg_ops}; + + DEBUG(10, ("registry_init_regdb called\n")); + + if (!regdb_init()) { + saved_errno = errno; + DEBUG(1, ("Can't open the registry")); + if (saved_errno) { + DEBUGADD(1, (": %s", strerror(saved_errno))); + } + DEBUGADD(1, (".\n")); + goto done; + } + reghook_cache_init(); + if (!reghook_cache_add(&smbconf_reg_hook)) { + DEBUG(1, ("Error adding smbconf reghooks to reghook cache.\n")); + goto done; + } + + ret = true; + +done: + return ret; +} -- cgit From 9af84dd382aad55fcdfa803238d8edd57636f2aa Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 15 Feb 2008 13:57:31 +0100 Subject: Rename registry_init_regdb() to registry_init_smbconf(). That's what it actually is. Michael (This used to be commit 9d3c27f55726dbdce41fcf71c8bc1a7829340268) --- source3/registry/reg_init_smbconf.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 6452b0b15b..b7e6add112 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -67,13 +67,13 @@ done: * for use in places where not the whole registry is needed, * e.g. utils/net_conf.c and loadparm.c */ -bool registry_init_regdb(void) +bool registry_init_smbconf(void) { bool ret = false; int saved_errno = 0; static REGISTRY_HOOK smbconf_reg_hook = {KEY_SMBCONF, &smbconf_reg_ops}; - DEBUG(10, ("registry_init_regdb called\n")); + DEBUG(10, ("registry_init_smbconf called\n")); if (!regdb_init()) { saved_errno = errno; -- cgit From 2f01e055cf0a8d49f1d732f03c7d2bebd8e123ae Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Thu, 20 Mar 2008 14:08:29 +0100 Subject: registry: separate initialization of registry data from regdb_init(). Leave this to the users (currently registry_init_smbconf() and init_registry()) to initialize as much of preliminary registry data as needed. Michael (This used to be commit 59fdd30c789ccfd5cff356e459f1653b065b985c) --- source3/registry/reg_init_smbconf.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index b7e6add112..1b17852a7a 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -84,6 +84,11 @@ bool registry_init_smbconf(void) DEBUGADD(1, (".\n")); goto done; } + if (!init_registry_key(KEY_SMBCONF)) { + DEBUG(1, ("Could not initialize registry key '%s'\n", + KEY_SMBCONF)); + goto done; + } reghook_cache_init(); if (!reghook_cache_add(&smbconf_reg_hook)) { DEBUG(1, ("Error adding smbconf reghooks to reghook cache.\n")); -- cgit From 9ec7af58c62d8ead447fc6da6db76db8dc5b96dc Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Fri, 21 Mar 2008 23:50:49 +0100 Subject: registry: fix registry_init_smbconf() to close the registry at the end. Michael (This used to be commit f4d87fdbf266a36fbb50dae863ee0784165c2fe1) --- source3/registry/reg_init_smbconf.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 1b17852a7a..71f21f85ec 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -95,6 +95,8 @@ bool registry_init_smbconf(void) goto done; } + regdb_close(); + ret = true; done: -- cgit From 4825cef8bcce9e9774ea4e8c1087f76c654293b9 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sat, 22 Mar 2008 01:54:18 +0100 Subject: registry: close registry in exit path in registry_init_smbconf(). Michael (This used to be commit 5aa3141bff35a85dd97e9fd339e19b0fe3a73afc) --- source3/registry/reg_init_smbconf.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 71f21f85ec..f76cc2f051 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -95,10 +95,9 @@ bool registry_init_smbconf(void) goto done; } - regdb_close(); - ret = true; done: + regdb_close(); return ret; } -- cgit From 413c2e9b0aed25ef49b4344c1aec145d0e45a51e Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 00:54:44 +0200 Subject: registry: remove the REGISTRY_HOOKS layer from the reghook cache. There is no need to save the keyname again, we only need to get the REGISTRY_OPS out of the pathtree. Furthermore, this makes life easier, since we can now pass in keynames as temporarily allocated strings. Michael (This used to be commit 2f9ee2f782c77ed99669af5ac2ba40cb0978f0da) --- source3/registry/reg_init_smbconf.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index f76cc2f051..d1acd213c1 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -71,7 +71,6 @@ bool registry_init_smbconf(void) { bool ret = false; int saved_errno = 0; - static REGISTRY_HOOK smbconf_reg_hook = {KEY_SMBCONF, &smbconf_reg_ops}; DEBUG(10, ("registry_init_smbconf called\n")); @@ -90,7 +89,7 @@ bool registry_init_smbconf(void) goto done; } reghook_cache_init(); - if (!reghook_cache_add(&smbconf_reg_hook)) { + if (!reghook_cache_add(KEY_SMBCONF, &smbconf_reg_ops)) { DEBUG(1, ("Error adding smbconf reghooks to reghook cache.\n")); goto done; } -- cgit From bcb19766d6c18b847b0576ea86c0a0e468af78af Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 12:10:07 +0200 Subject: registry: make registry_init_smbconf() hook the registry ops onto given key. This still defaults to HKLM\Software\Samba\smbconf, but is interchangeable now. This allows us to open the libsmbconf registry backend on different registry keys. Michael (This used to be commit 8fe1a2f567afbecbe487f08825cb43b038065e99) --- source3/registry/reg_init_smbconf.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index d1acd213c1..ff9cde749e 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -67,13 +67,19 @@ done: * for use in places where not the whole registry is needed, * e.g. utils/net_conf.c and loadparm.c */ -bool registry_init_smbconf(void) +bool registry_init_smbconf(const char *keyname) { bool ret = false; int saved_errno = 0; DEBUG(10, ("registry_init_smbconf called\n")); + if (keyname == NULL) { + DEBUG(10, ("registry_init_smbconf: defaulting to key '%s'\n", + KEY_SMBCONF)); + keyname = KEY_SMBCONF; + } + if (!regdb_init()) { saved_errno = errno; DEBUG(1, ("Can't open the registry")); @@ -83,13 +89,13 @@ bool registry_init_smbconf(void) DEBUGADD(1, (".\n")); goto done; } - if (!init_registry_key(KEY_SMBCONF)) { + if (!init_registry_key(keyname)) { DEBUG(1, ("Could not initialize registry key '%s'\n", - KEY_SMBCONF)); + keyname)); goto done; } reghook_cache_init(); - if (!reghook_cache_add(KEY_SMBCONF, &smbconf_reg_ops)) { + if (!reghook_cache_add(keyname, &smbconf_reg_ops)) { DEBUG(1, ("Error adding smbconf reghooks to reghook cache.\n")); goto done; } -- cgit From 6b85938f275aad0fbb329ee46ed718ce8b101930 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 12:41:34 +0200 Subject: registry: change regdb_init() to return WERROR instead of bool. Michael (This used to be commit c312852abce72bc167abee8b29fc699c4a643ca7) --- source3/registry/reg_init_smbconf.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index ff9cde749e..8d2fe53b53 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -69,8 +69,8 @@ done: */ bool registry_init_smbconf(const char *keyname) { + WERROR werr; bool ret = false; - int saved_errno = 0; DEBUG(10, ("registry_init_smbconf called\n")); @@ -80,13 +80,9 @@ bool registry_init_smbconf(const char *keyname) keyname = KEY_SMBCONF; } - if (!regdb_init()) { - saved_errno = errno; - DEBUG(1, ("Can't open the registry")); - if (saved_errno) { - DEBUGADD(1, (": %s", strerror(saved_errno))); - } - DEBUGADD(1, (".\n")); + werr = regdb_init(); + if (!W_ERROR_IS_OK(werr)) { + DEBUG(1, ("Can't open the registry: %s\n", dos_errstr(werr))); goto done; } if (!init_registry_key(keyname)) { -- cgit From cb624c40573b10fbb93c14a1aa436780ffd6caa4 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 12:46:21 +0200 Subject: registry: unify debug output in the registry init functions. Michael (This used to be commit 4fd9b45ffc08e7deeae58be3129832148748af13) --- source3/registry/reg_init_smbconf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 8d2fe53b53..670f7a9c5d 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -82,17 +82,17 @@ bool registry_init_smbconf(const char *keyname) werr = regdb_init(); if (!W_ERROR_IS_OK(werr)) { - DEBUG(1, ("Can't open the registry: %s\n", dos_errstr(werr))); + DEBUG(1, ("Failed to initialize the registry: %s\n", + dos_errstr(werr))); goto done; } if (!init_registry_key(keyname)) { - DEBUG(1, ("Could not initialize registry key '%s'\n", - keyname)); + DEBUG(1, ("Failed to initialize registry key '%s'\n", keyname)); goto done; } reghook_cache_init(); if (!reghook_cache_add(keyname, &smbconf_reg_ops)) { - DEBUG(1, ("Error adding smbconf reghooks to reghook cache.\n")); + DEBUG(1, ("Failed to add smbconf reghooks to reghook cache\n")); goto done; } -- cgit From 26a5652f6d1dc7ae01a472beabf032faba07c8d2 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 13:38:44 +0200 Subject: registry: change init_registry_key() and init_registry_data() to return WERR Michael (This used to be commit e0718f04a7392695eed6cd1bf888d3af1d5d6177) --- source3/registry/reg_init_smbconf.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 670f7a9c5d..871141c1fd 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -86,10 +86,14 @@ bool registry_init_smbconf(const char *keyname) dos_errstr(werr))); goto done; } - if (!init_registry_key(keyname)) { - DEBUG(1, ("Failed to initialize registry key '%s'\n", keyname)); + + werr = init_registry_key(keyname); + if (!W_ERROR_IS_OK(werr)) { + DEBUG(1, ("Failed to initialize registry key '%s': %s\n", + keyname, dos_errstr(werr))); goto done; } + reghook_cache_init(); if (!reghook_cache_add(keyname, &smbconf_reg_ops)) { DEBUG(1, ("Failed to add smbconf reghooks to reghook cache\n")); -- cgit From 4b4306eb4a55ae1c705464e3220d963651ce9b91 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 14:18:06 +0200 Subject: registry: change reghook_cache_init() to return WERROR and use it in the callers. Michael (This used to be commit 2f4ca62dce50225d67ba8643afba4199e1845c5f) --- source3/registry/reg_init_smbconf.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index 871141c1fd..bfc85afb22 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -94,7 +94,13 @@ bool registry_init_smbconf(const char *keyname) goto done; } - reghook_cache_init(); + werr = reghook_cache_init(); + if (!W_ERROR_IS_OK(werr)) { + DEBUG(1, ("Failed to initialize the reghook cache: %s\n", + dos_errstr(werr))); + goto done; + } + if (!reghook_cache_add(keyname, &smbconf_reg_ops)) { DEBUG(1, ("Failed to add smbconf reghooks to reghook cache\n")); goto done; -- cgit From 80b6d7b1d66509162da04e143d42fdd35a4c61e5 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 14:55:49 +0200 Subject: registry: change reghook_cache_add() to return WERROR instead of bool Michael (This used to be commit e65a999989c97c4c7b0af5093e0e89583691e9a8) --- source3/registry/reg_init_smbconf.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index bfc85afb22..fafaf7952f 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -101,8 +101,10 @@ bool registry_init_smbconf(const char *keyname) goto done; } - if (!reghook_cache_add(keyname, &smbconf_reg_ops)) { - DEBUG(1, ("Failed to add smbconf reghooks to reghook cache\n")); + werr = reghook_cache_add(keyname, &smbconf_reg_ops); + if (!W_ERROR_IS_OK(werr)) { + DEBUG(1, ("Failed to add smbconf reghooks to reghook cache: " + "%s\n", dos_errstr(werr))); goto done; } -- cgit From 4ae2e8c7ba7f4bf12e83c68eacd9cb4c1b914be5 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 15:21:31 +0200 Subject: registry: refactor common part of registry initialization out. into a new function registry_init_common(). Michael (This used to be commit 5da52b95ac69e4abfbc44335df2447bec8f16e13) --- source3/registry/reg_init_smbconf.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index fafaf7952f..a05da854cf 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -80,10 +80,8 @@ bool registry_init_smbconf(const char *keyname) keyname = KEY_SMBCONF; } - werr = regdb_init(); + werr = registry_init_common(); if (!W_ERROR_IS_OK(werr)) { - DEBUG(1, ("Failed to initialize the registry: %s\n", - dos_errstr(werr))); goto done; } @@ -94,13 +92,6 @@ bool registry_init_smbconf(const char *keyname) goto done; } - werr = reghook_cache_init(); - if (!W_ERROR_IS_OK(werr)) { - DEBUG(1, ("Failed to initialize the reghook cache: %s\n", - dos_errstr(werr))); - goto done; - } - werr = reghook_cache_add(keyname, &smbconf_reg_ops); if (!W_ERROR_IS_OK(werr)) { DEBUG(1, ("Failed to add smbconf reghooks to reghook cache: " -- cgit From 6c66d5d0197e6b598e088e863aaaa29c7ca31db2 Mon Sep 17 00:00:00 2001 From: Michael Adam Date: Sun, 13 Apr 2008 15:25:47 +0200 Subject: registry: change registry_init_smbconf() to return WERROR instead of bool Michael (This used to be commit 7c343c60574cda091f59861fbcb2893aefb564e9) --- source3/registry/reg_init_smbconf.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'source3/registry/reg_init_smbconf.c') diff --git a/source3/registry/reg_init_smbconf.c b/source3/registry/reg_init_smbconf.c index a05da854cf..43a5be025d 100644 --- a/source3/registry/reg_init_smbconf.c +++ b/source3/registry/reg_init_smbconf.c @@ -67,10 +67,9 @@ done: * for use in places where not the whole registry is needed, * e.g. utils/net_conf.c and loadparm.c */ -bool registry_init_smbconf(const char *keyname) +WERROR registry_init_smbconf(const char *keyname) { WERROR werr; - bool ret = false; DEBUG(10, ("registry_init_smbconf called\n")); @@ -99,9 +98,7 @@ bool registry_init_smbconf(const char *keyname) goto done; } - ret = true; - done: regdb_close(); - return ret; + return werr; } -- cgit