mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
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 commit is contained in:
parent
4a8b0302ef
commit
5e0bab8911
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -163,7 +163,6 @@ GtkWidget *gtk_select_domain_dialog_new (struct dcerpc_pipe *sam_pipe)
|
||||
} else if (r.out.sam) {
|
||||
for (i=0;i<r.out.sam->count;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 ()));
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user