summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Davis <cd.rattan@gmail.com>2014-07-27 17:39:06 -0700
committerMichael Adam <obnox@samba.org>2014-10-01 14:32:09 +0200
commit1b6445ae03521d788bf247eb550d1b51113fc8df (patch)
tree8140bb281bf010d0f172e9e001e0c80073891ad6
parent061d3e9a66f7f71cc6532fa6b0bcf47bf0fe3e35 (diff)
downloadsamba-1b6445ae03521d788bf247eb550d1b51113fc8df.tar.gz
samba-1b6445ae03521d788bf247eb550d1b51113fc8df.tar.xz
samba-1b6445ae03521d788bf247eb550d1b51113fc8df.zip
regedit: use the right function to reopen a hive
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.c15
-rw-r--r--source3/utils/regedit_treeview.c17
-rw-r--r--source3/utils/regedit_treeview.h3
3 files changed, 26 insertions, 9 deletions
diff --git a/source3/utils/regedit.c b/source3/utils/regedit.c
index cc3598b10b..d77c2e4c56 100644
--- a/source3/utils/regedit.c
+++ b/source3/utils/regedit.c
@@ -187,7 +187,8 @@ static void add_reg_key(struct regedit *regedit, struct tree_node *node,
} else {
/* Reopen the parent key to make sure the
new subkey will be noticed. */
- tree_node_reopen_key(parent);
+ tree_node_reopen_key(regedit->registry_context,
+ parent);
}
list = tree_node_first(node);
@@ -377,7 +378,8 @@ static void handle_tree_input(struct regedit *regedit, int c)
rv = reg_key_del(node, parent->key, node->name);
if (W_ERROR_IS_OK(rv)) {
- tree_node_reopen_key(parent);
+ tree_node_reopen_key(regedit->registry_context,
+ parent);
tree_view_clear(regedit->keys);
pop = tree_node_pop(&node);
talloc_free(pop);
@@ -434,7 +436,8 @@ static void handle_value_input(struct regedit *regedit, int c)
dialog_notice(regedit, DIA_ALERT, "Error",
"Error editing value:\n%s", msg);
} else if (sel == DIALOG_OK) {
- tree_node_reopen_key(node);
+ tree_node_reopen_key(regedit->registry_context,
+ node);
value_list_load(regedit->vl, node->key);
value_list_set_current_item_by_name(regedit->vl,
name);
@@ -458,7 +461,8 @@ static void handle_value_input(struct regedit *regedit, int c)
dialog_notice(regedit, DIA_ALERT, "Error",
"Error creating value:\n%s", msg);
} else if (sel == DIALOG_OK) {
- tree_node_reopen_key(node);
+ tree_node_reopen_key(regedit->registry_context,
+ node);
value_list_load(regedit->vl, node->key);
value_list_set_current_item_by_name(regedit->vl,
name);
@@ -480,7 +484,8 @@ static void handle_value_input(struct regedit *regedit, int c)
node = tree_view_get_current_node(regedit->keys);
reg_del_value(regedit, node->key,
vitem->value_name);
- tree_node_reopen_key(node);
+ tree_node_reopen_key(regedit->registry_context,
+ node);
value_list_load(regedit->vl, node->key);
}
}
diff --git a/source3/utils/regedit_treeview.c b/source3/utils/regedit_treeview.c
index 47d92821e8..885e6d0998 100644
--- a/source3/utils/regedit_treeview.c
+++ b/source3/utils/regedit_treeview.c
@@ -197,13 +197,24 @@ static uint32_t get_num_subkeys(struct tree_node *node)
return 0;
}
-WERROR tree_node_reopen_key(struct tree_node *node)
+WERROR tree_node_reopen_key(struct registry_context *ctx,
+ struct tree_node *node)
{
SMB_ASSERT(node->parent != NULL);
SMB_ASSERT(node->name != NULL);
TALLOC_FREE(node->key);
- return reg_open_key(node->parent, node->parent->key, node->name,
- &node->key);
+
+ if (tree_node_is_top_level(node)) {
+ WERROR rv;
+ struct registry_key *key;
+ rv = reg_get_predefined_key_by_name(ctx, node->name, &key);
+ if (W_ERROR_IS_OK(rv)) {
+ node->key = talloc_steal(node, key);
+ }
+ return rv;
+ }
+
+ return reg_open_key(node, node->parent->key, node->name, &node->key);
}
bool tree_node_has_children(struct tree_node *node)
diff --git a/source3/utils/regedit_treeview.h b/source3/utils/regedit_treeview.h
index 4d1851ab1d..919507f9e2 100644
--- a/source3/utils/regedit_treeview.h
+++ b/source3/utils/regedit_treeview.h
@@ -74,7 +74,8 @@ void tree_view_clear(struct tree_view *view);
WERROR tree_view_set_root(struct tree_view *view, struct tree_node *root);
WERROR tree_view_set_path(struct tree_view *view, const char **path);
WERROR tree_view_update(struct tree_view *view, struct tree_node *list);
-WERROR tree_node_reopen_key(struct tree_node *node);
+WERROR tree_node_reopen_key(struct registry_context *ctx,
+ struct tree_node *node);
bool tree_node_has_children(struct tree_node *node);
WERROR tree_node_load_children(struct tree_node *node);
void tree_node_insert_sorted(struct tree_node *list, struct tree_node *node);