r21296: remove the session specific encryption from the attributes
[metze/samba/wip.git] / source4 / gtk / tools / gregedit.c
index 472a5683edf6828321ba921bb7edc3b858b84f8b..cf03eebec845da0e40f816eebc1e764bbb559b70 100644 (file)
 */
 
 #include "includes.h"
-#include "dynconfig.h"
-#include "registry.h"
-#include "lib/cmdline/popt_common.h"
-#include "gtk/common/select.h"
+#include "lib/registry/registry.h"
 #include "gtk/common/gtk-smb.h"
-
-GtkTreeStore *store_keys;
-GtkListStore *store_vals;
-GtkWidget *tree_keys;
-GtkWidget *tree_vals;
-GtkWidget *mainwin;
-GtkWidget *mnu_add_key, *mnu_set_value, *mnu_del_key, *mnu_del_value, *mnu_find;
-TALLOC_CTX *mem_ctx; /* FIXME: Split up */
-
-GtkWidget *save;
-GtkWidget *save_as;
+#include "lib/events/events.h"
+#include "lib/registry/reg_backend_rpc.h"
+#include "auth/credentials/credentials.h"
+
+static GtkTreeStore *store_keys;
+static GtkListStore *store_vals;
+static GtkWidget *tree_keys;
+static GtkWidget *tree_vals;
+static GtkWidget *mainwin;
+static GtkWidget *mnu_add_key, *mnu_set_value, *mnu_del_key, *mnu_del_value, *mnu_find;
+static TALLOC_CTX *mem_ctx; /* FIXME: Split up */
+
+static GtkWidget *save;
+static GtkWidget *save_as;
 static GtkWidget* create_openfilewin (void);
 static GtkWidget* create_savefilewin (void);
 struct registry_context *registry = NULL;
