aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/ChangeLog11
-rw-r--r--addressbook/backend/pas/evolutionperson.schema2
-rw-r--r--addressbook/backend/pas/pas-backend-ldap.c66
3 files changed, 52 insertions, 27 deletions
diff --git a/addressbook/ChangeLog b/addressbook/ChangeLog
index 62d179a8eb..994d8518e6 100644
--- a/addressbook/ChangeLog
+++ b/addressbook/ChangeLog
@@ -1,3 +1,14 @@
+2002-07-31 Chris Toshok <toshok@ximian.com>
+
+ [ roll in the following change from the 1.0 branch.]
+ * backend/pas/pas-backend-ldap.c:
+ (prop_info): change the CALURI and FBURL ecard attributes to map to the
+ RFC 2739 specified attributes.
+ (check_schema_support): check to see if calEntry is supported.
+ (add_objectclass_mod): insert calEntry if it's supported.
+ * backend/pas/evolutionperson.schema: deprecate freeBusyURI
+ and calendarURI.
+
2002-07-31 Ettore Perazzoli <ettore@ximian.com>
[Patch by Jacob Berkman <jacob@ximian.com>, fixes #25968]
diff --git a/addressbook/backend/pas/evolutionperson.schema b/addressbook/backend/pas/evolutionperson.schema
index f0f3a394df..4b64b3b7e4 100644
--- a/addressbook/backend/pas/evolutionperson.schema
+++ b/addressbook/backend/pas/evolutionperson.schema
@@ -167,12 +167,14 @@ attributetype ( 1.3.6.1.4.1.8506.1.2.25
SUP name
SINGLE-VALUE )
+# deprecated - use calEntry and its attributes from RFC 2739
attributetype ( 1.3.6.1.4.1.8506.1.2.26
NAME 'calendarURI'
EQUALITY caseExactIA5Match
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
SINGLE-VALUE )
+# deprecated - use calEntry and its attributes from RFC 2739
attributetype ( 1.3.6.1.4.1.8506.1.2.27
NAME 'freeBusyURI'
EQUALITY caseExactIA5Match
diff --git a/addressbook/backend/pas/pas-backend-ldap.c b/addressbook/backend/pas/pas-backend-ldap.c
index e7a19c2d2c..249a652c3a 100644
--- a/addressbook/backend/pas/pas-backend-ldap.c
+++ b/addressbook/backend/pas/pas-backend-ldap.c
@@ -73,6 +73,7 @@ typedef enum {
#define PERSON "person"
#define ORGANIZATIONALPERSON "organizationalPerson"
#define INETORGPERSON "inetOrgPerson"
+#define CALENTRY "calEntry"
#define EVOLUTIONPERSON "evolutionPerson"
static gchar *query_prop_to_ldap(gchar *query_prop);
@@ -112,7 +113,8 @@ struct _PASBackendLDAPPrivate {
/* whether or not there's support for the objectclass we need
to store all our additional fields */
gboolean evolutionPersonSupported;
- gboolean schema_checked;
+ gboolean calEntrySupported;
+ gboolean evolutionPersonChecked;
gboolean writable;
@@ -261,8 +263,8 @@ struct prop_info {
E_STRING_PROP (E_CARD_SIMPLE_FIELD_FILE_AS, "file_as", "fileAs"),
E_STRING_PROP (E_CARD_SIMPLE_FIELD_CATEGORIES, "categories", "categories"),
- E_STRING_PROP (E_CARD_SIMPLE_FIELD_CALURI, "caluri", "calendarURI"),
- E_STRING_PROP (E_CARD_SIMPLE_FIELD_FBURL, "fburl", "freeBusyURI")
+ STRING_PROP (E_CARD_SIMPLE_FIELD_CALURI, "caluri", "calCalURI"),
+ STRING_PROP (E_CARD_SIMPLE_FIELD_FBURL, "fburl", "calFBURL"),
/* E_CARD_SIMPLE_FIELD_NAME_OR_ORG, */
@@ -378,7 +380,7 @@ check_schema_support (PASBackendLDAP *bl)
if (!bl->priv->schema_dn)
return;
- bl->priv->schema_checked = TRUE;
+ bl->priv->evolutionPersonChecked = TRUE;
attrs[0] = "objectClasses";
attrs[1] = NULL;
@@ -408,6 +410,11 @@ check_schema_support (PASBackendLDAP *bl)
add_oc_attributes_to_supported_fields (bl, oc);
}
+ else if (!g_strcasecmp (oc->oc_names[j], CALENTRY)) {
+ g_print ("support found on ldap server for objectclass calEntry\n");
+ bl->priv->calEntrySupported = TRUE;
+ add_oc_attributes_to_supported_fields (bl, oc);
+ }
else if (!g_strcasecmp (oc->oc_names[j], INETORGPERSON)
|| !g_strcasecmp (oc->oc_names[j], ORGANIZATIONALPERSON)
|| !g_strcasecmp (oc->oc_names[j], PERSON)) {
@@ -892,57 +899,62 @@ build_mods_from_ecards (PASBackendLDAP *bl, ECardSimple *current, ECardSimple *n
static void
add_objectclass_mod (PASBackendLDAP *bl, GPtrArray *mod_array, GList *existing_objectclasses)
{
+#define FIND_INSERT(oc) \
+ if (!g_list_find_custom (existing_objectclasses, (oc), (GCompareFunc)g_strcasecmp)) \
+ g_ptr_array_add (objectclasses, g_strdup ((oc)))
+#define INSERT(oc) \
+ g_ptr_array_add (objectclasses, g_strdup ((oc)))
+
LDAPMod *objectclass_mod;
+ GPtrArray *objectclasses = g_ptr_array_new();
if (existing_objectclasses) {
- int i = 0;
-
objectclass_mod = g_new (LDAPMod, 1);
objectclass_mod->mod_op = LDAP_MOD_ADD;
objectclass_mod->mod_type = g_strdup ("objectClass");
- objectclass_mod->mod_values = g_new (char*, bl->priv->evolutionPersonSupported ? 6 : 5);
/* yes, this is a linear search for each of our
objectclasses, but really, how many objectclasses
are there going to be in any sane ldap entry? */
-#define FIND_INSERT(oc) \
- if (!g_list_find_custom (existing_objectclasses, (oc), (GCompareFunc)g_strcasecmp)) \
- objectclass_mod->mod_values[i++] = g_strdup ((oc));
-
FIND_INSERT (TOP);
FIND_INSERT (PERSON);
FIND_INSERT (ORGANIZATIONALPERSON);
FIND_INSERT (INETORGPERSON);
+ if (bl->priv->calEntrySupported)
+ FIND_INSERT (CALENTRY);
if (bl->priv->evolutionPersonSupported)
FIND_INSERT (EVOLUTIONPERSON);
- objectclass_mod->mod_values[i] = NULL;
- if (i) {
+ if (objectclasses->len) {
+ g_ptr_array_add (objectclasses, NULL);
+ objectclass_mod->mod_values = (char**)objectclasses->pdata;
g_ptr_array_add (mod_array, objectclass_mod);
+ g_ptr_array_free (objectclasses, FALSE);
}
else {
+ g_ptr_array_free (objectclasses, TRUE);
g_free (objectclass_mod->mod_type);
- g_free (objectclass_mod->mod_values);
g_free (objectclass_mod);
}
+
}
else {
objectclass_mod = g_new (LDAPMod, 1);
objectclass_mod->mod_op = LDAP_MOD_ADD;
objectclass_mod->mod_type = g_strdup ("objectClass");
- objectclass_mod->mod_values = g_new (char*, bl->priv->evolutionPersonSupported ? 6 : 5);
- objectclass_mod->mod_values[0] = g_strdup (TOP);
- objectclass_mod->mod_values[1] = g_strdup (PERSON);
- objectclass_mod->mod_values[2] = g_strdup (ORGANIZATIONALPERSON);
- objectclass_mod->mod_values[3] = g_strdup (INETORGPERSON);
- if (bl->priv->evolutionPersonSupported) {
- objectclass_mod->mod_values[4] = g_strdup (EVOLUTIONPERSON);
- objectclass_mod->mod_values[5] = NULL;
- }
- else {
- objectclass_mod->mod_values[4] = NULL;
- }
+
+ INSERT(TOP);
+ INSERT(PERSON);
+ INSERT(ORGANIZATIONALPERSON);
+ INSERT(INETORGPERSON);
+ if (bl->priv->calEntrySupported)
+ INSERT(CALENTRY);
+ if (bl->priv->evolutionPersonSupported)
+ INSERT(EVOLUTIONPERSON);
+ g_ptr_array_add (objectclasses, NULL);
+ objectclass_mod->mod_values = (char**)objectclasses->pdata;
g_ptr_array_add (mod_array, objectclass_mod);
+ g_ptr_array_free (objectclasses, FALSE);
}
}
@@ -2888,7 +2900,7 @@ pas_backend_ldap_process_authenticate_user (PASBackend *backend,
bl->priv->writable = (ldap_error == LDAP_SUCCESS);
- if (!bl->priv->schema_checked)
+ if (!bl->priv->evolutionPersonChecked)
check_schema_support (bl);
pas_book_report_writable (book, bl->priv->writable);