diff options
author | Chris Davis <cd.rattan@gmail.com> | 2014-06-25 22:29:06 -0700 |
---|---|---|
committer | Michael Adam <obnox@samba.org> | 2014-10-01 14:32:08 +0200 |
commit | aba2b04b6c5584db63d03adab57fe1fd12ee71b4 (patch) | |
tree | 2e24e14a9253f4b08881cd8562aedc5ba5f3494c /source3 | |
parent | df36fe7998fee3fc22976aeb42c25e2a2f0d73c5 (diff) | |
download | samba-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>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/utils/regedit_treeview.c | 27 |
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)) { |