[SCM] Samba Shared Repository - branch v3-6-test updated

Karolin Seeger kseeger at samba.org
Tue Jun 21 11:58:40 MDT 2011


The branch, v3-6-test has been updated
       via  4b414fb s3:net-man: registry enumerate_recursive
       via  60dc766 s3:net-man: registry deletekey & deletekey_recursive
       via  c890198 s3:net-man: missing dot
       via  6c165c8 s3:net registry: polish output of net registry enumerate[_recursive]
       via  d4faa39 s3:net: registry: use recursive implementation for enumerate
       via  901544f s3:net: registry: add new command enumerate_recursive
      from  b08149c s3: improve WHATSNEW around kerberos changes

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-6-test


- Log -----------------------------------------------------------------
commit 4b414fbdf8741f0eada3593c9f4f86fa86d363ef
Author: Gregor Beck <gbeck at sernet.de>
Date:   Tue May 31 18:26:12 2011 +0200

    s3:net-man: registry enumerate_recursive
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    
    Autobuild-User: Michael Adam <obnox at samba.org>
    Autobuild-Date: Wed Jun  1 17:16:05 CEST 2011 on sn-devel-104

commit 60dc766070bd04735cf33b27fb207a8107831257
Author: Gregor Beck <gbeck at sernet.de>
Date:   Tue May 31 18:25:53 2011 +0200

    s3:net-man: registry deletekey & deletekey_recursive
    
    Signed-off-by: Michael Adam <obnox at samba.org>

commit c890198f9635332525c22783ee72088fd8b0e8c8
Author: Gregor Beck <gbeck at sernet.de>
Date:   Tue May 31 18:15:38 2011 +0200

    s3:net-man: missing dot
    
    Signed-off-by: Michael Adam <obnox at samba.org>

commit 6c165c84e3482264d9bd6475cb6bc08ad170e268
Author: Michael Adam <obnox at samba.org>
Date:   Mon May 30 16:54:47 2011 +0200

    s3:net registry: polish output of net registry enumerate[_recursive]
    
    so that net registry enumerate output is as before, and
    net registry enumerate_recursive is formatted more nicely
    (cherry picked from commit 0d746f653e76de52985d543a15fd6ee3bf2f4823)
    
    Fix bug: #8193

commit d4faa39a76c0c594683fdb6496edbc5f967b24a6
Author: Gregor Beck <gbeck at sernet.de>
Date:   Mon May 30 10:24:16 2011 +0200

    s3:net: registry: use recursive implementation for enumerate
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    (cherry picked from commit 5ec479fa0c9db4072541d46345164542d037cfc9)
    
    Fix bug: #8193

commit 901544fcc736457f234c250850819cc2cf3fcc14
Author: Gregor Beck <gbeck at sernet.de>
Date:   Mon May 30 08:58:34 2011 +0200

    s3:net: registry: add new command enumerate_recursive
    
    Signed-off-by: Michael Adam <obnox at samba.org>
    (cherry picked from commit 22011ddc9e72c8a201e3ca6e01745a68738d5916)
    
    Fix bug: #8193

-----------------------------------------------------------------------

Summary of changes:
 docs-xml/manpages-3/net.8.xml |   17 +++++-
 source3/utils/net_registry.c  |  135 ++++++++++++++++++++++++++++++++++-------
 2 files changed, 128 insertions(+), 24 deletions(-)


Changeset truncated at 500 lines:

diff --git a/docs-xml/manpages-3/net.8.xml b/docs-xml/manpages-3/net.8.xml
index 18c74ef..fac9ba6 100644
--- a/docs-xml/manpages-3/net.8.xml
+++ b/docs-xml/manpages-3/net.8.xml
@@ -1854,8 +1854,10 @@ Manipulate Samba's registry.
 <para>The registry commands are:
 <simplelist>
 <member>net registry enumerate   - Enumerate registry keys and values.</member>
+<member>net registry enumerate_recursive - Enumerate registry key and its subkeys.</member>
 <member>net registry createkey   - Create a new registry key.</member>
 <member>net registry deletekey   - Delete a registry key.</member>
+<member>net registry deletekey_recursive - Delete a registry key with subkeys.</member>
 <member>net registry getvalue    - Print a registry value.</member>
 <member>net registry getvalueraw - Print a registry value (raw format).</member>
 <member>net registry setvalue    - Set a new registry value.</member>
@@ -1878,7 +1880,13 @@ string.</member>
 
 <refsect3>
   <title>REGISTRY ENUMERATE <replaceable>key</replaceable> </title>
-  <para>Enumerate subkeys and values of <emphasis>key</emphasis>
+  <para>Enumerate subkeys and values of <emphasis>key</emphasis>.
+  </para>
+</refsect3>
+
+<refsect3>
+  <title>REGISTRY ENUMERATE_RECURSIVE <replaceable>key</replaceable> </title>
+  <para>Enumerate values of <emphasis>key</emphasis> and its subkeys.
   </para>
 </refsect3>
 
@@ -1890,6 +1898,13 @@ string.</member>
 
 <refsect3>
   <title>REGISTRY DELETEKEY <replaceable>key</replaceable> </title>
+  <para>Delete the given <emphasis>key</emphasis> and its
+  values from the registry, if it has no subkeys.
+  </para>
+</refsect3>
+
+<refsect3>
+  <title>REGISTRY DELETEKEY_RECURSIVE <replaceable>key</replaceable> </title>
   <para>Delete the given <emphasis>key</emphasis> and all of its
   subkeys and values from the registry.
   </para>
diff --git a/source3/utils/net_registry.c b/source3/utils/net_registry.c
index dcc88a9..0acd8c4 100644
--- a/source3/utils/net_registry.c
+++ b/source3/utils/net_registry.c
@@ -122,23 +122,88 @@ done:
 	return werr;
 }
 
