summaryrefslogtreecommitdiff
path: root/src/editldap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/editldap.c')
-rw-r--r--src/editldap.c611
1 files changed, 611 insertions, 0 deletions
diff --git a/src/editldap.c b/src/editldap.c
new file mode 100644
index 0000000..ebb7a25
--- /dev/null
+++ b/src/editldap.c
@@ -0,0 +1,611 @@
1/*
2 * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
3 * Copyright (C) 2001 Match Grun
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 */
19
20/*
21 * Edit LDAP address book data.
22 */
23
24#ifdef HAVE_CONFIG_H
25# include "config.h"
26#endif
27
28#ifdef USE_LDAP
29
30#include "defs.h"
31
32#include <glib.h>
33#include <glib/gi18n.h>
34#include <gdk/gdkkeysyms.h>
35#include <gtk/gtkwindow.h>
36#include <gtk/gtksignal.h>
37#include <gtk/gtklabel.h>
38#include <gtk/gtkentry.h>
39#include <gtk/gtktable.h>
40#include <gtk/gtkbutton.h>
41#include <gtk/gtkstatusbar.h>
42#include <gtk/gtkspinbutton.h>
43#include <gtk/gtkvbox.h>
44#include <gtk/gtknotebook.h>
45#include <gtk/gtkoptionmenu.h>
46
47#include "addressbook.h"
48#include "prefs_common.h"
49#include "addressitem.h"
50#include "mgutils.h"
51#include "syldap.h"
52#include "editldap_basedn.h"
53#include "manage_window.h"
54#include "gtkutils.h"
55
56#define ADDRESSBOOK_GUESS_LDAP_NAME "MyServer"
57#define ADDRESSBOOK_GUESS_LDAP_SERVER "localhost"
58
59#define LDAPEDIT_TABLE_ROWS 6
60#define LDAPEDIT_TABLE_COLS 3
61
62static struct _LDAPEdit {
63 GtkWidget *window;
64 GtkWidget *notebook;
65 GtkWidget *hbbox;
66 GtkWidget *ok_btn;
67 GtkWidget *cancel_btn;
68 GtkWidget *statusbar;
69 gint status_cid;
70 GtkWidget *entry_name;
71 GtkWidget *entry_server;
72 GtkWidget *spinbtn_port;
73 GtkWidget *entry_baseDN;
74 GtkWidget *spinbtn_timeout;
75 GtkWidget *entry_bindDN;
76 GtkWidget *entry_bindPW;
77 GtkWidget *entry_criteria;
78 GtkWidget *spinbtn_maxentry;
79} ldapedit;
80
81/*
82* Edit functions.
83*/
84static void edit_ldap_status_show( gchar *msg ) {
85 if( ldapedit.statusbar != NULL ) {
86 gtk_statusbar_pop( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid );
87 if( msg ) {
88 gtk_statusbar_push( GTK_STATUSBAR(ldapedit.statusbar), ldapedit.status_cid, msg );
89 }
90 }
91}
92
93static void edit_ldap_ok( GtkWidget *widget, gboolean *cancelled ) {
94 *cancelled = FALSE;
95 gtk_main_quit();
96}
97
98static void edit_ldap_cancel( GtkWidget *widget, gboolean *cancelled ) {
99 *cancelled = TRUE;
100 gtk_main_quit();
101}
102
103static gint edit_ldap_delete_event( GtkWidget *widget, GdkEventAny *event, gboolean *cancelled ) {
104 *cancelled = TRUE;
105 gtk_main_quit();
106 return TRUE;
107}
108
109static gboolean edit_ldap_key_pressed( GtkWidget *widget, GdkEventKey *event, gboolean *cancelled ) {
110 if (event && event->keyval == GDK_Escape) {
111 *cancelled = TRUE;
112 gtk_main_quit();
113 }
114 return FALSE;
115}
116
117static void edit_ldap_switch_page( GtkWidget *widget ) {
118 edit_ldap_status_show( "" );
119}
120
121static void edit_ldap_server_check( void ) {
122 gchar *sHost, *sBind, *sPass;
123 gint iPort, iTime;
124 gchar *sMsg;
125 gchar *sBaseDN = NULL;
126 gint iBaseDN = 0;
127 gboolean flg;
128
129 edit_ldap_status_show( "" );
130 flg = FALSE;
131 sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
132 sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
133 sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
134 iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
135 iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
136 g_strchomp( sHost ); g_strchug( sHost );
137 g_strchomp( sBind ); g_strchug( sBind );
138 g_strchomp( sPass ); g_strchug( sPass );
139 if( *sHost != '\0' ) {
140 /* Test connection to server */
141 if( syldap_test_connect_s( sHost, iPort ) ) {
142 /* Attempt to read base DN */
143 GList *baseDN = syldap_read_basedn_s( sHost, iPort, sBind, sPass, iTime );
144 if( baseDN ) {
145 GList *node = baseDN;
146 while( node ) {
147 ++iBaseDN;
148 if( ! sBaseDN ) {
149 sBaseDN = g_strdup( node->data );
150 }
151 node = g_list_next( node );
152 }
153 mgu_free_dlist( baseDN );
154 baseDN = node = NULL;
155 }
156 flg = TRUE;
157 }
158 }
159 g_free( sHost );
160 g_free( sBind );
161 g_free( sPass );
162
163 if( sBaseDN ) {
164 /* Load search DN */
165 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), sBaseDN);
166 g_free( sBaseDN );
167 }
168
169 /* Display appropriate message */
170 if( flg ) {
171 sMsg = _( "Connected successfully to server" );
172 }
173 else {
174 sMsg = _( "Could not connect to server" );
175 }
176 edit_ldap_status_show( sMsg );
177}
178
179static void edit_ldap_basedn_select( void ) {
180 gchar *sHost, *sBind, *sPass, *sBase;
181 gint iPort, iTime;
182 gchar *selectDN;
183
184 sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
185 sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 );
186 sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
187 sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
188 iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
189 iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
190 g_strchomp( sHost ); g_strchug( sHost );
191 g_strchomp( sBind ); g_strchug( sBind );
192 g_strchomp( sPass ); g_strchug( sPass );
193 selectDN = edit_ldap_basedn_selection( sHost, iPort, sBase, iTime, sBind, sPass );
194 if( selectDN ) {
195 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), selectDN);
196 g_free( selectDN );
197 selectDN = NULL;
198 }
199 g_free( sHost );
200 g_free( sBase );
201 g_free( sBind );
202 g_free( sPass );
203}
204
205static void edit_ldap_search_reset( void ) {
206 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
207}
208
209static void addressbook_edit_ldap_dialog_create( gboolean *cancelled ) {
210 GtkWidget *window;
211 GtkWidget *vbox;
212 GtkWidget *notebook;
213 GtkWidget *hbbox;
214 GtkWidget *ok_btn;
215 GtkWidget *cancel_btn;
216 GtkWidget *hsbox;
217 GtkWidget *statusbar;
218
219 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
220 gtk_widget_set_size_request(window, 450, -1);
221 gtk_container_set_border_width(GTK_CONTAINER(window), 0);
222 gtk_window_set_title(GTK_WINDOW(window), _("Edit LDAP Server"));
223 gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
224 gtk_window_set_modal(GTK_WINDOW(window), TRUE);
225 g_signal_connect(G_OBJECT(window), "delete_event",
226 G_CALLBACK(edit_ldap_delete_event),
227 cancelled);
228 g_signal_connect(G_OBJECT(window), "key_press_event",
229 G_CALLBACK(edit_ldap_key_pressed),
230 cancelled);
231
232 vbox = gtk_vbox_new( FALSE, 6 );
233 /* gtk_container_set_border_width(GTK_CONTAINER(vbox), BORDER_WIDTH); */
234 gtk_widget_show( vbox );
235 gtk_container_add( GTK_CONTAINER( window ), vbox );
236
237 /* Notebook */
238 notebook = gtk_notebook_new();
239 gtk_widget_show( notebook );
240 gtk_box_pack_start( GTK_BOX( vbox ), notebook, TRUE, TRUE, 0 );
241 gtk_container_set_border_width( GTK_CONTAINER( notebook ), 6 );
242
243 /* Status line */
244 hsbox = gtk_hbox_new(FALSE, 0);
245 gtk_box_pack_end(GTK_BOX(vbox), hsbox, FALSE, FALSE, 0);
246 statusbar = gtk_statusbar_new();
247 gtk_box_pack_start(GTK_BOX(hsbox), statusbar, TRUE, TRUE, 0);
248
249 /* Button panel */
250 gtkut_stock_button_set_create(&hbbox, &ok_btn, GTK_STOCK_OK,
251 &cancel_btn, GTK_STOCK_CANCEL,
252 NULL, NULL);
253 gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0);
254 gtk_widget_grab_default(ok_btn);
255
256 g_signal_connect(G_OBJECT(ok_btn), "clicked",
257 G_CALLBACK(edit_ldap_ok), cancelled);
258 g_signal_connect(G_OBJECT(cancel_btn), "clicked",
259 G_CALLBACK(edit_ldap_cancel), cancelled);
260 g_signal_connect(G_OBJECT(notebook), "switch_page",
261 G_CALLBACK(edit_ldap_switch_page), NULL );
262
263 gtk_widget_show_all(vbox);
264
265 ldapedit.window = window;
266 ldapedit.notebook = notebook;
267 ldapedit.hbbox = hbbox;
268 ldapedit.ok_btn = ok_btn;
269 ldapedit.cancel_btn = cancel_btn;
270 ldapedit.statusbar = statusbar;
271 ldapedit.status_cid = gtk_statusbar_get_context_id( GTK_STATUSBAR(statusbar), "Edit LDAP Server Dialog" );
272}
273
274void addressbook_edit_ldap_page_basic( gint pageNum, gchar *pageLbl ) {
275 GtkWidget *vbox;
276 GtkWidget *table;
277 GtkWidget *label;
278 GtkWidget *entry_name;
279 GtkWidget *entry_server;
280 GtkWidget *hbox_spin;
281 GtkObject *spinbtn_port_adj;
282 GtkWidget *spinbtn_port;
283 GtkWidget *entry_baseDN;
284 GtkWidget *check_btn;
285 GtkWidget *lookdn_btn;
286 gint top;
287
288 vbox = gtk_vbox_new( FALSE, 8 );
289 gtk_widget_show( vbox );
290 gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
291 /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
292
293 label = gtk_label_new( pageLbl );
294 gtk_widget_show( label );
295 gtk_notebook_set_tab_label(
296 GTK_NOTEBOOK( ldapedit.notebook ),
297 gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label );
298
299 table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, FALSE);
300 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
301 gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
302 gtk_table_set_row_spacings(GTK_TABLE(table), 8);
303 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
304
305 /* First row */
306 top = 0;
307 label = gtk_label_new(_("Name"));
308 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
309 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
310
311 entry_name = gtk_entry_new();
312 gtk_table_attach(GTK_TABLE(table), entry_name, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
313
314 /* Next row */
315 ++top;
316 label = gtk_label_new(_("Hostname"));
317 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
318 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
319
320 entry_server = gtk_entry_new();
321 gtk_table_attach(GTK_TABLE(table), entry_server, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
322
323 /* Next row */
324 ++top;
325 label = gtk_label_new(_("Port"));
326 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
327 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
328
329 hbox_spin = gtk_hbox_new (FALSE, 8);
330 spinbtn_port_adj = gtk_adjustment_new (389, 1, 65535, 100, 1000, 0);
331 spinbtn_port = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_port_adj), 1, 0);
332 gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_port, FALSE, FALSE, 0);
333 gtk_widget_set_size_request (spinbtn_port, 64, -1);
334 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_port), TRUE);
335 gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
336
337 check_btn = gtk_button_new_with_label( _(" Check Server "));
338 gtk_table_attach(GTK_TABLE(table), check_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
339
340 /* Next row */
341 ++top;
342 label = gtk_label_new(_("Search Base"));
343 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
344 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
345
346 entry_baseDN = gtk_entry_new();
347 gtk_table_attach(GTK_TABLE(table), entry_baseDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
348
349 lookdn_btn = gtk_button_new_with_label( _(" ... "));
350 gtk_table_attach(GTK_TABLE(table), lookdn_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
351
352 g_signal_connect(G_OBJECT(check_btn), "clicked",
353 G_CALLBACK(edit_ldap_server_check), NULL);
354 g_signal_connect(G_OBJECT(lookdn_btn), "clicked",
355 G_CALLBACK(edit_ldap_basedn_select), NULL);
356
357 gtk_widget_show_all(vbox);
358
359 ldapedit.entry_name = entry_name;
360 ldapedit.entry_server = entry_server;
361 ldapedit.spinbtn_port = spinbtn_port;
362 ldapedit.entry_baseDN = entry_baseDN;
363}
364
365void addressbook_edit_ldap_page_extended( gint pageNum, gchar *pageLbl ) {
366 GtkWidget *vbox;
367 GtkWidget *table;
368 GtkWidget *label;
369 GtkWidget *entry_bindDN;
370 GtkWidget *entry_bindPW;
371 GtkWidget *entry_criteria;
372 GtkWidget *hbox_spin;
373 GtkObject *spinbtn_timeout_adj;
374 GtkWidget *spinbtn_timeout;
375 GtkObject *spinbtn_maxentry_adj;
376 GtkWidget *spinbtn_maxentry;
377 GtkWidget *reset_btn;
378 gint top;
379
380 vbox = gtk_vbox_new( FALSE, 8 );
381 gtk_widget_show( vbox );
382 gtk_container_add( GTK_CONTAINER( ldapedit.notebook ), vbox );
383 /* gtk_container_set_border_width( GTK_CONTAINER (vbox), BORDER_WIDTH ); */
384
385 label = gtk_label_new( pageLbl );
386 gtk_widget_show( label );
387 gtk_notebook_set_tab_label(
388 GTK_NOTEBOOK( ldapedit.notebook ),
389 gtk_notebook_get_nth_page( GTK_NOTEBOOK( ldapedit.notebook ), pageNum ), label );
390
391 table = gtk_table_new( LDAPEDIT_TABLE_ROWS, LDAPEDIT_TABLE_COLS, FALSE);
392 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
393 gtk_container_set_border_width( GTK_CONTAINER(table), 8 );
394 gtk_table_set_row_spacings(GTK_TABLE(table), 8);
395 gtk_table_set_col_spacings(GTK_TABLE(table), 8);
396
397 /* First row */
398 top = 0;
399 label = gtk_label_new(_("Search Criteria"));
400 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
401 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
402
403 entry_criteria = gtk_entry_new();
404 gtk_table_attach(GTK_TABLE(table), entry_criteria, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
405
406 reset_btn = gtk_button_new_with_label( _(" Reset "));
407 gtk_table_attach(GTK_TABLE(table), reset_btn, 2, 3, top, (top + 1), GTK_FILL, 0, 3, 0);
408
409 /* Next row */
410 ++top;
411 label = gtk_label_new(_("Bind DN"));
412 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
413 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
414
415 entry_bindDN = gtk_entry_new();
416 gtk_table_attach(GTK_TABLE(table), entry_bindDN, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
417
418 /* Next row */
419 ++top;
420 label = gtk_label_new(_("Bind Password"));
421 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
422 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
423
424 entry_bindPW = gtk_entry_new();
425 gtk_table_attach(GTK_TABLE(table), entry_bindPW, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
426 gtk_entry_set_visibility(GTK_ENTRY(entry_bindPW), FALSE);
427
428 /* Next row */
429 ++top;
430 label = gtk_label_new(_("Timeout (secs)"));
431 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
432 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
433
434 hbox_spin = gtk_hbox_new (FALSE, 8);
435 spinbtn_timeout_adj = gtk_adjustment_new (0, 0, 300, 1, 10, 0);
436 spinbtn_timeout = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_timeout_adj), 1, 0);
437 gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_timeout, FALSE, FALSE, 0);
438 gtk_widget_set_size_request (spinbtn_timeout, 64, -1);
439 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_timeout), TRUE);
440 gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
441
442 /* Next row */
443 ++top;
444 label = gtk_label_new(_("Maximum Entries"));
445 gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), GTK_FILL, 0, 0, 0);
446 gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5);
447
448 hbox_spin = gtk_hbox_new (FALSE, 8);
449 spinbtn_maxentry_adj = gtk_adjustment_new (0, 0, 500, 1, 10, 0);
450 spinbtn_maxentry = gtk_spin_button_new(GTK_ADJUSTMENT (spinbtn_maxentry_adj), 1, 0);
451 gtk_box_pack_start (GTK_BOX (hbox_spin), spinbtn_maxentry, FALSE, FALSE, 0);
452 gtk_widget_set_size_request (spinbtn_maxentry, 64, -1);
453 gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_maxentry), TRUE);
454 gtk_table_attach(GTK_TABLE(table), hbox_spin, 1, 2, top, (top + 1), GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
455
456 g_signal_connect(G_OBJECT(reset_btn), "clicked",
457 G_CALLBACK(edit_ldap_search_reset), NULL);
458
459 gtk_widget_show_all(vbox);
460
461 ldapedit.entry_criteria = entry_criteria;
462 ldapedit.entry_bindDN = entry_bindDN;
463 ldapedit.entry_bindPW = entry_bindPW;
464 ldapedit.spinbtn_timeout = spinbtn_timeout;
465 ldapedit.spinbtn_maxentry = spinbtn_maxentry;
466}
467
468static void addressbook_edit_ldap_create( gboolean *cancelled ) {
469 gint page = 0;
470 addressbook_edit_ldap_dialog_create( cancelled );
471 addressbook_edit_ldap_page_basic( page++, _( "Basic" ) );
472 addressbook_edit_ldap_page_extended( page++, _( "Extended" ) );
473 gtk_widget_show_all( ldapedit.window );
474}
475
476void edit_ldap_set_optmenu( GtkOptionMenu *optmenu, const gint value ) {
477 GList *cur;
478 GtkWidget *menu;
479 GtkWidget *menuitem;
480 gint menuVal;
481 gint n = 0;
482
483 g_return_if_fail(optmenu != NULL);
484
485 menu = gtk_option_menu_get_menu(optmenu);
486 for( cur = GTK_MENU_SHELL(menu)->children; cur != NULL; cur = cur->next ) {
487 menuitem = GTK_WIDGET(cur->data);
488 menuVal = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data"));
489 if( menuVal == value ) {
490 gtk_option_menu_set_history(optmenu, n);
491 return;
492 }
493 n++;
494 }
495 gtk_option_menu_set_history(optmenu, 0);
496}
497
498gint edit_ldap_get_optmenu( GtkOptionMenu *optmenu ) {
499 GtkWidget *menu;
500 GtkWidget *menuitem;
501
502 g_return_val_if_fail(optmenu != NULL, -1);
503
504 menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
505 menuitem = gtk_menu_get_active(GTK_MENU(menu));
506 return GPOINTER_TO_INT(g_object_get_data(G_OBJECT(menuitem), "user_data"));
507}
508
509AdapterDSource *addressbook_edit_ldap( AddressIndex *addrIndex, AdapterDSource *ads ) {
510 static gboolean cancelled;
511 gchar *sName, *sHost, *sBase, *sBind, *sPass, *sCrit;
512 gint iPort, iMaxE, iTime;
513 AddressDataSource *ds = NULL;
514 SyldapServer *server = NULL;
515 gboolean fin;
516
517 if (!ldapedit.window)
518 addressbook_edit_ldap_create(&cancelled);
519 gtkut_box_set_reverse_order(GTK_BOX(ldapedit.hbbox),
520 !prefs_common.comply_gnome_hig);
521 gtk_notebook_set_current_page( GTK_NOTEBOOK(ldapedit.notebook), 0 );
522 gtk_widget_grab_focus(ldapedit.ok_btn);
523 gtk_widget_grab_focus(ldapedit.entry_name);
524 gtk_widget_show(ldapedit.window);
525 manage_window_set_transient(GTK_WINDOW(ldapedit.window));
526
527 edit_ldap_status_show( "" );
528 if( ads ) {
529 ds = ads->dataSource;
530 server = ds->rawDataSource;
531 if (server->name)
532 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), server->name);
533 if (server->hostName)
534 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), server->hostName);
535 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), server->port );
536 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), server->timeOut );
537 if (server->baseDN)
538 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), server->baseDN);
539 if (server->searchCriteria)
540 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), server->searchCriteria);
541 if (server->bindDN)
542 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), server->bindDN);
543 if (server->bindPass)
544 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), server->bindPass);
545 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), server->maxEntries );
546 gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Edit LDAP Server"));
547 }
548 else {
549 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_name), ADDRESSBOOK_GUESS_LDAP_NAME );
550 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_server), ADDRESSBOOK_GUESS_LDAP_SERVER );
551 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ), SYLDAP_DFL_PORT );
552 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ), SYLDAP_DFL_TIMEOUT );
553 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_baseDN), "");
554 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_criteria), SYLDAP_DFL_CRITERIA );
555 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindDN), "");
556 gtk_entry_set_text(GTK_ENTRY(ldapedit.entry_bindPW), "");
557 gtk_spin_button_set_value( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ), SYLDAP_MAX_ENTRIES );
558 gtk_window_set_title( GTK_WINDOW(ldapedit.window), _("Add New LDAP Server"));
559 }
560
561 gtk_main();
562 gtk_widget_hide(ldapedit.window);
563 if (cancelled == TRUE) return NULL;
564
565 fin = FALSE;
566 sName = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_name), 0, -1 );
567 sHost = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_server), 0, -1 );
568 iPort = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_port ) );
569 iTime = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_timeout ) );
570 sBase = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_baseDN), 0, -1 );
571 sCrit = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_criteria), 0, -1 );
572 sBind = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindDN), 0, -1 );
573 sPass = gtk_editable_get_chars( GTK_EDITABLE(ldapedit.entry_bindPW), 0, -1 );
574 iMaxE = gtk_spin_button_get_value_as_int( GTK_SPIN_BUTTON( ldapedit.spinbtn_maxentry ) );
575
576 if( *sName == '\0' ) fin = TRUE;
577 if( *sHost == '\0' ) fin = TRUE;
578 if( *sBase == '\0' ) fin = TRUE;
579
580 if( ! fin ) {
581 if( ! ads ) {
582 server = syldap_create();
583 ds = addrindex_index_add_datasource( addrIndex, ADDR_IF_LDAP, server );
584 ads = addressbook_create_ds_adapter( ds, ADDR_LDAP, NULL );
585 }
586 addressbook_ads_set_name( ads, sName );
587 syldap_set_name( server, sName );
588 syldap_set_host( server, sHost );
589 syldap_set_port( server, iPort );
590 syldap_set_base_dn( server, sBase );
591 syldap_set_bind_dn( server, sBind );
592 syldap_set_bind_password( server, sPass );
593 syldap_set_search_criteria( server, sCrit );
594 syldap_set_max_entries( server, iMaxE );
595 syldap_set_timeout( server, iTime );
596 }
597 g_free( sName );
598 g_free( sHost );
599 g_free( sBase );
600 g_free( sBind );
601 g_free( sPass );
602 g_free( sCrit );
603
604 return ads;
605}
606
607#endif /* USE_LDAP */
608
609/*
610* End of Source.
611*/