From 86a2f18b964c358eb8c8d59381be5eb5962f3b4b Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 3 May 2006 09:11:36 +0000 Subject: r15408: Fix some small bugs in the GTK+ tools Add utility function for connection to an interface (This used to be commit 266f7472209e6ae4f70688cf06b8efa63d036d04) --- source4/gtk/common/gtk-smb.c | 18 +++++-- source4/gtk/common/gtk-smb.h | 1 - source4/gtk/common/select.c | 41 ++++++++++++++++ source4/gtk/common/select.h | 6 +-- source4/gtk/tools/gepdump.c | 41 +++------------- source4/gtk/tools/gwcrontab.c | 70 ++++++--------------------- source4/gtk/tools/gwsam.c | 104 ++++++++++++++++++++++++++--------------- source4/gtk/tools/gwsam_user.c | 4 +- 8 files changed, 145 insertions(+), 140 deletions(-) diff --git a/source4/gtk/common/gtk-smb.c b/source4/gtk/common/gtk-smb.c index f5830cc8d7..6968ccf106 100644 --- a/source4/gtk/common/gtk-smb.c +++ b/source4/gtk/common/gtk-smb.c @@ -26,6 +26,9 @@ #include "librpc/rpc/dcerpc.h" #include "auth/credentials/credentials.h" +/** + * Dialog error showing a WERROR + */ void gtk_show_werror(GtkWidget *win, const char *message, WERROR err) { GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win), @@ -38,6 +41,9 @@ void gtk_show_werror(GtkWidget *win, const char *message, WERROR err) gtk_widget_destroy (dialog); } +/** + * GTK+ dialog showing a NTSTATUS error + */ void gtk_show_ntstatus(GtkWidget *win, const char *message, NTSTATUS status) { GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(win), @@ -50,7 +56,7 @@ void gtk_show_ntstatus(GtkWidget *win, const char *message, NTSTATUS status) gtk_widget_destroy (dialog); } -static void on_browse_activate (GtkButton *button, gpointer user_data) +static void on_browse_activate (GtkButton *button, gpointer user_data) { GtkRpcBindingDialog *rbd = user_data; GtkWidget *shd = gtk_select_host_dialog_new(rbd->sam_pipe); @@ -117,8 +123,6 @@ static void gtk_rpc_binding_dialog_init (GtkRpcBindingDialog *gtk_rpc_binding_di gtk_radio_button_set_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip), transport_smb_group); transport_smb_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (gtk_rpc_binding_dialog->transport_tcp_ip)); - - label1 = gtk_label_new ("Transport"); gtk_frame_set_label_widget (GTK_FRAME (frame_transport), label1); @@ -213,6 +217,12 @@ GType gtk_rpc_binding_dialog_get_type (void) return mytype; } +/** + * Create a new GTK+ dialog asking for binding information for + * DCE/RPC + * + * Optionally gets a sam pipe that will be used to look up users + */ GtkWidget *gtk_rpc_binding_dialog_new (struct dcerpc_pipe *sam_pipe) { GtkRpcBindingDialog *d = GTK_RPC_BINDING_DIALOG ( g_object_new (gtk_rpc_binding_dialog_get_type (), NULL)); @@ -291,7 +301,7 @@ GtkWidget *create_gtk_samba_about_dialog (const char *appname) label3 = gtk_label_new_with_mnemonic ("Part of Samba "); gtk_box_pack_start (GTK_BOX (dialog_vbox1), label3, FALSE, FALSE, 0); - label4 = gtk_label_new ("\302\251 1992-2005 The Samba Team"); + label4 = gtk_label_new ("\302\251 1992-2006 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; diff --git a/source4/gtk/common/gtk-smb.h b/source4/gtk/common/gtk-smb.h index 16dbfaf5d6..ae72905272 100644 --- a/source4/gtk/common/gtk-smb.h +++ b/source4/gtk/common/gtk-smb.h @@ -22,7 +22,6 @@ #ifndef __GTK_SMB_H__ #define __GTK_SMB_H__ - #define GTK_DISABLE_DEPRECATED #include diff --git a/source4/gtk/common/select.c b/source4/gtk/common/select.c index c3e73b5c13..0547525cf3 100644 --- a/source4/gtk/common/select.c +++ b/source4/gtk/common/select.c @@ -23,6 +23,7 @@ #include "librpc/gen_ndr/ndr_samr_c.h" #include "gtk/common/select.h" #include "gtk/common/gtk-smb.h" +#include "auth/credentials/credentials.h" /* GtkSelectDomainDialog */ @@ -260,3 +261,43 @@ GtkWidget *gtk_select_host_dialog_new (struct dcerpc_pipe *sam_pipe) { return GTK_WIDGET ( g_object_new (gtk_select_host_dialog_get_type (), NULL )); } + +/** + * Connect to a specific interface, but ask the user + * for information not specified + */ +struct dcerpc_pipe *gtk_connect_rpc_interface(TALLOC_CTX *mem_ctx, const struct dcerpc_interface_table *table) +{ + GtkRpcBindingDialog *d; + NTSTATUS status; + struct dcerpc_pipe *pipe; + struct cli_credentials *cred; + gint result; + + d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(NULL)); + result = gtk_dialog_run(GTK_DIALOG(d)); + + if (result != GTK_RESPONSE_ACCEPT) { + gtk_widget_destroy(GTK_WIDGET(d)); + return NULL; + } + + cred = cli_credentials_init(mem_ctx); + cli_credentials_guess(cred); + cli_credentials_set_gtk_callbacks(cred); + + status = dcerpc_pipe_connect_b(mem_ctx, &pipe, + gtk_rpc_binding_dialog_get_binding(d, mem_ctx), + table, cred, NULL); + + if(!NT_STATUS_IS_OK(status)) { + gtk_show_ntstatus(NULL, "While connecting to interface", status); + gtk_widget_destroy(GTK_WIDGET(d)); + talloc_free(mem_ctx); + return NULL; + } + + gtk_widget_destroy(GTK_WIDGET(d)); + + return pipe; +} diff --git a/source4/gtk/common/select.h b/source4/gtk/common/select.h index 006d228e42..ddf9b1a5a9 100644 --- a/source4/gtk/common/select.h +++ b/source4/gtk/common/select.h @@ -22,8 +22,6 @@ #ifndef __GTK_SELECT_H__ #define __GTK_SELECT_H__ -#ifdef HAVE_GTK - #define GTK_DISABLE_DEPRECATED #include @@ -80,7 +78,7 @@ GtkWidget *gtk_select_host_dialog_new (struct dcerpc_pipe *sam_pipe); const char *gtk_select_host_dialog_get_host (GtkSelectHostDialog *d); GType gtk_select_host_dialog_get_type (void); - -#endif +struct dcerpc_interface_table; +struct dcerpc_pipe *gtk_connect_rpc_interface(TALLOC_CTX *mem_ctx, const struct dcerpc_interface_table *table); #endif diff --git a/source4/gtk/tools/gepdump.c b/source4/gtk/tools/gepdump.c index 5f7f346838..ccfcf1f5a6 100644 --- a/source4/gtk/tools/gepdump.c +++ b/source4/gtk/tools/gepdump.c @@ -23,6 +23,7 @@ #include "librpc/gen_ndr/ndr_epmapper_c.h" #include "librpc/gen_ndr/ndr_mgmt_c.h" #include "gtk/common/gtk-smb.h" +#include "gtk/common/select.h" #include "auth/gensec/gensec.h" /* @@ -166,40 +167,14 @@ static void on_refresh_clicked (GtkButton *btn, gpointer user_data) refresh_eps(); } -static void on_connect_clicked(GtkButton *btn, gpointer user_data) +static void on_connect_clicked(GtkButton *btn, gpointer user_data) { - GtkRpcBindingDialog *d; - const char *bs; - TALLOC_CTX *mem_ctx; NTSTATUS status; - gint result; - struct cli_credentials *credentials; - - d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(NULL)); - result = gtk_dialog_run(GTK_DIALOG(d)); - switch(result) { - case GTK_RESPONSE_ACCEPT: - break; - default: - gtk_widget_destroy(GTK_WIDGET(d)); - return; - } - - mem_ctx = talloc_init("connect"); - bs = gtk_rpc_binding_dialog_get_binding_string (d, mem_ctx); - - credentials = cli_credentials_init(mem_ctx); - cli_credentials_guess(credentials); - cli_credentials_set_gtk_callbacks(credentials); + TALLOC_CTX *mem_ctx = talloc_init("connect"); - status = dcerpc_pipe_connect(talloc_autofree_context(), &epmapper_pipe, bs, - &dcerpc_table_epmapper, - credentials, NULL); - - if (NT_STATUS_IS_ERR(status)) { - gtk_show_ntstatus(mainwin, "Error connecting to endpoint mapper", status); - goto fail; - } + epmapper_pipe = gtk_connect_rpc_interface(mem_ctx, &dcerpc_table_epmapper); + if (epmapper_pipe == NULL) + return; gtk_widget_set_sensitive( mnu_refresh, True ); @@ -210,11 +185,7 @@ static void on_connect_clicked(GtkButton *btn, gpointer user_data) if (NT_STATUS_IS_ERR(status)) { mgmt_pipe = NULL; gtk_show_ntstatus(NULL, "Error connecting to mgmt interface over secondary connection", status); - goto fail; } - -fail: - gtk_widget_destroy(GTK_WIDGET(d)); } static gboolean on_eps_select(GtkTreeSelection *selection, diff --git a/source4/gtk/tools/gwcrontab.c b/source4/gtk/tools/gwcrontab.c index 821787e5e3..fe21248363 100644 --- a/source4/gtk/tools/gwcrontab.c +++ b/source4/gtk/tools/gwcrontab.c @@ -22,12 +22,14 @@ #include "includes.h" #include "librpc/gen_ndr/ndr_atsvc_c.h" #include "gtk/common/gtk-smb.h" +#include "gtk/common/select.h" #include "auth/credentials/credentials.h" static struct dcerpc_pipe *at_pipe = NULL; static GtkWidget *mainwin; static GtkListStore *store_jobs; static GtkWidget *tasks; +static GtkWidget *new_task; static GtkWidget *entry_cmd; static GtkWidget *entry_repeat_weekly; static GtkWidget *entry_repeat_monthly; @@ -70,7 +72,6 @@ static void update_joblist(void) } talloc_free(mem_ctx); - gtk_widget_set_sensitive(tasks, TRUE); } static void on_job_select(GtkTreeSelection *sel, gpointer data) @@ -81,45 +82,12 @@ static void on_job_select(GtkTreeSelection *sel, gpointer data) static void on_connect_activate(GtkMenuItem *menuitem, gpointer user_data) { - GtkRpcBindingDialog *d; - NTSTATUS status; - struct cli_credentials *credentials; - gint result; - TALLOC_CTX *mem_ctx; + at_pipe = gtk_connect_rpc_interface(talloc_autofree_context(), &dcerpc_table_atsvc); - d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(NULL)); - result = gtk_dialog_run(GTK_DIALOG(d)); - switch(result) { - case GTK_RESPONSE_ACCEPT: - break; - default: - gtk_widget_destroy(GTK_WIDGET(d)); + if (!at_pipe) return; - } - - mem_ctx = talloc_init("gwcrontab_connect"); - /* If connected, get list of jobs */ - - credentials = cli_credentials_init(mem_ctx); - cli_credentials_guess(credentials); - cli_credentials_set_gtk_callbacks(credentials); - - status = dcerpc_pipe_connect_b(mem_ctx, &at_pipe, - gtk_rpc_binding_dialog_get_binding(d, mem_ctx), - &dcerpc_table_atsvc, - credentials, NULL); - if(!NT_STATUS_IS_OK(status)) { - gtk_show_ntstatus(mainwin, "Error while connecting to at service", status); - at_pipe = NULL; - gtk_widget_destroy(GTK_WIDGET(d)); - talloc_free(mem_ctx); - return; - } - gtk_widget_destroy(GTK_WIDGET(d)); - - at_pipe = talloc_reference(talloc_autofree_context(), at_pipe); - talloc_free(mem_ctx); + gtk_widget_set_sensitive (new_task, TRUE); update_joblist(); } @@ -129,12 +97,9 @@ static void on_quit_activate(GtkMenuItem *menuitem, gpointer user_data) gtk_main_quit(); } - static GtkWidget* create_new_job_dialog (void); -void -on_new_activate (GtkMenuItem *menuitem, - gpointer user_data) +void on_new_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkWidget *d = create_new_job_dialog(); gint result = gtk_dialog_run(GTK_DIALOG(d)); @@ -176,9 +141,7 @@ on_new_activate (GtkMenuItem *menuitem, } -void -on_delete_activate (GtkMenuItem *menuitem, - gpointer user_data) +void on_delete_activate(GtkMenuItem *menuitem, gpointer user_data) { GtkTreeSelection *sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(tasks)); GtkTreeModel *model = GTK_TREE_MODEL(store_jobs); @@ -227,7 +190,6 @@ static GtkWidget* create_mainwindow (void) GtkWidget *quit; GtkWidget *task; GtkWidget *task_menu; - GtkWidget *new; GtkCellRenderer *renderer; GtkTreeViewColumn *curcol; GtkWidget *menuitem7; @@ -273,8 +235,9 @@ static GtkWidget* create_mainwindow (void) task_menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (task), task_menu); - new = gtk_menu_item_new_with_mnemonic ("_New"); - gtk_container_add (GTK_CONTAINER (task_menu), new); + new_task = gtk_menu_item_new_with_mnemonic ("_New"); + gtk_container_add (GTK_CONTAINER (task_menu), new_task); + gtk_widget_set_sensitive (new_task, FALSE); delete = gtk_menu_item_new_with_mnemonic ("_Delete"); gtk_widget_set_sensitive(delete, FALSE); @@ -343,7 +306,7 @@ static GtkWidget* create_mainwindow (void) g_signal_connect ((gpointer) quit, "activate", G_CALLBACK (on_quit_activate), NULL); - g_signal_connect ((gpointer) new, "activate", + g_signal_connect ((gpointer) new_task, "activate", G_CALLBACK (on_new_activate), NULL); g_signal_connect ((gpointer) delete, "activate", G_CALLBACK (on_delete_activate), NULL); @@ -351,28 +314,23 @@ static GtkWidget* create_mainwindow (void) G_CALLBACK (on_about_activate), NULL); gtk_window_add_accel_group (GTK_WINDOW (mainwindow), accel_group); - gtk_widget_set_sensitive(tasks, FALSE); return mainwindow; } -void -on_chk_weekly_toggled (GtkToggleButton *togglebutton, - gpointer user_data) +void on_chk_weekly_toggled(GtkToggleButton *togglebutton, gpointer user_data) { gtk_widget_set_sensitive(entry_repeat_weekly, gtk_toggle_button_get_active(togglebutton)); } -void -on_chk_monthly_toggled (GtkToggleButton *togglebutton, - gpointer user_data) +void on_chk_monthly_toggled(GtkToggleButton *togglebutton, gpointer user_data) { gtk_widget_set_sensitive(entry_repeat_monthly, gtk_toggle_button_get_active(togglebutton)); } -static GtkWidget*create_new_job_dialog (void) +static GtkWidget *create_new_job_dialog (void) { GtkWidget *new_job_dialog; GtkWidget *dialog_vbox1; diff --git a/source4/gtk/tools/gwsam.c b/source4/gtk/tools/gwsam.c index d788dfd459..40331bfd09 100644 --- a/source4/gtk/tools/gwsam.c +++ b/source4/gtk/tools/gwsam.c @@ -30,6 +30,8 @@ struct dcerpc_pipe *sam_pipe = NULL; static struct policy_handle domain_handle; GtkWidget *mainwin; GtkWidget *seldomain; +GtkListStore *store_users; +GtkListStore *store_groups; static GtkWidget *mnu_disconnect; static void update_grouplist(void) @@ -48,11 +50,13 @@ static void update_userlist(void) if(!sam_pipe) return; + gtk_list_store_clear(store_users); + mem_ctx = talloc_init("update_userlist"); r.in.domain_handle = &domain_handle; r.in.resume_handle = &resume_handle; r.in.acct_flags = 0; - r.in.max_size = (uint32_t)-1; + r.in.max_size = (uint32_t)100; r.out.resume_handle = &resume_handle; status = dcerpc_samr_EnumDomainUsers(sam_pipe, mem_ctx, &r); @@ -68,7 +72,13 @@ static void update_userlist(void) } for (i=0;icount;i++) { - printf("Found: %s\n", r.out.sam->entries[i].name.string); + GtkTreeIter iter; + gtk_list_store_append(store_users, &iter); + gtk_list_store_set (store_users, &iter, + 0, r.out.sam->entries[i].name.string, + 1, r.out.sam->entries[i].name.string, + 2, 0, -1); + /* FIXME: Query user info */ // if (!test_OpenUser(sam_pipe, mem_ctx, &sam_handle, r.out.sam->entries[i].idx)) { @@ -80,7 +90,7 @@ static void update_userlist(void) static void on_new1_activate(GtkMenuItem *menuitem, gpointer user_data) { - + /* FIXME */ } static void on_select_domain_activate(GtkMenuItem *menuitem, gpointer user_data) @@ -106,40 +116,16 @@ static void on_select_domain_activate(GtkMenuItem *menuitem, gpointer user_data) static void connect_sam(void) { - GtkRpcBindingDialog *d; - NTSTATUS status; struct samr_Connect r; - struct cli_credentials *cred; TALLOC_CTX *mem_ctx; - gint result; - - d = GTK_RPC_BINDING_DIALOG(gtk_rpc_binding_dialog_new(NULL)); - result = gtk_dialog_run(GTK_DIALOG(d)); - switch(result) { - case GTK_RESPONSE_ACCEPT: - break; - default: - gtk_widget_destroy(GTK_WIDGET(d)); - return; - } + NTSTATUS status; mem_ctx = talloc_init("gwsam_connect"); - cred = cli_credentials_init(mem_ctx); - cli_credentials_guess(cred); - cli_credentials_set_gtk_callbacks(cred); - /* If connected, get list of jobs */ - status = dcerpc_pipe_connect_b(mem_ctx, &sam_pipe, - gtk_rpc_binding_dialog_get_binding(d, mem_ctx), - &dcerpc_table_samr, cred, NULL); + sam_pipe = gtk_connect_rpc_interface(talloc_autofree_context(), &dcerpc_table_samr); - if(!NT_STATUS_IS_OK(status)) { - gtk_show_ntstatus(mainwin, "While connecting to SAMR interface", status); - sam_pipe = NULL; - gtk_widget_destroy(GTK_WIDGET(d)); - talloc_free(mem_ctx); + if (!sam_pipe) return; - } r.in.system_name = 0; r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; @@ -149,30 +135,26 @@ static void connect_sam(void) if (!NT_STATUS_IS_OK(status)) { gtk_show_ntstatus(mainwin, "While running connect on SAMR", status); sam_pipe = NULL; - gtk_widget_destroy(GTK_WIDGET(d)); talloc_free(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)); sam_pipe = talloc_reference(talloc_autofree_context(), sam_pipe); talloc_free(mem_ctx); - } static void on_connect_activate (GtkMenuItem *menuitem, gpointer user_data) { connect_sam(); + /* FIXME: Connect to default domain */ } static 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"); } static void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data) @@ -230,6 +212,8 @@ static GtkWidget* create_mainwindow (void) GtkWidget *new1; GtkWidget *separatormenuitem1; GtkWidget *quit; + GtkCellRenderer *renderer; + GtkTreeViewColumn *curcol; GtkWidget *policies; GtkWidget *policies_menu; GtkWidget *account; @@ -297,8 +281,6 @@ static GtkWidget* create_mainwindow (void) new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group); gtk_container_add (GTK_CONTAINER (menuitem1_menu), new1); - - policies = gtk_menu_item_new_with_mnemonic ("_Policies"); gtk_container_add (GTK_CONTAINER (menubar), policies); gtk_widget_set_sensitive (policies, FALSE); @@ -350,12 +332,60 @@ static GtkWidget* create_mainwindow (void) user_list = gtk_tree_view_new (); gtk_container_add (GTK_CONTAINER (scrolledwindow1), user_list); + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "Name"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0); + + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "Description"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1); + + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "RID"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1); + + store_users = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); + gtk_tree_view_set_model(GTK_TREE_VIEW(user_list), GTK_TREE_MODEL(store_users)); + scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL); gtk_paned_pack2 (GTK_PANED (vpaned), scrolledwindow2, TRUE, TRUE); group_list = gtk_tree_view_new (); gtk_container_add (GTK_CONTAINER (scrolledwindow2), group_list); + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "Name"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0); + + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "Description"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1); + + curcol = gtk_tree_view_column_new(); + gtk_tree_view_column_set_title(curcol, "RID"); + renderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(curcol, renderer, True); + gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol); + gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1); + + store_groups = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); + gtk_tree_view_set_model(GTK_TREE_VIEW(group_list), GTK_TREE_MODEL(store_groups)); + statusbar = gtk_statusbar_new (); gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0); diff --git a/source4/gtk/tools/gwsam_user.c b/source4/gtk/tools/gwsam_user.c index ffd8ae28eb..81580f8b19 100644 --- a/source4/gtk/tools/gwsam_user.c +++ b/source4/gtk/tools/gwsam_user.c @@ -22,9 +22,7 @@ #include "includes.h" #include "gtk/common/gtk-smb.h" - -GtkWidget* -create_user_edit_dialog (void) +GtkWidget* create_user_edit_dialog (void) { GtkWidget *user_edit_dialog; GtkWidget *dialog_vbox1; -- cgit