Merge to 2.0.4b
This commit is contained in:
commit
5e0c7ae4f2
214
ChangeLog
214
ChangeLog
|
@ -1,3 +1,186 @@
|
||||||
|
commit 6913502810ec21479889c4ecf0a393de5ede2635
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Mon Feb 4 14:22:37 2013 -0500
|
||||||
|
|
||||||
|
Bump version to 2.0.4b
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M Version
|
||||||
|
|
||||||
|
commit 24971070f6f7e94629ff7bfc142d8194f7a19296
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Mon Feb 4 14:03:28 2013 -0500
|
||||||
|
|
||||||
|
Updated NEWS
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
|
||||||
|
commit 3d90e3a5393ff45b4915a1c915edd4c24b21763c
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Mon Feb 4 13:55:53 2013 -0500
|
||||||
|
|
||||||
|
Bump userkey length from 64 to 160 bytes
|
||||||
|
|
||||||
|
Allows for much longer username@domain:password strings.
|
||||||
|
Fixes #2212
|
||||||
|
|
||||||
|
To bump it further, the database schema will have to be updated
|
||||||
|
to allow a longer c_value (currently 255 chars)
|
||||||
|
|
||||||
|
M SoObjects/SOGo/SOGoWebAuthenticator.m
|
||||||
|
|
||||||
|
commit b5fdaa78cd5268aa9de49020e6fd2b71b8de7279
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Mon Feb 4 08:58:37 2013 -0500
|
||||||
|
|
||||||
|
Add missing strings to mail module
|
||||||
|
|
||||||
|
The two columns names of the contacts pane were missing. They have
|
||||||
|
been copied from the contact module.
|
||||||
|
|
||||||
|
M UI/MailerUI/BrazilianPortuguese.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Catalan.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Czech.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Danish.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Dutch.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/English.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Finnish.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/French.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/German.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Hungarian.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Icelandic.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Italian.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/NorwegianBokmal.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/NorwegianNynorsk.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Polish.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Russian.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Slovak.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/SpanishArgentina.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/SpanishSpain.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Swedish.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Ukrainian.lproj/Localizable.strings
|
||||||
|
M UI/MailerUI/Welsh.lproj/Localizable.strings
|
||||||
|
|
||||||
|
commit f94adb54736bdad858e85f5b87743f1d29b1e1e0
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Sun Feb 3 20:42:20 2013 -0500
|
||||||
|
|
||||||
|
Update NEWS file
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
|
||||||
|
commit e34ba5689cb2d816c6b353485ea274c95ba8983a
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Sun Feb 3 20:40:06 2013 -0500
|
||||||
|
|
||||||
|
Fix saving prefs with disabled mail module
|
||||||
|
|
||||||
|
M UI/WebServerResources/UIxPreferences.js
|
||||||
|
|
||||||
|
commit a4bd966cc0c3429261747384dc746ec5f71423de
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Fri Feb 1 16:26:01 2013 -0500
|
||||||
|
|
||||||
|
Revisit option handling
|
||||||
|
|
||||||
|
Really fix #2166
|
||||||
|
The previous fix (46b53b3) was wrong since SOPE was able to override
|
||||||
|
the 'final' config with its defaults.
|
||||||
|
|
||||||
|
This now uses a new approach using a volatile domain and a reordering
|
||||||
|
of the search list :
|
||||||
|
* NSArgumentDomain (command line arguments)
|
||||||
|
* sogodRuntimeDomain (config from all config files)
|
||||||
|
* GSPrimaryDomain
|
||||||
|
* NSGlobalDomain
|
||||||
|
* GSConfigDomain
|
||||||
|
* (languages)
|
||||||
|
* NSRegistrationDomain (SOPE loads its defaults in this one)
|
||||||
|
|
||||||
|
M SoObjects/SOGo/SOGoSystemDefaults.m
|
||||||
|
|
||||||
|
commit ecc36c9025b4b2717f5ce169b622648ccf02f410
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Feb 1 14:47:37 2013 -0500
|
||||||
|
|
||||||
|
Fix classification menu in component editor
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
M UI/WebServerResources/UIxComponentEditor.js
|
||||||
|
M UI/WebServerResources/generic.js
|
||||||
|
|
||||||
|
commit 716daf027de29bc72ffb84368291c191c49fa1e2
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Fri Feb 1 14:46:05 2013 -0500
|
||||||
|
|
||||||
|
Fix link to ACL editor for any authenticated user
|
||||||
|
|
||||||
|
M UI/WebServerResources/UIxAclEditor.js
|
||||||
|
|
||||||
|
commit 0b7c32510bc8653cc2ec32758f5215b14125e849
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Fri Feb 1 10:40:59 2013 -0500
|
||||||
|
|
||||||
|
news file update for 2.0.4b
|
||||||
|
|
||||||
|
M NEWS
|
||||||
|
|
||||||
|
commit 225a28258f1b33e594172b7ca61c8751f6c5e4f9
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jan 31 16:44:14 2013 -0500
|
||||||
|
|
||||||
|
Read credential files using dataWithContentsOfFile
|
||||||
|
|
||||||
|
Again, to cope with older gnusteps which don't have
|
||||||
|
stringWithContentsOfFile:encoding:error:
|
||||||
|
|
||||||
|
M Tools/SOGoToolExpireAutoReply.m
|
||||||
|
M Tools/SOGoToolUserPreferences.m
|
||||||
|
|
||||||
|
commit e01b190e5775fd98c5a7b0739c1eac0bc8a4c70f
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jan 31 15:42:48 2013 -0500
|
||||||
|
|
||||||
|
Fixup handling NSArgumentDomain arguments
|
||||||
|
|
||||||
|
would fix #2216
|
||||||
|
|
||||||
|
M Tools/SOGoTool.m
|
||||||
|
|
||||||
|
commit cd7d41026230e1a645f1153b3ebe134547b5b2d7
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jan 31 13:55:57 2013 -0500
|
||||||
|
|
||||||
|
Fix tooltips in contacts list
|
||||||
|
|
||||||
|
M UI/Templates/ContactsUI/UIxContactFoldersView.wox
|
||||||
|
D UI/Templates/ContactsUI/UIxContactsListView.wox
|
||||||
|
M UI/WebServerResources/ContactsUI.js
|
||||||
|
|
||||||
|
commit 4bcf90c693797985b2f36cd5986d0a821141c756
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Thu Jan 31 09:44:29 2013 -0500
|
||||||
|
|
||||||
|
Fix "Send Anyway" string wrt localizable strings
|
||||||
|
|
||||||
|
M UI/WebServerResources/UIxMailEditor.js
|
||||||
|
|
||||||
|
commit 0408415c61f572ab859c58f44c1d5a028b3fbef7
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Wed Jan 30 15:47:20 2013 -0500
|
||||||
|
|
||||||
|
Remove control characters before returning JSON
|
||||||
|
|
||||||
|
M SoObjects/SOGo/NSString+Utilities.m
|
||||||
|
|
||||||
|
commit 3ea94940c28e314a7904b98f171f95c5620b3382
|
||||||
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
|
Date: Wed Jan 30 08:52:32 2013 -0500
|
||||||
|
|
||||||
|
Update ChangeLog
|
||||||
|
|
||||||
|
M ChangeLog
|
||||||
|
|
||||||
commit 321675ba99288b036677242ada3bfb0cb945970c
|
commit 321675ba99288b036677242ada3bfb0cb945970c
|
||||||
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
Date: Wed Jan 30 08:51:10 2013 -0500
|
Date: Wed Jan 30 08:51:10 2013 -0500
|
||||||
|
@ -152,6 +335,37 @@ Date: Fri Jan 25 10:21:28 2013 -0500
|
||||||
|
|
||||||
M SoObjects/Appointments/SOGoAppointmentFolder.m
|
M SoObjects/Appointments/SOGoAppointmentFolder.m
|
||||||
|
|
||||||
|
commit 46b53b31fd417e6349304609920e36fb9869f9e3
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jan 24 22:43:38 2013 -0500
|
||||||
|
|
||||||
|
Fix order of precedence for options
|
||||||
|
|
||||||
|
Fixes #2066 and #2166
|
||||||
|
Enforce the following order of precedence for options, first match wins:
|
||||||
|
1. Command line arguments
|
||||||
|
2. .GNUstepDefaults
|
||||||
|
3. /etc/sogo/{debconf,sogo}.conf
|
||||||
|
4. SOGoDefaults.plist
|
||||||
|
|
||||||
|
M SoObjects/SOGo/SOGoSystemDefaults.m
|
||||||
|
|
||||||
|
commit 6093c4dd2e9095e0288992fe92ccb1b93fb9435a
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jan 24 20:37:30 2013 -0500
|
||||||
|
|
||||||
|
Axe handling of sogo 0.9 gnustep domain migration
|
||||||
|
|
||||||
|
M SoObjects/SOGo/SOGoSystemDefaults.m
|
||||||
|
|
||||||
|
commit 61ded01171806595da1c03b686a5bd1dc5cd45ed
|
||||||
|
Author: Jean Raby <jraby@inverse.ca>
|
||||||
|
Date: Thu Jan 24 20:35:03 2013 -0500
|
||||||
|
|
||||||
|
whitespace - tabkill
|
||||||
|
|
||||||
|
M SoObjects/SOGo/SOGoSystemDefaults.m
|
||||||
|
|
||||||
commit 9ed53cbab3365d3d2e0a9d2c1dc8a6141d185f0f
|
commit 9ed53cbab3365d3d2e0a9d2c1dc8a6141d185f0f
|
||||||
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
Author: Francis Lachapelle <flachapelle@inverse.ca>
|
||||||
Date: Thu Jan 24 18:50:20 2013 -0500
|
Date: Thu Jan 24 18:50:20 2013 -0500
|
||||||
|
|
19
NEWS
19
NEWS
|
@ -1,3 +1,22 @@
|
||||||
|
2.0.4b (2013-02-04)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Bug fixes
|
||||||
|
- Fixed order of precedence for options (#2166)
|
||||||
|
The following order is enforced - first match wins
|
||||||
|
1. Command line arguments
|
||||||
|
2. .GNUstepDefaults
|
||||||
|
3. /etc/sogo/{debconf,sogo}.conf
|
||||||
|
4. SOGoDefaults.plist
|
||||||
|
- fixed handling of LDAP DN containing special characters (#2152, #2207)
|
||||||
|
- fixed handling of credential files for older GNUsteps (#2216)
|
||||||
|
- fixed display of messages with control characters (#2079, #2177)
|
||||||
|
- fixed tooltips in contacts list (#2211)
|
||||||
|
- fixed classification menu in component editor (#2223)
|
||||||
|
- fixed link to ACL editor for 'any authenticated user' (#2222, #2224)
|
||||||
|
- fixed saving preferences when mail module is disabled
|
||||||
|
- fixed handling for long credential strings (#2212)
|
||||||
|
|
||||||
2.0.4a (2013-01-30)
|
2.0.4a (2013-01-30)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -260,7 +260,6 @@ static int cssEscapingCount;
|
||||||
[representation replaceString: @"\\" withString: @"\\\\"];
|
[representation replaceString: @"\\" withString: @"\\\\"];
|
||||||
[representation replaceString: @"\"" withString: @"\\\""];
|
[representation replaceString: @"\"" withString: @"\\\""];
|
||||||
[representation replaceString: @"/" withString: @"\\/"];
|
[representation replaceString: @"/" withString: @"\\/"];
|
||||||
[representation replaceString: @"\b" withString: @"\\b"];
|
|
||||||
[representation replaceString: @"\f" withString: @"\\f"];
|
[representation replaceString: @"\f" withString: @"\\f"];
|
||||||
[representation replaceString: @"\n" withString: @"\\n"];
|
[representation replaceString: @"\n" withString: @"\\n"];
|
||||||
[representation replaceString: @"\r" withString: @"\\r"];
|
[representation replaceString: @"\r" withString: @"\\r"];
|
||||||
|
@ -271,7 +270,33 @@ static int cssEscapingCount;
|
||||||
|
|
||||||
- (NSString *) jsonRepresentation
|
- (NSString *) jsonRepresentation
|
||||||
{
|
{
|
||||||
return [self doubleQuotedString];
|
static char thisCharCode[28];
|
||||||
|
static NSString *controlCharString = nil;
|
||||||
|
static NSCharacterSet *controlCharSet = nil;
|
||||||
|
NSString *cleanedString;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!controlCharSet)
|
||||||
|
{
|
||||||
|
// Create an array of chars for all control characters between 0x00 and 0x1F,
|
||||||
|
// apart from \t, \n, \f and \r (0x08, 0x09, 0x0A, 0x0C and 0x0D)
|
||||||
|
for (i = 0x00; i <= 0x08; i++) {
|
||||||
|
thisCharCode[i] = i;
|
||||||
|
}
|
||||||
|
thisCharCode[9] = 0x0B;
|
||||||
|
for (i = 0x0E; i <= 0x1F; i++) {
|
||||||
|
thisCharCode[i - 4] = i;
|
||||||
|
}
|
||||||
|
controlCharString = [NSString stringWithCString: thisCharCode length: 28];
|
||||||
|
controlCharSet = [NSCharacterSet characterSetWithCharactersInString: controlCharString];
|
||||||
|
[controlCharSet retain];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Escape double quotes and remove control characters
|
||||||
|
cleanedString = [[[self doubleQuotedString] componentsSeparatedByCharactersInSet: controlCharSet]
|
||||||
|
componentsJoinedByString: @""];
|
||||||
|
|
||||||
|
return cleanedString;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void) _setupCSSEscaping
|
- (void) _setupCSSEscaping
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#import <Foundation/NSBundle.h>
|
#import <Foundation/NSBundle.h>
|
||||||
#import <Foundation/NSFileManager.h>
|
#import <Foundation/NSFileManager.h>
|
||||||
#import <Foundation/NSFileManager.h>
|
#import <Foundation/NSFileManager.h>
|
||||||
|
#import <Foundation/NSDictionary.h>
|
||||||
#import <Foundation/NSUserDefaults.h>
|
#import <Foundation/NSUserDefaults.h>
|
||||||
|
|
||||||
#import <NGExtensions/NSObject+Logs.h>
|
#import <NGExtensions/NSObject+Logs.h>
|
||||||
|
@ -69,22 +70,7 @@ BootstrapNSUserDefaults ()
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_migrateSOGo09Configuration (NSUserDefaults *ud, NSObject *logger)
|
_injectConfigurationFromFile (NSMutableDictionary *defaultsDict,
|
||||||
{
|
|
||||||
NSDictionary *domain;
|
|
||||||
|
|
||||||
domain = [ud persistentDomainForName: @"sogod-0.9"];
|
|
||||||
if ([domain count])
|
|
||||||
{
|
|
||||||
[logger logWithFormat: @"migrating user defaults from sogod-0.9"];
|
|
||||||
[ud setPersistentDomain: domain forName: @"sogod"];
|
|
||||||
[ud removePersistentDomainForName: @"sogod-0.9"];
|
|
||||||
[ud synchronize];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
_injectConfigurationFromFile (NSUserDefaults *ud,
|
|
||||||
NSString *filename, NSObject *logger)
|
NSString *filename, NSObject *logger)
|
||||||
{
|
{
|
||||||
NSDictionary *newConfig, *fileAttrs;
|
NSDictionary *newConfig, *fileAttrs;
|
||||||
|
@ -112,7 +98,7 @@ _injectConfigurationFromFile (NSUserDefaults *ud,
|
||||||
{
|
{
|
||||||
newConfig = [NSDictionary dictionaryWithContentsOfFile: filename];
|
newConfig = [NSDictionary dictionaryWithContentsOfFile: filename];
|
||||||
if (newConfig)
|
if (newConfig)
|
||||||
[ud registerDefaults: newConfig];
|
[defaultsDict addEntriesFromDictionary: newConfig];
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
[logger errorWithFormat:
|
[logger errorWithFormat:
|
||||||
|
@ -126,6 +112,35 @@ _injectConfigurationFromFile (NSUserDefaults *ud,
|
||||||
|
|
||||||
+ (void) prepareUserDefaults
|
+ (void) prepareUserDefaults
|
||||||
{
|
{
|
||||||
|
/* Load settings from configuration files and
|
||||||
|
* enforce the following order of precedence.
|
||||||
|
* First match wins
|
||||||
|
* 1. Command line arguments
|
||||||
|
* 2. .GNUstepDefaults
|
||||||
|
* 3. /etc/sogo/{debconf,sogo}.conf
|
||||||
|
* 4. SOGoDefaults.plist
|
||||||
|
*
|
||||||
|
* The default standardUserDefaults search list is as follows:
|
||||||
|
* GSPrimaryDomain
|
||||||
|
* NSArgumentDomain (command line arguments)
|
||||||
|
* applicationDomain (sogod)
|
||||||
|
* NSGlobalDomain
|
||||||
|
* GSConfigDomain
|
||||||
|
* (languages)
|
||||||
|
* NSRegistrationDomain
|
||||||
|
*
|
||||||
|
* We'll end up with this search list:
|
||||||
|
* NSArgumentDomain (command line arguments)
|
||||||
|
* sogodRuntimeDomain (config from all config files)
|
||||||
|
* GSPrimaryDomain
|
||||||
|
* NSGlobalDomain
|
||||||
|
* GSConfigDomain
|
||||||
|
* (languages)
|
||||||
|
* NSRegistrationDomain (SOPE loads its defaults in this one)
|
||||||
|
*/
|
||||||
|
|
||||||
|
NSDictionary *sogodDomain;
|
||||||
|
NSMutableDictionary *configFromFiles;
|
||||||
NSUserDefaults *ud;
|
NSUserDefaults *ud;
|
||||||
SOGoStartupLogger *logger;
|
SOGoStartupLogger *logger;
|
||||||
NSBundle *bundle;
|
NSBundle *bundle;
|
||||||
|
@ -136,28 +151,41 @@ _injectConfigurationFromFile (NSUserDefaults *ud,
|
||||||
|
|
||||||
logger = [SOGoStartupLogger sharedLogger];
|
logger = [SOGoStartupLogger sharedLogger];
|
||||||
|
|
||||||
/* we load the configuration from the standard user default files */
|
/* Load the configuration from the standard user default files */
|
||||||
ud = [NSUserDefaults standardUserDefaults];
|
ud = [NSUserDefaults standardUserDefaults];
|
||||||
|
|
||||||
/* if "sogod" does not exist, maybe "sogod-0.9" still exists from an old
|
/* Populate configFromFiles with default values from SOGoDefaults.plist */
|
||||||
configuration */
|
configFromFiles = [NSMutableDictionary dictionaryWithCapacity:0];
|
||||||
if (![[ud persistentDomainForName: @"sogod"] count])
|
|
||||||
_migrateSOGo09Configuration (ud, logger);
|
|
||||||
|
|
||||||
/* reregister defaults from domain "sogod" into default domain, for
|
|
||||||
non-sogod processes */
|
|
||||||
[ud addSuiteNamed: @"sogod"];
|
|
||||||
|
|
||||||
/* we populate the configuration with the values from SOGoDefaults.plist */
|
|
||||||
bundle = [NSBundle bundleForClass: self];
|
bundle = [NSBundle bundleForClass: self];
|
||||||
filename = [bundle pathForResource: @"SOGoDefaults" ofType: @"plist"];
|
filename = [bundle pathForResource: @"SOGoDefaults" ofType: @"plist"];
|
||||||
if (filename)
|
if (filename)
|
||||||
_injectConfigurationFromFile (ud, filename, logger);
|
_injectConfigurationFromFile (configFromFiles, filename, logger);
|
||||||
|
|
||||||
/* fill the possibly missing values with the configuration stored
|
/* Fill/Override configFromFiles values with configuration stored
|
||||||
in "/etc" */
|
* in "/etc" */
|
||||||
for (count = 0; count < sizeof(confFiles)/sizeof(confFiles[0]); count++)
|
for (count = 0; count < sizeof(confFiles)/sizeof(confFiles[0]); count++)
|
||||||
_injectConfigurationFromFile (ud, confFiles[count], logger);
|
_injectConfigurationFromFile (configFromFiles, confFiles[count], logger);
|
||||||
|
|
||||||
|
/* This dance is required to let other appplications (sogo-tool) use
|
||||||
|
* options from the sogod domain while preserving the order of precedence
|
||||||
|
* - remove the 'sogod' domain from the user defaults search list
|
||||||
|
* - Load the content of the sogod domain into configFromFiles
|
||||||
|
* Thereby overriding values from the config files loaded above
|
||||||
|
*/
|
||||||
|
[ud removeSuiteNamed: @"sogod"];
|
||||||
|
sogodDomain = [ud persistentDomainForName: @"sogod"];
|
||||||
|
if ([sogodDomain count])
|
||||||
|
[configFromFiles addEntriesFromDictionary: sogodDomain];
|
||||||
|
|
||||||
|
/* Add a volatile domain containing the config to the search list.
|
||||||
|
* The domain is added at the very front of the search list
|
||||||
|
*/
|
||||||
|
[ud setVolatileDomain: configFromFiles
|
||||||
|
forName: @"sogodRuntimeDomain"];
|
||||||
|
[ud addSuiteNamed: @"sogodRuntimeDomain"];
|
||||||
|
|
||||||
|
/* NSArgumentsDomain goes back in front of the search list */
|
||||||
|
[ud addSuiteNamed: @"NSArgumentDomain"];
|
||||||
|
|
||||||
/* issue a warning if WOApplicationRedirectURL is used */
|
/* issue a warning if WOApplicationRedirectURL is used */
|
||||||
redirectURL = [ud stringForKey: @"WOApplicationRedirectURL"];
|
redirectURL = [ud stringForKey: @"WOApplicationRedirectURL"];
|
||||||
|
|
|
@ -55,6 +55,12 @@
|
||||||
#endif
|
#endif
|
||||||
#import "SOGoWebAuthenticator.h"
|
#import "SOGoWebAuthenticator.h"
|
||||||
|
|
||||||
|
#define COOKIE_SESSIONKEY_LEN 16
|
||||||
|
/* the key b64 encoded key XORed with the cookie value
|
||||||
|
* must fit in the database field which is 255 char long at the moment
|
||||||
|
*/
|
||||||
|
#define COOKIE_USERKEY_LEN 160
|
||||||
|
|
||||||
@implementation SOGoWebAuthenticator
|
@implementation SOGoWebAuthenticator
|
||||||
|
|
||||||
+ (id) sharedSOGoWebAuthenticator
|
+ (id) sharedSOGoWebAuthenticator
|
||||||
|
@ -369,8 +375,8 @@
|
||||||
// In memcached, the session key will be associated to the user's password
|
// In memcached, the session key will be associated to the user's password
|
||||||
// which will be XOR'ed with the user key.
|
// which will be XOR'ed with the user key.
|
||||||
//
|
//
|
||||||
sessionKey = [SOGoSession generateKeyForLength: 16];
|
sessionKey = [SOGoSession generateKeyForLength: COOKIE_SESSIONKEY_LEN];
|
||||||
userKey = [SOGoSession generateKeyForLength: 64];
|
userKey = [SOGoSession generateKeyForLength: COOKIE_USERKEY_LEN];
|
||||||
|
|
||||||
NSString *value = [NSString stringWithFormat: @"%@:%@", username, password];
|
NSString *value = [NSString stringWithFormat: @"%@:%@", username, password];
|
||||||
securedPassword = [SOGoSession securedValue: value usingKey: userKey];
|
securedPassword = [SOGoSession securedValue: value usingKey: userKey];
|
||||||
|
|
|
@ -77,15 +77,17 @@
|
||||||
|
|
||||||
- (void) setSanitizedArguments: (NSArray *) newArguments
|
- (void) setSanitizedArguments: (NSArray *) newArguments
|
||||||
{
|
{
|
||||||
NSString *argPair, *argsString, *k, *v;
|
|
||||||
NSDictionary *cliArguments;
|
|
||||||
NSArray *keys, *wordsWP;
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
argsString = [newArguments componentsJoinedByString:@" "];
|
NSArray *keys;
|
||||||
|
NSDictionary *cliArguments;
|
||||||
|
NSMutableArray *mutArguments;
|
||||||
|
NSString *kArg, *k, *v;
|
||||||
|
NSUInteger kArgPos;
|
||||||
|
|
||||||
/* Remove NSArgumentDomain -key value from the arguments */
|
mutArguments = [NSMutableArray arrayWithArray: newArguments];
|
||||||
|
|
||||||
|
/* Remove NSArgumentDomain '-key value' from the arguments */
|
||||||
cliArguments = [[NSUserDefaults standardUserDefaults]
|
cliArguments = [[NSUserDefaults standardUserDefaults]
|
||||||
volatileDomainForName:NSArgumentDomain];
|
volatileDomainForName:NSArgumentDomain];
|
||||||
keys = [cliArguments allKeys];
|
keys = [cliArguments allKeys];
|
||||||
|
@ -93,27 +95,33 @@
|
||||||
{
|
{
|
||||||
k = [keys objectAtIndex: i];
|
k = [keys objectAtIndex: i];
|
||||||
v = [cliArguments objectForKey:k];
|
v = [cliArguments objectForKey:k];
|
||||||
argPair = [NSString stringWithFormat:@"-%@ %@", k, v];
|
|
||||||
argsString = [argsString stringByReplacingOccurrencesOfString: argPair
|
|
||||||
withString: @""];
|
|
||||||
}
|
|
||||||
if ([argsString length])
|
|
||||||
{
|
|
||||||
/* dance to compact whitespace */
|
|
||||||
NSMutableArray *words = [NSMutableArray array];
|
|
||||||
wordsWP = [argsString componentsSeparatedByCharactersInSet:
|
|
||||||
[NSCharacterSet whitespaceCharacterSet]];
|
|
||||||
for (i=0; i < [wordsWP count]; i++)
|
|
||||||
{
|
|
||||||
v = [wordsWP objectAtIndex: i];
|
|
||||||
|
|
||||||
if([v length] > 1)
|
/* -p will be 'p' in NSArgumentDomain */
|
||||||
|
kArg = [NSString stringWithFormat:@"-%@", k];
|
||||||
|
kArgPos = [mutArguments indexOfObject: kArg];
|
||||||
|
|
||||||
|
if (kArgPos != NSNotFound)
|
||||||
{
|
{
|
||||||
[words addObject:v];
|
/* Remove arguments at kArgPos+1 and kArgPos
|
||||||
|
* if their sequence matches that of the ArgumentDomain data: -k v
|
||||||
|
*/
|
||||||
|
if (kArgPos < ([mutArguments count] - 1) &&
|
||||||
|
[[mutArguments objectAtIndex: kArgPos+1] isEqualToString: v])
|
||||||
|
{
|
||||||
|
[mutArguments removeObjectAtIndex: kArgPos+1];
|
||||||
|
[mutArguments removeObjectAtIndex: kArgPos];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* this should not happen unless the argument is the last one */
|
||||||
|
[mutArguments removeObjectAtIndex: kArgPos];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
argsString = [words componentsJoinedByString:@" "];
|
}
|
||||||
ASSIGN (sanitizedArguments, [argsString componentsSeparatedByString:@" "]);
|
|
||||||
|
if ([mutArguments count])
|
||||||
|
{
|
||||||
|
ASSIGN (sanitizedArguments, mutArguments);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -180,7 +180,7 @@
|
||||||
|
|
||||||
- (BOOL) run
|
- (BOOL) run
|
||||||
{
|
{
|
||||||
NSError *err;
|
NSData *credsData;
|
||||||
NSRange r;
|
NSRange r;
|
||||||
NSString *creds, *credsFile, *authname, *authpwd;
|
NSString *creds, *credsFile, *authname, *authpwd;
|
||||||
BOOL rc;
|
BOOL rc;
|
||||||
|
@ -195,15 +195,17 @@
|
||||||
credsFile = [[NSUserDefaults standardUserDefaults] stringForKey: @"p"];
|
credsFile = [[NSUserDefaults standardUserDefaults] stringForKey: @"p"];
|
||||||
if (credsFile)
|
if (credsFile)
|
||||||
{
|
{
|
||||||
creds = [NSString stringWithContentsOfFile: credsFile
|
credsData = [NSData dataWithContentsOfFile: credsFile];
|
||||||
encoding: NSUTF8StringEncoding
|
if (credsData == nil)
|
||||||
error: &err];
|
|
||||||
if (!creds)
|
|
||||||
{
|
{
|
||||||
NSLog(@"Error reading credential file '%@': %@", credsFile, err);
|
NSLog(@"Error reading credential file '%@'", credsFile);
|
||||||
|
return NO;
|
||||||
}
|
}
|
||||||
|
creds = [[NSString alloc] initWithData: credsData
|
||||||
|
encoding: NSUTF8StringEncoding];
|
||||||
|
[creds autorelease];
|
||||||
creds = [creds stringByTrimmingCharactersInSet:
|
creds = [creds stringByTrimmingCharactersInSet:
|
||||||
[NSCharacterSet newlineCharacterSet]];
|
[NSCharacterSet characterSetWithCharactersInString: @"\r\n"]];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (max > 0)
|
if (max > 0)
|
||||||
|
|
|
@ -109,25 +109,30 @@ typedef enum
|
||||||
[theKey caseInsensitiveCompare: @"Vacation"] == NSOrderedSame)
|
[theKey caseInsensitiveCompare: @"Vacation"] == NSOrderedSame)
|
||||||
{
|
{
|
||||||
/* credentials file handling */
|
/* credentials file handling */
|
||||||
|
NSData *credsData;
|
||||||
NSRange r;
|
NSRange r;
|
||||||
NSString *credsFile, *creds, *authname, *authpwd;
|
NSString *credsFile, *creds, *authname, *authpwd;
|
||||||
authname = nil;
|
authname = nil;
|
||||||
authpwd = nil;
|
authpwd = nil;
|
||||||
|
|
||||||
|
|
||||||
credsFile = [[NSUserDefaults standardUserDefaults] stringForKey: @"p"];
|
credsFile = [[NSUserDefaults standardUserDefaults] stringForKey: @"p"];
|
||||||
if (credsFile)
|
if (credsFile)
|
||||||
{
|
{
|
||||||
/* TODO: add back support for user:pwd here? */
|
/* TODO: add back support for user:pwd here? */
|
||||||
creds = [NSString stringWithContentsOfFile: credsFile
|
credsData = [NSData dataWithContentsOfFile: credsFile];
|
||||||
encoding: NSUTF8StringEncoding
|
if (credsData == nil)
|
||||||
error: NULL];
|
|
||||||
if (creds == nil)
|
|
||||||
{
|
{
|
||||||
NSLog(@"Error reading credential file '%@'", credsFile);
|
NSLog(@"Error reading credential file '%@'", credsFile);
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
creds = [[NSString alloc] initWithData: credsData
|
||||||
|
encoding: NSUTF8StringEncoding];
|
||||||
|
[creds autorelease];
|
||||||
creds = [creds stringByTrimmingCharactersInSet:
|
creds = [creds stringByTrimmingCharactersInSet:
|
||||||
[NSCharacterSet newlineCharacterSet]];
|
[NSCharacterSet characterSetWithCharactersInString: @"\r\n"]];
|
||||||
|
|
||||||
r = [creds rangeOfString: @":"];
|
r = [creds rangeOfString: @":"];
|
||||||
authname = [creds substringToIndex: r.location];
|
authname = [creds substringToIndex: r.location];
|
||||||
authpwd = [creds substringFromIndex: r.location+1];
|
authpwd = [creds substringFromIndex: r.location+1];
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Não é possível enviar a mensagem: todos os destinatários são inválidos.";
|
"cannot send message: (smtp) all recipients discarded" = "Não é possível enviar a mensagem: todos os destinatários são inválidos.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Não é possível enviar a mensagem. Os seguintes endereços estão inválidos:";
|
"cannot send message (smtp) - recipients discarded:" = "Não é possível enviar a mensagem. Os seguintes endereços estão inválidos:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Não é possível enviar a mensagem: erro ao conectar ao servidor SMTP.";
|
"cannot send message: (smtp) error when connecting" = "Não é possível enviar a mensagem: erro ao conectar ao servidor SMTP.";
|
||||||
|
|
||||||
|
"Name" = "Nome";
|
||||||
|
"Email" = "Email";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "No s'ha pogut enviar el missatge: tots els destinataris són incorrectes.";
|
"cannot send message: (smtp) all recipients discarded" = "No s'ha pogut enviar el missatge: tots els destinataris són incorrectes.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "No s'ha pogut enviar el missatge. Les següents adreces són incorrectes:";
|
"cannot send message (smtp) - recipients discarded:" = "No s'ha pogut enviar el missatge. Les següents adreces són incorrectes:";
|
||||||
"cannot send message: (smtp) error when connecting" = "No s'ha pogut enviar el missatge. Error al connectar amb el servidor SMTP.";
|
"cannot send message: (smtp) error when connecting" = "No s'ha pogut enviar el missatge. Error al connectar amb el servidor SMTP.";
|
||||||
|
|
||||||
|
"Name" = "Nom";
|
||||||
|
"Email" = "Correu electrònic";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Zprávu nelze odeslat: adresy všech příjemců jsou neplatné.";
|
"cannot send message: (smtp) all recipients discarded" = "Zprávu nelze odeslat: adresy všech příjemců jsou neplatné.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Zprávu nelze odeslat: následující adresy jsou neplatné:";
|
"cannot send message (smtp) - recipients discarded:" = "Zprávu nelze odeslat: následující adresy jsou neplatné:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Zprávu nelze odeslat: při spojení se SMTP serverem došlo k chybě.";
|
"cannot send message: (smtp) error when connecting" = "Zprávu nelze odeslat: při spojení se SMTP serverem došlo k chybě.";
|
||||||
|
|
||||||
|
"Name" = "Jméno";
|
||||||
|
"Email" = "E-mail";
|
||||||
|
|
|
@ -293,3 +293,6 @@ Bemærk:. Denne kvittering anerkender kun, at budskabet blev vist på modtageren
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende besked: alle modtagere er ugyldige.";
|
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende besked: alle modtagere er ugyldige.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Kan ikke sende besked. Følgende adresser er ugyldige:";
|
"cannot send message (smtp) - recipients discarded:" = "Kan ikke sende besked. Følgende adresser er ugyldige:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Kan ikke sende besked: Fejl ved oprettelse til SMTP-server.";
|
"cannot send message: (smtp) error when connecting" = "Kan ikke sende besked: Fejl ved oprettelse til SMTP-server.";
|
||||||
|
|
||||||
|
"Name" = "Navn";
|
||||||
|
"Email" = "E-mail";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Kan bericht niet sturen: alle ontvangers zijn ongeldig.";
|
"cannot send message: (smtp) all recipients discarded" = "Kan bericht niet sturen: alle ontvangers zijn ongeldig.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Kan bericht niet sturen: de volgende adressen zijn ongeldig:";
|
"cannot send message (smtp) - recipients discarded:" = "Kan bericht niet sturen: de volgende adressen zijn ongeldig:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Kan bericht niet sturen: fout bij verbinden met de SMTP server.";
|
"cannot send message: (smtp) error when connecting" = "Kan bericht niet sturen: fout bij verbinden met de SMTP server.";
|
||||||
|
|
||||||
|
"Name" = "Naam";
|
||||||
|
"Email" = "E-mail";
|
||||||
|
|
|
@ -259,7 +259,6 @@
|
||||||
"Please select only one message to print." = "Please select only one message to print.";
|
"Please select only one message to print." = "Please select only one message to print.";
|
||||||
"The message you have selected doesn't exist anymore." = "The message you have selected doesn't exist anymore.";
|
"The message you have selected doesn't exist anymore." = "The message you have selected doesn't exist anymore.";
|
||||||
|
|
||||||
|
|
||||||
"The folder with name \"%{0}\" could not be created."
|
"The folder with name \"%{0}\" could not be created."
|
||||||
= "The folder with name \"%{0}\" could not be created.";
|
= "The folder with name \"%{0}\" could not be created.";
|
||||||
"This folder could not be renamed to \"%{0}\"."
|
"This folder could not be renamed to \"%{0}\"."
|
||||||
|
@ -291,3 +290,7 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
||||||
|
|
||||||
|
/* Contacts list in mail editor */
|
||||||
|
"Email" = "Email";
|
||||||
|
"Name" = "Name";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Viestiä ei voi lähettää: kaikki vastaanottajat ovat virheellisiä.";
|
"cannot send message: (smtp) all recipients discarded" = "Viestiä ei voi lähettää: kaikki vastaanottajat ovat virheellisiä.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Viestiä ei voi lähettää: seuraavat osoitteet ovat virheellisiä:";
|
"cannot send message (smtp) - recipients discarded:" = "Viestiä ei voi lähettää: seuraavat osoitteet ovat virheellisiä:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Viestiä ei voi lähettää: virhe yhdistettäessä SMTP -palvelimeen.";
|
"cannot send message: (smtp) error when connecting" = "Viestiä ei voi lähettää: virhe yhdistettäessä SMTP -palvelimeen.";
|
||||||
|
|
||||||
|
"Name" = "Nimi";
|
||||||
|
"Email" = "Sähköposti";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Le message n'a pas pu être envoyé car aucune adresse n'est valide.";
|
"cannot send message: (smtp) all recipients discarded" = "Le message n'a pas pu être envoyé car aucune adresse n'est valide.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Le message n'a pas pu être envoyé car les adresses suivantes sont invalides :";
|
"cannot send message (smtp) - recipients discarded:" = "Le message n'a pas pu être envoyé car les adresses suivantes sont invalides :";
|
||||||
"cannot send message: (smtp) error when connecting" = "Le message n'a pas pu être envoyé: une erreur est survenue en tentant de rejoindre le serveur SMTP.";
|
"cannot send message: (smtp) error when connecting" = "Le message n'a pas pu être envoyé: une erreur est survenue en tentant de rejoindre le serveur SMTP.";
|
||||||
|
|
||||||
|
"Name" = "Identité";
|
||||||
|
"Email" = "Adresse électronique";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Kann Nachricht nicht versenden: Alle Empfänger sind ungültig.";
|
"cannot send message: (smtp) all recipients discarded" = "Kann Nachricht nicht versenden: Alle Empfänger sind ungültig.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Kann Nachricht nicht versenden: Die folgenden Addressen sind ungültig:";
|
"cannot send message (smtp) - recipients discarded:" = "Kann Nachricht nicht versenden: Die folgenden Addressen sind ungültig:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Kann Nachricht nicht versenden: Fehler beim Verbinden mit dem SMTP-Server.";
|
"cannot send message: (smtp) error when connecting" = "Kann Nachricht nicht versenden: Fehler beim Verbinden mit dem SMTP-Server.";
|
||||||
|
|
||||||
|
"Name" = "Name";
|
||||||
|
"Email" = "E-Mail";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Az üzenetet nem lehetett elküldeni: az összes címzett érvénytelen.";
|
"cannot send message: (smtp) all recipients discarded" = "Az üzenetet nem lehetett elküldeni: az összes címzett érvénytelen.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Az üzenetet nem lehetett elküldeni: az alábbi címzettek érvénytelenek:";
|
"cannot send message (smtp) - recipients discarded:" = "Az üzenetet nem lehetett elküldeni: az alábbi címzettek érvénytelenek:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Az üzenetet nem lehetett elküldeni: hiba az SMTP kiszolgálóhoz történő csatlakozáskor.";
|
"cannot send message: (smtp) error when connecting" = "Az üzenetet nem lehetett elküldeni: hiba az SMTP kiszolgálóhoz történő csatlakozáskor.";
|
||||||
|
|
||||||
|
"Name" = "Név";
|
||||||
|
"Email" = "Email";
|
||||||
|
|
|
@ -289,3 +289,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Ekki var hægt að senda tölvubréfið: enginn gildur móttakandi.";
|
"cannot send message: (smtp) all recipients discarded" = "Ekki var hægt að senda tölvubréfið: enginn gildur móttakandi.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Ekki var hægt að senda tölvubréfið: Eftirfarandi móttakendur eru ógildir:";
|
"cannot send message (smtp) - recipients discarded:" = "Ekki var hægt að senda tölvubréfið: Eftirfarandi móttakendur eru ógildir:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Ekki var hægt að senda tölvubréfið: ekki tókst að tengjast SMTP póstþjóni.";
|
"cannot send message: (smtp) error when connecting" = "Ekki var hægt að senda tölvubréfið: ekki tókst að tengjast SMTP póstþjóni.";
|
||||||
|
|
||||||
|
"Name" = "Nafn";
|
||||||
|
"Email" = "Tölvupóstur";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Impossibile inviare il messaggio: tutti i destinatari non sono validi.";
|
"cannot send message: (smtp) all recipients discarded" = "Impossibile inviare il messaggio: tutti i destinatari non sono validi.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Impossibile inviare il messaggio. Il seguente indirizzo non è valido:";
|
"cannot send message (smtp) - recipients discarded:" = "Impossibile inviare il messaggio. Il seguente indirizzo non è valido:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Impossibile inviare il messaggio: si è verificato un errore durante la connessione al server SMTP.";
|
"cannot send message: (smtp) error when connecting" = "Impossibile inviare il messaggio: si è verificato un errore durante la connessione al server SMTP.";
|
||||||
|
|
||||||
|
"Name" = "Nome";
|
||||||
|
"Email" = "Email";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende melding: alle mottakeradresser er ugyldige.";
|
"cannot send message: (smtp) all recipients discarded" = "Kan ikke sende melding: alle mottakeradresser er ugyldige.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Kan ikke sende melding. Følgende mottakeradresser er ugyldige:";
|
"cannot send message (smtp) - recipients discarded:" = "Kan ikke sende melding. Følgende mottakeradresser er ugyldige:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Kan ikke sende melding: problem med å prate med SMTP-tjener.";
|
"cannot send message: (smtp) error when connecting" = "Kan ikke sende melding: problem med å prate med SMTP-tjener.";
|
||||||
|
|
||||||
|
"Name" = "Navn";
|
||||||
|
"Email" = "E-post";
|
||||||
|
|
|
@ -289,3 +289,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
||||||
|
|
||||||
|
"Name" = "Navn";
|
||||||
|
"Email" = "E-post";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Nie można wysłać wiadomości - wszyscy odbiorcy zostali odrzuceni.";
|
"cannot send message: (smtp) all recipients discarded" = "Nie można wysłać wiadomości - wszyscy odbiorcy zostali odrzuceni.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Nie można wysłać wiadomości - poniźsi odbiorcy zostali odrzuceni:";
|
"cannot send message (smtp) - recipients discarded:" = "Nie można wysłać wiadomości - poniźsi odbiorcy zostali odrzuceni:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Nie można wysłać wiadomości - błąd połączenia z serwerem SMTP";
|
"cannot send message: (smtp) error when connecting" = "Nie można wysłać wiadomości - błąd połączenia z serwerem SMTP";
|
||||||
|
|
||||||
|
"Name" = "Nazwa";
|
||||||
|
"Email" = "E-mail";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Не удается отправить сообщение: всем получателям, все получатели являются недействительными.";
|
"cannot send message: (smtp) all recipients discarded" = "Не удается отправить сообщение: всем получателям, все получатели являются недействительными.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Не удается отправить сообщение. Следующие адреса неверны:";
|
"cannot send message (smtp) - recipients discarded:" = "Не удается отправить сообщение. Следующие адреса неверны:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Не удается отправить сообщение: ошибка при соединении с сервером SMTP.";
|
"cannot send message: (smtp) error when connecting" = "Не удается отправить сообщение: ошибка при соединении с сервером SMTP.";
|
||||||
|
|
||||||
|
"Name" = "ПолноеИмя";
|
||||||
|
"Email" = "Email";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Správa sa nedá odoslať: žiadny príjemca nie je platný.";
|
"cannot send message: (smtp) all recipients discarded" = "Správa sa nedá odoslať: žiadny príjemca nie je platný.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Správa sa nedá odoslať: Nasledujúci príjemcovia nemajú platnú adresu:";
|
"cannot send message (smtp) - recipients discarded:" = "Správa sa nedá odoslať: Nasledujúci príjemcovia nemajú platnú adresu:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Správa sa nedá odoslať: chyba pri pripájaní na SMTP server.";
|
"cannot send message: (smtp) error when connecting" = "Správa sa nedá odoslať: chyba pri pripájaní na SMTP server.";
|
||||||
|
|
||||||
|
"Name" = "Meno";
|
||||||
|
"Email" = "Email";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: (smtp) todos los destinatarios han sido descartados";
|
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: (smtp) todos los destinatarios han sido descartados";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: (smtp) destinatarios descartados:";
|
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: (smtp) destinatarios descartados:";
|
||||||
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: (smtp) error de conexión";
|
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: (smtp) error de conexión";
|
||||||
|
|
||||||
|
"Name" = "Nombre Completo";
|
||||||
|
"Email" = "Correo";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: (smtp) todos los destinatarios han sido descartados";
|
"cannot send message: (smtp) all recipients discarded" = "No se puede enviar el mensaje: (smtp) todos los destinatarios han sido descartados";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: (smtp) destinatarios descartados:";
|
"cannot send message (smtp) - recipients discarded:" = "No se puede enviar el mensaje: (smtp) destinatarios descartados:";
|
||||||
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: (smtp) error de conexión";
|
"cannot send message: (smtp) error when connecting" = "No se puede enviar el mensaje: (smtp) error de conexión";
|
||||||
|
|
||||||
|
"Name" = "Nombre Completo";
|
||||||
|
"Email" = "Correo";
|
||||||
|
|
|
@ -289,3 +289,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Meddelandet kan inte skickas: alla mottagaradresserna är felaktiga.";
|
"cannot send message: (smtp) all recipients discarded" = "Meddelandet kan inte skickas: alla mottagaradresserna är felaktiga.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Meddelandet kan inte skickas. Följande mottagaradresser är felaktiga:";
|
"cannot send message (smtp) - recipients discarded:" = "Meddelandet kan inte skickas. Följande mottagaradresser är felaktiga:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Meddelandet kan inte skickas: ett fel uppstod i uppkopplingen mot SMTP servern.";
|
"cannot send message: (smtp) error when connecting" = "Meddelandet kan inte skickas: ett fel uppstod i uppkopplingen mot SMTP servern.";
|
||||||
|
|
||||||
|
"Name" = "Namn";
|
||||||
|
"Email" = "E-post";
|
||||||
|
|
|
@ -291,3 +291,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Помилка під час відправлення повідомлення: некоректні адреси всіх отримувачів.";
|
"cannot send message: (smtp) all recipients discarded" = "Помилка під час відправлення повідомлення: некоректні адреси всіх отримувачів.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Помила під час відправлення повідомлення: такі адреси некоректні:";
|
"cannot send message (smtp) - recipients discarded:" = "Помила під час відправлення повідомлення: такі адреси некоректні:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Помилка під час відправлення повідомлення: SMTP-сервер не відповідає.";
|
"cannot send message: (smtp) error when connecting" = "Помилка під час відправлення повідомлення: SMTP-сервер не відповідає.";
|
||||||
|
|
||||||
|
"Name" = "Ім’я";
|
||||||
|
"Email" = "Електронна пошта";
|
||||||
|
|
|
@ -289,3 +289,6 @@
|
||||||
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
"cannot send message: (smtp) all recipients discarded" = "Cannot send message: all recipients are invalid.";
|
||||||
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
"cannot send message (smtp) - recipients discarded:" = "Cannot send message. The following addresses are invalid:";
|
||||||
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
"cannot send message: (smtp) error when connecting" = "Cannot send message: error when connecting to the SMTP server.";
|
||||||
|
|
||||||
|
"Name" = "Enw";
|
||||||
|
"Email" = "Ebost";
|
||||||
|
|
|
@ -152,8 +152,8 @@
|
||||||
var:categories="currentContact.c_categories"
|
var:categories="currentContact.c_categories"
|
||||||
var:id="currentContact.c_name"
|
var:id="currentContact.c_name"
|
||||||
var:contactname="currentContact.c_cn">
|
var:contactname="currentContact.c_cn">
|
||||||
<td class="displayName"><var:string value="currentContact.c_cn" const:escapeHTML="YES" /></td>
|
<td class="displayName" var:title="currentContact.c_cn"><var:string value="currentContact.c_cn" const:escapeHTML="YES" /></td>
|
||||||
<td><var:string value="currentContact.c_mail"/></td>
|
<td var:title="currentContact.c_mail"><var:string value="currentContact.c_mail"/></td>
|
||||||
<td><var:string value="currentContact.c_screenname"/></td>
|
<td><var:string value="currentContact.c_screenname"/></td>
|
||||||
<td><var:string value="currentContact.c_o"/></td>
|
<td><var:string value="currentContact.c_o"/></td>
|
||||||
<td><var:string value="currentContact.c_telephonenumber"/></td>
|
<td><var:string value="currentContact.c_telephonenumber"/></td>
|
||||||
|
|
|
@ -1,42 +0,0 @@
|
||||||
<?xml version='1.0' standalone='yes'?>
|
|
||||||
<!DOCTYPE container>
|
|
||||||
<container
|
|
||||||
xmlns="http://www.w3.org/1999/xhtml"
|
|
||||||
xmlns:var="http://www.skyrix.com/od/binding"
|
|
||||||
xmlns:const="http://www.skyrix.com/od/constant"
|
|
||||||
xmlns:uix="OGo:uix"
|
|
||||||
xmlns:label="OGo:label"
|
|
||||||
xmlns:rsrc="OGo:url">
|
|
||||||
<table id="contactsList" cellspacing="0">
|
|
||||||
<thead>
|
|
||||||
<tr class="tableview">
|
|
||||||
<!-- localize -->
|
|
||||||
<td class="tbtv_headercell sortableTableHeader" id="nameHeader"
|
|
||||||
><var:string label:value="Name"
|
|
||||||
/></td
|
|
||||||
><td class="tbtv_headercell sortableTableHeader" id="mailHeader"
|
|
||||||
><var:string label:value="Email"/></td
|
|
||||||
><td class="tbtv_headercell sortableTableHeader" id="screenNameHeader"
|
|
||||||
><var:string label:value="Screen Name" /></td
|
|
||||||
><td class="tbtv_headercell sortableTableHeader" id="orgHeader"
|
|
||||||
><var:string label:value="Organization" /></td
|
|
||||||
><td class="tbtv_headercell sortableTableHeader" id="phoneHeader"
|
|
||||||
><var:string label:value="Preferred Phone" /></td
|
|
||||||
></tr>
|
|
||||||
</thead>
|
|
||||||
<tbody id="contactsListTbody">
|
|
||||||
<var:foreach list="contactInfos" item="currentContact">
|
|
||||||
<tr var:class="currentContactClasses"
|
|
||||||
var:categories="currentContact.c_categories"
|
|
||||||
var:id="currentContact.c_name"
|
|
||||||
var:contactname="currentContact.c_cn">
|
|
||||||
<td class="displayName"><var:string value="currentContact.c_cn" const:escapeHTML="YES" /></td>
|
|
||||||
<td><var:string value="currentContact.c_mail"/></td>
|
|
||||||
<td><var:string value="currentContact.c_screenname"/></td>
|
|
||||||
<td><var:string value="currentContact.c_o"/></td>
|
|
||||||
<td><var:string value="currentContact.c_telephonenumber"/></td>
|
|
||||||
</tr>
|
|
||||||
</var:foreach>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</container>
|
|
|
@ -77,7 +77,9 @@ function contactsListCallback(http) {
|
||||||
row.setAttribute("contactname", contact["c_cn"]);
|
row.setAttribute("contactname", contact["c_cn"]);
|
||||||
var cells = row.getElementsByTagName("TD");
|
var cells = row.getElementsByTagName("TD");
|
||||||
$(cells[0]).update(contact["c_cn"]);
|
$(cells[0]).update(contact["c_cn"]);
|
||||||
|
cells[0].title = contact["c_cn"];
|
||||||
$(cells[1]).update(contact["c_mail"]);
|
$(cells[1]).update(contact["c_mail"]);
|
||||||
|
cells[1].title = contact["c_mail"];
|
||||||
if (fullView) {
|
if (fullView) {
|
||||||
$(cells[2]).update(contact["c_screenname"]);
|
$(cells[2]).update(contact["c_screenname"]);
|
||||||
$(cells[3]).update(contact["c_o"]);
|
$(cells[3]).update(contact["c_o"]);
|
||||||
|
|
|
@ -178,7 +178,7 @@ function openRightsForUserID(userID) {
|
||||||
function openRightsForUser(button) {
|
function openRightsForUser(button) {
|
||||||
var nodes = $("userList").getSelectedRows();
|
var nodes = $("userList").getSelectedRows();
|
||||||
if (nodes.length > 0)
|
if (nodes.length > 0)
|
||||||
openRightsForUserID(nodes[0].getAttribute("id").unescapeHTML());
|
openRightsForUserID(nodes[0].id.unescapeHTML());
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -198,7 +198,7 @@ function onAclLoadHandler() {
|
||||||
if (input) {
|
if (input) {
|
||||||
defaultUserID = $("defaultUserID").value;
|
defaultUserID = $("defaultUserID").value;
|
||||||
var userNode = nodeForUser(_("Any Authenticated User"),
|
var userNode = nodeForUser(_("Any Authenticated User"),
|
||||||
defaultUserID);
|
defaultUserID.escapeHTML());
|
||||||
userNode.addClassName("any-user");
|
userNode.addClassName("any-user");
|
||||||
userNode.setAttribute("title",
|
userNode.setAttribute("title",
|
||||||
_("Any user not listed above"));
|
_("Any user not listed above"));
|
||||||
|
|
|
@ -200,9 +200,7 @@ function onComponentEditorLoad(event) {
|
||||||
if (tmp) {
|
if (tmp) {
|
||||||
var menuItems = tmp.childNodesWithTag("li");
|
var menuItems = tmp.childNodesWithTag("li");
|
||||||
for (var i = 0; i < menuItems.length; i++)
|
for (var i = 0; i < menuItems.length; i++)
|
||||||
menuItems[i].on("mousedown",
|
menuItems[i].on("mousedown", onMenuSetClassification);
|
||||||
onMenuSetClassification.bindAsEventListener(menuItems[i]),
|
|
||||||
false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp = $("replyList");
|
tmp = $("replyList");
|
||||||
|
|
|
@ -121,7 +121,7 @@ function onValidate(onSuccess) {
|
||||||
showAlertDialog(_("error_missingrecipients"));
|
showAlertDialog(_("error_missingrecipients"));
|
||||||
}
|
}
|
||||||
else if (document.pageform.subject.value == "") {
|
else if (document.pageform.subject.value == "") {
|
||||||
showConfirmDialog(_("Warning"), _("error_missingsubject"), onValidateDone.bind(this, onSuccess), null, _("Send anyway"), _("Cancel"));
|
showConfirmDialog(_("Warning"), _("error_missingsubject"), onValidateDone.bind(this, onSuccess), null, _("Send Anyway"), _("Cancel"));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
onValidateDone(onSuccess);
|
onValidateDone(onSuccess);
|
||||||
|
|
|
@ -17,16 +17,18 @@ function savePreferences(sender) {
|
||||||
serializeContactsCategories();
|
serializeContactsCategories();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mailCustomFromEnabled && !emailRE.test($("email").value)) {
|
if (typeof mailCustomFromEnabled !== "undefined" && !emailRE.test($("email").value)) {
|
||||||
showAlertDialog(_("Please specify a valid sender address."));
|
showAlertDialog(_("Please specify a valid sender address."));
|
||||||
sendForm = false;
|
sendForm = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($("replyTo")) {
|
||||||
var replyTo = $("replyTo").value;
|
var replyTo = $("replyTo").value;
|
||||||
if (!replyTo.blank() && !emailRE.test(replyTo)) {
|
if (!replyTo.blank() && !emailRE.test(replyTo)) {
|
||||||
showAlertDialog(_("Please specify a valid reply-to address."));
|
showAlertDialog(_("Please specify a valid reply-to address."));
|
||||||
sendForm = false;
|
sendForm = false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($("dayStartTime")) {
|
if ($("dayStartTime")) {
|
||||||
var start = $("dayStartTime");
|
var start = $("dayStartTime");
|
||||||
|
@ -205,6 +207,7 @@ function initPreferences() {
|
||||||
$("contactsCategoryDelete").observe("click", onContactsCategoryDelete);
|
$("contactsCategoryDelete").observe("click", onContactsCategoryDelete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($("replyPlacementList"))
|
||||||
onReplyPlacementListChange();
|
onReplyPlacementListChange();
|
||||||
|
|
||||||
var button = $("addDefaultEmailAddresses");
|
var button = $("addDefaultEmailAddresses");
|
||||||
|
@ -216,6 +219,7 @@ function initPreferences() {
|
||||||
button.observe("click", onChangePasswordClick);
|
button.observe("click", onChangePasswordClick);
|
||||||
|
|
||||||
initSieveFilters();
|
initSieveFilters();
|
||||||
|
if ($('mailOptionsView'))
|
||||||
initMailAccounts();
|
initMailAccounts();
|
||||||
|
|
||||||
button = $("enableVacationEndDate");
|
button = $("enableVacationEndDate");
|
||||||
|
|
|
@ -1238,7 +1238,7 @@ function popupToolbarMenu(node, menuId) {
|
||||||
visibility: "visible" });
|
visibility: "visible" });
|
||||||
|
|
||||||
document.currentPopupMenu = popup;
|
document.currentPopupMenu = popup;
|
||||||
$(document.body).observe("mouseup", onBodyClickMenuHandler);
|
$(document.body).on("mouseup", onBodyClickMenuHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* contact selector */
|
/* contact selector */
|
||||||
|
|
Loading…
Reference in a new issue