mirror of
https://github.com/moparisthebest/davmail
synced 2024-12-13 19:22:22 -05:00
LDAP: need to galLookup when search attribute is not in galfind result
git-svn-id: http://svn.code.sf.net/p/davmail/code/trunk@1341 3d1905a2-6b24-0410-a738-b14d5a86fcbd
This commit is contained in:
parent
0e0f2daae6
commit
1a328a5312
@ -198,13 +198,13 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
static final HashSet<String> GALLOOKUP_ATTRIBUTES = new HashSet<String>();
|
static final HashSet<String> GALLOOKUP_ATTRIBUTES = new HashSet<String>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
GALLOOKUP_ATTRIBUTES.add("givenname");
|
GALLOOKUP_ATTRIBUTES.add("givenName");
|
||||||
GALLOOKUP_ATTRIBUTES.add("initials");
|
GALLOOKUP_ATTRIBUTES.add("initials");
|
||||||
GALLOOKUP_ATTRIBUTES.add("sn");
|
GALLOOKUP_ATTRIBUTES.add("sn");
|
||||||
GALLOOKUP_ATTRIBUTES.add("street");
|
GALLOOKUP_ATTRIBUTES.add("street");
|
||||||
GALLOOKUP_ATTRIBUTES.add("st");
|
GALLOOKUP_ATTRIBUTES.add("st");
|
||||||
GALLOOKUP_ATTRIBUTES.add("postalcode");
|
GALLOOKUP_ATTRIBUTES.add("postalcode");
|
||||||
GALLOOKUP_ATTRIBUTES.add("c");
|
GALLOOKUP_ATTRIBUTES.add("co");
|
||||||
GALLOOKUP_ATTRIBUTES.add("departement");
|
GALLOOKUP_ATTRIBUTES.add("departement");
|
||||||
GALLOOKUP_ATTRIBUTES.add("mobile");
|
GALLOOKUP_ATTRIBUTES.add("mobile");
|
||||||
}
|
}
|
||||||
@ -242,7 +242,8 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
if (condition instanceof MultiCondition) {
|
if (condition instanceof MultiCondition) {
|
||||||
// TODO
|
// TODO
|
||||||
} else if (condition instanceof AttributeCondition) {
|
} else if (condition instanceof AttributeCondition) {
|
||||||
String searchAttribute = GALFIND_CRITERIA_MAP.get(((ExchangeSession.AttributeCondition) condition).getAttributeName());
|
String searchAttributeName = ((ExchangeSession.AttributeCondition) condition).getAttributeName();
|
||||||
|
String searchAttribute = GALFIND_CRITERIA_MAP.get(searchAttributeName);
|
||||||
if (searchAttribute != null) {
|
if (searchAttribute != null) {
|
||||||
String searchValue = ((ExchangeSession.AttributeCondition) condition).getValue();
|
String searchValue = ((ExchangeSession.AttributeCondition) condition).getValue();
|
||||||
Map<String, Map<String, String>> results;
|
Map<String, Map<String, String>> results;
|
||||||
@ -259,7 +260,7 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
contact.setName(result.get("AN"));
|
contact.setName(result.get("AN"));
|
||||||
contact.put("imapUid", result.get("AN"));
|
contact.put("imapUid", result.get("AN"));
|
||||||
buildGalfindContact(contact, result);
|
buildGalfindContact(contact, result);
|
||||||
if (needGalLookup(returningAttributes)) {
|
if (needGalLookup(searchAttributeName, returningAttributes)) {
|
||||||
galLookup(contact);
|
galLookup(contact);
|
||||||
}
|
}
|
||||||
if (condition.isMatch(contact)) {
|
if (condition.isMatch(contact)) {
|
||||||
@ -272,10 +273,13 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
return contacts;
|
return contacts;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean needGalLookup(Set<String> returningAttributes) {
|
protected boolean needGalLookup(String searchAttributeName, Set<String> returningAttributes) {
|
||||||
// iCal search, do not call gallookup
|
// search attribute is gallookup attribute, need to fetch value for isMatch
|
||||||
if (returningAttributes == null) {
|
if (GALLOOKUP_ATTRIBUTES.contains(searchAttributeName)) {
|
||||||
|
return true;
|
||||||
|
} else if (returningAttributes == null) {
|
||||||
return false;
|
return false;
|
||||||
|
// iCal search, do not call gallookup
|
||||||
} else if (returningAttributes.contains("apple-serviceslocator")) {
|
} else if (returningAttributes.contains("apple-serviceslocator")) {
|
||||||
return false;
|
return false;
|
||||||
// return all attributes => call gallookup
|
// return all attributes => call gallookup
|
||||||
@ -301,6 +305,7 @@ public class DavExchangeSession extends ExchangeSession {
|
|||||||
*/
|
*/
|
||||||
public void galLookup(Contact contact) {
|
public void galLookup(Contact contact) {
|
||||||
if (!disableGalLookup) {
|
if (!disableGalLookup) {
|
||||||
|
LOGGER.debug("galLookup("+contact.get("smtpemail1")+ ')');
|
||||||
GetMethod getMethod = null;
|
GetMethod getMethod = null;
|
||||||
try {
|
try {
|
||||||
getMethod = new GetMethod(URIUtil.encodePathQuery(getCmdBasePath() + "?Cmd=gallookup&ADDR=" + contact.get("smtpemail1")));
|
getMethod = new GetMethod(URIUtil.encodePathQuery(getCmdBasePath() + "?Cmd=gallookup&ADDR=" + contact.get("smtpemail1")));
|
||||||
|
@ -114,9 +114,10 @@ public class TestLdap extends AbstractExchangeSessionTestCase {
|
|||||||
"(&(objectclass=inetOrgPerson)(objectclass=extensibleObject)(objectclass=apple-user)(|(|(uid=fair*)(cn=fair*))(givenname=fair*)(sn=fair*)(cn=fair*)(mail=fair*))(objectclass=posixAccount)(objectclass=shadowAccount))", searchControls);
|
"(&(objectclass=inetOrgPerson)(objectclass=extensibleObject)(objectclass=apple-user)(|(|(uid=fair*)(cn=fair*))(givenname=fair*)(sn=fair*)(cn=fair*)(mail=fair*))(objectclass=posixAccount)(objectclass=shadowAccount))", searchControls);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSearchByGivenName() throws NamingException {
|
public void testSearchByGivenNameWithoutReturningAttributes() throws NamingException {
|
||||||
SearchControls searchControls = new SearchControls();
|
SearchControls searchControls = new SearchControls();
|
||||||
searchControls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
|
searchControls.setSearchScope(SearchControls.ONELEVEL_SCOPE);
|
||||||
|
searchControls.setReturningAttributes(new String[]{"uid"});
|
||||||
NamingEnumeration<SearchResult> searchResults = ldapContext.search("ou=people", "(givenName=mic*)", searchControls);
|
NamingEnumeration<SearchResult> searchResults = ldapContext.search("ou=people", "(givenName=mic*)", searchControls);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user