summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorMichael Adam <obnox@samba.org>2008-02-19 01:22:32 +0100
committerMichael Adam <obnox@samba.org>2008-02-19 09:09:05 +0100
commit6d963a807d4798749fdfd228f30e28c67debee7f (patch)
tree91e2af6a20947da99a12ab25acab55c8993c97f3 /source3
parent9e9cd40a7d755b19ad70011409d213c9e9013fe6 (diff)
downloadsamba-6d963a807d4798749fdfd228f30e28c67debee7f.tar.gz
samba-6d963a807d4798749fdfd228f30e28c67debee7f.tar.bz2
samba-6d963a807d4798749fdfd228f30e28c67debee7f.zip
Use linbet_conf code in loadparm's registry handling.
This replaces the original hand-written tdb code, now that the linking dependencies have been significantly reduced. Michael (This used to be commit d08a3a195718725228bbafa61fd4f0be8aafb43f)
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in58
-rw-r--r--source3/param/loadparm.c261
2 files changed, 74 insertions, 245 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index cebe49b510..920d56bec0 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -358,7 +358,7 @@ READLINE_OBJ = lib/readline.o
POPT_LIB_OBJ = lib/popt_common.o
PARAM_WITHOUT_REG_OBJ = dynconfig.o param/loadparm.o param/params.o param/util.o lib/sharesec.o lib/ldap_debug_handler.o
-PARAM_REG_ADD_OBJ = $(UTIL_REG_API_OBJ)
+PARAM_REG_ADD_OBJ = $(REG_API_OBJ) $(LIBNET_CONF_OBJ) $(REGOBJS_OBJ) $(PRIVILEGES_BASIC_OBJ)
PARAM_OBJ = $(PARAM_WITHOUT_REG_OBJ) $(PARAM_REG_ADD_OBJ)
KRBCLIENT_OBJ = libads/kerberos.o libads/ads_status.o
@@ -466,7 +466,8 @@ REGISTRY_OBJ = registry/reg_init_full.o registry/reg_cachehook.o \
$(REGISTRY_BACKENDS) \
$(UTIL_REG_API_OBJ) \
$(REG_INIT_SMBCONF_OBJ) \
- $(REGFIO_OBJ)
+ $(REGFIO_OBJ) \
+ $(REGOBJS_OBJ)
# objects to be used when not all of the registry code should be
# loaded but only the portion needed by reg_api, typically for
@@ -532,19 +533,23 @@ RPC_SERVER_OBJ = @RPC_STATIC@ $(RPC_PIPE_OBJ)
RPC_PARSE_OBJ = $(RPC_PARSE_OBJ2) \
rpc_parse/parse_spoolss.o \
rpc_parse/parse_eventlog.o rpc_parse/parse_buffer.o \
- rpc_parse/parse_ntsvcs.o rpc_parse/parse_svcctl.o $(REGOBJS_OBJ)
+ rpc_parse/parse_ntsvcs.o rpc_parse/parse_svcctl.o
RPC_CLIENT_OBJ = rpc_client/cli_pipe.o
LOCKING_OBJ = locking/locking.o locking/brlock.o locking/posix.o
+PRIVILEGES_BASIC_OBJ = lib/privileges_basic.o
+
+PRIVILEGES_OBJ = lib/privileges.o
+
PASSDB_GET_SET_OBJ = passdb/pdb_get_set.o
PASSDB_OBJ = $(PASSDB_GET_SET_OBJ) passdb/passdb.o passdb/pdb_interface.o \
passdb/util_wellknown.o passdb/util_builtin.o passdb/pdb_compat.o \
passdb/util_unixsids.o passdb/lookup_sid.o \
passdb/login_cache.o @PDB_STATIC@ \
- lib/account_pol.o lib/privileges.o lib/privileges_basic.o \
+ lib/account_pol.o $(PRIVILEGES_OBJ) \
lib/util_nscd.o lib/winbind_util.o
DEVEL_HELP_WEIRD_OBJ = modules/weird.o
@@ -556,7 +561,7 @@ GROUPDB_OBJ = groupdb/mapping.o groupdb/mapping_tdb.o groupdb/mapping_ldb.o
PROFILE_OBJ = profile/profile.o
PROFILES_OBJ = utils/profiles.o \
- $(REGFIO_OBJ) $(REGOBJS_OBJ) $(ERRORMAP_OBJ) \
+ $(ERRORMAP_OBJ) \
$(RPC_PARSE_OBJ1) $(PARAM_OBJ) $(LIBSAMBA_OBJ) \
$(DOSERR_OBJ) $(LIB_OBJ) $(LIB_DUMMY_OBJ) \
$(POPT_LIB_OBJ) $(SECRETS_OBJ)
@@ -656,7 +661,8 @@ SMBD_OBJ_BASE = $(PARAM_WITHOUT_REG_OBJ) $(SMBD_OBJ_SRV) $(LIBSMB_OBJ) \
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) \
$(LIBADS_OBJ) $(KRBCLIENT_OBJ) $(LIBADS_SERVER_OBJ) \
$(REGISTRY_OBJ) $(POPT_LIB_OBJ) $(BUILDOPT_OBJ) \
- $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) @LIBWBCLIENT_STATIC@
+ $(SMBLDAP_OBJ) $(LDB_OBJ) $(LIBNET_OBJ) @LIBWBCLIENT_STATIC@ \
+ $(PRIVILEGES_BASIC_OBJ)
PRINTING_OBJ = printing/pcap.o printing/print_svid.o printing/print_aix.o \
printing/print_cups.o printing/print_generic.o \
@@ -714,7 +720,8 @@ SMBTREE_OBJ = utils/smbtree.o $(PARAM_OBJ) \
TESTPARM_OBJ = utils/testparm.o \
$(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
- $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ)
+ $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) \
+ $(ERRORMAP_OBJ)
PASSWD_UTIL_OBJ = utils/passwd_util.o
@@ -722,7 +729,7 @@ SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \
$(PARAM_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
$(GROUPDB_OBJ) $(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) \
$(POPT_LIB_OBJ) $(SMBLDAP_OBJ) $(RPC_PARSE_OBJ) \
- $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ)
+ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ)
PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ \
$(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \
@@ -796,9 +803,11 @@ LIBNETAPI_OBJ = $(LIBNETAPI_OBJ1) $(LIBNET_OBJ) \
$(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
$(LIBMSRPC_OBJ) $(LIBMSRPC_GEN_OBJ) $(RPC_PARSE_OBJ) \
$(SECRETS_OBJ) $(PASSDB_OBJ) @LIBWBCLIENT_STATIC@ $(SMBLDAP_OBJ) $(GROUPDB_OBJ) $(LDB_OBJ) \
- $(DCUTIL_OBJ) $(LIBADS_OBJ)
+ $(DCUTIL_OBJ) $(LIBADS_OBJ) $(REGOBJS_OBJ) $(PRIVILEGES_BASIC_OBJ)
+
+LIBNET_CONF_OBJ = libnet/libnet_conf.o
-LIBNET_OBJ = libnet/libnet_conf.o libnet/libnet_join.o \
+LIBNET_OBJ = $(LIBNET_CONF_OBJ) libnet/libnet_join.o \
librpc/gen_ndr/ndr_libnet_join.o
NET_OBJ1 = utils/net.o utils/net_ads.o utils/net_domain.o utils/net_help.o \
@@ -821,7 +830,8 @@ NET_OBJ = $(NET_OBJ1) $(PARAM_WITHOUT_REG_OBJ) $(SECRETS_OBJ) $(LIBSMB_OBJ) \
$(AFS_OBJ) $(AFS_SETTOKEN_OBJ) $(READLINE_OBJ) \
$(LDB_OBJ) $(LIBGPO_OBJ) @BUILD_INIPARSER@ $(DISPLAY_SEC_OBJ) \
$(REG_API_OBJ) $(DISPLAY_DSDCINFO_OBJ) @LIBNETAPI_STATIC@ $(LIBNET_OBJ) \
- $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
+ $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ $(REGOBJS_OBJ) \
+ $(PRIVILEGES_BASIC_OBJ)
CUPS_OBJ = client/smbspool.o $(PARAM_OBJ) $(LIBSMB_OBJ) \
$(LIB_NONSMBD_OBJ) $(KRBCLIENT_OBJ) $(SECRETS_OBJ) $(POPT_LIB_OBJ)
@@ -841,7 +851,8 @@ CIFS_UMOUNT_OBJ = client/umount.cifs.o
CIFS_SPNEGO_OBJ = client/cifs.spnego.o
NMBLOOKUP_OBJ = utils/nmblookup.o $(PARAM_OBJ) $(LIBNMB_OBJ) $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) \
- $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ)
+ $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ) \
+ $(ERRORMAP_OBJ)
SMBTORTURE_OBJ1 = torture/torture.o torture/nbio.o torture/scanner.o torture/utable.o \
torture/denytest.o torture/mangle_test.o
@@ -868,7 +879,7 @@ PDBTEST_OBJ = torture/pdbtest.o $(PARAM_OBJ) $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
VFSTEST_OBJ = torture/cmd_vfs.o torture/vfstest.o $(SMBD_OBJ_BASE) $(READLINE_OBJ)
-SMBICONV_OBJ = $(PARAM_OBJ) torture/smbiconv.o $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(DOSERR_OBJ)
+SMBICONV_OBJ = $(PARAM_OBJ) torture/smbiconv.o $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) $(SECRETS_OBJ) $(LIBSAMBA_OBJ) $(DOSERR_OBJ) $(RPC_PARSE_OBJ1) $(ERRORMAP_OBJ)
LOG2PCAP_OBJ = utils/log2pcaphex.o
@@ -889,19 +900,19 @@ SMBCQUOTAS_OBJ = utils/smbcquotas.o $(LIBSMB_OBJ) $(KRBCLIENT_OBJ) \
EVTLOGADM_OBJ0 = utils/eventlogadm.o
-EVTLOGADM_OBJ = $(EVTLOGADM_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(REGOBJS_OBJ) \
+EVTLOGADM_OBJ = $(EVTLOGADM_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
$(ERRORMAP_OBJ) $(RPC_PARSE_OBJ1) $(LIBSAMBA_OBJ) $(DOSERR_OBJ) \
$(SECRETS_OBJ) \
- registry/reg_eventlog.o rpc_server/srv_eventlog_lib.o registry/reg_util.o \
- registry/reg_backend_db.o
+ registry/reg_eventlog.o rpc_server/srv_eventlog_lib.o
SHARESEC_OBJ0 = utils/sharesec.o
-SHARESEC_OBJ = $(SHARESEC_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) $(REGOBJS_OBJ) \
+SHARESEC_OBJ = $(SHARESEC_OBJ0) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
$(ERRORMAP_OBJ) $(RPC_PARSE_OBJ1) $(LIBSAMBA_OBJ) $(DOSERR_OBJ) \
$(POPT_LIB_OBJ) $(SECRETS_OBJ)
TALLOCTORT_OBJ = @tallocdir@/testsuite.o $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
- $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(LIBSAMBA_OBJ) $(SECRETS_OBJ)
+ $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(LIBSAMBA_OBJ) $(SECRETS_OBJ) \
+ $(ERRORMAP_OBJ)
REPLACETORT_OBJ = lib/replace/test/testsuite.o \
lib/replace/test/os2_delete.o \
@@ -911,7 +922,8 @@ REPLACETORT_OBJ = lib/replace/test/testsuite.o \
NDRDUMP_OBJ = librpc/tools/ndrdump.o \
$(PARAM_OBJ) $(LIBNDR_GEN_OBJ) \
$(LIBSAMBA_OBJ) $(LIB_NONSMBD_OBJ) $(POPT_LIB_OBJ) \
- $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(SECRETS_OBJ)
+ $(RPC_PARSE_OBJ1) $(DOSERR_OBJ) $(SECRETS_OBJ) \
+ $(ERRORMAP_OBJ)
DEBUG2HTML_OBJ = utils/debug2html.o utils/debugparse.o
@@ -924,7 +936,7 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) $(LIBNDR_OBJ) $(LIBNDR_GEN_OBJ) \
$(LIBMSRPC_OBJ) \
$(LIB_WITH_PROTO_OBJ) \
$(RPC_PIPE_OBJ) $(RPC_PARSE_OBJ) $(KRBCLIENT_OBJ) \
- $(AUTH_OBJ) $(PARAM_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \
+ $(AUTH_OBJ) $(PARAM_WITHOUT_REG_OBJ) $(LOCKING_OBJ) $(SECRETS_OBJ) \
$(PRINTING_OBJ) $(PRINTBACKEND_OBJ) $(OPLOCK_OBJ) $(NOTIFY_OBJ) \
$(PASSDB_OBJ) $(GROUPDB_OBJ) \
$(READLINE_OBJ) $(PROFILE_OBJ) $(LIBADS_OBJ) $(LIBADS_SERVER_OBJ) \
@@ -935,7 +947,8 @@ PROTO_OBJ = $(SMBD_OBJ_MAIN) $(LIBNDR_OBJ) $(LIBNDR_GEN_OBJ) \
$(IDMAP_OBJ) libsmb/spnego.o $(PASSCHANGE_OBJ) $(RPC_UNIXINFO_OBJ) \
$(RPC_NTSVCS_OBJ) $(RPC_INITSHUTDOWN_OBJ) \
utils/passwd_util.o $(LIBGPO_OBJ) $(NSS_INFO_OBJ) \
- $(RPCCLIENT_NDR_OBJ) $(DISPLAY_DSDCINFO_OBJ)
+ $(RPCCLIENT_NDR_OBJ) $(DISPLAY_DSDCINFO_OBJ) \
+ $(PRIVILEGES_BASIC_OBJ)
WINBIND_WINS_NSS_OBJ = nsswitch/wins.o $(PARAM_OBJ) \
$(LIBSMB_OBJ) $(LIB_NONSMBD_OBJ) $(NSSWINS_OBJ) $(KRBCLIENT_OBJ) $(SECRETS_OBJ)
@@ -988,7 +1001,8 @@ WINBINDD_OBJ = \
WBINFO_OBJ = nsswitch/wbinfo.o $(LIBSAMBA_OBJ) $(PARAM_OBJ) $(LIB_NONSMBD_OBJ) \
$(SECRETS_OBJ) $(POPT_LIB_OBJ) $(AFS_SETTOKEN_OBJ) $(RPC_PARSE_OBJ1) \
- $(DOSERR_OBJ) lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@
+ $(DOSERR_OBJ) lib/winbind_util.o $(WBCOMMON_OBJ) @LIBWBCLIENT_STATIC@ \
+ $(ERRORMAP_OBJ)
WINBIND_NSS_OBJ = $(WBCOMMON_OBJ) $(LIBREPLACE_OBJ) @WINBIND_NSS_EXTRA_OBJS@
diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c
index 29de336df5..4d067af5a5 100644
--- a/source3/param/loadparm.c
+++ b/source3/param/loadparm.c
@@ -52,6 +52,7 @@
*/
#include "includes.h"
+#include "libnet/libnet.h"
bool in_client = False; /* Not in the client by default */
bool bLoaded = False;
@@ -71,7 +72,8 @@ extern userdom_struct current_user_info;
#define HOMES_NAME "homes"
#endif
-static int regdb_last_seqnum = 0;
+static uint64_t conf_last_seqnum = 0;
+static struct libnet_conf_ctx *conf_ctx = NULL;
#define CONFIG_BACKEND_FILE 0
#define CONFIG_BACKEND_REGISTRY 1
@@ -3378,241 +3380,46 @@ bool service_ok(int iService)
}
/*
- * lp_regdb_open - regdb helper function
- *
- * this should be considered an interim solution that becomes
- * superfluous once the registry code has been rewritten
- * do allow use of the tdb portion of the registry alone.
- *
- * in the meanwhile this provides a lean access
- * to the registry globals.
- */
-
-static struct tdb_wrap *lp_regdb_open(void)
-{
- struct tdb_wrap *reg_tdb = NULL;
- const char *vstring = "INFO/version";
- uint32 vers_id;
-
- become_root();
- reg_tdb = tdb_wrap_open(NULL, state_path("registry.tdb"), 0,
- REG_TDB_FLAGS, O_RDWR, 0600);
- unbecome_root();
- if (!reg_tdb) {
- DEBUG(1, ("lp_regdb_open: failed to open %s: %s\n",
- state_path("registry.tdb"), strerror(errno)));
- goto done;
- }
- else {
- DEBUG(10, ("lp_regdb_open: reg tdb opened.\n"));
- }
-
- vers_id = tdb_fetch_int32(reg_tdb->tdb, vstring);
- if (vers_id != REGVER_V1) {
- DEBUG(10, ("lp_regdb_open: INFO: registry tdb %s has wrong "
- "INFO/version (got %d, expected %d)\n",
- state_path("registry.tdb"), vers_id, REGVER_V1));
- /* this is apparently not implemented in the tdb */
- }
-
-done:
- return reg_tdb;
-}
-
-/*
* process_registry_globals
- *
- * this is the interim version of process_registry globals
- *
- * until we can do it as we would like using the api and only
- * using the tdb portion of the registry (see below),
- * this just provides the needed functionality of regdb_fetch_values
- * and regdb_unpack_values, circumventing any fancy stuff, to
- * give us access to the registry globals.
*/
static bool process_registry_globals(bool (*pfunc)(const char *, const char *))
{
- bool ret = False;
- struct tdb_wrap *reg_tdb = NULL;
- WERROR err;
- char *keystr;
- TDB_DATA data;
- /* vars for the tdb unpack loop */
- int len = 0;
- int i;
- int buflen;
- uint8 *buf;
- uint32 type;
- uint32 size;
- uint32 num_values = 0;
- uint8 *data_p;
- char * valstr;
- struct registry_value *value = NULL;
-
- ZERO_STRUCT(data);
-
- reg_tdb = lp_regdb_open();
- if (!reg_tdb) {
- DEBUG(1, ("Error opening the registry!\n"));
- goto done;
- }
-
- /* reg_tdb is from now on used as talloc ctx.
- * freeing it closes the tdb (if refcount is 0) */
-
- keystr = talloc_asprintf(reg_tdb,"%s/%s/%s", REG_VALUE_PREFIX,
- KEY_SMBCONF, GLOBAL_NAME);
- normalize_dbkey(keystr);
-
- DEBUG(10, ("process_registry_globals: fetching key '%s'\n",
- keystr));
-
- data = tdb_fetch_bystring(reg_tdb->tdb, keystr);
- if (!data.dptr) {
- ret = True;
- goto done;
- }
-
- buf = data.dptr;
- buflen = data.dsize;
-
- /* unpack number of values */
- len = tdb_unpack(buf, buflen, "d", &num_values);
- DEBUG(10, ("process_registry_globals: got %d values from tdb\n",
- num_values));
-
- /* unpack the values */
- for (i=0; i < num_values; i++) {
- fstring valname;
- type = REG_NONE;
- size = 0;
- data_p = NULL;
- len += tdb_unpack(buf+len, buflen-len, "fdB",
- valname,
- &type,
- &size,
- &data_p);
- if (registry_smbconf_valname_forbidden(valname)) {
- DEBUG(10, ("process_registry_globals: Ignoring "
- "parameter '%s' in registry.\n", valname));
- continue;
- }
- DEBUG(10, ("process_registry_globals: got value '%s'\n",
- valname));
- if (size && data_p) {
- err = registry_pull_value(reg_tdb,
- &value,
- (enum winreg_Type)type,
- data_p,
- size,
- size);
- SAFE_FREE(data_p);
- if (!W_ERROR_IS_OK(err)) {
- goto done;
- }
- switch(type) {
- case REG_DWORD:
- valstr = talloc_asprintf(reg_tdb, "%d",
- value->v.dword);
- pfunc(valname, valstr);
- break;
- case REG_SZ:
- pfunc(valname, value->v.sz.str);
- break;
- default:
- /* ignore other types */
- break;
- }
+ WERROR werr;
+ char **param_names;
+ char **param_values;
+ uint32_t num_params;
+ uint32_t count;
+ TALLOC_CTX *mem_ctx = talloc_stackframe();
+ bool ret = false;
+
+ if (conf_ctx == NULL) {
+ /* first time */
+ werr = libnet_conf_open(NULL, &conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ goto done;
}
}
- ret = pfunc("registry shares", "yes");
- regdb_last_seqnum = tdb_get_seqnum(reg_tdb->tdb);
-
-done:
- TALLOC_FREE(reg_tdb);
- SAFE_FREE(data.dptr);
- return ret;
-}
-
-#if 0
-/*
- * this is process_registry_globals as it _should_ be (roughly)
- * using the reg_api functions...
- *
- * We are *not* currently doing it like this due to the large
- * linker dependecies of the registry code (see above).
- */
-static bool process_registry_globals(bool (*pfunc)(const char *, const char *))
-{
- bool ret = False;
- TALLOC_CTX *ctx = NULL;
- char *regpath = NULL;
- WERROR werr = WERR_OK;
- struct registry_key *key = NULL;
- struct registry_value *value = NULL;
- char *valname = NULL;
- char *valstr = NULL;
- uint32 idx = 0;
- NT_USER_TOKEN *token = NULL;
-
- ctx = talloc_init("process_registry_globals");
- if (!ctx) {
- smb_panic("Failed to create talloc context!");
- }
-
- if (!registry_init_smbconf()) {
- DEBUG(1, ("Error initializing the registry.\n"));
- goto done;
- }
-
- werr = ntstatus_to_werror(registry_create_admin_token(ctx, &token));
+ werr = libnet_conf_get_share(mem_ctx, conf_ctx, GLOBAL_NAME,
+ &num_params, &param_names, &param_values);
if (!W_ERROR_IS_OK(werr)) {
- DEBUG(1, ("Error creating admin token: %s\n",dos_errstr(werr)));
goto done;
}
- regpath = talloc_asprintf(ctx,"%s\\%s", KEY_SMBCONF, GLOBAL_NAME);
- werr = reg_open_path(ctx, regpath, REG_KEY_READ, token, &key);
- if (!W_ERROR_IS_OK(werr)) {
- DEBUG(1, ("Registry smbconf global section does not exist.\n"));
- DEBUGADD(1, ("Error opening registry path '%s\\%s: %s\n",
- KEY_SMBCONF, GLOBAL_NAME, dos_errstr(werr)));
- goto done;
- }
-
- for (idx = 0;
- W_ERROR_IS_OK(werr = reg_enumvalue(ctx, key, idx, &valname,
- &value));
- idx++)
- {
- DEBUG(5, ("got global registry parameter '%s'\n", valname));
- switch(value->type) {
- case REG_DWORD:
- valstr = talloc_asprintf(ctx, "%d", value->v.dword);
- pfunc(valname, valstr);
- TALLOC_FREE(valstr);
- break;
- case REG_SZ:
- pfunc(valname, value->v.sz.str);
- break;
- default:
- /* ignore other types */
- break;
+ for (count = 0; count < num_params; count++) {
+ ret = pfunc(param_names[count], param_values[count]);
+ if (ret != true) {
+ goto done;
}
- TALLOC_FREE(value);
- TALLOC_FREE(valstr);
}
ret = pfunc("registry shares", "yes");
-
- regdb_last_seqnum = regdb_get_seqnum();
+ conf_last_seqnum = libnet_conf_get_seqnum(conf_ctx, NULL, NULL);
done:
- talloc_destroy(ctx);
+ TALLOC_FREE(mem_ctx);
return ret;
}
-#endif /* if 0 */
static struct file_lists {
struct file_lists *next;
@@ -3675,17 +3482,25 @@ bool lp_config_backend_is_registry(void)
bool lp_file_list_changed(void)
{
struct file_lists *f = file_lists;
- struct tdb_wrap *reg_tdb = NULL;
DEBUG(6, ("lp_file_list_changed()\n"));
if (lp_config_backend() == CONFIG_BACKEND_REGISTRY) {
- reg_tdb = lp_regdb_open();
- if (reg_tdb && (regdb_last_seqnum != tdb_get_seqnum(reg_tdb->tdb)))
+ if (conf_ctx == NULL) {
+ WERROR werr;
+ werr = libnet_conf_open(NULL, &conf_ctx);
+ if (!W_ERROR_IS_OK(werr)) {
+ DEBUG(0, ("error opening configuration: %s\n",
+ dos_errstr(werr)));
+ return false;
+ }
+ }
+ if (conf_last_seqnum !=
+ libnet_conf_get_seqnum(conf_ctx, NULL, NULL))
{
- DEBUGADD(6, ("regdb seqnum changed: old = %d, new = %d\n",
- regdb_last_seqnum, tdb_get_seqnum(reg_tdb->tdb)));
- TALLOC_FREE(reg_tdb);
+ DEBUGADD(6, ("regdb seqnum changed: old = %lu, "
+ "new = %lu\n", conf_last_seqnum,
+ libnet_conf_get_seqnum(conf_ctx, NULL, NULL)));
return true;
} else {
/*