@@ -269,7 +269,7 @@ static void expand_key(GtkTreeView *treeview, GtkTreeIter *parent, GtkTreePath *
        g_assert(k);
        
        for(i = 0; W_ERROR_IS_OK(error = reg_key_get_subkey_by_index(mem_ctx, k, i, &sub)); i++) {
-               int count;
+               uint32_t count;
                /* Replace the blank child with the first directory entry
            You may be tempted to remove the blank child node and then 
            append a new one.  Don't.  If you remove the blank child 
@@ -349,7 +349,7 @@ static void on_open_file_activate (GtkMenuItem *menuitem, gpointer user_data)
        switch(result) {
        case GTK_RESPONSE_OK:
                filename = strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(openfilewin)));
-               error = reg_open_hive(NULL, user_data, filename, NULL, &root);
+               error = reg_open_hive(NULL, user_data, filename, NULL, NULL, &root);
                if(!W_ERROR_IS_OK(error)) {
                        gtk_show_werror(mainwin, "Error while opening hive", error);
                        break;
@@ -371,7 +371,7 @@ static void on_open_file_activate (GtkMenuItem *menuitem, gpointer user_data)
 static void on_open_gconf_activate(GtkMenuItem *menuitem, gpointer user_data)
 {
        struct registry_key *root;
-       WERROR error = reg_open_hive(NULL, "gconf", NULL, NULL, &root);
+       WERROR error = reg_open_hive(NULL, "gconf", NULL, NULL, NULL, &root);
        if(!W_ERROR_IS_OK(error)) {
                gtk_show_werror(mainwin, "Error while opening GConf", error);
                return;
@@ -385,7 +385,7 @@ static void on_open_gconf_activate(GtkMenuItem *menuitem, gpointer user_data)
 
 static void on_open_local_activate(GtkMenuItem *menuitem, gpointer user_data)
 {
-       WERROR error = reg_open_local(&registry);
+       WERROR error = reg_open_local(NULL, &registry, NULL, NULL);
        if(!W_ERROR_IS_OK(error)) {
                gtk_show_werror(mainwin, "Error while opening local registry", error);
                return;
@@ -396,9 +396,10 @@ static void on_open_local_activate(GtkMenuItem *menuitem, gpointer user_data)
 static void on_open_remote_activate(GtkMenuItem *menuitem, gpointer user_data)
 {
        char *tmp;
-       GtkWidget *rpcwin = GTK_WIDGET(gtk_rpc_binding_dialog_new(FALSE, NULL));
+       GtkWidget *rpcwin = GTK_WIDGET(gtk_rpc_binding_dialog_new(NULL));
        gint result = gtk_dialog_run(GTK_DIALOG(rpcwin));
        WERROR error;
+       struct cli_credentials *creds;
        
        if(result != GTK_RESPONSE_ACCEPT)
        {
@@ -406,9 +407,15 @@ static void on_open_remote_activate(GtkMenuItem *menuitem, gpointer user_data)
                return;
        }
 
+       creds = cli_credentials_init(mem_ctx);
+       cli_credentials_guess(creds);
+       cli_credentials_set_gtk_callbacks(creds);
+
        error = reg_open_remote(&registry, 
-                       gtk_rpc_binding_dialog_get_credentials(GTK_RPC_BINDING_DIALOG(rpcwin)), 
-                       gtk_rpc_binding_dialog_get_binding_string(GTK_RPC_BINDING_DIALOG(rpcwin), mem_ctx));
+                               NULL,
+                               creds,
+                               gtk_rpc_binding_dialog_get_binding_string(GTK_RPC_BINDING_DIALOG(rpcwin), mem_ctx),
+                               NULL);
 
        if(!W_ERROR_IS_OK(error)) {
                gtk_show_werror(mainwin, "Error while opening remote registry", error);
@@ -427,24 +434,15 @@ static void on_open_remote_activate(GtkMenuItem *menuitem, gpointer user_data)
 }
 
 
-static void on_save_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-       WERROR error = reg_save(registry, NULL);
-       if(!W_ERROR_IS_OK(error)) {
-               gtk_show_werror(mainwin, "Error while saving", error);
-       }
-}
-
-
 static void on_save_as_activate(GtkMenuItem *menuitem, gpointer user_data)
 {
        gint result;
-       WERROR error;
+       WERROR error = WERR_OK;
        GtkWidget *savefilewin = create_savefilewin();
        result = gtk_dialog_run(GTK_DIALOG(savefilewin));
        switch(result) {
        case GTK_RESPONSE_OK:
-               error = reg_save(registry, gtk_file_selection_get_filename(GTK_FILE_SELECTION(savefilewin)));
+       /* FIXME:               error = reg_dump(registry, gtk_file_selection_get_filename(GTK_FILE_SELECTION(savefilewin))); */
                if(!W_ERROR_IS_OK(error)) {
                        gtk_show_werror(mainwin, "Error while saving as", error);
                }
@@ -542,18 +540,19 @@ static void on_value_activate(GtkTreeView *treeview, GtkTreePath *arg1,
 
        gtk_widget_set_sensitive(entry_name, FALSE);
        gtk_entry_set_text(GTK_ENTRY(entry_name), value->name);
-       gtk_entry_set_text(GTK_ENTRY(entry_value), reg_val_data_string(mem_ctx, value));
+       gtk_entry_set_text(GTK_ENTRY(entry_value), reg_val_data_string(mem_ctx, value->data_type, &value->data));
        gtk_combo_box_set_active(GTK_COMBO_BOX(entry_type), value->data_type);
        
        result = gtk_dialog_run(addwin);
        if (result == GTK_RESPONSE_OK) 
        {
                WERROR error;
-               struct registry_value *val;
+               DATA_BLOB data;
+               uint32_t data_type;
                
-               reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &val);
+               reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &data_type, &data);
                
-               error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), val->data_type, val->data_blk, val->data_len);
+               error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), data_type, data);
 
                if (!W_ERROR_IS_OK(error)) {
                        gtk_show_werror(NULL, "Error while setting value", error);
@@ -570,11 +569,12 @@ static void on_set_value_activate(GtkMenuItem *menuitem, gpointer user_data)
        if (result == GTK_RESPONSE_OK) 
        {
                WERROR error;
-               struct registry_value *val;
+               uint32_t data_type;
+               DATA_BLOB data;
                
-               reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &val);
+               reg_string_to_val(mem_ctx,str_regtype(gtk_combo_box_get_active(GTK_COMBO_BOX(entry_type))), gtk_entry_get_text(GTK_ENTRY(entry_value)), &data_type, &data);
                
-               error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), val->data_type, val->data_blk, val->data_len);
+               error = reg_val_set(current_key, gtk_entry_get_text(GTK_ENTRY(entry_name)), data_type, data);
 
                if (!W_ERROR_IS_OK(error)) {
                        gtk_show_werror(NULL, "Error while setting value", error);
@@ -640,7 +640,7 @@ static gboolean on_key_activate(GtkTreeSelection *selection,
                                                1,
                                                str_regtype(val->data_type),
                                                2,
-                                               reg_val_data_string(mem_ctx, val),
+                                               reg_val_data_string(mem_ctx, val->data_type, &val->data),
                                                3, 
                                                val,
                                                -1);
@@ -880,9 +880,6 @@ static GtkWidget* create_mainwindow(void)
        gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
        gtk_statusbar_set_has_resize_grip (GTK_STATUSBAR (statusbar), FALSE);
 
-       g_signal_connect ((gpointer) save, "activate",
-                                         G_CALLBACK (on_save_activate),
-                                         NULL);
        g_signal_connect ((gpointer) save_as, "activate",
                                          G_CALLBACK (on_save_as_activate),
                                          NULL);
@@ -956,7 +953,7 @@ static GtkWidget* create_savefilewin (void)
 
 static int gregedit_load_defaults(void)
 {
-       WERROR error = reg_open_local(&registry);
+       WERROR error = reg_open_local(NULL, &registry, NULL, NULL);
        if(!W_ERROR_IS_OK(error)) {
                gtk_show_werror(mainwin, "Error while loading local registry", error);
                return -1;
@@ -970,13 +967,13 @@ int main(int argc, char *argv[])
 {
        int ret;
 
-       gregedit_init_subsystems;
-       lp_load(dyn_CONFIGFILE,True,False,False);
-       load_interfaces();
+       lp_load();
        setup_logging(argv[0], DEBUG_STDERR);
 
        mem_ctx = talloc_init("gregedit");
 
+       registry_init();
+
        gtk_init(&argc, &argv);
        mainwin = create_mainwindow();
        gtk_widget_show_all(mainwin);