2007-06-06 [colin] 2.9.2cvs43
authorColin Leroy <colin@colino.net>
Wed, 6 Jun 2007 08:30:07 +0000 (08:30 +0000)
committerColin Leroy <colin@colino.net>
Wed, 6 Jun 2007 08:30:07 +0000 (08:30 +0000)
* src/ldapupdate.c
Patch by Michael Rasmussus to help
bug 1232

ChangeLog
PATCHSETS
configure.ac
src/ldapupdate.c

index 485d99c656822c67d4b8f3f434f5a849e2ec1644..8ee2eae915dc0b680b1cf04f07083157c321e4e7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-06-06 [colin]     2.9.2cvs43
+
+       * src/ldapupdate.c
+               Patch by Michael Rasmussus to help
+               bug 1232
+
 2007-06-05 [wwp]       2.9.2cvs42
 
        * src/prefs_account.c
index 79146bccb0a19f6673fd39b088e4d7c285669c11..6e183d2b78d47feb7e36bcec320b02700086a9d4 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.382.2.387 -r 1.382.2.388 src/compose.c;  cvs diff -u -r 1.50.2.35 -r 1.50.2.36 src/compose.h;  ) > 2.9.2cvs40.patchset
 ( cvs diff -u -r 1.149.2.73 -r 1.149.2.74 src/inc.c;  ) > 2.9.2cvs41.patchset
 ( cvs diff -u -r 1.105.2.100 -r 1.105.2.101 src/prefs_account.c;  cvs diff -u -r 1.52.2.39 -r 1.52.2.40 src/prefs_folder_item.c;  cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/prefs_quote.c;  cvs diff -u -r 1.8.2.18 -r 1.8.2.19 src/quote_fmt.c;  cvs diff -u -r 1.5.12.10 -r 1.5.12.11 src/quote_fmt.h;  ) > 2.9.2cvs42.patchset
+( cvs diff -u -r 1.1.2.5 -r 1.1.2.6 src/ldapupdate.c;  ) > 2.9.2cvs43.patchset
index 85468e2498412b8e2e45a52687a705ba6f9b0d05..895521c86282b25f79f7159e9148ea1f361f1c11 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=2
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=42
+EXTRA_VERSION=43
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index b10c8e3a4a96d3ba8b6f93a7beb401f9ec232481..3bf5ac1afa80503a27ff6d736bb4c2c38198bc05 100644 (file)
@@ -872,9 +872,26 @@ void ldapsvr_update_contact(LdapServer *server, GHashTable *contact) {
                         */
                        param = NULL;
                }
-               SETMOD(mods[cnt], modarr[cnt], mod_op, "displayName", cn, param);
-               cnt++;
-               g_hash_table_insert(contact, "displayName", param);
+               if (mod_op == LDAP_MOD_REPLACE && strcmp(param, "") == 0) {
+                       /* Having an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we treate this as a request for deleting
+                        * the attribute.
+                        */
+                       mod_op = LDAP_MOD_DELETE;
+                       param = NULL;
+               }
+               if (mod_op == LDAP_MOD_ADD && strcmp(param, "") == 0) {
+                       /* Adding an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we silently refuse to add this entry
+                        */
+               }
+               else {
+                       SETMOD(mods[cnt], modarr[cnt], mod_op, "displayName", cn, param);
+                       cnt++;
+                       g_hash_table_insert(contact, "displayName", param);
+               }
        }
        param = g_hash_table_lookup(contact , "givenName");
        mod_op = ldapsvr_deside_operation(ld, dn, "givenName", param);
@@ -888,8 +905,25 @@ void ldapsvr_update_contact(LdapServer *server, GHashTable *contact) {
                         */
                        param = NULL;
                }
-               SETMOD(mods[cnt], modarr[cnt], mod_op, "givenName", givenName, param);
-               cnt++;
+               if (mod_op == LDAP_MOD_REPLACE && strcmp(param, "") == 0) {
+                       /* Having an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we treate this as a request for deleting
+                        * the attribute.
+                        */
+                       mod_op = LDAP_MOD_DELETE;
+                       param = NULL;
+               }
+               if (mod_op == LDAP_MOD_ADD && strcmp(param, "") == 0) {
+                       /* Adding an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we silently refuse to add this entry
+                        */
+               }
+               else {
+                       SETMOD(mods[cnt], modarr[cnt], mod_op, "givenName", givenName, param);
+                       cnt++;
+               }
        }
        mailList = g_hash_table_lookup(contact , "mail");
        if (mailList) {
@@ -931,8 +965,25 @@ void ldapsvr_update_contact(LdapServer *server, GHashTable *contact) {
                         */
                        param = NULL;
                }
-               SETMOD(mods[cnt], modarr[cnt], mod_op, "sn", sn, param);
-               cnt++;
+               if (mod_op == LDAP_MOD_REPLACE && strcmp(param, "") == 0) {
+                       /* Having an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we treate this as a request for deleting
+                        * the attribute.
+                        */
+                       mod_op = LDAP_MOD_DELETE;
+                       param = NULL;
+               }
+               if (mod_op == LDAP_MOD_ADD && strcmp(param, "") == 0) {
+                       /* Adding an empty string is considered a syntax error in
+                        * ldap. E.g attributes with empty strings are not allowed
+                        * in which case we silently refuse to add this entry
+                        */
+               }
+               else {
+                       SETMOD(mods[cnt], modarr[cnt], mod_op, "sn", sn, param);
+                       cnt++;
+               }
        }
        debug_print("newDN: %s\n", dn);
        if (NoRemove)