Fix for bug #1061.

pull/7/head
Ludovic Marcotte 2012-11-26 13:13:06 -05:00
parent 6d61e064a5
commit 7c250fad8f
7 changed files with 47 additions and 4 deletions

View File

@ -62,8 +62,11 @@
NSString *IDField; // the first part of a user DN
NSString *CNField;
NSString *UIDField;
NSArray *mailFields, *searchFields;
NSString *IMAPHostField, *IMAPLoginField;
NSArray *mailFields;
NSArray *searchFields;
NSString *IMAPHostField;
NSString *IMAPLoginField;
NSString *SieveHostField;
NSArray *bindFields;
BOOL listRequiresDot;
@ -110,6 +113,7 @@
searchFields: (NSArray *) newSearchFields
IMAPHostField: (NSString *) newIMAPHostField
IMAPLoginField: (NSString *) newIMAPLoginField
SieveHostField: (NSString *) newSieveHostField
bindFields: (id) newBindFields
kindField: (NSString *) newKindField
andMultipleBookingsField: (NSString *) newMultipleBookingsField;

View File

@ -107,6 +107,7 @@ static Class NSStringK;
[searchFields retain];
IMAPHostField = nil;
IMAPLoginField = nil;
SieveHostField = nil;
bindFields = nil;
_scope = @"sub";
_filter = nil;
@ -149,6 +150,7 @@ static Class NSStringK;
[searchFields release];
[IMAPHostField release];
[IMAPLoginField release];
[SieveHostField release];
[bindFields release];
[_filter release];
[_userPasswordAlgorithm release];
@ -194,6 +196,7 @@ static Class NSStringK;
searchFields: [udSource objectForKey: @"SearchFieldNames"]
IMAPHostField: [udSource objectForKey: @"IMAPHostFieldName"]
IMAPLoginField: [udSource objectForKey: @"IMAPLoginFieldName"]
SieveHostField: [udSource objectForKey: @"SieveHostFieldName"]
bindFields: [udSource objectForKey: @"bindFields"]
kindField: [udSource objectForKey: @"KindFieldName"]
andMultipleBookingsField: [udSource objectForKey: @"MultipleBookingsFieldName"]];
@ -311,6 +314,7 @@ static Class NSStringK;
searchFields: (NSArray *) newSearchFields
IMAPHostField: (NSString *) newIMAPHostField
IMAPLoginField: (NSString *) newIMAPLoginField
SieveHostField: (NSString *) newSieveHostField
bindFields: (id) newBindFields
kindField: (NSString *) newKindField
andMultipleBookingsField: (NSString *) newMultipleBookingsField
@ -326,6 +330,8 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField
ASSIGN(IMAPHostField, [newIMAPHostField lowercaseString]);
if (newIMAPLoginField)
ASSIGN(IMAPLoginField, [newIMAPLoginField lowercaseString]);
if (newSieveHostField)
ASSIGN(SieveHostField, [newSieveHostField lowercaseString]);
if (newMailFields)
ASSIGN(mailFields, newMailFields);
if (newSearchFields)
@ -848,6 +854,13 @@ andMultipleBookingsField: (NSString *) newMultipleBookingsField
if ([ldapValue length] > 0)
[ldifRecord setObject: ldapValue forKey: @"c_imaplogin"];
}
if (SieveHostField)
{
ldapValue = [[ldapEntry attributeWithName: SieveHostField] stringValueAtIndex: 0];
if ([ldapValue length] > 0)
[ldifRecord setObject: ldapValue forKey: @"c_sievehostname"];
}
}
- (void) _fillConstraints: (NGLdapEntry *) ldapEntry
@ -1609,6 +1622,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection,
searchFields: nil
IMAPHostField: nil
IMAPLoginField: nil
SieveHostField: nil
bindFields: nil
kindField: nil
andMultipleBookingsField: nil];

View File

@ -736,7 +736,12 @@ static NSString *sieveScriptName = @"sogo";
//
// Values such as "localhost" or "localhost:2000" are NOT supported.
//
sieveServer = [dd sieveServer];
// We first try to get the user's preferred Sieve server
sieveServer = [[[user mailAccounts] objectAtIndex: 0] objectForKey: @"sieveServerName"];
if (!sieveServer)
sieveServer = [dd sieveServer];
sievePort = 2000;
url = nil;

View File

@ -577,7 +577,7 @@
- (void) _appendSystemMailAccount
{
NSString *fullName, *replyTo, *imapLogin, *imapServer, *signature,
*encryption, *scheme, *action, *query, *customEmail;
*encryption, *scheme, *action, *query, *customEmail, *sieveServer;
NSMutableDictionary *mailAccount, *identity, *mailboxes, *receipts;
NSNumber *port;
NSMutableArray *identities;
@ -637,6 +637,15 @@
[mailAccount setObject: port forKey: @"port"];
[mailAccount setObject: encryption forKey: @"encryption"];
// Sieve server
sieveServer = [self _fetchFieldForUser: @"c_sievehostname"];
if (sieveServer)
{
[mailAccount setObject: sieveServer forKey: @"sieveServerName"];
}
/* identities */
identities = [NSMutableArray new];
mails = [self allEmails];

View File

@ -43,6 +43,7 @@
NSArray *_mailFields;
NSString *_imapLoginField;
NSString *_imapHostField;
NSString *_sieveHostField;
NSString *_userPasswordAlgorithm;
NSURL *_viewURL;
BOOL _prependPasswordScheme;

View File

@ -98,6 +98,7 @@
_kindField = nil;
_multipleBookingsField = nil;
_imapHostField = nil;
_sieveHostField = nil;
}
return self;
@ -115,6 +116,7 @@
[_multipleBookingsField release];
[_domainField release];
[_imapHostField release];
[_sieveHostField release];
[super dealloc];
}
@ -131,6 +133,7 @@
ASSIGN(_userPasswordAlgorithm, [udSource objectForKey: @"userPasswordAlgorithm"]);
ASSIGN(_imapLoginField, [udSource objectForKey: @"IMAPLoginFieldName"]);
ASSIGN(_imapHostField, [udSource objectForKey: @"IMAPHostFieldName"]);
ASSIGN(_sieveHostField, [udSource objectForKey: @"SieveHostFieldName"]);
ASSIGN(_kindField, [udSource objectForKey: @"KindFieldName"]);
ASSIGN(_multipleBookingsField, [udSource objectForKey: @"MultipleBookingsFieldName"]);
ASSIGN(_domainField, [udSource objectForKey: @"DomainFieldName"]);
@ -524,6 +527,13 @@
[response setObject: value forKey: @"c_imaphostname"];
}
if (_sieveHostField)
{
value = [response objectForKey: _sieveHostField];
if ([value isNotNull])
[response setObject: value forKey: @"c_sievehostname"];
}
// We check if the user can authenticate
if (_authenticationFilter)
{