From 620872202d3bc53e91b09bad2815af93e9f66f10 Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Fri, 15 Jul 2011 22:22:11 +0000 Subject: [PATCH] See ChangeLog. Monotone-Parent: 42fa26da9b1def06a194726cab4199338a4bdf4c Monotone-Revision: 88b07aa8edf775fa02705a9c03a0f8f14f905db3 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2011-07-15T22:22:11 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 27 +++++++++-- Documentation/SOGo Installation Guide.odt | Bin 151993 -> 152128 bytes SoObjects/SOGo/SOGoDAVAuthenticator.m | 4 +- SoObjects/SOGo/SOGoDefaults.plist | 6 +-- SoObjects/SOGo/SOGoSession.m | 28 ++++++----- SoObjects/SOGo/SOGoSystemDefaults.h | 1 + SoObjects/SOGo/SOGoSystemDefaults.m | 9 +++- SoObjects/SOGo/SOGoUser.m | 26 +++++----- SoObjects/SOGo/SOGoUserManager.h | 2 +- SoObjects/SOGo/SOGoUserManager.m | 56 ++++++++++++---------- SoObjects/SOGo/SOGoWebAuthenticator.h | 2 +- SoObjects/SOGo/SOGoWebAuthenticator.m | 9 ++-- UI/MainUI/SOGoRootPage.m | 2 +- UI/MainUI/SOGoUserHomePage.m | 11 +++-- 14 files changed, 111 insertions(+), 72 deletions(-) diff --git a/ChangeLog b/ChangeLog index d6c195f22..75914b443 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,27 @@ -2011-07-15 Francis Lachapelle +2011-07-18 Francis Lachapelle - * SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): when - the login contains a @ character, compare the right part with only the - defined login domains (SOGoLoginDomains) -- don't consider all domains. + * SoObjects/SOGo/SOGoSystemDefaults.m (-addDomainToUID): new + method that returns the boolean value of the new system defaults + SOGoAddDomainToUID if at least one domain is defined. + + * SoObjects/SOGo/SOGoUser.m (-initWithLogin:roles:trust:): we now + try to extract the domain part of the login name only if the new + system defaults SOGoAddDomainToUID is set to YES. + + * SoObjects/SOGo/SOGoUserManager.m + (-contactInfosForUserWithUIDorEmail): idem. + + * SoObjects/SOGo/SOGoSession.m + (+decodeValue:usingKey:login:domain:password:): idem. + + * SoObjects/SOGo/SOGoUserManager.m + (-_sourceCheckLogin:andPassword:domain:perr:expire:grace:): the + domain argument is now a pointer so it will be set according to + the matching authentication source. + + * UI/MainUI/SOGoUserHomePage.m (-usersSearchAction): only append + the domain to the user's login if the new system defaults + SOGoAddToDomainToUID is set to YES. 2011-07-15 Wolfgang Sourdeau diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index 75360e001163c05bc4166f741dc6e59f52cc12c0..93bd0d89c6945bd86f1fbc689eee5f7baae7803b 100644 GIT binary patch delta 38150 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 Jt^;6u{{jjWIkEr% diff --git a/SoObjects/SOGo/SOGoDAVAuthenticator.m b/SoObjects/SOGo/SOGoDAVAuthenticator.m index 44f740764..0755c223c 100644 --- a/SoObjects/SOGo/SOGoDAVAuthenticator.m +++ b/SoObjects/SOGo/SOGoDAVAuthenticator.m @@ -53,18 +53,20 @@ - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd { + NSString *domain; SOGoSystemDefaults *sd; SOGoCASSession *session; SOGoPasswordPolicyError perr; int expire, grace; BOOL rc; + domain = nil; perr = PolicyNoError; rc = ([[SOGoUserManager sharedUserManager] checkLogin: [_login stringByReplacingString: @"%40" withString: @"@"] password: _pwd - domain: nil + domain: &domain perr: &perr expire: &expire grace: &grace] diff --git a/SoObjects/SOGo/SOGoDefaults.plist b/SoObjects/SOGo/SOGoDefaults.plist index 8acd155df..7b3e4cc9f 100644 --- a/SoObjects/SOGo/SOGoDefaults.plist +++ b/SoObjects/SOGo/SOGoDefaults.plist @@ -29,6 +29,7 @@ SOGoWebAccessEnabled = YES; SOGoCalendarDAVAccessEnabled = YES; SOGoAddressBookDAVAccessEnabled = YES; + SOGoAddDomainToUID = NO; SOGoLoginModule = "Mail"; SOGoLanguage = "English"; @@ -38,15 +39,13 @@ "Russian", "Ukrainian", "Swedish"); SOGoTimeZone = "UTC"; - SOGoDayStartTime = "8"; SOGoDayEndTime = "18"; SOGoTimeFormat = "%H:%M"; - - SOGoIMAPServer = "localhost"; SOGoFirstDayOfWeek = 0; SOGoFirstWeekOfYear = "January1"; + SOGoIMAPServer = "localhost"; SOGoMailDomain = "localhost"; SOGoMailMessageCheck = "manually"; SOGoMailMessageForwarding = "inline"; @@ -57,7 +56,6 @@ SOGoMailListViewColumnsOrder = ( "Thread", "Flagged", "Attachment", "Subject", "From", "Unread", "Date", "Priority", "Size" ); - SOGoSentFolderName = "Sent"; SOGoDraftsFolderName = "Drafts"; SOGoTrashFolderName = "Trash"; diff --git a/SoObjects/SOGo/SOGoSession.m b/SoObjects/SOGo/SOGoSession.m index 97a2c8117..d795e6e1c 100644 --- a/SoObjects/SOGo/SOGoSession.m +++ b/SoObjects/SOGo/SOGoSession.m @@ -251,21 +251,23 @@ r = [decodedValue rangeOfString: @":"]; *theLogin = [decodedValue substringToIndex: r.location]; *thePassword = [decodedValue substringFromIndex: r.location+1]; - - r = [*theLogin rangeOfString: @"@" options: NSBackwardsSearch]; - if (r.location != NSNotFound) + *theDomain = nil; + + sd = [SOGoSystemDefaults sharedSystemDefaults]; + if ([sd addDomainToUID]) { - // The domain is probably appended to the username; - // make sure it is defined as a login domain in the configuration. - sd = [SOGoSystemDefaults sharedSystemDefaults]; - *theDomain = [*theLogin substringFromIndex: (r.location + r.length)]; - if ([[sd loginDomains] containsObject: *theDomain]) - *theLogin = [*theLogin substringToIndex: r.location]; - else - *theDomain = nil; + r = [*theLogin rangeOfString: @"@" options: NSBackwardsSearch]; + if (r.location != NSNotFound) + { + // The domain is probably appended to the username; + // make sure it is defined as a domain in the configuration. + *theDomain = [*theLogin substringFromIndex: (r.location + r.length)]; + if ([[sd domainIds] containsObject: *theDomain]) + *theLogin = [*theLogin substringToIndex: r.location]; + else + *theDomain = nil; + } } - else - *theDomain = nil; } @end diff --git a/SoObjects/SOGo/SOGoSystemDefaults.h b/SoObjects/SOGo/SOGoSystemDefaults.h index 09e5cce65..ae241774e 100644 --- a/SoObjects/SOGo/SOGoSystemDefaults.h +++ b/SoObjects/SOGo/SOGoSystemDefaults.h @@ -34,6 +34,7 @@ + (SOGoSystemDefaults *) sharedSystemDefaults; - (NSArray *) domainIds; +- (BOOL) addDomainToUID; - (NSArray *) loginDomains; - (NSArray *) visibleDomainsForDomain: (NSString *) domain; diff --git a/SoObjects/SOGo/SOGoSystemDefaults.m b/SoObjects/SOGo/SOGoSystemDefaults.m index 72aaa3556..f67fb3a19 100644 --- a/SoObjects/SOGo/SOGoSystemDefaults.m +++ b/SoObjects/SOGo/SOGoSystemDefaults.m @@ -193,6 +193,11 @@ BootstrapNSUserDefaults () return [[self dictionaryForKey: @"domains"] allKeys]; } +- (BOOL) addDomainToUID +{ + return ([[self domainIds] count] > 0 && [self boolForKey: @"SOGoAddDomainToUID"]); +} + - (NSArray *) loginDomains { NSMutableArray *filteredLoginDomains; @@ -237,11 +242,11 @@ BootstrapNSUserDefaults () [domains addObjectsFromArray: currentGroup]; } - // Remove lookup domain from list + // Remove lookup domain and invalid domains groups = [domains objectEnumerator]; while ((currentDomain = [groups nextObject])) { - if ([currentDomain isEqualToString: domain]) + if ([currentDomain isEqualToString: domain] || ![definedDomains containsObject: currentDomain]) [domains removeObject: currentDomain]; } diff --git a/SoObjects/SOGo/SOGoUser.m b/SoObjects/SOGo/SOGoUser.m index 42de92e95..e68089bd1 100644 --- a/SoObjects/SOGo/SOGoUser.m +++ b/SoObjects/SOGo/SOGoUser.m @@ -124,7 +124,8 @@ /** * Return a new instance for the login name, which can be appended by a - * domain name. + * domain name. The domain is extracted only if the system defaults + * SOGoAddDomainToUID is enabled. * * @param newLogin a login name optionally follow by @domain * @param newRoles @@ -152,17 +153,20 @@ realUID = newLogin; else { - r = [newLogin rangeOfString: @"@" options: NSBackwardsSearch]; - if (r.location != NSNotFound) + sd = [SOGoSystemDefaults sharedSystemDefaults]; + if ([sd addDomainToUID]) { - // The domain is probably appended to the username; - // make sure it is defined as a login domain in the configuration. - sd = [SOGoSystemDefaults sharedSystemDefaults]; - domain = [newLogin substringFromIndex: (r.location + r.length)]; - if ([[sd loginDomains] containsObject: domain]) - newLogin = [newLogin substringToIndex: r.location]; - else - domain = nil; + r = [newLogin rangeOfString: @"@" options: NSBackwardsSearch]; + if (r.location != NSNotFound) + { + // The domain is probably appended to the username; + // make sure it is defined as a domain in the configuration. + domain = [newLogin substringFromIndex: (r.location + r.length)]; + if ([[sd domainIds] containsObject: domain]) + newLogin = [newLogin substringToIndex: r.location]; + else + domain = nil; + } } newLogin = [newLogin stringByReplacingString: @"%40" diff --git a/SoObjects/SOGo/SOGoUserManager.h b/SoObjects/SOGo/SOGoUserManager.h index c24d25515..ef5ca18cd 100644 --- a/SoObjects/SOGo/SOGoUserManager.h +++ b/SoObjects/SOGo/SOGoUserManager.h @@ -83,7 +83,7 @@ - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd - domain: (NSString *) _domain + domain: (NSString **) _domain perr: (SOGoPasswordPolicyError *) _perr expire: (int *) _expire grace: (int *) _grace; diff --git a/SoObjects/SOGo/SOGoUserManager.m b/SoObjects/SOGo/SOGoUserManager.m index 6788927dd..e67389444 100644 --- a/SoObjects/SOGo/SOGoUserManager.m +++ b/SoObjects/SOGo/SOGoUserManager.m @@ -396,7 +396,7 @@ - (BOOL) _sourceCheckLogin: (NSString *) login andPassword: (NSString *) password - domain: (NSString *) domain + domain: (NSString **) domain perr: (SOGoPasswordPolicyError *) perr expire: (int *) expire grace: (int *) grace @@ -408,23 +408,26 @@ checkOK = NO; - authIDs = [[self authenticationSourceIDsInDomain: domain] objectEnumerator]; + authIDs = [[self authenticationSourceIDsInDomain: *domain] objectEnumerator]; while (!checkOK && (currentID = [authIDs nextObject])) { sogoSource = [_sources objectForKey: currentID]; checkOK = [sogoSource checkLogin: login - password: password - perr: perr - expire: expire - grace: grace]; + password: password + perr: perr + expire: expire + grace: grace]; } + if (checkOK && *domain == nil) + *domain = [sogoSource domain]; + return checkOK; } - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd - domain: (NSString *) _domain + domain: (NSString **) _domain perr: (SOGoPasswordPolicyError *) _perr expire: (int *) _expire grace: (int *) _grace @@ -436,8 +439,8 @@ // We check for cached passwords. If the entry is cached, we // check this immediately. If not, we'll go directly at the // authentication source and try to validate there, then cache it. - if (_domain) - username = [NSString stringWithFormat: @"%@@%@", _login, _domain]; + if (*_domain != nil) + username = [NSString stringWithFormat: @"%@@%@", _login, *_domain]; else username = _login; jsonUser = [[SOGoCache sharedCache] userAttributesForLogin: username]; @@ -502,13 +505,12 @@ newPassword: (NSString *) newPassword perr: (SOGoPasswordPolicyError *) perr { - NSString *dictPassword, *jsonUser; + NSString *jsonUser; NSMutableDictionary *currentUser; BOOL didChange; jsonUser = [[SOGoCache sharedCache] userAttributesForLogin: login]; currentUser = [jsonUser objectFromJSONString]; - dictPassword = [currentUser objectForKey: @"password"]; if ([self _sourceChangePasswordForLogin: login inDomain: domain @@ -713,27 +715,31 @@ domain = nil; infos = nil; - r = [uid rangeOfString: @"@" options: NSBackwardsSearch]; - if (r.location != NSNotFound) + sd = [SOGoSystemDefaults sharedSystemDefaults]; + if ([sd addDomainToUID]) { - // The domain is probably appended to the username; - // make sure it is a defined domain in the configuration. - sd = [SOGoSystemDefaults sharedSystemDefaults]; - domain = [uid substringFromIndex: (r.location + r.length)]; - if ([[sd domainIds] containsObject: domain]) - username = [uid substringToIndex: r.location]; - else - domain = nil; + r = [uid rangeOfString: @"@" options: NSBackwardsSearch]; + if (r.location != NSNotFound) + { + // The domain is probably appended to the username; + // make sure it is a defined domain in the configuration. + domain = [uid substringFromIndex: (r.location + r.length)]; + if ([[sd domainIds] containsObject: domain]) + username = [uid substringToIndex: r.location]; + else + domain = nil; + } + if (domain != nil) + infos = [self contactInfosForUserWithUIDorEmail: username + inDomain: domain]; } - if (domain != nil) - infos = [self contactInfosForUserWithUIDorEmail: username - inDomain: domain]; + if (infos == nil) // If the user was not found using the domain or if no domain was detected, // search using the original uid. infos = [self contactInfosForUserWithUIDorEmail: uid inDomain: nil]; - + return infos; } diff --git a/SoObjects/SOGo/SOGoWebAuthenticator.h b/SoObjects/SOGo/SOGoWebAuthenticator.h index c47b626de..870a4c416 100644 --- a/SoObjects/SOGo/SOGoWebAuthenticator.h +++ b/SoObjects/SOGo/SOGoWebAuthenticator.h @@ -40,7 +40,7 @@ - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd - domain: (NSString *) _domain + domain: (NSString **) _domain perr: (SOGoPasswordPolicyError *) _perr expire: (int *) _expire grace: (int *) _grace; diff --git a/SoObjects/SOGo/SOGoWebAuthenticator.m b/SoObjects/SOGo/SOGoWebAuthenticator.m index 0cb65c47b..ac35d31e2 100644 --- a/SoObjects/SOGo/SOGoWebAuthenticator.m +++ b/SoObjects/SOGo/SOGoWebAuthenticator.m @@ -65,7 +65,7 @@ - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd { - NSString *username, *domain, *password, *value; + NSString *username, *password, *domain, *value; SOGoPasswordPolicyError perr; int expire, grace; @@ -83,6 +83,7 @@ if (!value) return NO; + domain = nil; [SOGoSession decodeValue: value usingKey: _login login: &username @@ -91,7 +92,7 @@ return [self checkLogin: username password: password - domain: domain + domain: &domain perr: &perr expire: &expire grace: &grace]; @@ -99,7 +100,7 @@ - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd - domain: (NSString *) _domain + domain: (NSString **) _domain perr: (SOGoPasswordPolicyError *) _perr expire: (int *) _expire grace: (int *) _grace @@ -207,7 +208,7 @@ if (![self checkLogin: login password: pwd - domain: domain + domain: &domain perr: &perr expire: &expire grace: &grace]) diff --git a/UI/MainUI/SOGoRootPage.m b/UI/MainUI/SOGoRootPage.m index 7fd46cbfd..765efe587 100644 --- a/UI/MainUI/SOGoRootPage.m +++ b/UI/MainUI/SOGoRootPage.m @@ -167,7 +167,7 @@ language = [request formValueForKey: @"language"]; domain = [request formValueForKey: @"domain"]; - if ((b = [auth checkLogin: username password: password domain: domain + if ((b = [auth checkLogin: username password: password domain: &domain perr: &err expire: &expire grace: &grace]) && (err == PolicyNoError) // no password policy diff --git a/UI/MainUI/SOGoUserHomePage.m b/UI/MainUI/SOGoUserHomePage.m index bf2908684..c7cc41906 100644 --- a/UI/MainUI/SOGoUserHomePage.m +++ b/UI/MainUI/SOGoUserHomePage.m @@ -366,30 +366,31 @@ { NSMutableArray *users; NSArray *currentUsers; - NSString *contact, *domain; + NSString *contact, *domain, *uidDomain; NSEnumerator *visibleDomains; id result; SOGoUserManager *um; SOGoSystemDefaults *sd; - um = [SOGoUserManager sharedUserManager]; contact = [self queryParameterForKey: @"search"]; if ([contact length]) { + um = [SOGoUserManager sharedUserManager]; + sd = [SOGoSystemDefaults sharedSystemDefaults]; domain = [[context activeUser] domain]; + uidDomain = [sd addDomainToUID]? domain : nil; users = [self _usersForResults: [um fetchUsersMatching: contact inDomain: domain] - inDomain: domain]; + inDomain: uidDomain]; if ([domain length]) { // Add results from visible domains - sd = [SOGoSystemDefaults sharedSystemDefaults]; visibleDomains = [[sd visibleDomainsForDomain: domain] objectEnumerator]; while ((domain = [visibleDomains nextObject])) { currentUsers = [self _usersForResults: [um fetchUsersMatching: contact inDomain: domain] - inDomain: domain]; + inDomain: uidDomain]; [users addObjectsFromArray: currentUsers]; } }