svn commit: samba r24219 - in branches/4.0-regwrite: . source/lib/registry source/lib/registry/tests source/torture/local

jelmer at samba.org jelmer at samba.org
Sat Aug 4 18:16:29 GMT 2007


Author: jelmer
Date: 2007-08-04 18:16:25 +0000 (Sat, 04 Aug 2007)
New Revision: 24219

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

Log:
Start working on global registry backend tests.
Added:
   branches/4.0-regwrite/source/lib/registry/tests/registry.c
Modified:
   branches/4.0-regwrite/
   branches/4.0-regwrite/source/lib/registry/hive.c
   branches/4.0-regwrite/source/lib/registry/hive.h
   branches/4.0-regwrite/source/lib/registry/interface.c
   branches/4.0-regwrite/source/lib/registry/local.c
   branches/4.0-regwrite/source/lib/registry/registry.h
   branches/4.0-regwrite/source/torture/local/config.mk


Changeset:

Property changes on: branches/4.0-regwrite
___________________________________________________________________
Name: bzr:revision-info
   - timestamp: Wed 2007-06-13 02:13:44.184000015 +0200
committer: Jelmer Vernooij <jelmer at samba.org>
properties: 
	branch-nick: 4.0-regwrite
	rebase-of: jelmer at samba.org-20070613001344-qkqechdlu867mozv

   + timestamp: Wed 2007-06-13 22:53:58.466000080 +0200
committer: Jelmer Vernooij <jelmer at samba.org>
properties: 
	branch-nick: 4.0-regwrite
	rebase-of: jelmer at samba.org-20070613205358-bw2nnemz6ringkd0

Name: bzr:file-ids
   - 
   + source/lib/registry/tests/registry.c	registry.c-20070613193046-9w6vxztx0uea8a0p-1

Name: bzr:revision-id:v3-trunk0
   - 11140 jelmer at samba.org-20070113195019-yrx40nap220myng0-svn3-upgrade
