svn commit: samba r3367 - in branches/SAMBA_4_0/source: lib/registry/common lib/registry/reg_backend_ldb lib/registry/reg_backend_rpc rpc_server/winreg

jelmer at samba.org jelmer at samba.org
Fri Oct 29 11:45:00 GMT 2004


Author: jelmer
Date: 2004-10-29 11:44:59 +0000 (Fri, 29 Oct 2004)
New Revision: 3367

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=3367

Log:
More registry updates. 
Add support flush_key and close_hive.

Modified:
   branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c
   branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c
   branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c
   branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c


Changeset:
Modified: branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c	2004-10-29 11:39:08 UTC (rev 3366)
+++ branches/SAMBA_4_0/source/lib/registry/common/reg_interface.c	2004-10-29 11:44:59 UTC (rev 3367)
@@ -157,6 +157,19 @@
 	return WERR_OK;
 }
 
+WERROR reg_close (struct registry_context *ctx)
+{
+	int i;
+	for (i = 0; i < ctx->num_hives; i++) {
+		if (ctx->hives[i]->functions->close_hive) {
+			ctx->hives[i]->functions->close_hive(ctx->hives[i]);
+		}
+	}
+	talloc_destroy(ctx);
+
+	return WERR_OK;
+}
+
 /* Open a registry file/host/etc */
 WERROR reg_import_hive(struct registry_context *h, const char *backend, const char *location, const char *credentials, const char *hivename)
 {
@@ -367,7 +380,8 @@
 
 	if(key->hive->functions->get_subkey_by_name) {
 		error = key->hive->functions->get_subkey_by_name(mem_ctx, key,name,subkey);
-		/* FIXME: Fall back to reg_open_key rather then get_subkey_by_index */
+	} else if(key->hive->functions->open_key) {
+		error = key->hive->functions->open_key(mem_ctx, key->hive, talloc_asprintf(mem_ctx, "%s\\%s", key->path, name), subkey);
 	} else if(key->hive->functions->get_subkey_by_index) {
 		for(i = 0; W_ERROR_IS_OK(error); i++) {
 			error = reg_key_get_subkey_by_index(mem_ctx, key, i, subkey);
@@ -589,9 +603,8 @@
 	return ret;
 }
 
-WERROR reg_save(struct registry_context *h, const char *location)
+WERROR reg_save (struct registry_context *ctx, const char *location)
 {
-	/* FIXME */	
 	return WERR_NOT_SUPPORTED;
 }
 
@@ -615,3 +628,17 @@
 	SAFE_FREE(parent_name);
 	return error;
 }
+
+WERROR reg_key_flush(struct registry_key *key)
+{
+	if (!key) {
+		return WERR_INVALID_PARAM;
+	}
+	
+	if (key->hive->functions->flush_key) {
+		return key->hive->functions->flush_key(key);
+	}
+	
+	/* No need for flushing, apparently */
+	return WERR_OK;
+}

Modified: branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c	2004-10-29 11:39:08 UTC (rev 3366)
+++ branches/SAMBA_4_0/source/lib/registry/reg_backend_ldb/reg_backend_ldb.c	2004-10-29 11:44:59 UTC (rev 3367)
@@ -194,11 +194,18 @@
 	return WERR_OK;
 }
 
+static WERROR ldb_close_hive (struct registry_hive *hive)
+{
+	ldb_close (hive->backend_data);
+	return WERR_OK;
+}
+
 static struct registry_operations reg_backend_ldb = {
 	.name = "ldb",
 	.add_key = ldb_add_key,
 	.del_key = ldb_del_key,
 	.open_hive = ldb_open_hive,
+	.close_hive = ldb_close_hive,
 	.open_key = ldb_open_key,
 	.get_value_by_index = ldb_get_value_by_id,
 	.get_subkey_by_index = ldb_get_subkey_by_id,

Modified: branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c
===================================================================
--- branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c	2004-10-29 11:39:08 UTC (rev 3366)
+++ branches/SAMBA_4_0/source/lib/registry/reg_backend_rpc/reg_backend_rpc.c	2004-10-29 11:44:59 UTC (rev 3367)
@@ -97,6 +97,12 @@
 	return WERR_OK;
 }
 
+static WERROR rpc_close_hive (struct registry_hive *h)
+{
+	dcerpc_pipe_close(h->backend_data);
+	return WERR_OK;
+}
+
 static WERROR rpc_open_hive(TALLOC_CTX *mem_ctx, struct registry_hive *h, struct registry_key **k)
 {
 	NTSTATUS status;
@@ -373,6 +379,7 @@
 static struct registry_operations reg_backend_rpc = {
 	.name = "rpc",
 	.open_hive = rpc_open_hive,
+	.close_hive = rpc_close_hive,
 	.open_key = rpc_open_key,
 	.get_subkey_by_index = rpc_get_subkey_by_index,
 	.get_value_by_index = rpc_get_value_by_index,

Modified: branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c	2004-10-29 11:39:08 UTC (rev 3366)
+++ branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c	2004-10-29 11:44:59 UTC (rev 3367)
@@ -27,7 +27,7 @@
 
 static void winreg_destroy_hive(struct dcesrv_connection *c, struct dcesrv_handle *h)
 {
-	/* FIXME: Free ((struct registry_key *)h->data)->root->hive->reg_ctx */
+	reg_close(((struct registry_key *)h->data)->hive->reg_ctx);
 }
 
 static WERROR winreg_openhive (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, const char *hivename, struct policy_handle **outh)
@@ -208,7 +208,12 @@
 static WERROR winreg_FlushKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
 		       struct winreg_FlushKey *r)
 {
-	return WERR_NOT_SUPPORTED;
+	struct dcesrv_handle *h;
+
+	h = dcesrv_handle_fetch(dce_call->conn, r->in.handle, HTYPE_REGKEY);
+	DCESRV_CHECK_HANDLE(h);
+
+	return reg_key_flush(h->data);
 }
 
 



More information about the samba-cvs mailing list