r5989: Display authentication information (list of available auth protocols
[samba.git] / source4 / gtk / tools / gepdump.c
index 88cd9ff8b7257aa0b2f7db4e3a8e34dd035157ca..d707f4a0f3afef6bb82b37187b5b5abc8d2a6e0f 100644 (file)
@@ -25,6 +25,7 @@
 #include "librpc/gen_ndr/ndr_mgmt.h"
 #include "gtk/common/select.h"
 #include "gtk/common/gtk-smb.h"
+#include "lib/cmdline/popt_common.h"
 
 /* 
  * Show: 
@@ -39,6 +40,7 @@ static GtkTreeStore *store_eps;
 static GtkWidget *table_statistics;
 static GtkWidget *lbl_calls_in, *lbl_calls_out, *lbl_pkts_in, *lbl_pkts_out;
 static GtkWidget *lbl_iface_version, *lbl_iface_uuid, *lbl_iface_name;
+static GtkListStore *store_princ_names;
 TALLOC_CTX *eps_ctx = NULL;
 TALLOC_CTX *conn_ctx = NULL;
 
@@ -77,22 +79,22 @@ static const char *get_protocol_name(enum epm_protocol protocol)
 
 static void add_epm_entry(TALLOC_CTX *mem_ctx, const char *annotation, struct epm_tower *t)
 {
-       struct dcerpc_binding bd;
+       struct dcerpc_binding *bd;
        int i;
        NTSTATUS status;
        GtkTreeIter toweriter;
 
        status = dcerpc_binding_from_tower(mem_ctx, t, &bd);
        if (!NT_STATUS_IS_OK(status)) {
-               gtk_show_ntstatus(mainwin, status);
+               gtk_show_ntstatus(mainwin, "Error creating binding from tower", status);
                return;
        }
        
        /* Don't show UUID's */
-       ZERO_STRUCT(bd.object);
+       ZERO_STRUCT(bd->object);
 
        gtk_tree_store_append(store_eps, &toweriter, NULL);
-       gtk_tree_store_set(store_eps, &toweriter, 0, strdup(annotation), 1, strdup(dcerpc_binding_string(mem_ctx, &bd)), 2, t, -1);
+       gtk_tree_store_set(store_eps, &toweriter, 0, strdup(annotation), 1, strdup(dcerpc_binding_string(mem_ctx, bd)), 2, t, -1);
 
        for (i = 0; i < t->num_floors; i++) {
                const char *data;
@@ -154,7 +156,7 @@ static void refresh_eps(void)
                 r.out.num_ents == r.in.max_ents);
 
        if (!NT_STATUS_IS_OK(status)) {
-               gtk_show_ntstatus(mainwin, status);
+               gtk_show_ntstatus(mainwin, "Error adding endpoint mapper entry", status);
                talloc_free(mem_ctx);
                return;
        }
@@ -173,6 +175,7 @@ static void on_connect_clicked(GtkButton *btn, gpointer         user_data)
        TALLOC_CTX *mem_ctx;
        NTSTATUS status;
        gint result;
+       struct cli_credentials *credentials;
 
        d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(TRUE, NULL));
        result = gtk_dialog_run(GTK_DIALOG(d));
@@ -187,10 +190,16 @@ static void on_connect_clicked(GtkButton *btn, gpointer         user_data)
        mem_ctx = talloc_init("connect");
        bs = gtk_rpc_binding_dialog_get_binding_string (d, mem_ctx);
 
-       status = dcerpc_pipe_connect(&epmapper_pipe, bs, DCERPC_EPMAPPER_UUID, DCERPC_EPMAPPER_VERSION, lp_workgroup(), "", "");
+       credentials = cli_credentials_init(mem_ctx);
+       cli_credentials_guess(credentials);
+       cli_credentials_set_gtk_callbacks(credentials);
+
+       status = dcerpc_pipe_connect(talloc_autofree_context(), &epmapper_pipe, bs, 
+                                    DCERPC_EPMAPPER_UUID, DCERPC_EPMAPPER_VERSION, 
+                                    credentials);
 
        if (NT_STATUS_IS_ERR(status)) {
-               gtk_show_ntstatus(mainwin, status);
+               gtk_show_ntstatus(mainwin, "Error connecting to endpoint mapper", status);
                goto fail;
        }
 
