[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