From 6165dff19e8f750574d09b98d84760c5cc937605 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 25 Apr 2008 15:16:58 +0000 Subject: [PATCH] Monotone-Parent: 79461b8ac05970c57a512022f8200f6a8524119e Monotone-Revision: e0a110c700ace37c521b69b4fc25af7050fc415b Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2008-04-25T15:16:58 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 ++++++ SoObjects/SOGo/LDAPSource.m | 29 +++++++++++++++++------------ 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5d53d29d3..b08648b68 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-04-25 Wolfgang Sourdeau + + * SoObjects/SOGo/LDAPSource.m ([LDAPSource -fetchContactsMatching:match]) + ([LDAPSource -lookupContactEntryWithUIDorEmail:uid]): take all the + mail fields into account when doing a search. + 2008-04-23 Wolfgang Sourdeau * SoObjects/SOGo/SOGoObject.m ([SOGoObject +initialize]): the diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index 7893e0fbf..8a87147d0 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -31,6 +31,7 @@ #import "LDAPSource.h" #import "LDAPUserManager.h" +#import "NSArray+Utilities.h" static NSArray *commonSearchFields; static int timeLimit; @@ -268,7 +269,8 @@ static int sizeLimit; [self _initLDAPConnection]; entries = [ldapConnection deepSearchAtBaseDN: baseDN - qualifier: [self _qualifierForBindFilter: loginToCheck] + qualifier: + [self _qualifierForBindFilter: loginToCheck] attributes: [NSArray arrayWithObject: @"dn"]]; userEntry = [entries nextObject]; if (userEntry) @@ -318,9 +320,13 @@ static int sizeLimit; /* contact management */ - (EOQualifier *) _qualifierForFilter: (NSString *) filter { - NSString *qs; + NSString *qs, *mailFormat, *fieldFormat; EOQualifier *qualifier; + fieldFormat = [NSString stringWithFormat: @"(%%@='%@*')", filter]; + mailFormat = [[mailFields stringsWithFormat: fieldFormat] + componentsJoinedByString: @" OR "]; + if ([filter length] > 0) { if ([filter isEqualToString: @"."]) @@ -330,9 +336,9 @@ static int sizeLimit; @"(cn='%@*')" @"OR (sn='%@*')" @"OR (displayName='%@*')" - @"OR (mail='%@*')" + @"OR %@" @"OR (telephoneNumber='*%@*')", - filter, filter, filter, filter, filter]; + filter, filter, filter, mailFormat, filter]; qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } else @@ -343,12 +349,13 @@ static int sizeLimit; - (EOQualifier *) _qualifierForUIDFilter: (NSString *) uid { - NSString *qs; + NSString *qs, *mailFormat, *fieldFormat; - qs = [NSString stringWithFormat: (@"(%@='%@') OR (mail='%@')" - @" OR (mozillaSecondEmail='%@')" - @" OR (xmozillasecondemail='%@')"), - UIDField, uid, uid, uid, uid]; + fieldFormat = [NSString stringWithFormat: @"(%%@='%@')", uid]; + mailFormat = [[mailFields stringsWithFormat: fieldFormat] + componentsJoinedByString: @" OR "]; + qs = [NSString stringWithFormat: (@"(%@='%@') OR %@"), + UIDField, uid, mailFormat]; return [EOQualifier qualifierWithQualifierFormat: qs]; } @@ -474,14 +481,12 @@ static int sizeLimit; contactEntry = [NSMutableDictionary dictionary]; attributes = [[self _searchAttributes] objectEnumerator]; - currentAttribute = [attributes nextObject]; - while (currentAttribute) + while ((currentAttribute = [attributes nextObject])) { value = [[ldapEntry attributeWithName: currentAttribute] stringValueAtIndex: 0]; if (value) [contactEntry setObject: value forKey: currentAttribute]; - currentAttribute = [attributes nextObject]; } value = [[ldapEntry attributeWithName: IDField] stringValueAtIndex: 0]; if (!value)