11142 jelmer at samba.org-20070113195431-nshumfy5z00cpnaj-svn3-upgrade
11143 jelmer at samba.org-20070113195555-am0swaxzsoxp05p0-svn3-upgrade
11144 wilco at baanhofman.nl-20070114042604-b7pwqobkrbmlbp8p-svn3-upgrade
11145 wilco at baanhofman.nl-20070114042644-fa3gbnlhall7nkry-svn3-upgrade
11146 wilco at baanhofman.nl-20070114042712-7ueqyvk12ki1frc5-svn3-upgrade
11147 wilco at baanhofman.nl-20070114042737-pwu8etpcs7lmwsms-svn3-upgrade
11148 wilco at baanhofman.nl-20070114043501-7g3vsn55rrr643z6-svn3-upgrade
11149 wilco at baanhofman.nl-20070114061526-fpg1tdt07virwgdk-svn3-upgrade
11150 wilco at baanhofman.nl-20070114133602-npguwp5mbuki5qlp-svn3-upgrade
11151 wilco at baanhofman.nl-20070114134318-79ylyc0gzh43xhqi-svn3-upgrade
11152 wilco at baanhofman.nl-20070114151541-6adzkudwihn30k9j-svn3-upgrade
11153 wilco at baanhofman.nl-20070114152236-z6iel538oen6t8g5-svn3-upgrade
11154 jelmer at samba.org-20070115165838-maz3nw52ijbba8rk-svn3-upgrade
11155 jelmer at samba.org-20070115170435-ert8ib689dhntd4p-svn3-upgrade
11156 jelmer at samba.org-20070115235410-krfav3ng4in38pkx-svn3-upgrade
11157 jelmer at samba.org-20070116222757-087aafuwkwfw4267-svn3-upgrade
11158 jelmer at samba.org-20070117013853-mfuqd1o46k44pk2d-svn3-upgrade
11159 jelmer at samba.org-20070117022606-q54g08ss30u86c5c-svn3-upgrade
11160 jelmer at samba.org-20070124130019-zt6jr00m7df9ur0m-svn3-upgrade
11161 jelmer at samba.org-20070124131946-1yxj4h6b092i8fwd-svn3-upgrade
11162 jelmer at samba.org-20070207151808-znhiwyn0cbnuah7z-svn3-upgrade
11163 jelmer at samba.org-20070208155904-yfb5n63xvx2w0kzz-svn3-upgrade
11164 jelmer at samba.org-20070208161920-v3bjwnhfqy4f6j6y-svn3-upgrade
11165 jelmer at samba.org-20070208171835-589fvhzi1hilvnan-svn3-upgrade
11166 jelmer at samba.org-20070210150222-mpmii8ak5w25btqc-svn3-upgrade
11167 jelmer at samba.org-20070210150533-khwd9jnhx7sqsbo6-svn3-upgrade
11168 jelmer at samba.org-20070212210015-vfey1bupuo237gtc-svn3-upgrade
11169 jelmer at samba.org-20070212210746-y5062ss2jjup80c0-svn3-upgrade
11170 jelmer at samba.org-20070212235354-htyicol9aj4sbk5l-svn3-upgrade
11171 jelmer at samba.org-20070221113700-q1sittkxd3a14jwk-svn3-upgrade
11172 jelmer at samba.org-20070227013556-0w8d95jjxfp1dstd-svn3-upgrade
11173 jelmer at samba.org-20070304145613-pufes2hspszib9qv-svn3-upgrade
11174 jelmer at samba.org-20070304184755-bgf26jhs49nt7s2u-svn3-upgrade
11175 jelmer at samba.org-20070304184903-gwgc00z1gtbmb01b-svn3-upgrade
11176 jelmer at samba.org-20070418170502-zvjkpzrur94nevvb-svn3-upgrade
11177 jelmer at samba.org-20070423140539-m81ruspga5mhbmdm-svn3-upgrade
11178 jelmer at samba.org-20070423141635-i6jhd2syudt5vry4-svn3-upgrade
11179 jelmer at samba.org-20070601151710-8xoranh864s3h1rs-svn3-upgrade
11180 jelmer at samba.org-20070602140325-y0nwln7k17vaj14o-svn3-upgrade
11181 jelmer at samba.org-20070602152504-3bij55pqljimwz31-svn3-upgrade
11182 jelmer at samba.org-20070608215652-x6m0ejk982bzfp76-svn3-upgrade
11183 jelmer at samba.org-20070610222652-11vkd62zyiyk971l-svn3-upgrade
11184 jelmer at samba.org-20070610234755-tpxetmbupthvqfp8-svn3-upgrade
11185 jelmer at samba.org-20070611134928-pew4ydd6a0qnh3iv-svn3-upgrade
11186 jelmer at samba.org-20070612165440-1x7k1m3nb1bzbal0-svn3-upgrade
11187 jelmer at samba.org-20070612200826-54acueedast7lnmr-svn3-upgrade
11188 jelmer at samba.org-20070612202736-meu8bltye0rberi6-svn3-upgrade
11189 jelmer at samba.org-20070612231137-i8mbl1sgmcfkb5vn-svn3-upgrade
11190 jelmer at samba.org-20070612234637-779h4pffu0ybx829-svn3-upgrade
11191 jelmer at samba.org-20070613001344-qkqechdlu867mozv-svn3-upgrade

   + 11140 jelmer at samba.org-20070113195019-yrx40nap220myng0-svn3-upgrade