+static WERROR registry_enumkey(struct registry_key* parent, const char* keyname, bool recursive)
+{
+	WERROR werr;
+	TALLOC_CTX *ctx = talloc_stackframe();
+	char*  subkey_name;
+	NTTIME modtime;
+	uint32_t count;
+	char* valname = NULL;
+	struct registry_value *valvalue = NULL;
+	struct registry_key* key = NULL;
+
+	werr = reg_openkey(ctx, parent, keyname, REG_KEY_READ, &key);
+	if (!W_ERROR_IS_OK(werr)) {
+		goto done;
+	}
+
+	if (recursive) {
+		printf("[%s]\n\n", key->key->name);
+	} else {
+		for (count = 0;
+		     werr = reg_enumkey(ctx, key, count, &subkey_name, &modtime),
+		     W_ERROR_IS_OK(werr);
+		     count++)
+		{
+			print_registry_key(subkey_name, &modtime);
+		}
+		if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+			goto done;
+		}
+	}
+
+	for (count = 0;
+	     werr = reg_enumvalue(ctx, key, count, &valname, &valvalue),
+	     W_ERROR_IS_OK(werr);
+	     count++)
+	{
+		print_registry_value_with_name(valname, valvalue);
+	}
+	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+		goto done;
+	}
+
+	if (!recursive) {
+		werr = WERR_OK;
+		goto done;
+	}
+
+	for (count = 0;
+	     werr = reg_enumkey(ctx, key, count, &subkey_name, &modtime),
+	     W_ERROR_IS_OK(werr);
+	     count++)
+	{
+		werr = registry_enumkey(key, subkey_name, recursive);
+		if (!W_ERROR_IS_OK(werr)) {
+			goto done;
+		}
+	}
+	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+		goto done;
+	}
+
+	werr = WERR_OK;
+
+done:
+	TALLOC_FREE(ctx);
+	return werr;
+}
+
+
+
 /*
  *
  * the main "net registry" function implementations
  *
  */
-
 static int net_registry_enumerate(struct net_context *c, int argc,
 				  const char **argv)
 {
 	WERROR werr;
 	struct registry_key *key = NULL;
+	char* name = NULL;
 	TALLOC_CTX *ctx = talloc_stackframe();
-	char *subkey_name;
-	NTTIME modtime;
-	uint32_t count;
-	char *valname = NULL;
-	struct registry_value *valvalue = NULL;
 	int ret = -1;
 
 	if (argc != 1 || c->display_usage) {
@@ -151,40 +216,56 @@ static int net_registry_enumerate(struct net_context *c, int argc,
 		goto done;
 	}
 
-	werr = open_key(ctx, argv[0], REG_KEY_READ, &key);
+	werr = open_hive(ctx, argv[0], REG_KEY_READ, &key, &name);
 	if (!W_ERROR_IS_OK(werr)) {
 		d_fprintf(stderr, _("open_key failed: %s\n"), win_errstr(werr));
 		goto done;
 	}
 
-	for (count = 0;
-	     werr = reg_enumkey(ctx, key, count, &subkey_name, &modtime),
-	     W_ERROR_IS_OK(werr);
-	     count++)
-	{
-		print_registry_key(subkey_name, &modtime);
+	werr = registry_enumkey(key, name, c->opt_reboot);
+	if (W_ERROR_IS_OK(werr)) {
+		ret = 0;
 	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+done:
+	TALLOC_FREE(ctx);
+	return ret;
+}
+
+static int net_registry_enumerate_recursive(struct net_context *c, int argc,
+					    const char **argv)
+{
+	WERROR werr;
+	struct registry_key *key = NULL;
+	char* name = NULL;
+	TALLOC_CTX *ctx = talloc_stackframe();
+	int ret = -1;
+
+	if (argc != 1 || c->display_usage) {
+		d_printf("%s\n%s",
+			 _("Usage:"),
+			 _("net registry enumerate <path>\n"));
+		d_printf("%s\n%s",
+			 _("Example:"),
+			 _("net registry enumerate 'HKLM\\Software\\Samba'\n"));
 		goto done;
 	}
 
-	for (count = 0;
-	     werr = reg_enumvalue(ctx, key, count, &valname, &valvalue),
-	     W_ERROR_IS_OK(werr);
-	     count++)
-	{
-		print_registry_value_with_name(valname, valvalue);
-	}
-	if (!W_ERROR_EQUAL(WERR_NO_MORE_ITEMS, werr)) {
+	werr = open_hive(ctx, argv[0], REG_KEY_READ, &key, &name);
+	if (!W_ERROR_IS_OK(werr)) {
+		d_fprintf(stderr, _("open_key failed: %s\n"), win_errstr(werr));
 		goto done;
 	}
 
-	ret = 0;
+	werr = registry_enumkey(key, name, true);
+	if (W_ERROR_IS_OK(werr)) {
+		ret = 0;
+	}
 done:
 	TALLOC_FREE(ctx);
 	return ret;
 }
 
+
 static int net_registry_createkey(struct net_context *c, int argc,
 				  const char **argv)
 {
@@ -1176,6 +1257,14 @@ int net_registry(struct net_context *c, int argc, const char **argv)
 			   "    Enumerate registry keys and values")
 		},
 		{
+			"enumerate_recursive",
+			net_registry_enumerate_recursive,
+			NET_TRANSPORT_LOCAL,
+			N_("Enumerate registry keys and values"),
+			N_("net registry enumerate_recursive\n"
+			   "    Enumerate registry keys and values")
+		},
+		{
 			"createkey",
 			net_registry_createkey,
 			NET_TRANSPORT_LOCAL,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list