aboutsummaryrefslogtreecommitdiffstats
path: root/addressbook/backend/pas
diff options
context:
space:
mode:
authorChris Toshok <toshok@ximian.com>2002-11-25 12:04:20 +0800
committerChris Toshok <toshok@src.gnome.org>2002-11-25 12:04:20 +0800
commit442ed02adb1d86a177b465fa656f2148a71230b1 (patch)
tree330994ee5a908daa85acbbda3efa477010556b8a /addressbook/backend/pas
parent8896a36925cc5ec873878caf1a0842f0c830f33e (diff)
downloadgsoc2013-evolution-442ed02adb1d86a177b465fa656f2148a71230b1.tar.gz
gsoc2013-evolution-442ed02adb1d86a177b465fa656f2148a71230b1.tar.zst
gsoc2013-evolution-442ed02adb1d86a177b465fa656f2148a71230b1.zip
[ roll forward from the 1.2 branch. fixes #25540, part of #29630, as well
2002-11-23 Chris Toshok <toshok@ximian.com> [ roll forward from the 1.2 branch. fixes #25540, part of #29630, as well as other selection issues in the contact editor and ACL issues in the ldap backend ] * backend/pas/pas-backend-ldap.c (check_schema_support): reset the schema check state to FALSE if the read returned nothing (and the user had not authenticated). we'll requery if/when they auth. (query_ldap_root_dse): free the schema dn before assigning over it. (pas_backend_ldap_connect): added a diagnostic warning about the root dse query failing in anonymous mode (if it in fact did fail.) (pas_backend_ldap_process_authenticate_user): if we successfully authed, requery the root dse to pick up any attributes that might be protected, and retry the schema query if that failed before. * gui/contact-editor/e-contact-editor.c (full_name_clicked): set the dialog's editable state based on the new field "fullname_editable", and only do the Ok button handling if this flag is TRUE. (full_addr_clicked): set the dialog's editable state based on the editable state for the particular address (from editor->address_editable[]). also, only do the Ok button handling if this flag is TRUE. (_address_arrow_pressed): use the address_editable array to determine whether the address text and the mailing address checkbutton are sensitive. (enable_writable_fields): figure out if fullname_editable is TRUE/FALSE, also, init the address_editable flags based on the field list, and handle the address checkbutton. * gui/contact-editor/fulladdr.glade: change the label names to label-<name> to match {entry,combo}-<name>. * gui/contact-editor/fullname.glade: same. * gui/contact-editor/e-contact-editor-fullname.c (e_contact_editor_fullname_class_init): rename ARG_IS_READ_ONLY to ARG_EDITABLE, to reflect the correct sense of the flag. (e_contact_editor_fullname_set_arg): same, and make the labels sensitive/insensitive depending on the editable state of the dialog. * gui/contact-editor/e-contact-editor-address.c (e_contact_editor_address_class_init): rename ARG_IS_READ_ONLY to ARG_EDITABLE, to reflect the correct sense of the flag. (e_contact_editor_address_set_arg): same, and make the labels sensitive/insensitive depending on the editable state of the dialog. svn path=/trunk/; revision=18910
Diffstat (limited to 'addressbook/backend/pas')
-rw-r--r--addressbook/backend/pas/pas-backend-ldap.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c
index 3e56e02146..9a44ee6aad 100644
--- a/addressbook/backend/pas/pas-backend-ldap.c
+++ b/addressbook/backend/pas/pas-backend-ldap.c
@@ -477,6 +477,22 @@ check_schema_support (PASBackendLDAP *bl)
ldap_value_free (values);
}
+ else {
+ /* the reason for this is so that if the user
+ ends up authenticating to the ldap server,
+ we will requery for the subschema values.
+ This makes it a bit more robust in the face
+ of draconian acl's that keep subschema
+ reads from working until the user is
+ authed. */
+ if (!bl->priv->writable) {
+ g_warning ("subschema read returned nothing before successful auth");
+ bl->priv->evolutionPersonChecked = FALSE;
+ }
+ else {
+ g_warning ("subschema read returned nothing after successful auth");
+ }
+ }
ldap_msgfree (resp);
}
@@ -584,6 +600,7 @@ query_ldap_root_dse (PASBackendLDAP *bl)
values = ldap_get_values (ldap, resp, "schemaNamingContext");
}
if (values && values[0]) {
+ g_free (bl->priv->schema_dn);
bl->priv->schema_dn = g_strdup (values[0]);
}
else {
@@ -663,6 +680,9 @@ pas_backend_ldap_connect (PASBackendLDAP *bl)
return GNOME_Evolution_Addressbook_BookListener_Success;
}
+ else
+ g_warning ("Failed to perform root dse query anonymously, (ldap_error 0x%02x)", ldap_error);
+
}
g_warning ("pas_backend_ldap_connect failed for "
@@ -3130,8 +3150,20 @@ pas_backend_ldap_process_authenticate_user (PASBackend *backend,
bl->priv->writable = (ldap_error == LDAP_SUCCESS);
- if (!bl->priv->evolutionPersonChecked)
- check_schema_support (bl);
+ /* if the bind was successful we force a requery on the root
+ dse since some ldap servers are set up such that they don't
+ report anything (including the schema DN) until the user is
+ authenticated */
+ if (!bl->priv->evolutionPersonChecked && ldap_error == LDAP_SUCCESS) {
+ ldap_error = query_ldap_root_dse (bl);
+
+ if (LDAP_SUCCESS == ldap_error) {
+ if (!bl->priv->evolutionPersonChecked)
+ check_schema_support (bl);
+ }
+ else
+ g_warning ("Failed to perform root dse query after authenticating, (ldap_error 0x%02x)", ldap_error);
+ }
pas_book_report_writable (book, bl->priv->writable);
}