From 43c9ba9a203084dc5a341c781593d7d7337e2b9a Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Mon, 21 Jan 2002 15:11:50 +0000 Subject: Set the number of cards to return to the value specified in the ldap uri, 2002-01-21 Christopher James Lahey * backend/pas/pas-backend-ldap.c (ldap_search_handler): Set the number of cards to return to the value specified in the ldap uri, leaving the default at 100. Fixes Ximian bug #13953. * gui/component/addressbook-config.c (addressbook_source_dialog), gui/component/addressbook-config.glade: Added a limit entry here to edit the limit field of the source. * gui/component/addressbook-storage.c, gui/component/addressbook-storage.h (addressbook_storage_init_source_uri): Added a limit field to this class and pass that value through in the uri that's generated. svn path=/trunk/; revision=15415 --- addressbook/gui/component/addressbook-config.c | 12 ++++ addressbook/gui/component/addressbook-config.glade | 78 +++++++++++++++++++++- addressbook/gui/component/addressbook-storage.c | 56 ++++++++++++++-- addressbook/gui/component/addressbook-storage.h | 1 + 4 files changed, 139 insertions(+), 8 deletions(-) (limited to 'addressbook/gui') diff --git a/addressbook/gui/component/addressbook-config.c b/addressbook/gui/component/addressbook-config.c index de65019a97..33feb391ab 100644 --- a/addressbook/gui/component/addressbook-config.c +++ b/addressbook/gui/component/addressbook-config.c @@ -13,6 +13,7 @@ #include #include "addressbook-config.h" #include "addressbook-storage.h" +#include typedef struct _AddressbookSourceDialog AddressbookSourceDialog; typedef struct _AddressbookSourcePageItem AddressbookSourcePageItem; @@ -33,6 +34,7 @@ struct _AddressbookSourceDialog { GtkWidget *port; GtkWidget *rootdn; + GtkWidget *limit; GtkWidget *scope_optionmenu; AddressbookLDAPScopeType ldap_scope; GtkWidget *auth_checkbutton; @@ -126,11 +128,15 @@ add_focus_handler (GtkWidget *widget, GtkWidget *notebook, int page_num) static void addressbook_source_dialog_set_source (AddressbookSourceDialog *dialog, AddressbookSource *source) { + char *string; e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->name), source ? source->name : ""); e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->host), source ? source->host : ""); e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->email), source ? source->email_addr : ""); e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->port), source ? source->port : "389"); e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->rootdn), source ? source->rootdn : ""); + string = g_strdup_printf ("%d", source ? source->limit : 100); + e_utf8_gtk_entry_set_text (GTK_ENTRY (dialog->limit), string); + g_free (string); gtk_option_menu_set_history (GTK_OPTION_MENU(dialog->scope_optionmenu), source ? source->scope : ADDRESSBOOK_LDAP_SCOPE_ONELEVEL); dialog->ldap_scope = source ? source->scope : ADDRESSBOOK_LDAP_SCOPE_ONELEVEL; @@ -150,6 +156,7 @@ addressbook_source_dialog_get_source (AddressbookSourceDialog *dialog) source->email_addr = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->email)); source->port = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->port)); source->rootdn = e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->rootdn)); + source->limit = atoi(e_utf8_gtk_entry_get_text (GTK_ENTRY (dialog->limit))); source->scope = dialog->ldap_scope; source->auth = (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog->auth_checkbutton)) ? ADDRESSBOOK_LDAP_AUTH_SIMPLE : ADDRESSBOOK_LDAP_AUTH_NONE); @@ -235,6 +242,11 @@ addressbook_source_dialog (GladeXML *gui, AddressbookSource *source, GtkWidget * menu = gtk_option_menu_get_menu (GTK_OPTION_MENU(dialog->scope_optionmenu)); gtk_container_foreach (GTK_CONTAINER (menu), (GtkCallback)add_activate_cb, dialog); + dialog->limit = glade_xml_get_widget (gui, "limit-entry"); + gtk_signal_connect (GTK_OBJECT (dialog->limit), "changed", + GTK_SIGNAL_FUNC (addressbook_source_edit_changed), dialog); + add_focus_handler (dialog->limit, dialog->advanced_notebook, 3); + /* fill in source info if there is some */ addressbook_source_dialog_set_source (dialog, source); diff --git a/addressbook/gui/component/addressbook-config.glade b/addressbook/gui/component/addressbook-config.glade index 50241167c2..50b36e2462 100644 --- a/addressbook/gui/component/addressbook-config.glade +++ b/addressbook/gui/component/addressbook-config.glade @@ -432,7 +432,7 @@ GtkTable table2 3 - 3 + 4 2 False 3 @@ -604,6 +604,57 @@ Sub 0 + + + GtkLabel + label49 + + GTK_JUSTIFY_CENTER + False + 0 + 0.5 + 0 + 0 + limit-entry + + 0 + 1 + 3 + 4 + 0 + 0 + False + False + False + False + True + False + + + + + GtkEntry + limit-entry + True + True + True + 0 + 100 + + 1 + 2 + 3 + 4 + 0 + 0 + True + False + False + False + True + False + + @@ -696,6 +747,31 @@ Sub 0 0 + + + GtkLabel + label51 + + GTK_JUSTIFY_CENTER + True + 0.5 + 0.5 + 0 + 0 + + + + GtkLabel + Notebook:tab + label50 + + GTK_JUSTIFY_CENTER + True + 0.5 + 0.5 + 0 + 0 + diff --git a/addressbook/gui/component/addressbook-storage.c b/addressbook/gui/component/addressbook-storage.c index 8f22ac359a..ed8a58ed11 100644 --- a/addressbook/gui/component/addressbook-storage.c +++ b/addressbook/gui/component/addressbook-storage.c @@ -31,6 +31,7 @@ simple toshok@blubag.com + 100 @@ -231,6 +232,30 @@ get_string_value (xmlNode *node, return retval; } + +static int +get_integer_value (xmlNode *node, + const char *name, + int defval) +{ + xmlNode *p; + xmlChar *xml_string; + int retval; + + p = e_xml_get_child_by_name (node, (xmlChar *) name); + if (p == NULL) + return defval; + + p = e_xml_get_child_by_name (p, (xmlChar *) "text"); + if (p == NULL) /* there's no text between the tags, return the default */ + return defval; + + xml_string = xmlNodeListGetString (node->doc, p, 1); + retval = atoi (xml_string); + xmlFree (xml_string); + + return retval; +} #endif static char * @@ -299,9 +324,15 @@ addressbook_storage_init_source_uri (AddressbookSource *source) if (source->uri) g_free (source->uri); - source->uri = g_strdup_printf ("ldap://%s:%s/%s??%s", - source->host, source->port, - source->rootdn, ldap_unparse_scope(source->scope)); + if (source->limit != 100) + source->uri = g_strdup_printf ("ldap://%s:%s/%s?"/*trigraph prevention*/ "?%s;limit=%d", + source->host, source->port, + source->rootdn, ldap_unparse_scope(source->scope), + source->limit); + else + source->uri = g_strdup_printf ("ldap://%s:%s/%s?"/*trigraph prevention*/ "?%s", + source->host, source->port, + source->rootdn, ldap_unparse_scope(source->scope)); } #ifdef HAVE_LDAP @@ -330,7 +361,7 @@ load_source_data (const char *file_path) if (rv < 0) { g_error ("Failed to rename %s: %s\n", - ADDRESSBOOK_SOURCES_XML, + file_path, strerror(errno)); return FALSE; } else @@ -361,6 +392,7 @@ load_source_data (const char *file_path) source->scope = ldap_parse_scope (get_string_value (child, "scope")); source->auth = ldap_parse_auth (get_string_value (child, "authmethod")); source->email_addr = get_string_value (child, "emailaddr"); + source->limit = get_integer_value (child, "limit", 100); } else { g_warning ("unknown node '%s' in %s", child->name, file_path); @@ -414,6 +446,15 @@ ldap_source_foreach(AddressbookSource *source, xmlNode *root) (xmlChar *) ldap_unparse_scope(source->scope)); xmlNewChild (source_root, NULL, (xmlChar *) "authmethod", (xmlChar *) ldap_unparse_auth(source->auth)); + + if (source->limit != 100) { + char *string; + string = g_strdup_printf ("%d", source->limit); + xmlNewChild (source_root, NULL, (xmlChar *) "limit", + (xmlChar *) string); + g_free (string); + } + if (source->auth == ADDRESSBOOK_LDAP_AUTH_SIMPLE) { xmlNewChild (source_root, NULL, (xmlChar *) "emailaddr", (xmlChar *) source->email_addr); @@ -445,7 +486,7 @@ save_source_data (const char *file_path) xmlDocDumpMemory (doc, &buf, &buf_size); if (buf == NULL) { - g_error ("Failed to write %s: xmlBufferCreate() == NULL", ADDRESSBOOK_SOURCES_XML); + g_error ("Failed to write %s: xmlBufferCreate() == NULL", file_path); return FALSE; } @@ -454,13 +495,13 @@ save_source_data (const char *file_path) close (fd); if (0 > rv) { - g_error ("Failed to write new %s: %s\n", ADDRESSBOOK_SOURCES_XML, strerror(errno)); + g_error ("Failed to write new %s: %s\n", file_path, strerror(errno)); unlink (new_path); return FALSE; } else { if (0 > rename (new_path, file_path)) { - g_error ("Failed to rename %s: %s\n", ADDRESSBOOK_SOURCES_XML, strerror(errno)); + g_error ("Failed to rename %s: %s\n", file_path, strerror(errno)); unlink (new_path); return FALSE; } @@ -597,6 +638,7 @@ addressbook_source_copy (const AddressbookSource *source) copy->auth = source->auth; copy->email_addr = g_strdup (source->email_addr); copy->remember_passwd = source->remember_passwd; + copy->limit = source->limit; return copy; } diff --git a/addressbook/gui/component/addressbook-storage.h b/addressbook/gui/component/addressbook-storage.h index 8416d4de83..b59ec467f7 100644 --- a/addressbook/gui/component/addressbook-storage.h +++ b/addressbook/gui/component/addressbook-storage.h @@ -57,6 +57,7 @@ typedef struct { char *email_addr; /* used in AUTH_SIMPLE */ gboolean remember_passwd; char *uri; /* filled in from the above */ + int limit; } AddressbookSource; void addressbook_storage_setup (EvolutionShellComponent *shell_component, -- cgit v1.2.3