11142 jelmer at samba.org-20070113195431-nshumfy5z00cpnaj-svn3-upgrade
11143 jelmer at samba.org-20070113195555-am0swaxzsoxp05p0-svn3-upgrade
11144 wilco at baanhofman.nl-20070114042604-b7pwqobkrbmlbp8p-svn3-upgrade
11145 wilco at baanhofman.nl-20070114042644-fa3gbnlhall7nkry-svn3-upgrade
11146 wilco at baanhofman.nl-20070114042712-7ueqyvk12ki1frc5-svn3-upgrade
11147 wilco at baanhofman.nl-20070114042737-pwu8etpcs7lmwsms-svn3-upgrade
11148 wilco at baanhofman.nl-20070114043501-7g3vsn55rrr643z6-svn3-upgrade
11149 wilco at baanhofman.nl-20070114061526-fpg1tdt07virwgdk-svn3-upgrade
11150 wilco at baanhofman.nl-20070114133602-npguwp5mbuki5qlp-svn3-upgrade
11151 wilco at baanhofman.nl-20070114134318-79ylyc0gzh43xhqi-svn3-upgrade
11152 wilco at baanhofman.nl-20070114151541-6adzkudwihn30k9j-svn3-upgrade
11153 wilco at baanhofman.nl-20070114152236-z6iel538oen6t8g5-svn3-upgrade
11154 jelmer at samba.org-20070115165838-maz3nw52ijbba8rk-svn3-upgrade
11155 jelmer at samba.org-20070115170435-ert8ib689dhntd4p-svn3-upgrade
11156 jelmer at samba.org-20070115235410-krfav3ng4in38pkx-svn3-upgrade
11157 jelmer at samba.org-20070116222757-087aafuwkwfw4267-svn3-upgrade
11158 jelmer at samba.org-20070117013853-mfuqd1o46k44pk2d-svn3-upgrade
11159 jelmer at samba.org-20070117022606-q54g08ss30u86c5c-svn3-upgrade
11160 jelmer at samba.org-20070124130019-zt6jr00m7df9ur0m-svn3-upgrade
11161 jelmer at samba.org-20070124131946-1yxj4h6b092i8fwd-svn3-upgrade
11162 jelmer at samba.org-20070207151808-znhiwyn0cbnuah7z-svn3-upgrade
11163 jelmer at samba.org-20070208155904-yfb5n63xvx2w0kzz-svn3-upgrade
11164 jelmer at samba.org-20070208161920-v3bjwnhfqy4f6j6y-svn3-upgrade
11165 jelmer at samba.org-20070208171835-589fvhzi1hilvnan-svn3-upgrade
11166 jelmer at samba.org-20070210150222-mpmii8ak5w25btqc-svn3-upgrade
11167 jelmer at samba.org-20070210150533-khwd9jnhx7sqsbo6-svn3-upgrade
11168 jelmer at samba.org-20070212210015-vfey1bupuo237gtc-svn3-upgrade
11169 jelmer at samba.org-20070212210746-y5062ss2jjup80c0-svn3-upgrade
11170 jelmer at samba.org-20070212235354-htyicol9aj4sbk5l-svn3-upgrade
11171 jelmer at samba.org-20070221113700-q1sittkxd3a14jwk-svn3-upgrade
11172 jelmer at samba.org-20070227013556-0w8d95jjxfp1dstd-svn3-upgrade
11173 jelmer at samba.org-20070304145613-pufes2hspszib9qv-svn3-upgrade
11174 jelmer at samba.org-20070304184755-bgf26jhs49nt7s2u-svn3-upgrade
11175 jelmer at samba.org-20070304184903-gwgc00z1gtbmb01b-svn3-upgrade
11176 jelmer at samba.org-20070418170502-zvjkpzrur94nevvb-svn3-upgrade
11177 jelmer at samba.org-20070423140539-m81ruspga5mhbmdm-svn3-upgrade
11178 jelmer at samba.org-20070423141635-i6jhd2syudt5vry4-svn3-upgrade
11179 jelmer at samba.org-20070601151710-8xoranh864s3h1rs-svn3-upgrade
11180 jelmer at samba.org-20070602140325-y0nwln7k17vaj14o-svn3-upgrade
11181 jelmer at samba.org-20070602152504-3bij55pqljimwz31-svn3-upgrade
11182 jelmer at samba.org-20070608215652-x6m0ejk982bzfp76-svn3-upgrade
11183 jelmer at samba.org-20070610222652-11vkd62zyiyk971l-svn3-upgrade
11184 jelmer at samba.org-20070610234755-tpxetmbupthvqfp8-svn3-upgrade
11185 jelmer at samba.org-20070611134928-pew4ydd6a0qnh3iv-svn3-upgrade
11186 jelmer at samba.org-20070612165440-1x7k1m3nb1bzbal0-svn3-upgrade
11187 jelmer at samba.org-20070612200826-54acueedast7lnmr-svn3-upgrade
11188 jelmer at samba.org-20070612202736-meu8bltye0rberi6-svn3-upgrade
11189 jelmer at samba.org-20070612231137-i8mbl1sgmcfkb5vn-svn3-upgrade
11190 jelmer at samba.org-20070612234637-779h4pffu0ybx829-svn3-upgrade
11191 jelmer at samba.org-20070613001344-qkqechdlu867mozv-svn3-upgrade
11192 jelmer at samba.org-20070613205358-bw2nnemz6ringkd0-svn3-upgrade


Modified: branches/4.0-regwrite/source/lib/registry/hive.c
===================================================================
--- branches/4.0-regwrite/source/lib/registry/hive.c	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/hive.c	2007-08-04 18:16:25 UTC (rev 24219)
@@ -78,3 +78,11 @@
 {
 	return key->ops->del_key(key, name);
 }
+
+_PUBLIC_ WERROR hive_get_key_by_name(TALLOC_CTX *mem_ctx,
+							   const struct hive_key *key, const char *name, 
+							   struct hive_key **subkey)
+{
+	return key->ops->get_key_by_name(mem_ctx, key, name, 
+									 subkey);
+}

Modified: branches/4.0-regwrite/source/lib/registry/hive.h
===================================================================
--- branches/4.0-regwrite/source/lib/registry/hive.h	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/hive.h	2007-08-04 18:16:25 UTC (rev 24219)
@@ -150,6 +150,9 @@
 						 const char *name, const char *classname, struct security_descriptor *desc,
 						 struct hive_key **key);
 _PUBLIC_ WERROR hive_key_del(const struct hive_key *key, const char *name);
