summaryrefslogtreecommitdiff
path: root/source3/utils/regedit.c
diff options
context:
space:
mode:
authorC. Davis <cd.rattan@gmail.com>2012-08-09 18:14:42 -0700
committerMichael Adam <obnox@samba.org>2013-04-29 13:06:17 +0200
commit3344f5e3d568d607bdf354ed74dc473a612fbf9d (patch)
treeab1e6c241238e7089aa75d63c35dbb5eab6e5e8e /source3/utils/regedit.c
parent6ef5ee250c3b906d56413b213e1f18fe1ff3579f (diff)
downloadsamba-3344f5e3d568d607bdf354ed74dc473a612fbf9d.tar.gz
samba-3344f5e3d568d607bdf354ed74dc473a612fbf9d.tar.bz2
samba-3344f5e3d568d607bdf354ed74dc473a612fbf9d.zip
regedit: Delete and add keys.
Reviewed-by: Andreas Schneider <asn@samba.org> Reviewed-by: Michael Adam <obnox@samba.org>
Diffstat (limited to 'source3/utils/regedit.c')
-rw-r--r--source3/utils/regedit.c62
1 files changed, 60 insertions, 2 deletions
diff --git a/source3/utils/regedit.c b/source3/utils/regedit.c
index 7db0cbfe17..3f476e720b 100644
--- a/source3/utils/regedit.c
+++ b/source3/utils/regedit.c
@@ -137,18 +137,76 @@ static void handle_tree_input(struct regedit *regedit, int c)
value_list_load(regedit->vl, node->key);
}
break;
+ case 'n':
+ case 'N': {
+ char *name;
+
+ node = item_userptr(current_item(regedit->keys->menu));
+ if (!node->parent) {
+ break;
+ }
+ dialog_input(regedit, &name, "New Key", regedit->main_window,
+ "Enter name of new key");
+ if (name) {
+ WERROR rv;
+ struct registry_key *new_key;
+ struct tree_node *new_node;
+ struct tree_node *list = tree_node_first(node);
+
+ rv = reg_key_add_name(regedit, node->parent->key, name,
+ NULL, NULL, &new_key);
+ if (W_ERROR_IS_OK(rv)) {
+ new_node = tree_node_new(node->parent,
+ node->parent,
+ name, new_key);
+ SMB_ASSERT(new_node);
+ tree_node_append_last(list, new_node);
+ tree_view_clear(regedit->keys);
+ tree_view_update(regedit->keys, list);
+ } else {
+ dialog_notice(regedit, DIA_ALERT, "New Key",
+ regedit->main_window,
+ "Failed to create key.");
+ }
+ talloc_free(name);
+ }
+ break;
+ }
case 'd':
case 'D': {
int sel;
node = item_userptr(current_item(regedit->keys->menu));
+ if (!node->parent) {
+ break;
+ }
sel = dialog_notice(regedit, DIA_CONFIRM,
"Delete Key",
regedit->main_window,
"Really delete key \"%s\"?",
node->name);
- mvwprintw(regedit->main_window, 1, 0, "Sel: %d", sel);
- /* TODO */
+ if (sel == DIALOG_OK) {
+ WERROR rv;
+ struct tree_node *pop;
+ struct tree_node *parent = node->parent;
+
+ rv = reg_key_del(node, parent->key, node->name);
+ if (W_ERROR_IS_OK(rv)) {
+ tree_view_clear(regedit->keys);
+ pop = tree_node_pop(&node);
+ tree_node_free_recursive(pop);
+ node = parent->child_head;
+ if (node == NULL) {
+ node = tree_node_first(parent);
+ }
+ tree_view_update(regedit->keys, node);
+ value_list_load(regedit->vl, node->key);
+ } else {
+ dialog_notice(regedit, DIA_ALERT, "Delete Key",
+ regedit->main_window,
+ "Failed to delete key.");
+ }
+ }
break;
}
}