From b380bc60e874ed01db0cf14c71567fc76cd889f1 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Mon, 19 Mar 2007 15:37:46 +0000 Subject: [PATCH] Monotone-Parent: 7b063b6baee92602dac99dd40f043d618eb1213d Monotone-Revision: c1fd920f73c42113a4f0c8e1e80623707a734b94 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-03-19T15:37:46 Monotone-Branch: ca.inverse.sogo --- SoObjects/SOGo/AgenorUserManager.m | 131 +++++++++++++++++------------ 1 file changed, 78 insertions(+), 53 deletions(-) diff --git a/SoObjects/SOGo/AgenorUserManager.m b/SoObjects/SOGo/AgenorUserManager.m index 99617edce..b316a11a4 100644 --- a/SoObjects/SOGo/AgenorUserManager.m +++ b/SoObjects/SOGo/AgenorUserManager.m @@ -26,6 +26,9 @@ #include #include "SOGoLRUCache.h" +#warning we should rely on the LDAP sources instead... +#define qualifierFormat @"mailNickname = %@" + @interface AgenorUserManager (PrivateAPI) - (NGLdapConnection *)ldapConnection; @@ -322,39 +325,54 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; return uid; } -- (NSString *)getUIDForEmail:(NSString *)_email { +- (NSString *) getUIDForEmail: (NSString *)_email +{ NSString *uid; + NSRange r; + NSString *domain; + + uid = nil; + if ([_email length] > 0) + { + uid = [self _cachedUIDForEmail:_email]; + if (!uid) + { + if (useLDAP) + uid = [self primaryGetAgenorUIDForEmail:_email]; + + if (!uid) + { + r = [_email rangeOfString:@"@"]; + if (r.length == 0) + return nil; + + domain = [_email substringFromIndex:NSMaxRange(r)]; + if (![domain isEqualToString:defaultMailDomain]) + uid = _email; + else + uid = [_email substringToIndex:r.location]; + } + if (uid) + [self _cacheUID:uid forEmail:_email]; + } + } - if ((uid = [self _cachedUIDForEmail:_email]) != nil) - return uid; - - if (useLDAP) { - uid = [self primaryGetAgenorUIDForEmail:_email]; - } - else { - NSRange r; - NSString *domain; - - if(!_email || [_email length] == 0) - return nil; - - r = [_email rangeOfString:@"@"]; - if (r.length == 0) - return nil; - - domain = [_email substringFromIndex:NSMaxRange(r)]; - if (![domain isEqualToString:defaultMailDomain]) - uid = _email; - else - uid = [_email substringToIndex:r.location]; - } - - [self _cacheUID:uid forEmail:_email]; return uid; } -- (NSString *)getUIDForICalPerson:(iCalPerson *)_person { - return [self getUIDForEmail:[_person rfc822Email]]; +#warning big ugly hack. LDAP lookup should be fixed +- (NSString *) getUIDForICalPerson: (iCalPerson *) _person +{ + NSString *domainString, *email, *uid; + + domainString = [NSString stringWithFormat: @"@%@", defaultMailDomain]; + email = [_person rfc822Email]; + if ([email hasSuffix: domainString]) + uid = [_person cn]; + else + uid = [self getUIDForEmail: email]; + + return uid; } /* may insert NSNulls into returned array */ @@ -389,7 +407,7 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; NSString *email; unsigned count; - q = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _uid]; + q = [EOQualifier qualifierWithQualifierFormat:qualifierFormat, _uid]; conn = [self ldapConnection]; resultEnum = [conn deepSearchAtBaseDN:ldapBaseDN @@ -434,28 +452,35 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; return email; } -- (NSString *)getEmailForUID:(NSString *)_uid { +- (NSString *)getEmailForUID:(NSString *)_uid +{ NSString *email; + NSRange r; - if (![_uid isNotNull] || [_uid length] == 0) - return nil; - if ((email = [self _cachedEmailForUID:_uid]) != nil) - return email; - - if (useLDAP) { - email = [self primaryGetEmailForAgenorUID:_uid]; - } - else { - NSRange r; - - r = [_uid rangeOfString:@"@"]; - email = (r.length > 0) - ? _uid - : [[_uid stringByAppendingString:@"@"] - stringByAppendingString:defaultMailDomain]; - } - - [self _cacheEmail:email forUID:_uid]; + email = nil; + + if ([_uid length] > 0) + { + email = [self _cachedEmailForUID: _uid]; + if (!email) + { + if (useLDAP) + email = [self primaryGetEmailForAgenorUID:_uid]; + + if (!email) + { + r = [_uid rangeOfString:@"@"]; + email = ((r.length > 0) + ? _uid + : [[_uid stringByAppendingString:@"@"] + stringByAppendingString: defaultMailDomain]); + } + + if (email) + [self _cacheEmail: email forUID: _uid]; + } + } + return email; } @@ -474,7 +499,7 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; if (cnAttrs == nil) cnAttrs = [[NSArray alloc] initWithObjects:@"cn", nil]; - q = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _uid]; + q = [EOQualifier qualifierWithQualifierFormat:qualifierFormat, _uid]; conn = [self ldapConnection]; resultEnum = [conn deepSearchAtBaseDN:ldapBaseDN @@ -564,7 +589,7 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; NSEnumerator *resultEnum; NGLdapEntry *entry; - q = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _uid]; + q = [EOQualifier qualifierWithQualifierFormat:qualifierFormat, _uid]; conn = [self ldapConnection]; resultEnum = [conn deepSearchAtBaseDN:ldapBaseDN @@ -1031,7 +1056,7 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; if (attrs == nil) attrs = [[NSArray alloc] initWithObjects:changeInternetAccessAttrName, nil]; - q = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _uid]; + q = [EOQualifier qualifierWithQualifierFormat:qualifierFormat, _uid]; conn = [self ldapConnection]; resultEnum = [conn deepSearchAtBaseDN:ldapBaseDN @@ -1132,7 +1157,7 @@ static unsigned PoolScanInterval = 5 * 60 /* every five minutes */; if (attrs == nil) attrs = [[NSArray alloc] initWithObjects:mailAutoresponderAttrName, nil]; - q = [EOQualifier qualifierWithQualifierFormat:@"uid = %@", _uid]; + q = [EOQualifier qualifierWithQualifierFormat:qualifierFormat, _uid]; conn = [self ldapConnection]; resultEnum = [conn deepSearchAtBaseDN:ldapBaseDN