r21296: remove the session specific encryption from the attributes
[Samba/ekacnet.git] / source4 / gtk / tools / gwsam.c
blob214ab04935ce12cf32a301664b413f0a7ac21921
1 /*
2 Unix SMB/CIFS implementation.
3 GTK+ SAM frontend
5 Copyright (C) Jelmer Vernooij 2004
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22 #include "includes.h"
23 #include "librpc/gen_ndr/ndr_samr_c.h"
24 #include "gtk/common/select.h"
25 #include "gtk/common/gtk-smb.h"
26 #include "auth/credentials/credentials.h"
28 struct policy_handle sam_handle;
29 struct dcerpc_pipe *sam_pipe = NULL;
30 static struct policy_handle domain_handle;
31 GtkWidget *mainwin;
32 GtkWidget *seldomain;
33 GtkListStore *store_users;
34 GtkListStore *store_groups;
35 static GtkWidget *mnu_disconnect;
37 static void update_grouplist(void)
39 if(!sam_pipe) return;
40 //FIXME
43 static void update_userlist(void)
45 NTSTATUS status;
46 struct samr_EnumDomainUsers r;
47 uint32_t resume_handle=0;
48 int i;
49 TALLOC_CTX *mem_ctx;
51 if(!sam_pipe) return;
53 gtk_list_store_clear(store_users);
55 mem_ctx = talloc_init("update_userlist");
56 r.in.domain_handle = &domain_handle;
57 r.in.resume_handle = &resume_handle;
58 r.in.acct_flags = 0;
59 r.in.max_size = (uint32_t)100;
60 r.out.resume_handle = &resume_handle;
62 status = dcerpc_samr_EnumDomainUsers(sam_pipe, mem_ctx, &r);
63 if (!NT_STATUS_IS_OK(status)) {
64 gtk_show_ntstatus(mainwin, "While enumerating domain users", status);
65 talloc_free(mem_ctx);
66 return;
69 if (!r.out.sam || r.out.sam->count == 0) {
70 talloc_free(mem_ctx);
71 return;
74 for (i=0;i<r.out.sam->count;i++) {
75 GtkTreeIter iter;
76 gtk_list_store_append(store_users, &iter);
77 gtk_list_store_set (store_users, &iter,
78 0, r.out.sam->entries[i].name.string,
79 1, r.out.sam->entries[i].name.string,
80 2, 0, -1);
82 /* FIXME: Query user info */
84 // if (!test_OpenUser(sam_pipe, mem_ctx, &sam_handle, r.out.sam->entries[i].idx)) {
85 // ret = False;
86 // }
88 talloc_free(mem_ctx);
91 static void on_new1_activate(GtkMenuItem *menuitem, gpointer user_data)
93 /* FIXME */
96 static void on_select_domain_activate(GtkMenuItem *menuitem, gpointer user_data)
98 GtkSelectDomainDialog *d;
99 gint result;
100 d = GTK_SELECT_DOMAIN_DIALOG(gtk_select_domain_dialog_new(sam_pipe));
101 result = gtk_dialog_run(GTK_DIALOG(d));
102 switch(result) {
103 case GTK_RESPONSE_OK:
104 break;
105 default:
106 gtk_widget_destroy(GTK_WIDGET(d));
107 return;
109 domain_handle = gtk_select_domain_dialog_get_handle(d);
111 update_userlist();
112 update_grouplist();
114 gtk_widget_destroy(GTK_WIDGET(d));
117 static void connect_sam(void)
119 struct samr_Connect r;
120 TALLOC_CTX *mem_ctx;
121 NTSTATUS status;
123 mem_ctx = talloc_init("gwsam_connect");
125 sam_pipe = gtk_connect_rpc_interface(talloc_autofree_context(), &dcerpc_table_samr);
127 if (!sam_pipe)
128 return;
130 r.in.system_name = 0;
131 r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED;
132 r.out.connect_handle = &sam_handle;
134 status = dcerpc_samr_Connect(sam_pipe, mem_ctx, &r);
135 if (!NT_STATUS_IS_OK(status)) {
136 gtk_show_ntstatus(mainwin, "While running connect on SAMR", status);
137 sam_pipe = NULL;
138 talloc_free(mem_ctx);
139 return;
142 gtk_widget_set_sensitive (seldomain, TRUE);
143 gtk_widget_set_sensitive (mnu_disconnect, TRUE);
145 sam_pipe = talloc_reference(talloc_autofree_context(), sam_pipe);
146 talloc_free(mem_ctx);
149 static void on_connect_activate (GtkMenuItem *menuitem, gpointer user_data)
151 connect_sam();
152 /* FIXME: Connect to default domain */
155 static void on_disconnect_activate (GtkMenuItem *menuitem, gpointer user_data)
157 gtk_widget_set_sensitive (mnu_disconnect, FALSE);
160 static void on_quit_activate (GtkMenuItem *menuitem, gpointer user_data)
162 talloc_free(sam_pipe);
164 gtk_main_quit();
167 static void on_account_activate(GtkMenuItem *menuitem, gpointer user_data)
169 //FIXME
173 static void on_user_rights_activate(GtkMenuItem *menuitem, gpointer user_data)
175 //FIXME
179 static void on_audit_activate(GtkMenuItem *menuitem, gpointer user_data)
181 //FIXME
185 static void on_trust_relations_activate(GtkMenuItem *menuitem, gpointer user_data)
187 //FIXME
191 static void on_refresh_activate(GtkMenuItem *menuitem, gpointer user_data)
193 update_userlist();
194 update_grouplist();
198 static void on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
200 GtkDialog *aboutwin = GTK_DIALOG(create_gtk_samba_about_dialog("gwsam"));
201 gtk_dialog_run(aboutwin);
202 gtk_widget_destroy(GTK_WIDGET(aboutwin));
205 static GtkWidget* create_mainwindow (void)
207 GtkWidget *vbox1;
208 GtkWidget *mnu_connect;
209 GtkWidget *menubar;
210 GtkWidget *menuitem1;
211 GtkWidget *menuitem1_menu;
212 GtkWidget *new1;
213 GtkWidget *separatormenuitem1;
214 GtkWidget *quit;
215 GtkCellRenderer *renderer;
216 GtkTreeViewColumn *curcol;
217 GtkWidget *policies;
218 GtkWidget *policies_menu;
219 GtkWidget *account;
220 GtkWidget *user_rights;
221 GtkWidget *audit;
222 GtkWidget *separator1;
223 GtkWidget *trust_relations;
224 GtkWidget *menuitem3;
225 GtkWidget *menuitem3_menu;
226 GtkWidget *refresh;
227 GtkWidget *menuitem4;
228 GtkWidget *menuitem4_menu;
229 GtkWidget *about;
230 GtkWidget *vpaned;
231 GtkWidget *scrolledwindow1;
232 GtkWidget *user_list;
233 GtkWidget *scrolledwindow2;
234 GtkWidget *group_list;
235 GtkWidget *statusbar;
236 GtkAccelGroup *accel_group;
238 accel_group = gtk_accel_group_new ();
240 mainwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
241 gtk_window_set_default_size (GTK_WINDOW (mainwin), 642, 562);
242 gtk_window_set_title (GTK_WINDOW (mainwin), "User Manager");
244 vbox1 = gtk_vbox_new (FALSE, 0);
245 gtk_container_add (GTK_CONTAINER (mainwin), vbox1);
247 menubar = gtk_menu_bar_new ();
248 gtk_box_pack_start (GTK_BOX (vbox1), menubar, FALSE, FALSE, 0);
250 menuitem1 = gtk_menu_item_new_with_mnemonic ("_File");
251 gtk_container_add (GTK_CONTAINER (menubar), menuitem1);
253 menuitem1_menu = gtk_menu_new ();
254 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
256 mnu_connect = gtk_menu_item_new_with_mnemonic ("_Connect");
257 gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_connect);
259 mnu_disconnect = gtk_menu_item_new_with_mnemonic ("_Disconnect");
260 gtk_widget_set_sensitive (mnu_disconnect, FALSE);
261 gtk_container_add (GTK_CONTAINER (menuitem1_menu), mnu_disconnect);
263 seldomain = gtk_menu_item_new_with_mnemonic("_Select Domain");
264 gtk_widget_set_sensitive (seldomain, FALSE);
265 gtk_container_add (GTK_CONTAINER (menuitem1_menu), seldomain);
267 separatormenuitem1 = gtk_separator_menu_item_new ();
268 gtk_container_add (GTK_CONTAINER (menuitem1_menu), separatormenuitem1);
269 gtk_widget_set_sensitive (separatormenuitem1, FALSE);
271 quit = gtk_image_menu_item_new_from_stock ("gtk-quit", accel_group);
272 gtk_container_add (GTK_CONTAINER (menuitem1_menu), quit);
274 menuitem1 = gtk_menu_item_new_with_mnemonic ("_User");
275 gtk_container_add (GTK_CONTAINER (menubar), menuitem1);
276 gtk_widget_set_sensitive (menuitem1, FALSE);
278 menuitem1_menu = gtk_menu_new ();
279 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem1), menuitem1_menu);
281 new1 = gtk_image_menu_item_new_from_stock ("gtk-new", accel_group);
282 gtk_container_add (GTK_CONTAINER (menuitem1_menu), new1);
284 policies = gtk_menu_item_new_with_mnemonic ("_Policies");
285 gtk_container_add (GTK_CONTAINER (menubar), policies);
286 gtk_widget_set_sensitive (policies, FALSE);
288 policies_menu = gtk_menu_new ();
289 gtk_menu_item_set_submenu (GTK_MENU_ITEM (policies), policies_menu);
291 account = gtk_menu_item_new_with_mnemonic ("_Account...");
292 gtk_container_add (GTK_CONTAINER (policies_menu), account);
294 user_rights = gtk_menu_item_new_with_mnemonic ("_User Rights...");
295 gtk_container_add (GTK_CONTAINER (policies_menu), user_rights);
297 audit = gtk_menu_item_new_with_mnemonic ("A_udit...");
298 gtk_container_add (GTK_CONTAINER (policies_menu), audit);
300 separator1 = gtk_separator_menu_item_new ();
301 gtk_container_add (GTK_CONTAINER (policies_menu), separator1);
302 gtk_widget_set_sensitive (separator1, FALSE);
304 trust_relations = gtk_menu_item_new_with_mnemonic ("_Trust relations");
305 gtk_container_add (GTK_CONTAINER (policies_menu), trust_relations);
307 menuitem3 = gtk_menu_item_new_with_mnemonic ("_View");
308 gtk_container_add (GTK_CONTAINER (menubar), menuitem3);
310 menuitem3_menu = gtk_menu_new ();
311 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem3), menuitem3_menu);
313 refresh = gtk_image_menu_item_new_from_stock ("gtk-refresh", accel_group);
314 gtk_container_add (GTK_CONTAINER (menuitem3_menu), refresh);
315 gtk_widget_set_sensitive (refresh, FALSE);
317 menuitem4 = gtk_menu_item_new_with_mnemonic ("_Help");
318 gtk_container_add (GTK_CONTAINER (menubar), menuitem4);
320 menuitem4_menu = gtk_menu_new ();
321 gtk_menu_item_set_submenu (GTK_MENU_ITEM (menuitem4), menuitem4_menu);
323 about = gtk_menu_item_new_with_mnemonic ("_About");
324 gtk_container_add (GTK_CONTAINER (menuitem4_menu), about);
326 vpaned = gtk_vpaned_new ();
327 gtk_box_pack_start (GTK_BOX (vbox1), vpaned, TRUE, TRUE, 0);
329 scrolledwindow1 = gtk_scrolled_window_new (NULL, NULL);
330 gtk_paned_pack1 (GTK_PANED (vpaned), scrolledwindow1, FALSE, TRUE);
332 user_list = gtk_tree_view_new ();
333 gtk_container_add (GTK_CONTAINER (scrolledwindow1), user_list);
335 curcol = gtk_tree_view_column_new();
336 gtk_tree_view_column_set_title(curcol, "Name");
337 renderer = gtk_cell_renderer_text_new();
338 gtk_tree_view_column_pack_start(curcol, renderer, True);
339 gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
340 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
342 curcol = gtk_tree_view_column_new();
343 gtk_tree_view_column_set_title(curcol, "Description");
344 renderer = gtk_cell_renderer_text_new();
345 gtk_tree_view_column_pack_start(curcol, renderer, True);
346 gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
347 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
349 curcol = gtk_tree_view_column_new();
350 gtk_tree_view_column_set_title(curcol, "RID");
351 renderer = gtk_cell_renderer_text_new();
352 gtk_tree_view_column_pack_start(curcol, renderer, True);
353 gtk_tree_view_append_column(GTK_TREE_VIEW(user_list), curcol);
354 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
356 store_users = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
357 gtk_tree_view_set_model(GTK_TREE_VIEW(user_list), GTK_TREE_MODEL(store_users));
359 scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
360 gtk_paned_pack2 (GTK_PANED (vpaned), scrolledwindow2, TRUE, TRUE);
362 group_list = gtk_tree_view_new ();
363 gtk_container_add (GTK_CONTAINER (scrolledwindow2), group_list);
365 curcol = gtk_tree_view_column_new();
366 gtk_tree_view_column_set_title(curcol, "Name");
367 renderer = gtk_cell_renderer_text_new();
368 gtk_tree_view_column_pack_start(curcol, renderer, True);
369 gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
370 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 0);
372 curcol = gtk_tree_view_column_new();
373 gtk_tree_view_column_set_title(curcol, "Description");
374 renderer = gtk_cell_renderer_text_new();
375 gtk_tree_view_column_pack_start(curcol, renderer, True);
376 gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
377 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
379 curcol = gtk_tree_view_column_new();
380 gtk_tree_view_column_set_title(curcol, "RID");
381 renderer = gtk_cell_renderer_text_new();
382 gtk_tree_view_column_pack_start(curcol, renderer, True);
383 gtk_tree_view_append_column(GTK_TREE_VIEW(group_list), curcol);
384 gtk_tree_view_column_add_attribute(curcol, renderer, "text", 1);
386 store_groups = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
387 gtk_tree_view_set_model(GTK_TREE_VIEW(group_list), GTK_TREE_MODEL(store_groups));
389 statusbar = gtk_statusbar_new ();
390 gtk_box_pack_start (GTK_BOX (vbox1), statusbar, FALSE, FALSE, 0);
392 g_signal_connect ((gpointer) new1, "activate",
393 G_CALLBACK (on_new1_activate),
394 NULL);
395 g_signal_connect ((gpointer) seldomain, "activate",
396 G_CALLBACK (on_select_domain_activate),
397 NULL);
398 g_signal_connect ((gpointer) mnu_connect, "activate",
399 G_CALLBACK (on_connect_activate),
400 NULL);
401 g_signal_connect ((gpointer) mnu_disconnect, "activate",
402 G_CALLBACK (on_disconnect_activate),
403 NULL);
404 g_signal_connect ((gpointer) quit, "activate",
405 G_CALLBACK (on_quit_activate),
406 NULL);
407 g_signal_connect ((gpointer) account, "activate",
408 G_CALLBACK (on_account_activate),
409 NULL);
410 g_signal_connect ((gpointer) user_rights, "activate",
411 G_CALLBACK (on_user_rights_activate),
412 NULL);
413 g_signal_connect ((gpointer) audit, "activate",
414 G_CALLBACK (on_audit_activate),
415 NULL);
416 g_signal_connect ((gpointer) trust_relations, "activate",
417 G_CALLBACK (on_trust_relations_activate),
418 NULL);
419 g_signal_connect ((gpointer) refresh, "activate",
420 G_CALLBACK (on_refresh_activate),
421 NULL);
422 g_signal_connect ((gpointer) about, "activate",
423 G_CALLBACK (on_about_activate),
424 NULL);
426 gtk_window_add_accel_group (GTK_WINDOW (mainwin), accel_group);
428 return mainwin;
431 int main(int argc, char **argv)
433 lp_load();
434 setup_logging(argv[0], DEBUG_STDERR);
436 dcerpc_init();
438 gtk_init(&argc, &argv);
439 mainwin = create_mainwindow();
440 gtk_widget_show_all(mainwin);
442 return gtk_event_loop();