r9772: Make credentials callbacks more consistant with the abstraction
[samba.git] / source / gtk / common / gtk-smb.c
index 9806c8903f6926e06b9f74b9b11507754bc68e71..57a437ef966247429cf28a8cfac7d27addf6dc70 100644 (file)
@@ -2,7 +2,7 @@
    Unix SMB/CIFS implementation.
    SMB-related GTK+ functions
    
-   Copyright (C) Jelmer Vernooij 2004
+   Copyright (C) Jelmer Vernooij 2004-2005
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
 */
 
 #include "includes.h"
-#include "gtk/common/select.h"
 #include "gtk/common/gtk-smb.h"
+#include "gtk/common/select.h"
 
-void gtk_show_werror(GtkWidget *win, WERROR err) 
+void gtk_show_werror(GtkWidget *win, const char *message, WERROR err) 
 {
        GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win), 
-                GTK_DIALOG_DESTROY_WITH_PARENT,
-         GTK_MESSAGE_ERROR,
-         GTK_BUTTONS_CLOSE,
-                "Windows error: %s\n", win_errstr(err));
+                                                   GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                   GTK_MESSAGE_ERROR,
+                                                   GTK_BUTTONS_CLOSE,
+                                                   "%s: %s\n", message?message: "Windows error",
+                                                   win_errstr(err));
        gtk_dialog_run (GTK_DIALOG (dialog));
        gtk_widget_destroy (dialog);
 }
                    
-void gtk_show_ntstatus(GtkWidget *win, NTSTATUS status) 
+void gtk_show_ntstatus(GtkWidget *win, const char *message, NTSTATUS status) 
 {
        GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win), 
-                GTK_DIALOG_DESTROY_WITH_PARENT,
-         GTK_MESSAGE_ERROR,
-         GTK_BUTTONS_CLOSE,
-                "Windows error: %s\n", nt_errstr(status));
+                                                   GTK_DIALOG_DESTROY_WITH_PARENT,
+                                                   GTK_MESSAGE_ERROR,
+                                                   GTK_BUTTONS_CLOSE,
+                                                   "%s: %s\n", message?message:"Windows error",
+                                                   nt_errstr(status));
        gtk_dialog_run (GTK_DIALOG (dialog));
        gtk_widget_destroy (dialog);
 }
