From 8e1ffff226e3016a38301a773ed8aa55bad5b710 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 11 Oct 2004 20:06:42 +0000 Subject: r2920: Support passing a handle to a SAMR pipe to a RPC Binding or Select Host dialog so that one can select a domain from the list of known domains. (This used to be commit 5e0bab891199c888bdf87faa29acc38d9ca5151b) --- source4/gtk/common/gtk-smb.c | 23 ++++++++++++++--------- source4/gtk/common/gtk-smb.h | 1 + source4/gtk/common/select.c | 3 +-- source4/gtk/common/select.h | 12 ++++++------ source4/gtk/tools/gregedit.c | 2 +- source4/gtk/tools/gwcrontab.c | 2 +- source4/gtk/tools/gwsam.c | 22 ++++++++++++++++++++-- 7 files changed, 44 insertions(+), 21 deletions(-) (limited to 'source4/gtk') diff --git a/source4/gtk/common/gtk-smb.c b/source4/gtk/common/gtk-smb.c index cb7a804866..f149775996 100644 --- a/source4/gtk/common/gtk-smb.c +++ b/source4/gtk/common/gtk-smb.c @@ -47,7 +47,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(TRUE); + GtkWidget *shd = gtk_select_host_dialog_new(rbd->sam_pipe, TRUE); 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))); } @@ -138,13 +138,16 @@ static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_di gtk_widget_show (gtk_rpc_binding_dialog->entry_host); gtk_box_pack_start (GTK_BOX (hbox1), gtk_rpc_binding_dialog->entry_host, TRUE, TRUE, 0); - btn_browse = gtk_button_new_with_label ("Browse"); - gtk_widget_show (btn_browse); - gtk_box_pack_start (GTK_BOX (hbox1), btn_browse, TRUE, TRUE, 0); + if(gtk_rpc_binding_dialog->sam_pipe) + { + btn_browse = gtk_button_new_with_label ("Browse"); + gtk_widget_show (btn_browse); + gtk_box_pack_start (GTK_BOX (hbox1), btn_browse, TRUE, TRUE, 0); - g_signal_connect ((gpointer) btn_browse, "pressed", - G_CALLBACK (on_browse_activate), - gtk_rpc_binding_dialog); + g_signal_connect ((gpointer) btn_browse, "pressed", + G_CALLBACK (on_browse_activate), + gtk_rpc_binding_dialog); + } label2 = gtk_label_new ("Host"); gtk_widget_show (label2); @@ -278,9 +281,11 @@ GType gtk_rpc_binding_dialog_get_type (void) return mytype; } -GtkWidget *gtk_rpc_binding_dialog_new (BOOL nocredentials) +GtkWidget *gtk_rpc_binding_dialog_new (BOOL nocredentials, struct sam_pipe *sam_pipe) { - return GTK_WIDGET ( gtk_type_new (gtk_rpc_binding_dialog_get_type ())); + GtkRpcBindingDialog *d = GTK_RPC_BINDING_DIALOG ( gtk_type_new (gtk_rpc_binding_dialog_get_type ())); + d->sam_pipe = sam_pipe; + return GTK_WIDGET(d); } const char *gtk_rpc_binding_dialog_get_username(GtkRpcBindingDialog *d) diff --git a/source4/gtk/common/gtk-smb.h b/source4/gtk/common/gtk-smb.h index 0f34bb3249..09e5d0aa8d 100644 --- a/source4/gtk/common/gtk-smb.h +++ b/source4/gtk/common/gtk-smb.h @@ -40,6 +40,7 @@ struct _GtkRpcBindingDialog GtkWidget *entry_password; GtkWidget *krb5_chk_button; TALLOC_CTX *mem_ctx; + struct sam_pipe *sam_pipe; }; typedef struct _GtkRpcBindingDialogClass GtkRpcBindingDialogClass; diff --git a/source4/gtk/common/select.c b/source4/gtk/common/select.c index 653256c37e..3b29d0ed31 100644 --- a/source4/gtk/common/select.c +++ b/source4/gtk/common/select.c @@ -163,7 +163,6 @@ GtkWidget *gtk_select_domain_dialog_new (struct dcerpc_pipe *sam_pipe) } else if (r.out.sam) { for (i=0;icount;i++) { GtkTreeIter iter; - printf("- %s\n", r.out.sam->entries[i].name.name); gtk_list_store_append(d->store_domains, &iter); gtk_list_store_set (d->store_domains, &iter, 0, r.out.sam->entries[i].name.name, -1); } @@ -271,7 +270,7 @@ GType gtk_select_host_dialog_get_type (void) return mytype; } -GtkWidget *gtk_select_host_dialog_new (BOOL nocredentials) +GtkWidget *gtk_select_host_dialog_new (struct sam_pipe *sam_pipe, BOOL nocredentials) { return GTK_WIDGET ( gtk_type_new (gtk_select_host_dialog_get_type ())); } diff --git a/source4/gtk/common/select.h b/source4/gtk/common/select.h index b89712ffe0..3b3d09a99b 100644 --- a/source4/gtk/common/select.h +++ b/source4/gtk/common/select.h @@ -45,9 +45,9 @@ struct _GtkSelectDomainDialogClass GtkDialogClass parent_class; }; -#define GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_rpc_binding_dialog_get_type (), GtkSelectDomainDialog) -#define GTK_SELECT_DOMAIN_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_rpc_binding_dialog_class_get_type (), GtkSelectDomainDialogClass) -#define IS_GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_rpc_binding_dialog_get_type ()) +#define GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_select_domain_dialog_get_type (), GtkSelectDomainDialog) +#define GTK_SELECT_DOMAIN_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_select_domain_dialog_class_get_type (), GtkSelectDomainDialogClass) +#define IS_GTK_SELECT_DOMAIN_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_select_domain_dialog_get_type ()) typedef struct _GtkSelectHostDialog GtkSelectHostDialog; @@ -68,9 +68,9 @@ struct _GtkSelectHostDialogClass GtkDialogClass parent_class; }; -#define GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_rpc_binding_dialog_get_type (), GtkSelectHostDialog) -#define GTK_SELECT_HOST_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_rpc_binding_dialog_class_get_type (), GtkSelectHostDialogClass) -#define IS_GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_rpc_binding_dialog_get_type ()) +#define GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_CAST (obj, gtk_select_host_dialog_get_type (), GtkSelectHostDialog) +#define GTK_SELECT_HOST_DIALOG_CLASS(klass) GTK_CHECK_CLASS_CAST (klass, gtk_select_host_dialog_class_get_type (), GtkSelectHostDialogClass) +#define IS_GTK_SELECT_HOST_DIALOG(obj) GTK_CHECK_TYPE (obj, gtk_select_host_dialog_get_type ()) #endif diff --git a/source4/gtk/tools/gregedit.c b/source4/gtk/tools/gregedit.c index f7f5b3528a..1c81d8643c 100644 --- a/source4/gtk/tools/gregedit.c +++ b/source4/gtk/tools/gregedit.c @@ -158,7 +158,7 @@ static void on_open_remote_activate(GtkMenuItem *menuitem, gpointer user_data) char *credentials; const char *location; char *tmp; - GtkWidget *rpcwin = GTK_WIDGET(gtk_rpc_binding_dialog_new(TRUE)); + GtkWidget *rpcwin = GTK_WIDGET(gtk_rpc_binding_dialog_new(TRUE, NULL)); gint result = gtk_dialog_run(GTK_DIALOG(rpcwin)); WERROR error; diff --git a/source4/gtk/tools/gwcrontab.c b/source4/gtk/tools/gwcrontab.c index c742edf7e9..b3137a9a19 100644 --- a/source4/gtk/tools/gwcrontab.c +++ b/source4/gtk/tools/gwcrontab.c @@ -86,7 +86,7 @@ on_connect_activate (GtkMenuItem *menuitem, NTSTATUS status; gint result; - d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(FALSE)); + d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(FALSE, NULL)); result = gtk_dialog_run(GTK_DIALOG(d)); switch(result) { case GTK_RESPONSE_ACCEPT: diff --git a/source4/gtk/tools/gwsam.c b/source4/gtk/tools/gwsam.c index 951096ddef..a085c49897 100644 --- a/source4/gtk/tools/gwsam.c +++ b/source4/gtk/tools/gwsam.c @@ -27,6 +27,7 @@ struct dcerpc_pipe *sam_pipe = NULL; struct policy_handle domain_handle; GtkWidget *mainwin; GtkWidget *seldomain; +GtkWidget *mnu_disconnect; void update_grouplist(void) { @@ -112,7 +113,7 @@ void on_connect_activate (GtkMenuItem *menuitem, gpointer user_data) TALLOC_CTX *mem_ctx; gint result; - d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(FALSE)); + d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(FALSE, NULL)); result = gtk_dialog_run(GTK_DIALOG(d)); switch(result) { case GTK_RESPONSE_ACCEPT: @@ -137,16 +138,25 @@ void on_connect_activate (GtkMenuItem *menuitem, gpointer user_data) mem_ctx = talloc_init("connect"); status = dcerpc_samr_Connect(sam_pipe, mem_ctx, &r); - talloc_destroy(mem_ctx); if (!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(mainwin, status); sam_pipe = NULL; gtk_widget_destroy(GTK_WIDGET(d)); + talloc_destroy(mem_ctx); return; } gtk_widget_set_sensitive (seldomain, TRUE); + gtk_widget_set_sensitive (mnu_disconnect, TRUE); + gtk_window_set_title (GTK_WINDOW (mainwin), talloc_asprintf(mem_ctx, "User Manager - Connected to %s", gtk_rpc_binding_dialog_get_host(d))); gtk_widget_destroy(GTK_WIDGET(d)); + talloc_destroy(mem_ctx); +} + +void on_disconnect_activate (GtkMenuItem *menuitem, gpointer user_data) +{ + gtk_widget_set_sensitive (mnu_disconnect, FALSE); + gtk_window_set_title (GTK_WINDOW (mainwin), "User Manager"); } void @@ -265,6 +275,11 @@ create_mainwindow (void) gtk_widget_show (mnu_connect); gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_connect); + mnu_disconnect = gtk_menu_item_new_with_mnemonic ("_Disconnect"); + gtk_widget_show (mnu_disconnect); + gtk_widget_set_sensitive (mnu_disconnect, FALSE); + gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_disconnect); + seldomain = gtk_menu_item_new_with_mnemonic("_Select Domain"); gtk_widget_show(seldomain); gtk_widget_set_sensitive (seldomain, FALSE); @@ -378,6 +393,9 @@ create_mainwindow (void) g_signal_connect ((gpointer) mnu_connect, "activate", G_CALLBACK (on_connect_activate), NULL); + g_signal_connect ((gpointer) mnu_disconnect, "activate", + G_CALLBACK (on_disconnect_activate), + NULL); g_signal_connect ((gpointer) quit, "activate", G_CALLBACK (on_quit_activate), NULL); -- cgit