mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-08-21 06:33:18 +00:00
See ChangeLog.
Monotone-Parent: d4394b4b92fdfda720d67698c9fbadc75787ad18 Monotone-Revision: e8c7d8a4465a1b9357c1d9f201dec2b93c5f3507 Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2012-02-11T07:08:02 Monotone-Branch: ca.inverse.sogo
This commit is contained in:
@@ -499,9 +499,6 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField
|
||||
return ldapConnection;
|
||||
}
|
||||
|
||||
//
|
||||
//
|
||||
//
|
||||
- (NSString *) domain
|
||||
{
|
||||
return domain;
|
||||
@@ -1131,6 +1128,7 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField
|
||||
}
|
||||
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) match
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
NGLdapConnection *ldapConnection;
|
||||
NGLdapEntry *currentEntry;
|
||||
@@ -1217,6 +1215,7 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField
|
||||
}
|
||||
|
||||
- (NSDictionary *) lookupContactEntryWithUIDorEmail: (NSString *) uid
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
NGLdapEntry *ldapEntry;
|
||||
EOQualifier *qualifier;
|
||||
|
||||
@@ -57,10 +57,12 @@
|
||||
perr: (SOGoPasswordPolicyError *) perr;
|
||||
|
||||
- (NSDictionary *) lookupContactEntry: (NSString *) theID;
|
||||
- (NSDictionary *) lookupContactEntryWithUIDorEmail: (NSString *) entryID;
|
||||
- (NSDictionary *) lookupContactEntryWithUIDorEmail: (NSString *) entryID
|
||||
inDomain: (NSString *) domain;
|
||||
|
||||
- (NSArray *) allEntryIDs;
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) filter;
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) filter
|
||||
inDomain: (NSString *) domain;
|
||||
|
||||
- (void) setSourceID: (NSString *) newSourceID;
|
||||
- (NSString *) sourceID;
|
||||
|
||||
@@ -400,7 +400,7 @@
|
||||
_domainDefaults = [SOGoDomainDefaults defaultsForDomain: domain];
|
||||
if (!_domainDefaults)
|
||||
{
|
||||
[self errorWithFormat: @"domain '%@' does not exist!", domain];
|
||||
//[self errorWithFormat: @"domain '%@' does not exist!", domain];
|
||||
_domainDefaults = [SOGoSystemDefaults sharedSystemDefaults];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -268,7 +268,7 @@
|
||||
while ((currentID = [allIDs nextObject]))
|
||||
{
|
||||
sourceDomain = [[_sources objectForKey: currentID] domain];
|
||||
if (![domain length] || [domain isEqualToString: sourceDomain])
|
||||
if (![domain length] || ![sourceDomain length] || [domain isEqualToString: sourceDomain])
|
||||
{
|
||||
metadata = [_sourcesMetadata objectForKey: currentID];
|
||||
if ([[metadata objectForKey: @"canAuthenticate"] boolValue])
|
||||
@@ -609,7 +609,8 @@
|
||||
while (!userEntry && (sourceID = [sogoSources nextObject]))
|
||||
{
|
||||
currentSource = [_sources objectForKey: sourceID];
|
||||
userEntry = [currentSource lookupContactEntryWithUIDorEmail: uid];
|
||||
userEntry = [currentSource lookupContactEntryWithUIDorEmail: uid
|
||||
inDomain: domain];
|
||||
if (userEntry)
|
||||
{
|
||||
[currentUser setObject: sourceID forKey: @"SOGoSource"];
|
||||
@@ -876,6 +877,7 @@
|
||||
|
||||
- (NSArray *) _fetchEntriesInSources: (NSArray *) sourcesList
|
||||
matching: (NSString *) filter
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
NSMutableArray *contacts;
|
||||
NSEnumerator *sources;
|
||||
@@ -888,7 +890,8 @@
|
||||
{
|
||||
currentSource = [_sources objectForKey: sourceID];
|
||||
[contacts addObjectsFromArray:
|
||||
[currentSource fetchContactsMatching: filter]];
|
||||
[currentSource fetchContactsMatching: filter
|
||||
inDomain: domain]];
|
||||
}
|
||||
|
||||
return [self _compactAndCompleteContacts: [contacts objectEnumerator]];
|
||||
@@ -899,15 +902,17 @@
|
||||
{
|
||||
return [self
|
||||
_fetchEntriesInSources: [self addressBookSourceIDsInDomain: domain]
|
||||
matching: filter];
|
||||
matching: filter
|
||||
inDomain: domain];
|
||||
}
|
||||
|
||||
- (NSArray *) fetchUsersMatching: (NSString *) filter
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
return [self _fetchEntriesInSources:
|
||||
[self authenticationSourceIDsInDomain: domain]
|
||||
matching: filter];
|
||||
return [self
|
||||
_fetchEntriesInSources: [self authenticationSourceIDsInDomain: domain]
|
||||
matching: filter
|
||||
inDomain: domain];
|
||||
}
|
||||
|
||||
- (NSString *) getLoginForDN: (NSString *) theDN
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
{
|
||||
NSString *_sourceID;
|
||||
NSString *_domain;
|
||||
NSString *_domainField;
|
||||
NSString *_authenticationFilter;
|
||||
NSArray *_loginFields;
|
||||
NSArray *_mailFields;
|
||||
|
||||
+44
-12
@@ -1,6 +1,6 @@
|
||||
/* SQLSource.h - this file is part of SOGo
|
||||
*
|
||||
* Copyright (C) 2009-2011 Inverse inc.
|
||||
* Copyright (C) 2009-2012 Inverse inc.
|
||||
*
|
||||
* Authors: Ludovic Marcotte <lmarcotte@inverse.ca>
|
||||
* Francis Lachapelle <flachapelle@inverse.ca>
|
||||
@@ -59,7 +59,7 @@
|
||||
* {
|
||||
* id = zot;
|
||||
* type = sql;
|
||||
* viewURL = "http://sogo:sogo@127.0.0.1:5432/sogo/sogo_view";
|
||||
* viewURL = "mysql://sogo:sogo@127.0.0.1:5432/sogo/sogo_view";
|
||||
* canAuthenticate = YES;
|
||||
* isAddressBook = YES;
|
||||
* userPasswordAlgorithm = md5;
|
||||
@@ -81,6 +81,7 @@
|
||||
if ((self = [super init]))
|
||||
{
|
||||
_sourceID = nil;
|
||||
_domainField = nil;
|
||||
_authenticationFilter = nil;
|
||||
_loginFields = nil;
|
||||
_mailFields = nil;
|
||||
@@ -104,6 +105,7 @@
|
||||
[_viewURL release];
|
||||
[_kindField release];
|
||||
[_multipleBookingsField release];
|
||||
[_domainField release];
|
||||
[_imapHostField release];
|
||||
|
||||
[super dealloc];
|
||||
@@ -123,6 +125,7 @@
|
||||
ASSIGN(_imapHostField, [udSource objectForKey: @"IMAPHostFieldName"]);
|
||||
ASSIGN(_kindField, [udSource objectForKey: @"KindFieldName"]);
|
||||
ASSIGN(_multipleBookingsField, [udSource objectForKey: @"MultipleBookingsFieldName"]);
|
||||
ASSIGN(_domainField, [udSource objectForKey: @"DomainFieldName"]);
|
||||
|
||||
if (!_userPasswordAlgorithm)
|
||||
_userPasswordAlgorithm = @"none";
|
||||
@@ -380,12 +383,13 @@
|
||||
|
||||
- (NSDictionary *) _lookupContactEntry: (NSString *) theID
|
||||
considerEmail: (BOOL) b
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
NSMutableDictionary *response;
|
||||
NSMutableArray *qualifiers;
|
||||
NSArray *fieldNames;
|
||||
EOAdaptorChannel *channel;
|
||||
EOQualifier *loginQualifier, *qualifier;
|
||||
EOQualifier *loginQualifier, *domainQualifier, *qualifier;
|
||||
GCSChannelManager *cm;
|
||||
NSMutableString *sql;
|
||||
NSString *value, *field;
|
||||
@@ -424,6 +428,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
domainQualifier = nil;
|
||||
if (_domainField && domain)
|
||||
{
|
||||
domainQualifier = [[EOKeyValueQualifier alloc] initWithKey: _domainField
|
||||
operatorSelector: EOQualifierOperatorEqual
|
||||
value: domain];
|
||||
[domainQualifier autorelease];
|
||||
}
|
||||
|
||||
if (b)
|
||||
{
|
||||
// Always compare againts the mail field
|
||||
@@ -456,6 +469,8 @@
|
||||
@" WHERE ",
|
||||
[_viewURL gcsTableName]];
|
||||
qualifier = [[EOOrQualifier alloc] initWithQualifierArray: qualifiers];
|
||||
if (domainQualifier)
|
||||
qualifier = [[EOAndQualifier alloc] initWithQualifiers: domainQualifier, qualifier, nil];
|
||||
[qualifier _gcsAppendToString: sql];
|
||||
|
||||
ex = [channel evaluateExpressionX: sql];
|
||||
@@ -484,9 +499,12 @@
|
||||
[response setObject: [NSNumber numberWithBool: YES] forKey: @"MailAccess"];
|
||||
|
||||
// We set the domain, if any
|
||||
value = nil;
|
||||
if (_domain)
|
||||
value = _domain;
|
||||
else
|
||||
else if (_domainField)
|
||||
value = [response objectForKey: _domainField];
|
||||
if (![value isNotNull])
|
||||
value = @"";
|
||||
[response setObject: value forKey: @"c_domain"];
|
||||
|
||||
@@ -598,12 +616,13 @@
|
||||
|
||||
- (NSDictionary *) lookupContactEntry: (NSString *) theID
|
||||
{
|
||||
return [self _lookupContactEntry: theID considerEmail: NO];
|
||||
return [self _lookupContactEntry: theID considerEmail: NO inDomain: nil];
|
||||
}
|
||||
|
||||
- (NSDictionary *) lookupContactEntryWithUIDorEmail: (NSString *) entryID
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
return [self _lookupContactEntry: entryID considerEmail: YES];
|
||||
return [self _lookupContactEntry: entryID considerEmail: YES inDomain: domain];
|
||||
}
|
||||
|
||||
- (NSArray *) allEntryIDs
|
||||
@@ -652,12 +671,14 @@
|
||||
}
|
||||
|
||||
- (NSArray *) fetchContactsMatching: (NSString *) filter
|
||||
inDomain: (NSString *) domain
|
||||
{
|
||||
EOAdaptorChannel *channel;
|
||||
NSMutableArray *results;
|
||||
GCSChannelManager *cm;
|
||||
NSException *ex;
|
||||
NSString *sql, *lowerFilter;
|
||||
NSMutableString *sql;
|
||||
NSString *lowerFilter;
|
||||
|
||||
results = [NSMutableArray array];
|
||||
|
||||
@@ -668,18 +689,29 @@
|
||||
lowerFilter = [filter lowercaseString];
|
||||
lowerFilter = [lowerFilter stringByReplacingString: @"'" withString: @"''"];
|
||||
|
||||
sql = [NSString stringWithFormat: (@"SELECT *"
|
||||
sql = [NSMutableString stringWithFormat: (@"SELECT *"
|
||||
@" FROM %@"
|
||||
@" WHERE LOWER(c_cn) LIKE '%%%@%%'"
|
||||
@" OR LOWER(mail) LIKE '%%%@%%'"),
|
||||
@" WHERE"
|
||||
@" (LOWER(c_cn) LIKE '%%%@%%'"
|
||||
@" OR LOWER(mail) LIKE '%%%@%%'"),
|
||||
[_viewURL gcsTableName],
|
||||
lowerFilter, lowerFilter];
|
||||
|
||||
|
||||
if (_mailFields && [_mailFields count] > 0)
|
||||
{
|
||||
sql = [sql stringByAppendingString: [self _whereClauseFromArray: _mailFields value: lowerFilter exact: NO]];
|
||||
[sql appendString: [self _whereClauseFromArray: _mailFields value: lowerFilter exact: NO]];
|
||||
}
|
||||
|
||||
[sql appendString: @")"];
|
||||
|
||||
if (_domainField)
|
||||
{
|
||||
if ([domain length])
|
||||
[sql appendFormat: @" AND %@ = '%@'", _domainField, domain];
|
||||
else
|
||||
[sql appendFormat: @" AND %@ IS NULL", _domainField];
|
||||
}
|
||||
|
||||
ex = [channel evaluateExpressionX: sql];
|
||||
if (!ex)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user