@@ -48,7 +50,7 @@ void gtk_show_ntstatus(GtkWidget *win, NTSTATUS status)
 static void on_browse_activate  (GtkButton     *button,  gpointer         user_data)
 {
        GtkRpcBindingDialog *rbd = user_data;
-       GtkWidget *shd = gtk_select_host_dialog_new(rbd->sam_pipe, TRUE);
+       GtkWidget *shd = gtk_select_host_dialog_new(rbd->sam_pipe);
        if(gtk_dialog_run(GTK_DIALOG(shd)) == GTK_RESPONSE_ACCEPT) {
                gtk_entry_set_text(GTK_ENTRY(rbd->entry_host), gtk_select_host_dialog_get_host(GTK_SELECT_HOST_DIALOG(shd)));
        }
@@ -56,11 +58,6 @@ static void on_browse_activate  (GtkButton     *button,  gpointer         user_d
        gtk_widget_destroy(GTK_WIDGET(shd));
 }
 
-static void on_krb5_toggled(GtkToggleButton *togglebutton, GtkRpcBindingDialog *d)
-{
-       gtk_widget_set_sensitive(d->entry_password, !gtk_toggle_button_get_active(togglebutton));
-}
-
 static void on_ncalrpc_toggled(GtkToggleButton *tb, GtkRpcBindingDialog *d)
 {
        gtk_widget_set_sensitive(d->frame_host, !gtk_toggle_button_get_active(tb));
@@ -76,22 +73,17 @@ static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_di
        GtkWidget *hbox1;
        GtkWidget *lbl_name;
        GtkWidget *label2;
+       GtkWidget *label3;
        GtkWidget *frame_security;
        GtkWidget *vbox2;
-       GtkWidget *label3;
-       GtkWidget *table1;
-       GtkWidget *lbl_username;
-       GtkWidget *lbl_password;
        GtkWidget *btn_browse;
-       GtkWidget *label9;
-       GtkWidget *lbl_credentials;
        GtkWidget *dialog_action_area1;
        GtkWidget *btn_cancel;
        GtkWidget *btn_connect;
        GSList *transport_smb_group = NULL;
 
        gtk_rpc_binding_dialog->mem_ctx = talloc_init("gtk_rcp_binding_dialog");
-       
+
        gtk_window_set_title (GTK_WINDOW (gtk_rpc_binding_dialog), "Connect");
 
        dialog_vbox1 = GTK_DIALOG (gtk_rpc_binding_dialog)->vbox;
@@ -153,6 +145,10 @@ static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_di
        gtk_frame_set_label_widget (GTK_FRAME (gtk_rpc_binding_dialog->frame_host), label2);
 
        frame_security = gtk_frame_new (NULL);
+
+       label3 = gtk_label_new ("Security");
+       gtk_frame_set_label_widget (GTK_FRAME (frame_security), label3);
+
        gtk_box_pack_start (GTK_BOX (vbox1), frame_security, TRUE, TRUE, 0);
 
        vbox2 = gtk_vbox_new (FALSE, 0);
@@ -164,63 +160,6 @@ static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_di
        gtk_rpc_binding_dialog->chk_seal = gtk_check_button_new_with_mnemonic ("_Seal");
        gtk_box_pack_start (GTK_BOX (vbox2), gtk_rpc_binding_dialog->chk_seal, FALSE, FALSE, 0);
 
-       label3 = gtk_label_new ("Security");
-       gtk_frame_set_label_widget (GTK_FRAME (frame_security), label3);
-
-       gtk_rpc_binding_dialog->frame_credentials = gtk_frame_new (NULL);
-       gtk_box_pack_start (GTK_BOX (dialog_vbox1), gtk_rpc_binding_dialog->frame_credentials, TRUE, TRUE, 0);
-
-       table1 = gtk_table_new (3, 2, FALSE);
-       gtk_container_add (GTK_CONTAINER (gtk_rpc_binding_dialog->frame_credentials), table1);
-
-       lbl_username = gtk_label_new ("Username:");
-       gtk_table_attach (GTK_TABLE (table1), lbl_username, 0, 1, 0, 1,
-                                         (GtkAttachOptions) (GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-       gtk_misc_set_alignment (GTK_MISC (lbl_username), 0, 0.5);
-
-       lbl_password = gtk_label_new ("Password:");
-       gtk_table_attach (GTK_TABLE (table1), lbl_password, 0, 1, 1, 2,
-                                         (GtkAttachOptions) (GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-       gtk_misc_set_alignment (GTK_MISC (lbl_password), 0, 0.5);
-
-       label9 = gtk_label_new ("");
-       gtk_table_attach (GTK_TABLE (table1), label9, 0, 1, 2, 3,
-                                         (GtkAttachOptions) (GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-       gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5);
-
-       gtk_rpc_binding_dialog->entry_password = gtk_entry_new ();
-       gtk_entry_set_visibility (GTK_ENTRY (gtk_rpc_binding_dialog->entry_password), FALSE);
-       gtk_table_attach (GTK_TABLE (table1), gtk_rpc_binding_dialog->entry_password, 1, 2, 1, 2,
-                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-
-       gtk_rpc_binding_dialog->entry_username = gtk_entry_new ();
-       gtk_table_attach (GTK_TABLE (table1), gtk_rpc_binding_dialog->entry_username, 1, 2, 0, 1,
-                                         (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-
-       gtk_entry_set_text(GTK_ENTRY(gtk_rpc_binding_dialog->entry_username), getenv("LOGNAME"));
-
-       gtk_rpc_binding_dialog->krb5_chk_button = gtk_check_button_new_with_mnemonic ("_Use kerberos");
-       gtk_table_attach (GTK_TABLE (table1), gtk_rpc_binding_dialog->krb5_chk_button, 1, 2, 2, 3,
-                                         (GtkAttachOptions) (GTK_FILL),
-                                         (GtkAttachOptions) (0), 0, 0);
-
-       g_signal_connect ((gpointer) gtk_rpc_binding_dialog->krb5_chk_button, "toggled",
-                                         G_CALLBACK (on_krb5_toggled),
-                                         gtk_rpc_binding_dialog);
-
-       /* Poor man's autodetection */
-       if(getenv("KRB5CCNAME")) {
-               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gtk_rpc_binding_dialog->krb5_chk_button), TRUE);
-       }
-
-       lbl_credentials = gtk_label_new ("Credentials");
-       gtk_frame_set_label_widget (GTK_FRAME (gtk_rpc_binding_dialog->frame_credentials), lbl_credentials);
-
        dialog_action_area1 = GTK_DIALOG (gtk_rpc_binding_dialog)->action_area;
        gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
 
@@ -271,26 +210,13 @@ GType gtk_rpc_binding_dialog_get_type (void)
   return mytype;
 }
 
-GtkWidget *gtk_rpc_binding_dialog_new (BOOL nocredentials, struct sam_pipe *sam_pipe)
+GtkWidget *gtk_rpc_binding_dialog_new (struct dcerpc_pipe *sam_pipe)
 {
-       GtkRpcBindingDialog *d = GTK_RPC_BINDING_DIALOG ( gtk_type_new (gtk_rpc_binding_dialog_get_type ()));
-       if (nocredentials) {
-               gtk_widget_hide_all(d->frame_credentials);
-       }
+       GtkRpcBindingDialog *d = GTK_RPC_BINDING_DIALOG ( g_object_new (gtk_rpc_binding_dialog_get_type (), NULL));
        d->sam_pipe = sam_pipe;
        return GTK_WIDGET(d);
 }
 
-const char *gtk_rpc_binding_dialog_get_username(GtkRpcBindingDialog *d)
-{
-       return gtk_entry_get_text(GTK_ENTRY(d->entry_username));
-}
-
-const char *gtk_rpc_binding_dialog_get_password(GtkRpcBindingDialog *d)
-{
-       return gtk_entry_get_text(GTK_ENTRY(d->entry_password));
-}
-
 const char *gtk_rpc_binding_dialog_get_host(GtkRpcBindingDialog *d)
 {
        return gtk_entry_get_text(GTK_ENTRY(d->entry_host));
@@ -298,7 +224,7 @@ const char *gtk_rpc_binding_dialog_get_host(GtkRpcBindingDialog *d)
 
 struct dcerpc_binding *gtk_rpc_binding_dialog_get_binding(GtkRpcBindingDialog *d, TALLOC_CTX *mem_ctx)
 {
-       struct dcerpc_binding *binding = talloc_p(mem_ctx, struct dcerpc_binding);
+       struct dcerpc_binding *binding = talloc(mem_ctx, struct dcerpc_binding);
 
        ZERO_STRUCT(binding->object);
 
@@ -339,8 +265,9 @@ GtkWidget *create_gtk_samba_about_dialog (const char *appname)
        GtkWidget *samba_about_dialog;
        GtkWidget *dialog_vbox1;
        GtkWidget *label1;
-       GtkWidget *label3;
        GtkWidget *label2;
+       GtkWidget *label3;
+       GtkWidget *label4;
        GtkWidget *dialog_action_area1;
        GtkWidget *okbutton1;
 
@@ -355,11 +282,14 @@ GtkWidget *create_gtk_samba_about_dialog (const char *appname)
        label1 = gtk_label_new (appname);
        gtk_box_pack_start (GTK_BOX (dialog_vbox1), label1, FALSE, FALSE, 0);
 
+       label2 = gtk_label_new (samba_version_string());
+       gtk_box_pack_start (GTK_BOX (dialog_vbox1), label2, FALSE, FALSE, 0);
+
        label3 = gtk_label_new_with_mnemonic ("Part of Samba <http://www.samba.org/>");
        gtk_box_pack_start (GTK_BOX (dialog_vbox1), label3, FALSE, FALSE, 0);
 
-       label2 = gtk_label_new ("\302\251 1992-2004 The Samba Team");
-       gtk_box_pack_start (GTK_BOX (dialog_vbox1), label2, FALSE, FALSE, 0);
+       label4 = gtk_label_new ("\302\251 1992-2005 The Samba Team");
+       gtk_box_pack_start (GTK_BOX (dialog_vbox1), label4, FALSE, FALSE, 0);
 
        dialog_action_area1 = GTK_DIALOG (samba_about_dialog)->action_area;
        gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);