+_PUBLIC_ WERROR hive_get_key_by_name(TALLOC_CTX *mem_ctx,
+							   const struct hive_key *key, const char *name, 
+							   struct hive_key **subkey);
 
 
 /* Individual backends */

Modified: branches/4.0-regwrite/source/lib/registry/interface.c
===================================================================
--- branches/4.0-regwrite/source/lib/registry/interface.c	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/interface.c	2007-08-04 18:16:25 UTC (rev 24219)
@@ -63,7 +63,8 @@
 {
 	int i;
 	for (i = 0; reg_predefined_keys[i].name; i++) {
-		if (reg_predefined_keys[i].handle == hkey) return reg_predefined_keys[i].name;
+		if (reg_predefined_keys[i].handle == hkey) 
+			return reg_predefined_keys[i].name;
 	}
 
 	return NULL;
@@ -84,7 +85,7 @@
 }
 
 /** Get predefined key by id. */
-_PUBLIC_ WERROR reg_get_predefined_key(struct registry_context *ctx, 
+_PUBLIC_ WERROR reg_get_predefined_key(const struct registry_context *ctx, 
 									   uint32_t hkey, struct registry_key **key)
 {
 	return ctx->ops->get_predefined_key(ctx, hkey, key);

Modified: branches/4.0-regwrite/source/lib/registry/local.c
===================================================================
--- branches/4.0-regwrite/source/lib/registry/local.c	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/local.c	2007-08-04 18:16:25 UTC (rev 24219)
@@ -37,12 +37,15 @@
 		struct hive_key *key;
 		struct mountpoint *prev, *next;
 	} *mountpoints;
+
+	struct auth_session_info *session_info; 
+	struct cli_credentials *credentials;
 };
 
 struct local_key {
 	struct registry_key global;
 	struct reg_key_path path;
-	struct hive_key hive;
+	struct hive_key *hive_key;
 };
 
 WERROR reg_mount_hive(struct registry_context *ctx, struct reg_key_path *path, 
@@ -57,13 +60,27 @@
 	char *orig = strdup(path),
 		 *curbegin = orig, 
 		 *curend = strchr(path, '\\');
-	struct registry_key *curkey = parent;
+	struct local_key *local_parent = talloc_get_type(parent, struct local_key),
+					 *local_key;
+	struct hive_key *curkey = local_parent->hive_key;
 	WERROR error;
+	const char **elements = NULL;
+	int el;
 
-	while (curbegin && *curbegin) {
+	elements = talloc_array(mem_ctx, const char *, 
+						str_list_length(local_parent->path.elements) + 1);
+	for (el = 0; local_parent->path.elements[el]; el++) {
+		elements[el] = local_parent->path.elements[el];
+	}
+	elements[el] = NULL;
+
+	while (curbegin != NULL && *curbegin) {
 		if (curend != NULL)
 			*curend = '\0';
-		error = reg_open_key(mem_ctx, curkey, curbegin, &curkey);
+		elements = talloc_realloc(mem_ctx, elements, const char *, el+2);
+		elements[el] = talloc_strdup(elements, curbegin);
+		el++;
+		error = hive_get_key_by_name(mem_ctx, curkey, curbegin, &curkey);
 		if (!W_ERROR_IS_OK(error)) {
 			SAFE_FREE(orig);
 			return error;
@@ -75,14 +92,48 @@
 	}
 	SAFE_FREE(orig);
 
-	*result = curkey;
-		
+	local_key->global.context = talloc_reference(local_key, 
+												 local_parent->global.context);
+	local_key->hive_key = curkey;
+	local_key->path.predefined_key = local_parent->path.predefined_key;
+	local_key->path.elements = talloc_steal(local_key, elements);
+
+	*result = (struct registry_key *)local_key;
+	
 	return WERR_OK;
 }
 
+WERROR local_get_predefined_key (struct registry_context *ctx, 
+	  uint32_t key_id, struct registry_key **key) 
+{	
+	struct registry_local *rctx = talloc_get_type(ctx, struct registry_local);
+	struct local_key *local_key;
+	struct mountpoint *mp;
+
+	for (mp = rctx->mountpoints; mp != NULL; mp = mp->next) {
+		if (mp->path.predefined_key == key_id && 
+			mp->path.elements == NULL)
+			break;
+	}
+
+	if (mp == NULL)
+		return WERR_NOT_FOUND;
+
+	local_key = talloc(ctx, struct local_key);
+	local_key->hive_key = mp->key;
+	local_key->global.context = ctx;
+	local_key->path = mp->path;
+	
+	*key = (struct registry_key *)local_key;
+
+	return WERR_OK;
+}
+
+
 const static struct registry_operations local_ops = {
 	.name = "local",
-	.open_key = local_open_key
+	.open_key = local_open_key,
+	.get_predefined_key = local_get_predefined_key,
 };
 
 WERROR reg_open_local(TALLOC_CTX *mem_ctx, struct registry_context **ctx, 
@@ -94,6 +145,8 @@
 	W_ERROR_HAVE_NO_MEMORY(ret);
 
 	ret->registry.ops = &local_ops;
+	ret->session_info = session_info;
+	ret->credentials = credentials;
 
 	*ctx = (struct registry_context *)ret;
 	

Modified: branches/4.0-regwrite/source/lib/registry/registry.h
===================================================================
--- branches/4.0-regwrite/source/lib/registry/registry.h	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/registry.h	2007-08-04 18:16:25 UTC (rev 24219)
@@ -94,7 +94,7 @@
 
 	WERROR (*flush_key) (struct registry_key *key);
 
-	WERROR (*get_predefined_key) (struct registry_context *ctx, 
+	WERROR (*get_predefined_key) (const struct registry_context *ctx, 
 							  uint32_t key_id,
 							  struct registry_key **key);
 
@@ -198,7 +198,7 @@
 _PUBLIC_ WERROR reg_get_predefined_key_by_name(struct registry_context *ctx, 
 											   const char *name, 
 											   struct registry_key **key);
-_PUBLIC_ WERROR reg_get_predefined_key(struct registry_context *ctx, 
+_PUBLIC_ WERROR reg_get_predefined_key(const struct registry_context *ctx, 
 									   uint32_t hkey, 
 									   struct registry_key **key);
 

Added: branches/4.0-regwrite/source/lib/registry/tests/registry.c
===================================================================
--- branches/4.0-regwrite/source/lib/registry/tests/registry.c	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/lib/registry/tests/registry.c	2007-08-04 18:16:25 UTC (rev 24219)
@@ -0,0 +1,75 @@
+/* 
+   Unix SMB/CIFS implementation.
+
+   local testing of registry library - registry backend
+
+   Copyright (C) Jelmer Vernooij 2005-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 2 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, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+#include "lib/registry/registry.h"
+#include "lib/cmdline/popt_common.h"
+#include "torture/torture.h"
+#include "librpc/gen_ndr/winreg.h"
+#include "system/filesys.h"
+
+static bool test_get_predefined(struct torture_context *tctx,
+								const void *_data)
+{
+	const struct registry_context *rctx = _data;
+	struct registry_key *root;
+	WERROR error;
+
+	error = reg_get_predefined_key(rctx, HKEY_CLASSES_ROOT, &root);
+	torture_assert_werr_ok(tctx, error, 
+						   "getting predefined key failed");
+	return true;
+}
+
+static bool setup_local_registry(struct torture_context *tctx, 
+								 void **data)
+{
+	struct registry_context *rctx;
+	WERROR error;
+
+	error = reg_open_local(tctx, &rctx, NULL, NULL);
+	if (!W_ERROR_IS_OK(error)) {
+		return false;
+	}
+
+	/* FIXME */
+	return true;
+}
+
+static void tcase_add_tests(struct torture_tcase *tcase)
+{
+	torture_tcase_add_simple_test(tcase, "get_predefined_key",
+									test_get_predefined);
+}
+
+struct torture_suite *torture_registry_registry(TALLOC_CTX *mem_ctx) 
+{
+	struct torture_tcase *tcase;
+	struct torture_suite *suite = torture_suite_create(mem_ctx, 
+													   "REGISTRY");
+	
+	tcase = torture_suite_add_tcase(suite, "local");
+	torture_tcase_set_fixture(tcase, setup_local_registry, NULL);
+	tcase_add_tests(tcase);
+
+	return suite;
+}

Modified: branches/4.0-regwrite/source/torture/local/config.mk
===================================================================
--- branches/4.0-regwrite/source/torture/local/config.mk	2007-08-04 18:16:18 UTC (rev 24218)
+++ branches/4.0-regwrite/source/torture/local/config.mk	2007-08-04 18:16:25 UTC (rev 24219)
@@ -24,6 +24,7 @@
 		irpc.o \
 		../../lib/registry/tests/generic.o \
 		../../lib/registry/tests/hive.o \
+		../../lib/registry/tests/registry.o \
 		resolve.o \
 		../../lib/util/tests/strlist.o \
 		../../lib/util/tests/file.o \



More information about the samba-cvs mailing list