summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Davis <cd.rattan@gmail.com>2014-06-25 22:29:06 -0700
committerMichael Adam <obnox@samba.org>2014-10-01 14:32:08 +0200
commitaba2b04b6c5584db63d03adab57fe1fd12ee71b4 (patch)
tree2e24e14a9253f4b08881cd8562aedc5ba5f3494c
parentdf36fe7998fee3fc22976aeb42c25e2a2f0d73c5 (diff)
downloadsamba-aba2b04b6c5584db63d03adab57fe1fd12ee71b4.tar.gz
samba-aba2b04b6c5584db63d03adab57fe1fd12ee71b4.tar.xz
samba-aba2b04b6c5584db63d03adab57fe1fd12ee71b4.zip
regedit: don't fail loading keys if just a few are unavailable
Sometimes a key might fail to open due to access restrictions. Only report failure if all keys failed to be opened. Signed-off-by: Chris Davis <cd.rattan@gmail.com> Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
-rw-r--r--source3/utils/regedit_treeview.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/source3/utils/regedit_treeview.c b/source3/utils/regedit_treeview.c
index 9962ad99fb..c8a65965bc 100644
--- a/source3/utils/regedit_treeview.c
+++ b/source3/utils/regedit_treeview.c
@@ -179,7 +179,7 @@ WERROR tree_node_load_children(struct tree_node *node)
struct registry_key *key;
const char *key_name, *klass;
NTTIME modified;
- uint32_t i, nsubkeys;
+ uint32_t i, nsubkeys, count;
WERROR rv;
struct tree_node *prev, **array;
@@ -196,7 +196,7 @@ WERROR tree_node_load_children(struct tree_node *node)
return WERR_NOMEM;
}
- for (i = 0; i < nsubkeys; ++i) {
+ for (count = 0, i = 0; i < nsubkeys; ++i) {
rv = reg_key_get_subkey_by_index(node, node->key, i,
&key_name, &klass,
&modified);
@@ -206,25 +206,28 @@ WERROR tree_node_load_children(struct tree_node *node)
rv = reg_open_key(node, node->key, key_name, &key);
if (!W_ERROR_IS_OK(rv)) {
- goto finish;
+ continue;
}
- array[i] = tree_node_new(node, node, key_name, key);
- if (array[i] == NULL) {
+ array[count] = tree_node_new(node, node, key_name, key);
+ if (array[count] == NULL) {
rv = WERR_NOMEM;
goto finish;
}
+ ++count;
}
- TYPESAFE_QSORT(array, nsubkeys, node_cmp);
+ if (count) {
+ TYPESAFE_QSORT(array, count, node_cmp);
- for (i = 1, prev = array[0]; i < nsubkeys; ++i) {
- tree_node_append(prev, array[i]);
- prev = array[i];
- }
- node->child_head = array[0];
+ for (i = 1, prev = array[0]; i < count; ++i) {
+ tree_node_append(prev, array[i]);
+ prev = array[i];
+ }
+ node->child_head = array[0];
- rv = WERR_OK;
+ rv = WERR_OK;
+ }
finish:
if (!W_ERROR_IS_OK(rv)) {