@@ -200,7 +209,7 @@ static void on_connect_clicked(GtkButton *btn, gpointer         user_data)
 
        if (NT_STATUS_IS_ERR(status)) {
                mgmt_pipe = NULL;
-               gtk_show_ntstatus(NULL, status);
+               gtk_show_ntstatus(NULL, "Error connecting to mgmt interface over secondary connection", status);
                goto fail;
        }
 
@@ -228,7 +237,7 @@ static gboolean on_eps_select(GtkTreeSelection *selection,
 
                status = dcerpc_mgmt_inq_stats(mgmt_pipe, mem_ctx, &r);
                if (NT_STATUS_IS_ERR(status)) {
-                       gtk_show_ntstatus(NULL, status);
+                       gtk_show_ntstatus(NULL, "Error inquiring statistics", status);
                        return TRUE;
                }
 
@@ -247,6 +256,8 @@ static gboolean on_eps_select(GtkTreeSelection *selection,
                struct mgmt_inq_princ_name r;
                int i;
 
+               gtk_list_store_clear(store_princ_names);
+
                for (i=0;i<100;i++) {
                        r.in.authn_proto = i;  /* DCERPC_AUTH_TYPE_* */
                        r.in.princ_name_size = 100;
@@ -256,14 +267,20 @@ static gboolean on_eps_select(GtkTreeSelection *selection,
                                continue;
                        }
                        if (W_ERROR_IS_OK(r.out.result)) {
+                               GtkTreeIter iter;
                                const char *name = gensec_get_name_by_authtype(i);
+                               char *protocol;
                                if (name) {
-                                       printf("\tprinciple name for proto %u (%s) is '%s'\n",
-                                                  i, name, r.out.princ_name);
+                                       protocol = talloc_asprintf(mem_ctx, "%u (%s)", i, name);
                                } else {
-                                       printf("\tprinciple name for proto %u is '%s'\n",
-                                                  i, r.out.princ_name);
+                                       protocol = talloc_asprintf(mem_ctx, "%u", i);
                                }
+                               gtk_list_store_append(store_princ_names, &iter);
+                               gtk_list_store_set(store_princ_names, &iter, 
+                                                                  0, protocol,
+                                                                  1, r.out.princ_name,
+                                                                  -1);
+
                        }
                }
        }
@@ -284,6 +301,7 @@ static GtkWidget* create_mainwindow (void)
        GtkWidget *menuitem4_menu;
        GtkWidget *mnu_connect;
        GtkWidget *mnu_refresh;
+       GtkWidget *treeview_princ_names;
        GtkWidget *about1;
        GtkWidget *hbox2;
        GtkWidget *scrolledwindow1;
@@ -395,6 +413,28 @@ static GtkWidget* create_mainwindow (void)
        frame1 = gtk_frame_new("Authentication");
        gtk_container_add (GTK_CONTAINER(vbox2), frame1);
 
+       treeview_princ_names = gtk_tree_view_new();
+
+       curcol = gtk_tree_view_column_new ();
+       gtk_tree_view_column_set_title(curcol, "Protocol");
+    renderer = gtk_cell_renderer_text_new();
+    gtk_tree_view_column_pack_start(curcol, renderer, True);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_princ_names), curcol);
+    gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
+
+       curcol = gtk_tree_view_column_new ();
+       gtk_tree_view_column_set_title(curcol, "Principal Name");
+    renderer = gtk_cell_renderer_text_new();
+    gtk_tree_view_column_pack_start(curcol, renderer, True);
+    gtk_tree_view_append_column(GTK_TREE_VIEW(treeview_princ_names), curcol);
+    gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
+
+       gtk_container_add (GTK_CONTAINER(frame1), treeview_princ_names);
+
+    store_princ_names = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER);
+       gtk_tree_view_set_model(GTK_TREE_VIEW(treeview_princ_names), GTK_TREE_MODEL(store_princ_names));
+    g_object_unref(store_princ_names);
+
        statusbar = gtk_statusbar_new ();
        gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
 
@@ -417,15 +457,16 @@ static GtkWidget* create_mainwindow (void)
 }
 
 
-int main(int argc, char **argv)
+ int main(int argc, char **argv)
 {
-       gtk_init(&argc, &argv);
        gepdump_init_subsystems;
        lp_load(dyn_CONFIGFILE,True,False,False);
        load_interfaces();
-       setup_logging("gepdump", True);
+       setup_logging(argv[0], DEBUG_STDERR);
+
+       gtk_init(&argc, &argv);
        mainwin = create_mainwindow();
        gtk_widget_show_all(mainwin);
-       gtk_main();
-       return 0;
+
+       return gtk_event_loop();
 }