From b8e4570681bbc2863bb2f56321bb631ff19f4216 Mon Sep 17 00:00:00 2001 From: mguessan Date: Thu, 9 Sep 2010 19:30:25 +0000 Subject: [PATCH] LDAP: fix regression on iCal 3 search completion git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1434 3d1905a2-6b24-0410-a738-b14d5a86fcbd --- src/java/davmail/exchange/dav/DavExchangeSession.java | 6 ++++++ src/test/davmail/ldap/TestLdap.java | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/java/davmail/exchange/dav/DavExchangeSession.java b/src/java/davmail/exchange/dav/DavExchangeSession.java index 6aea037f..fccf8e1c 100644 --- a/src/java/davmail/exchange/dav/DavExchangeSession.java +++ b/src/java/davmail/exchange/dav/DavExchangeSession.java @@ -318,6 +318,12 @@ public class DavExchangeSession extends ExchangeSession { buildGalfindContact(contact, result); if (needGalLookup(searchAttributeName, returningAttributes)) { galLookup(contact); + // iCal fix to suit both iCal 3 and 4: move cn to sn, remove cn + } else if (returningAttributes.contains("apple-serviceslocator")) { + if (contact.get("cn") != null && returningAttributes.contains("sn")) { + contact.put("sn", contact.get("cn")); + contact.remove("cn"); + } } if (condition.isMatch(contact)) { contacts.put(contact.getName().toLowerCase(), contact); diff --git a/src/test/davmail/ldap/TestLdap.java b/src/test/davmail/ldap/TestLdap.java index b47b68b7..e818c50d 100644 --- a/src/test/davmail/ldap/TestLdap.java +++ b/src/test/davmail/ldap/TestLdap.java @@ -22,7 +22,6 @@ import davmail.DavGateway; import davmail.Settings; import davmail.exchange.AbstractExchangeSessionTestCase; import davmail.exchange.ExchangeSessionFactory; -import org.apache.log4j.Level; import javax.naming.NamingEnumeration; import javax.naming.NamingException; @@ -138,4 +137,12 @@ public class TestLdap extends AbstractExchangeSessionTestCase { searchControls.setReturningAttributes(new String[]{"sn"}); NamingEnumeration searchResults = ldapContext.search("ou=people", "(cn=*)", searchControls); } + + public void testSearchByCnReturnGivenName() throws NamingException { + SearchControls searchControls = new SearchControls(); + searchControls.setSearchScope(SearchControls.ONELEVEL_SCOPE); + searchControls.setReturningAttributes(new String[]{"givenName"}); + NamingEnumeration searchResults = ldapContext.search("ou=people", "(cn=*a*)", searchControls); + } + }