diff --git a/SoObjects/SOGo/SOGoSieveManager.m b/SoObjects/SOGo/SOGoSieveManager.m index 15197dedf..62aab5b2b 100644 --- a/SoObjects/SOGo/SOGoSieveManager.m +++ b/SoObjects/SOGo/SOGoSieveManager.m @@ -615,8 +615,8 @@ static NSString *sieveScriptName = @"sogo"; SOGoUserDefaults *ud; SOGoDomainDefaults *dd; NGSieveClient *client; - NSString *filterScript, *v, *sieveServer; - NSURL *url; + NSString *filterScript, *v, *sieveServer, *sieveScheme, *sieveQuery, *imapServer; + NSURL *url, *cUrl; int sievePort; BOOL b, connected; @@ -645,39 +645,42 @@ static NSString *sieveScriptName = @"sogo"; // // We first try to get the user's preferred Sieve server sieveServer = [[[user mailAccounts] objectAtIndex: 0] objectForKey: @"sieveServerName"]; + imapServer = [[[user mailAccounts] objectAtIndex: 0] objectForKey: @"serverName"]; - if (!sieveServer) + cUrl = [NSURL URLWithString: (sieveServer ? sieveServer : @"") ]; + url = [NSURL URLWithString: [dd sieveServer] ]; + + if ([cUrl host]) + sieveServer = [cUrl host]; + if (!sieveServer && [url host]) + sieveServer = [url host]; + if (!sieveServer && [dd sieveServer]) sieveServer = [dd sieveServer]; - - sievePort = 2000; - url = nil; - + if (!sieveServer && imapServer) + sieveServer = imapServer; if (!sieveServer) - { - NSString *s; - - s = [dd imapServer]; - - if (s) - { - NSURL *url; - - url = [NSURL URLWithString: s]; + sieveServer = @"localhost"; - if ([url host]) - sieveServer = [url host]; - else - sieveServer = s; - } - else - sieveServer = @"localhost"; - - url = [NSURL URLWithString: [NSString stringWithFormat: @"%@:%d", sieveServer, sievePort]]; - } + sieveScheme = [cUrl scheme] ? [cUrl scheme] : [url scheme]; + if (!sieveScheme) + sieveScheme = @"sieve"; + + if ([cUrl port]) + sievePort = [[cUrl port] intValue]; else - { - url = [NSURL URLWithString: sieveServer]; - } + if ([url port]) + sievePort = [[url port] intValue]; + else + sievePort = 2000; + + sieveQuery = [cUrl query] ? [cUrl query] : [url query]; + if (sieveQuery) + sieveQuery = [NSString stringWithFormat: @"/?%@", sieveQuery]; + else + sieveQuery = @""; + + url = [NSURL URLWithString: [NSString stringWithFormat: @"%@://%@:%d%@", + sieveScheme, sieveServer, sievePort, sieveQuery]]; client = [[NGSieveClient alloc] initWithURL: url]; diff --git a/SoObjects/SOGo/SOGoUser.m b/SoObjects/SOGo/SOGoUser.m index 9102653a8..06f663c55 100644 --- a/SoObjects/SOGo/SOGoUser.m +++ b/SoObjects/SOGo/SOGoUser.m @@ -576,13 +576,13 @@ - (void) _appendSystemMailAccount { - NSString *fullName, *replyTo, *imapLogin, *imapServer, *signature, + NSString *fullName, *replyTo, *imapLogin, *imapServer, *cImapServer, *signature, *encryption, *scheme, *action, *query, *customEmail, *sieveServer; NSMutableDictionary *mailAccount, *identity, *mailboxes, *receipts; NSNumber *port; NSMutableArray *identities; NSArray *mails; - NSURL *url; + NSURL *url, *cUrl; unsigned int count, max; NSInteger defaultPort; @@ -606,16 +606,22 @@ // imaps://localhost:143/?tls=YES // imaps://localhost/?tls=YES - imapServer = [self _fetchFieldForUser: @"c_imaphostname"]; - if (!imapServer) - imapServer = [[self domainDefaults] imapServer]; + cImapServer = [self _fetchFieldForUser: @"c_imaphostname"]; + imapServer = [[self domainDefaults] imapServer]; + cUrl = [NSURL URLWithString: (cImapServer ? cImapServer : @"")]; url = [NSURL URLWithString: imapServer]; - if ([url host]) - imapServer = [url host]; + if([cUrl host]) + imapServer = [cUrl host]; + else + if(cImapServer) + imapServer = cImapServer; + else + if([url host]) + imapServer = [url host]; [mailAccount setObject: imapServer forKey: @"serverName"]; // 3. port & encryption - scheme = [url scheme]; + scheme = [cUrl scheme] ? [cUrl scheme] : [url scheme]; if (scheme && [scheme caseInsensitiveCompare: @"imaps"] == NSOrderedSame) { @@ -624,14 +630,14 @@ } else { - query = [url query]; + query = [cUrl query] ? [cUrl query] : [url query]; if (query && [query caseInsensitiveCompare: @"tls=YES"] == NSOrderedSame) encryption = @"tls"; else encryption = @"none"; defaultPort = 143; } - port = [url port]; + port = [cUrl port] ? [cUrl port] : [url port]; if ([port intValue] == 0) /* port is nil or intValue == 0 */ port = [NSNumber numberWithInt: defaultPort]; [mailAccount setObject: port forKey: @"port"];