From cb3959d9910d09acdb259ea0cedbeb89c365f8c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Tue, 19 Jan 2016 19:51:06 +0100 Subject: [PATCH 01/38] Unit test encode qp text This will crash without sope commit 0c9b08d18f07205b4de58bb700ad15a4a4649e53 --- Tests/Unit/TestNGMimeHeaderFieldGenerator.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tests/Unit/TestNGMimeHeaderFieldGenerator.m b/Tests/Unit/TestNGMimeHeaderFieldGenerator.m index e8f85999c..3845070bf 100644 --- a/Tests/Unit/TestNGMimeHeaderFieldGenerator.m +++ b/Tests/Unit/TestNGMimeHeaderFieldGenerator.m @@ -83,6 +83,10 @@ @" =?utf-8?q?=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C?=\n" @" =?utf-8?q?=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C=D1=8C?=\n" @" =?utf-8?q?=D1=8C=D1=8C=D1=8C?=", nil], + [NSArray arrayWithObjects: + @"aжжжжжжжжжжж", + @"=?utf-8?q?a=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6?=\n" + @" =?utf-8?q?=D0=B6=D0=B6?=", nil], nil ]; NSArray *caseData; From bad7fd45321e1292d2fc8a228d988e95d32cf069 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Tue, 19 Jan 2016 19:51:41 +0100 Subject: [PATCH 02/38] Unit test encode qp text: long of second line This will fail without sope commit 361178217156177a2a40c327a64f70716b30ae3a --- Tests/Unit/TestNGMimeHeaderFieldGenerator.m | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Tests/Unit/TestNGMimeHeaderFieldGenerator.m b/Tests/Unit/TestNGMimeHeaderFieldGenerator.m index 3845070bf..69f6b0ced 100644 --- a/Tests/Unit/TestNGMimeHeaderFieldGenerator.m +++ b/Tests/Unit/TestNGMimeHeaderFieldGenerator.m @@ -87,6 +87,11 @@ @"aжжжжжжжжжжж", @"=?utf-8?q?a=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6?=\n" @" =?utf-8?q?=D0=B6=D0=B6?=", nil], + [NSArray arrayWithObjects: + @"aжжжжжжжжжжжжжжжжжжжжж", + @"=?utf-8?q?a=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6?=\n" + @" =?utf-8?q?=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6=D0=B6?=\n" + @" =?utf-8?q?=D0=B6?=", nil], nil ]; NSArray *caseData; From 6b2ec7a2e75084359af75bcd3f473084eed09467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Wed, 20 Jan 2016 11:01:27 +0100 Subject: [PATCH 03/38] Remove listRequiresDot option from *Source classes This option is not needed. SQLSource was not using it and LDAPSource will transform the filter to (UIDField=*) when there is nothing set as filter, before this patch it was needed to either insert '.' as filter or set listRequiresDot to NO --- SoObjects/Contacts/SOGoContactSourceFolder.m | 29 +++------- SoObjects/SOGo/LDAPSource.h | 2 - SoObjects/SOGo/LDAPSource.m | 59 +++++++------------- SoObjects/SOGo/SOGoSource.h | 4 -- SoObjects/SOGo/SQLSource.m | 11 ---- 5 files changed, 28 insertions(+), 77 deletions(-) diff --git a/SoObjects/Contacts/SOGoContactSourceFolder.m b/SoObjects/Contacts/SOGoContactSourceFolder.m index bf4f30bd8..464a787c4 100644 --- a/SoObjects/Contacts/SOGoContactSourceFolder.m +++ b/SoObjects/Contacts/SOGoContactSourceFolder.m @@ -353,26 +353,15 @@ NSArray *records, *result; EOSortOrdering *ordering; - result = nil; - - if (([filter length] > 0 && [criteria isEqualToString: @"name_or_address"]) - || ![source listRequiresDot]) - { - records = [source fetchContactsMatching: filter - inDomain: domain]; - [childRecords setObjects: records - forKeys: [records objectsForKey: @"c_name" - notFoundMarker: nil]]; - records = [self _flattenedRecords: records]; - ordering - = [EOSortOrdering sortOrderingWithKey: sortKey - selector: ((sortOrdering == NSOrderedDescending) - ? EOCompareCaseInsensitiveDescending - : EOCompareCaseInsensitiveAscending)]; - result - = [records sortedArrayUsingKeyOrderArray: - [NSArray arrayWithObject: ordering]]; - } + records = [source fetchContactsMatching: filter inDomain: domain]; + [childRecords setObjects: records forKeys: [records objectsForKey: @"c_name" + notFoundMarker: nil]]; + records = [self _flattenedRecords: records]; + ordering = [EOSortOrdering sortOrderingWithKey: sortKey + selector: ((sortOrdering == NSOrderedDescending) + ? EOCompareCaseInsensitiveDescending + : EOCompareCaseInsensitiveAscending)]; + result = [records sortedArrayUsingKeyOrderArray: [NSArray arrayWithObject: ordering]]; return result; } diff --git a/SoObjects/SOGo/LDAPSource.h b/SoObjects/SOGo/LDAPSource.h index 9081196be..4958b0cee 100644 --- a/SoObjects/SOGo/LDAPSource.h +++ b/SoObjects/SOGo/LDAPSource.h @@ -65,8 +65,6 @@ NSString *SieveHostField; NSArray *bindFields; - BOOL listRequiresDot; - NSString *domain; NSString *contactInfoAttribute; diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index 2fa8f3773..32553fe2d 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -110,7 +110,6 @@ static Class NSStringK; _scope = @"sub"; _filter = nil; _userPasswordAlgorithm = nil; - listRequiresDot = YES; searchAttributes = nil; passwordPolicy = NO; @@ -201,9 +200,6 @@ static Class NSStringK; kindField: [udSource objectForKey: @"KindFieldName"] andMultipleBookingsField: [udSource objectForKey: @"MultipleBookingsFieldName"]]; - dotValue = [udSource objectForKey: @"listRequiresDot"]; - if (dotValue) - [self setListRequiresDot: [dotValue boolValue]]; [self setContactMapping: [udSource objectForKey: @"mapping"] andObjectClasses: [udSource objectForKey: @"objectClasses"]]; @@ -371,16 +367,6 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses ASSIGN(multipleBookingsField, [newMultipleBookingsField lowercaseString]); } -- (void) setListRequiresDot: (BOOL) aBool -{ - listRequiresDot = aBool; -} - -- (BOOL) listRequiresDot -{ - return listRequiresDot; -} - - (void) setContactMapping: (NSDictionary *) newMapping andObjectClasses: (NSArray *) newObjectClasses { @@ -790,15 +776,13 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } - else if (!listRequiresDot) + else { qs = [NSMutableString stringWithFormat: @"(%@='*')", CNField]; if ([_filter length]) [qs appendFormat: @" AND %@", _filter]; qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } - else - qualifier = nil; return qualifier; } @@ -1189,29 +1173,25 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses contacts = [NSMutableArray array]; - if ([match length] > 0 || !listRequiresDot) - { - ldapConnection = [self _ldapConnection]; - qualifier = [self _qualifierForFilter: match]; - // attributes = [self _searchAttributes]; - attributes = [NSArray arrayWithObject: @"*"]; + ldapConnection = [self _ldapConnection]; + qualifier = [self _qualifierForFilter: match]; + // attributes = [self _searchAttributes]; + attributes = [NSArray arrayWithObject: @"*"]; - if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame) - entries = [ldapConnection baseSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame) - entries = [ldapConnection flatSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - else /* we do it like before */ - entries = [ldapConnection deepSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - while ((currentEntry = [entries nextObject])) - [contacts addObject: - [self _convertLDAPEntryToContact: currentEntry]]; - } + if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame) + entries = [ldapConnection baseSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame) + entries = [ldapConnection flatSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + else /* we do it like before */ + entries = [ldapConnection deepSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + while ((currentEntry = [entries nextObject])) + [contacts addObject: [self _convertLDAPEntryToContact: currentEntry]]; return contacts; } @@ -1721,7 +1701,6 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection, bindFields: nil kindField: nil andMultipleBookingsField: nil]; - [ab setListRequiresDot: NO]; [ab setModifiers: modifier]; [sources addObject: ab]; [ab release]; diff --git a/SoObjects/SOGo/SOGoSource.h b/SoObjects/SOGo/SOGoSource.h index d59a81086..16ff54d19 100644 --- a/SoObjects/SOGo/SOGoSource.h +++ b/SoObjects/SOGo/SOGoSource.h @@ -41,10 +41,6 @@ - (NSString *) domain; -/* requires a "." to obtain the full list of contacts */ -- (void) setListRequiresDot: (BOOL) aBool; -- (BOOL) listRequiresDot; - - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd perr: (SOGoPasswordPolicyError *) _perr diff --git a/SoObjects/SOGo/SQLSource.m b/SoObjects/SOGo/SQLSource.m index 307348f80..9665cea2a 100644 --- a/SoObjects/SOGo/SQLSource.m +++ b/SoObjects/SOGo/SQLSource.m @@ -851,17 +851,6 @@ return _sourceID; } -- (void) setListRequiresDot: (BOOL) newListRequiresDot -{ -} - -- (BOOL) listRequiresDot -{ - /* This method is not implemented for SQLSource. It must enable a mechanism - where using "." is not required to list the content of addressbooks. */ - return YES; -} - /* card editing */ - (void) setModifiers: (NSArray *) newModifiers { From 1bae41e127ee1ac41bb457db6db7605fc28f220e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Wed, 20 Jan 2016 11:02:46 +0100 Subject: [PATCH 04/38] Request all contacts no longer needs value=. This reverts 1c8b693 and it's possible thanks to removing listRequiresDot option 6b2ec7a Listing contacts didn't work for sources with listRequiresDot set to YES (LDAPSource, by default, had this option that way) --- UI/WebServerResources/ContactsUI.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/UI/WebServerResources/ContactsUI.js b/UI/WebServerResources/ContactsUI.js index 1fa869782..86782e2ae 100644 --- a/UI/WebServerResources/ContactsUI.js +++ b/UI/WebServerResources/ContactsUI.js @@ -24,8 +24,6 @@ function openContactsFolder(contactsFolder, reload, idx) { if (searchValue && searchValue.length > 0) url += ("&search=" + search["contacts"]["criteria"] + "&value=" + escape(searchValue.utf8encode())); - else - url += "&search=name_or_address&value=."; var sortAttribute = sorting["attribute"]; if (sortAttribute && sortAttribute.length > 0) url += ("&sort=" + sorting["attribute"] From 359da78d8170c21f861a37fc7a5d5e0392cab8de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Sun, 24 Jan 2016 01:10:13 +0100 Subject: [PATCH 05/38] oc-calendar: Fix typo setting or operator For PidLidAppointmentTimeZoneDefinitionStartDisplay. It is a typo introduced by 376e717. --- OpenChange/MAPIStoreAppointmentWrapper.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index 11a189500..d1d4494d6 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -2026,7 +2026,7 @@ ReservedBlockEE2Size: 00 00 00 00 /* [MS-OXOCAL] 3.1.5.5.1: This property is used in floating (all-day) events, specified in floating time, to convert the start date from UTC to the user's time zone */ - if ([event isAllDay] | [event isRecurrent]) + if ([event isAllDay] || [event isRecurrent]) { /* [MS-OXOCAL] 2.2.1.42: This property can only have the E flag set in the TimeZoneDefinition struct */ From 3d9466df452b15267f87fc8abb2f312e3cac1879 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Mon, 25 Jan 2016 20:13:21 +0100 Subject: [PATCH 06/38] Setting log level on backend initialization Get the current openchange log level (actually is the samba's log level) --- OpenChange/MAPIStoreSOGo.m | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 0ec1d59bd..0ac09a4d3 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -146,6 +146,8 @@ sogo_backend_init (void) NSUserDefaults *ud; SoProductRegistry *registry; char *argv[] = { SAMBA_PREFIX "/sbin/samba", NULL }; + NSString *debugLevel; + uint8_t parentLogLevel; GSRegisterCurrentThread(); @@ -178,6 +180,22 @@ sogo_backend_init (void) leakDebugging = YES; } + /* Set debug level according to samba */ + parentLogLevel = DEBUGLEVEL_CLASS[DBGC_ALL]; // FIXME: samba logger specific code + if (parentLogLevel >= 4) + debugLevel = @"DEBUG"; + else if (parentLogLevel >= 3) + debugLevel = @"INFO"; + else if (parentLogLevel >= 2) + debugLevel = @"WARN"; + else if (parentLogLevel >= 1) + debugLevel = @"ERROR"; + else + debugLevel = @"FATAL"; + OC_DEBUG(3, "[SOGo] Setting log level to %s", [debugLevel UTF8String]); + [ud setObject: debugLevel forKey: @"NGLogDefaultLogLevel"]; + [ud synchronize]; + registry = [SoProductRegistry sharedProductRegistry]; [registry scanForProductsInDirectory: SOGO_BUNDLES_DIR]; From dee7b4be1a93b08884830d73edaf6da1f280f367 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Mon, 4 Jan 2016 18:10:07 +0100 Subject: [PATCH 07/38] oc-mail: Support for multipart/mixed and multipart/alternative With multipart messages only one of the parts was displayed as message body. This changeset supports both mixed and alternative multipart types. --- OpenChange/MAPIStoreMailFolder.m | 84 +++------ OpenChange/MAPIStoreMailMessage.h | 19 +- OpenChange/MAPIStoreMailMessage.m | 279 +++++++++++++++++++++++------- 3 files changed, 247 insertions(+), 135 deletions(-) diff --git a/OpenChange/MAPIStoreMailFolder.m b/OpenChange/MAPIStoreMailFolder.m index 6e87d4ecd..92984b684 100644 --- a/OpenChange/MAPIStoreMailFolder.m +++ b/OpenChange/MAPIStoreMailFolder.m @@ -1657,7 +1657,7 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP) - (id) lookupMessage: (NSString *) messageKey { MAPIStoreMailMessage *message; - NSData *rawBodyData; + NSArray *rawBodyData; message = [super lookupMessage: messageKey]; if (message) @@ -1731,73 +1731,31 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP) - (enum mapistore_error) preloadMessageBodiesWithKeys: (NSArray *) keys ofTableType: (enum mapistore_table_type) tableType { + NSEnumerator *enumerator; + NSUInteger max; + NSString *messageKey; MAPIStoreMailMessage *message; - NSMutableSet *bodyPartKeys; - NSMutableDictionary *keyAssoc; - NSDictionary *response; - NSUInteger count, max; - NSString *messageKey, *messageUid, *bodyPartKey; - NGImap4Client *client; - NSArray *fetch; - NSData *bodyContent; + NSArray* bodyContent; - if (tableType == MAPISTORE_MESSAGE_TABLE) + if (tableType != MAPISTORE_MESSAGE_TABLE) + return MAPISTORE_SUCCESS; + + [bodyData removeAllObjects]; + + max = [keys count]; + if (max == 0) + return MAPISTORE_SUCCESS; + + enumerator = [keys objectEnumerator]; + while ((messageKey = [enumerator nextObject])) { - [bodyData removeAllObjects]; - max = [keys count]; - - if (max > 0) + message = [self lookupMessage: messageKey]; + if (message) { - bodyPartKeys = [NSMutableSet setWithCapacity: max]; - - keyAssoc = [NSMutableDictionary dictionaryWithCapacity: max]; - for (count = 0; count < max; count++) + bodyContent = [message getBodyContent]; + if (bodyContent) { - messageKey = [keys objectAtIndex: count]; - message = [self lookupMessage: messageKey]; - if (message) - { - bodyPartKey = [message bodyContentPartKey]; - if (bodyPartKey) - { - [bodyPartKeys addObject: bodyPartKey]; - messageUid = [self messageUIDFromMessageKey: messageKey]; - /* If the bodyPartKey include peek, remove it as it is not returned - as key in the IMAP server response. - - IMAP conversation example: - a4 UID FETCH 1 (UID BODY.PEEK[text]) - * 1 FETCH (UID 1 BODY[TEXT] {1677} - */ - bodyPartKey = [bodyPartKey stringByReplacingOccurrencesOfString: @"body.peek" - withString: @"body"]; - [keyAssoc setObject: bodyPartKey forKey: messageUid]; - } - } - } - - client = [[(SOGoMailFolder *) sogoObject imap4Connection] client]; - [client select: [sogoObject absoluteImap4Name]]; - response = [client fetchUids: [keyAssoc allKeys] - parts: [bodyPartKeys allObjects]]; - fetch = [response objectForKey: @"fetch"]; - max = [fetch count]; - for (count = 0; count < max; count++) - { - response = [fetch objectAtIndex: count]; - messageUid = [[response objectForKey: @"uid"] stringValue]; - bodyPartKey = [keyAssoc objectForKey: messageUid]; - if (bodyPartKey) - { - bodyContent = [[response objectForKey: bodyPartKey] - objectForKey: @"data"]; - if (bodyContent) - { - messageKey = [NSString stringWithFormat: @"%@.eml", - messageUid]; - [bodyData setObject: bodyContent forKey: messageKey]; - } - } + [bodyData setObject: bodyContent forKey: messageKey]; } } } diff --git a/OpenChange/MAPIStoreMailMessage.h b/OpenChange/MAPIStoreMailMessage.h index 60922feaf..735861ff3 100644 --- a/OpenChange/MAPIStoreMailMessage.h +++ b/OpenChange/MAPIStoreMailMessage.h @@ -25,8 +25,10 @@ #import "MAPIStoreMessage.h" -@class NSData; @class NSString; +@class NSArray; +@class NSMutableArray; +@class NSMutableDictionary; @class MAPIStoreAppointmentWrapper; @class MAPIStoreMailFolder; @@ -37,12 +39,17 @@ BOOL mailIsEvent; BOOL mailIsMeetingRequest; BOOL mailIsSharingObject; - NSString *mimeKey; + + NSMutableArray *bodyContentKeys; + NSMutableDictionary *bodyPartsEncodings; + NSMutableDictionary *bodyPartsCharsets; + NSMutableDictionary *bodyPartsMimeTypes; + NSString *headerCharset; - NSString *headerEncoding; NSString *headerMimeType; BOOL bodySetup; - NSData *bodyContent; + BOOL multipartMixed; + NSArray *bodyContent; BOOL fetchedAttachments; MAPIStoreAppointmentWrapper *appointmentWrapper; @@ -73,8 +80,8 @@ inMemCtx: (TALLOC_CTX *) memCtx; /* batch-mode helpers */ -- (NSString *) bodyContentPartKey; -- (void) setBodyContentFromRawData: (NSData *) rawContent; +- (void) setBodyContentFromRawData: (NSArray *) rawContent; +- (NSArray *) getBodyContent; @end diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index f79511eb6..7af79b110 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -65,9 +65,13 @@ #include #include +#define BODY_CONTENT_TEXT 0 +#define BODY_CONTENT_HTML 1 + @class iCalCalendar, iCalEvent; static Class NSExceptionK, MAPIStoreSharingMessageK; +static NSArray *acceptedMimeTypes; @interface NSString (MAPIStoreMIME) @@ -111,22 +115,33 @@ static Class NSExceptionK, MAPIStoreSharingMessageK; { NSExceptionK = [NSException class]; MAPIStoreSharingMessageK = [MAPIStoreSharingMessage class]; + acceptedMimeTypes = [[NSArray alloc] initWithObjects: @"text/calendar", + @"application/ics", + @"text/html", + @"text/plain", + nil]; } - (id) init { if ((self = [super init])) { - mimeKey = nil; + bodyContentKeys = nil; + bodyPartsEncodings = nil; + bodyPartsCharsets = nil; + bodyPartsMimeTypes = nil; + + headerSetup = NO; + bodySetup = NO; + bodyContent = nil; + multipartMixed = NO; + mailIsEvent = NO; mailIsMeetingRequest = NO; mailIsSharingObject = NO; headerCharset = nil; - headerEncoding = nil; headerMimeType = nil; - headerSetup = NO; - bodyContent = nil; - bodySetup = NO; + appointmentWrapper = nil; } @@ -135,11 +150,15 @@ static Class NSExceptionK, MAPIStoreSharingMessageK; - (void) dealloc { - [mimeKey release]; + [bodyContentKeys release]; + [bodyPartsEncodings release]; + [bodyPartsCharsets release]; + [bodyPartsMimeTypes release]; + [bodyContent release]; + [headerMimeType release]; [headerCharset release]; - [headerEncoding release]; [appointmentWrapper release]; [super dealloc]; } @@ -234,30 +253,82 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) { MAPIStoreSharingMessage *sharingMessage; NSMutableArray *keys; - NSArray *acceptedTypes; - NSDictionary *messageData, *partHeaderData, *parameters; + NSUInteger keysCount; + NSDictionary *partHeaderData, *parameters; NSString *sharingHeader; - acceptedTypes = [NSArray arrayWithObjects: @"text/calendar", - @"application/ics", - @"text/html", - @"text/plain", nil]; keys = [NSMutableArray array]; [sogoObject addRequiredKeysOfStructure: [sogoObject bodyStructure] path: @"" toArray: keys - acceptedTypes: acceptedTypes + acceptedTypes: acceptedMimeTypes withPeek: YES]; - [keys sortUsingFunction: _compareBodyKeysByPriority context: acceptedTypes]; - if ([keys count] > 0) + [keys sortUsingFunction: _compareBodyKeysByPriority context: acceptedMimeTypes]; + keysCount = [keys count]; + if (keysCount > 0) { - messageData = [keys objectAtIndex: 0]; - ASSIGN (mimeKey, [messageData objectForKey: @"key"]); - ASSIGN (headerMimeType, [messageData objectForKey: @"mimeType"]); - partHeaderData - = [sogoObject lookupInfoForBodyPart: [mimeKey _strippedBodyKey]]; - ASSIGN (headerEncoding, [partHeaderData objectForKey: @"encoding"]); - parameters = [partHeaderData objectForKey: @"parameterList"]; - ASSIGN (headerCharset, [parameters objectForKey: @"charset"]); + NSUInteger i; + id bodyStructure; + + bodyStructure = [sogoObject bodyStructure]; + /* multipart/mixed is the default type. + multipart/alternative is the only other type of multipart supported here. + */ + if ([[bodyStructure objectForKey: @"type"] isEqualToString: @"multipart"]) + multipartMixed = ! [[bodyStructure objectForKey: @"subtype"] isEqualToString: @"alternative"]; + else + multipartMixed = NO; + + bodyContentKeys = [[NSMutableArray alloc] initWithCapacity: keysCount]; + bodyPartsEncodings = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; + bodyPartsCharsets = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; + bodyPartsMimeTypes = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; + + for (i = 0; i < keysCount; i++) + { + NSString *key; + NSString *mimeType; + NSString *strippedKey; + NSString *encoding; + NSString *charset; + NSDictionary *partParameters; + + key = [[keys objectAtIndex: i] objectForKey: @"key"]; + if (key == nil) + continue; + + [bodyContentKeys addObject: key]; + + strippedKey = [key _strippedBodyKey]; + partHeaderData = [sogoObject lookupInfoForBodyPart: strippedKey]; + + partParameters = [partHeaderData objectForKey: @"parameterList"]; + encoding = [partHeaderData objectForKey: @"encoding"]; + charset = [partParameters objectForKey: @"charset"]; + mimeType = [[keys objectAtIndex: i] objectForKey: @"mimeType"]; + + if (encoding) + [bodyPartsEncodings setObject: encoding forKey: key]; + if (charset) + [bodyPartsCharsets setObject: charset forKey: key]; + if (mimeType) + [bodyPartsMimeTypes setObject: mimeType forKey: key]; + + if (i == 0) + { + ASSIGN (headerMimeType, mimeType); + ASSIGN (headerCharset, charset); + parameters = partParameters; + } + else + { + /* We can only put one header charset so we will use utf-8 + when we have different charsets in the parts */ + if (headerCharset != charset) + ASSIGN (headerCharset, @"utf-8"); + } + } + + if ([headerMimeType isEqualToString: @"text/calendar"] || [headerMimeType isEqualToString: @"application/ics"]) { @@ -288,31 +359,93 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) - (void) _fetchBodyData { - NSData *rawContent; - NSString *resultKey; - id result; - if (!headerSetup) [self _fetchHeaderData]; - if (!bodyContent && mimeKey) + if (!bodyContent && bodyContentKeys) { - result = [sogoObject fetchParts: [NSArray arrayWithObject: mimeKey]]; + id result; + NSString *key; + NSEnumerator *enumerator; + NSMutableData *htmlContent = nil; + NSMutableData *textContent = nil; + + result = [sogoObject fetchParts: bodyContentKeys]; result = [[result valueForKey: @"RawResponse"] objectForKey: @"fetch"]; - if ([mimeKey hasPrefix: @"body.peek"]) - resultKey = [NSString stringWithFormat: @"body[%@]", - [mimeKey _strippedBodyKey]]; + + htmlContent = [[NSMutableData alloc] initWithCapacity: 0]; + if (multipartMixed || mailIsEvent) + textContent = htmlContent; else - resultKey = mimeKey; - rawContent = [[result objectForKey: resultKey] objectForKey: @"data"]; - ASSIGN (bodyContent, [rawContent bodyDataFromEncoding: headerEncoding]); + textContent = [[NSMutableData alloc] initWithCapacity: 0]; + + enumerator = [bodyContentKeys objectEnumerator]; + while ((key = [enumerator nextObject])) + { + NSString *noPeekKey = [key stringByReplacingOccurrencesOfString: @"body.peek" + withString: @"body"]; + + NSData *content = [[result objectForKey: noPeekKey] objectForKey: @"data"]; + if (content == nil) + continue; + NSString *mimeType = [bodyPartsMimeTypes objectForKey: key]; + if (mimeType == nil) + continue; + NSString *encoding = [bodyPartsEncodings objectForKey: key]; + if (encoding == nil) + encoding = @"7-bit"; + + /* We should provide a case for each of the types in acceptedMimeTypes */ + if ([mimeType isEqualToString: @"text/html"] && !mailIsEvent) + { + content = [content bodyDataFromEncoding: encoding]; + [htmlContent appendData: content]; + } + else if ([mimeType isEqualToString: @"text/plain"] && !mailIsEvent) + { + content = [content bodyDataFromEncoding: encoding]; + NSString *charset = [bodyPartsCharsets objectForKey: key]; + if (charset) + { + NSString *stringValue = [content bodyStringFromCharset: charset]; + [textContent appendData: [stringValue dataUsingEncoding: NSUTF8StringEncoding]]; + } + else + { + [textContent appendData: content]; + } + } + else if (mailIsEvent && + ([mimeType isEqualToString: @"text/calendar"] || + [mimeType isEqualToString: @"application/ics"])) + { + content = [content bodyDataFromEncoding: encoding]; + [textContent appendData: content]; + } + else + { + [self warnWithFormat: @"Unsupported combination for body part. MIME type: %@. Event: %i", + mimeType, mailIsEvent]; + } + } + + NSArray *newBodyContent = [[NSArray alloc] initWithObjects: textContent, htmlContent, nil]; + ASSIGN (bodyContent, newBodyContent); } bodySetup = YES; } +- (NSArray*) getBodyContent +{ + if (!bodySetup) + [self _fetchBodyData]; + return bodyContent; +} + - (MAPIStoreAppointmentWrapper *) _appointmentWrapper { + NSData *textContent; NSArray *events, *from; iCalCalendar *calendar; iCalEvent *event; @@ -324,7 +457,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) if (!bodySetup) [self _fetchBodyData]; - stringValue = [bodyContent bodyStringFromCharset: headerCharset]; + textContent = [bodyContent objectAtIndex: BODY_CONTENT_TEXT]; + stringValue = [textContent bodyStringFromCharset: headerCharset]; calendar = [iCalCalendar parseSingleFromSource: stringValue]; events = [calendar events]; if ([events count] > 0) @@ -1030,24 +1164,37 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) - (int) getPidTagBody: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { - NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + NSData *textContent; + int rc; if (!bodySetup) [self _fetchBodyData]; - if ([headerMimeType isEqualToString: @"text/plain"]) - { - stringValue = [bodyContent bodyStringFromCharset: headerCharset]; - *data = [stringValue asUnicodeInMemCtx: memCtx]; - } - else if (mailIsEvent) - rc = [[self _appointmentWrapper] getPidTagBody: data - inMemCtx: memCtx]; - else + if (!bodyContent) { *data = NULL; - rc = MAPISTORE_ERR_NOT_FOUND; + return MAPISTORE_ERR_NOT_FOUND; + } + + if (mailIsEvent) + { + rc = [[self _appointmentWrapper] getPidTagBody: data + inMemCtx: memCtx]; + } + else + { + textContent = [bodyContent objectAtIndex: BODY_CONTENT_TEXT]; + if ([textContent length]) + { + NSString *stringValue = [textContent bodyStringFromCharset: headerCharset]; + *data = [stringValue asUnicodeInMemCtx: memCtx]; + rc = MAPISTORE_SUCCESS; + } + else + { + *data = NULL; + rc = MAPISTORE_ERR_NOT_FOUND; + } } return rc; @@ -1056,13 +1203,25 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) - (int) getPidTagHtml: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + NSData *htmlContent; + int rc; if (!bodySetup) [self _fetchBodyData]; - if ([headerMimeType isEqualToString: @"text/html"]) - *data = [bodyContent asBinaryInMemCtx: memCtx]; + if (!bodyContent || mailIsEvent) + { + *data = NULL; + return MAPISTORE_ERR_NOT_FOUND; + } + + htmlContent = [bodyContent objectAtIndex: BODY_CONTENT_HTML] ; + + if ([htmlContent length]) + { + *data = [htmlContent asBinaryInMemCtx: memCtx]; + rc = MAPISTORE_SUCCESS; + } else { *data = NULL; @@ -1680,24 +1839,12 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (NSString *) bodyContentPartKey -{ - NSString *bodyPartKey; - - if (!headerSetup) - [self _fetchHeaderData]; - - bodyPartKey = mimeKey; - - return bodyPartKey; -} - -- (void) setBodyContentFromRawData: (NSData *) rawContent +- (void) setBodyContentFromRawData: (NSArray *) rawContent { if (!headerSetup) [self _fetchHeaderData]; - ASSIGN (bodyContent, [rawContent bodyDataFromEncoding: headerEncoding]); + ASSIGN (bodyContent, rawContent); bodySetup = YES; } From 061244a0a5e81da3107ec33701bdb68bd246617a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20P=C3=A9rez-Aradros=20Herce?= Date: Tue, 26 Jan 2016 21:04:22 +0100 Subject: [PATCH 08/38] Allow exception raising when connecting to IMAP By setting `SoIMAP4ExceptionsEnabled` config key to YES Enabled for OpenChange by default, it will ensure no action is taken when IMAP connection is not valid. --- OpenChange/MAPIStoreSOGo.m | 5 ++++ SoObjects/Mailer/SOGoMailBaseObject.h | 3 +++ SoObjects/Mailer/SOGoMailBaseObject.m | 37 +++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 0ac09a4d3..14fd11c49 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -172,6 +172,11 @@ sogo_backend_init (void) /* We force the plugin to base its configuration on the SOGo tree. */ ud = [NSUserDefaults standardUserDefaults]; + + /* Ensure imap4Connection calls raise Exception if + IMAP connection is not established. See NGImap4Connection.m */ + [ud setBool: YES forKey: @"SoIMAP4ExceptionsEnabled"]; + if (!leakDebugging && [ud boolForKey: @"SOGoDebugLeaks"]) { NSLog (@" leak debugging on"); diff --git a/SoObjects/Mailer/SOGoMailBaseObject.h b/SoObjects/Mailer/SOGoMailBaseObject.h index e7878b73d..59bceea2a 100644 --- a/SoObjects/Mailer/SOGoMailBaseObject.h +++ b/SoObjects/Mailer/SOGoMailBaseObject.h @@ -46,10 +46,13 @@ { NSURL *imap4URL; NGImap4Connection *imap4; + BOOL imap4ExceptionsEnabled; } - (BOOL) isFolderish; +- (id) init; + - (id) initWithImap4URL: (NSURL *) _url inContainer: (id) _container; diff --git a/SoObjects/Mailer/SOGoMailBaseObject.m b/SoObjects/Mailer/SOGoMailBaseObject.m index 4948abe7e..d02ae0940 100644 --- a/SoObjects/Mailer/SOGoMailBaseObject.m +++ b/SoObjects/Mailer/SOGoMailBaseObject.m @@ -45,11 +45,25 @@ @implementation SOGoMailBaseObject + +- (id)init +{ + if ((self = [super init])) + { + NSUserDefaults *ud = [NSUserDefaults standardUserDefaults]; + // With this to YES, imap4Connection will raise exception if a working + // connection cannot be provided + imap4ExceptionsEnabled = [ud boolForKey:@"SoIMAP4ExceptionsEnabled"]; + } + + return self; +} + - (id) initWithImap4URL: (NSURL *) _url inContainer: (id) _container { NSString *n; - + n = [[_url path] lastPathComponent]; if ((self = [self initWithName: n inContainer:_container])) { @@ -148,7 +162,10 @@ if (!newConnection) { newConnection = (NGImap4Connection *) [NSNull null]; - [self errorWithFormat:@"Could not connect IMAP4"]; + if (imap4ExceptionsEnabled) + [NSException raise: @"IOException" format: @"IMAP connection failed"]; + else + [self errorWithFormat:@"Could not connect IMAP4"]; } else { @@ -206,6 +223,22 @@ [imap4 retain]; } + // Connection broken, try to reconnect + if (![imap4 isKindOfClass: [NSNull class]] && ![[[imap4 client] isConnected] boolValue]) + { + [self warnWithFormat: @"IMAP connection is broken, trying to reconnect..."]; + [[imap4 client] reconnect]; + + // Still broken, give up + if (![[[imap4 client] isConnected] boolValue]) + { + if (imap4ExceptionsEnabled) + [NSException raise: @"IOException" format: @"IMAP connection failed"]; + else + [self errorWithFormat: @"Could not get a valid IMAP connection"]; + } + } + return [imap4 isKindOfClass: [NSNull class]] ? nil : imap4; } From 75ffdd2ee15c665dc176dbacd711b4e21e2926f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 28 Jan 2016 23:21:46 +0100 Subject: [PATCH 09/38] oc-contacts: Return not found when there is no information In _getElement which match many properties and in both PidLidAddressBookProviderEmailList and PidLidAddressBookProviderArrayType. As it is specified in [MS-OXOCNTC] Section 2.2.1, each property must be stored when the user needs it. So we can assume we can avoid returning them if we don't have it. This fix a Sync Issue which make it impossible to sync a contact folder where some contact object does not any email. The sync issue message is as follows: Error synchronizing folder [80070057-30FFFFFF-0-560] --- OpenChange/MAPIStoreContactsMessage.m | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/OpenChange/MAPIStoreContactsMessage.m b/OpenChange/MAPIStoreContactsMessage.m index b183d445e..41bbdc98f 100644 --- a/OpenChange/MAPIStoreContactsMessage.m +++ b/OpenChange/MAPIStoreContactsMessage.m @@ -611,7 +611,7 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 } if (!stringValue) - stringValue = @""; + return MAPISTORE_ERR_NOT_FOUND; *data = [stringValue asUnicodeInMemCtx: memCtx]; @@ -664,12 +664,17 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 uint32_t value = 0; NSArray *emailList = [self _buildAddressBookProviderEmailList]; - for (NSNumber *maskValue in emailList) - value |= 1 << [maskValue intValue]; + if ([emailList count] > 0) + { + for (NSNumber *maskValue in emailList) + value |= 1 << [maskValue intValue]; - *data = MAPILongValue (memCtx, value); + *data = MAPILongValue (memCtx, value); - return MAPISTORE_SUCCESS; + return MAPISTORE_SUCCESS; + } + else + return MAPISTORE_ERR_NOT_FOUND; } - (int) getPidLidAddressBookProviderEmailList: (void **) data @@ -677,9 +682,13 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 { NSArray *emailList = [self _buildAddressBookProviderEmailList]; - *data = [emailList asMVLongInMemCtx: memCtx]; - - return MAPISTORE_SUCCESS; + if ([emailList count] > 0) + { + *data = [emailList asMVLongInMemCtx: memCtx]; + return MAPISTORE_SUCCESS; + } + else + return MAPISTORE_ERR_NOT_FOUND; } // --------------------------------------------------------- From 8e80b57d3160e225d9812c933fcd9d25b12a1c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Wed, 27 Jan 2016 15:25:44 +0100 Subject: [PATCH 10/38] RTFHandler: support charsets in plain text Allow to switch charset in RTF plain text parts. --- OpenChange/RTFHandler.m | 29 +++++++++------------ Tests/Unit/Fixtures/cyr_event_ru_editor.rtf | 1 + Tests/Unit/TestRTFHandler.m | 25 +++++++++--------- 3 files changed, 26 insertions(+), 29 deletions(-) create mode 100644 Tests/Unit/Fixtures/cyr_event_ru_editor.rtf diff --git a/OpenChange/RTFHandler.m b/OpenChange/RTFHandler.m index d4f775b5d..67f2b2c9f 100644 --- a/OpenChange/RTFHandler.m +++ b/OpenChange/RTFHandler.m @@ -32,7 +32,7 @@ #define DEFAULT_CHARSET 1 #define FONTNAME_LEN_MAX 100 -#define UTF8_FIRST_BYTE_LAST_CODEPOINT 0x7F + // // Charset definitions. See http://msdn.microsoft.com/en-us/goglobal/bb964654 for all details. // @@ -1215,7 +1215,6 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting unsigned char c; NSData *d; NSString *s; - unichar uch; stack = [[RTFStack alloc] init]; fontTable = nil; @@ -1223,7 +1222,7 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting defaultCharset = ansicpg1252; formattingOptions = nil; - _html = [[NSMutableData alloc] init]; + _html = [[[NSMutableData alloc] init] autorelease]; [_html appendBytes: "" length: 34]; @@ -1254,7 +1253,6 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting unsigned short index; const unsigned short * active_charset; - if (formattingOptions && formattingOptions->charset) active_charset = formattingOptions->charset; else @@ -1439,18 +1437,15 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting // We avoid appending NULL bytes or endlines if (c && (c != '\n')) { - if (c <= UTF8_FIRST_BYTE_LAST_CODEPOINT) - { - // in this case utf8 and ascii encoding are the same - [_html appendBytes: &c length: 1]; - } - else - { - uch = c; - s = [NSString stringWithCharacters: &uch length: 1]; - d = [s dataUsingEncoding: NSUTF8StringEncoding]; - [_html appendData: d]; - } + const unsigned short * active_charset; + if (formattingOptions && formattingOptions->charset) + active_charset = formattingOptions->charset; + else + active_charset = defaultCharset; + + s = [NSString stringWithCharacters: &(active_charset[c]) length: 1]; + d = [s dataUsingEncoding: NSUTF8StringEncoding]; + [_html appendData: d]; } ADVANCE; } @@ -1459,7 +1454,7 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting [_html appendBytes: "" length: 14]; [stack release]; - return [_html autorelease]; + return _html; } /* This method is for ease of testing and should not be used in normal operations */ diff --git a/Tests/Unit/Fixtures/cyr_event_ru_editor.rtf b/Tests/Unit/Fixtures/cyr_event_ru_editor.rtf new file mode 100644 index 000000000..abb222c79 --- /dev/null +++ b/Tests/Unit/Fixtures/cyr_event_ru_editor.rtf @@ -0,0 +1 @@ +{\rtf1\adeflang1025\ansi\ansicpg1251\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang1049\deflangfe1049\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f179\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f180\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f182\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f183\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f184\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f185\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f186\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f187\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f179\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f180\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f182\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f183\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f184\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f185\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f186\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f187\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f549\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f550\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f552\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f553\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f556\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f557\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f37\fs22 }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang1049\langfe1049\cgrid\langnp1049\langfenp1049 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \ssemihidden \sunhideused \styrsid15146783 Hyperlink;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf12 \sbasedon10 \ssemihidden \sunhideused \styrsid15146783 FollowedHyperlink;}{\*\cs17 \additive \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f37\fs22\cf0 \sbasedon10 \ssemihidden \spriority0 \spersonal \scompose \styrsid15146783 EmailStyle17;}}{\*\revtbl {Unknown;}}{\*\rsidtbl \rsid10516709\rsid14943922\rsid15146783}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect \deftab708\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin150\dgvorigin0\dghshow1\dgvshow1\jexpand\viewkind4\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot10516709\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectdefaultcl\sectrsid10516709\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15146783 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f550\cf0\lang1049\langfe1033\langnp1049\insrsid14943922 }{\rtlch\fcs1 \af0 \ltrch\fcs0 \cf0\lang1049\langfe1033\langnp1049\insrsid14943922\charrsid15146783\par }} \ No newline at end of file diff --git a/Tests/Unit/TestRTFHandler.m b/Tests/Unit/TestRTFHandler.m index 04cf4d5e7..317122724 100644 --- a/Tests/Unit/TestRTFHandler.m +++ b/Tests/Unit/TestRTFHandler.m @@ -44,26 +44,18 @@ return nil; RTFHandler *handler = [[RTFHandler alloc] initWithData: rtf]; - NSMutableData *data2 = [handler parse]; - if (data2 == nil) + NSMutableData *data = [handler parse]; + if (data == nil) { NSString *error = [NSString stringWithFormat: @"Couldn't parse RTF data:\n %s", (char *)[rtf bytes]]; testWithMessage(NO, error); } - html = [[NSString alloc] initWithData: data2 encoding: NSUTF8StringEncoding]; + html = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding]; if (html == nil) { - html = [[NSString alloc] initWithData: data2 encoding: NSASCIIStringEncoding]; - } - if (html == nil) - { - html = [[NSString alloc] initWithData: data2 encoding: NSISOLatin1StringEncoding]; - } - if (html == nil) - { - NSString *error = [NSString stringWithFormat: @"Couldn't convert parsed data"]; + NSString *error = [NSString stringWithFormat: @"Couldn't convert parsed data to UTF8 string"]; testWithMessage(NO, error); } return html; @@ -305,4 +297,13 @@ againstExpectedHTML: expected]; } +- (void) test_cyr_event_ru_editor +{ + NSString *file =@"cyr_event_ru_editor.rtf"; + NSString *expected=@"йчсмй
"; + + [self checkHTMLConversionOfRTFFile: file + againstExpectedHTML: expected]; +} + @end From e5f15f69dfea51e876b7c346c622ec286b6be2ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Wed, 27 Jan 2016 16:42:19 +0100 Subject: [PATCH 11/38] RTFHandler: protect against CR and bad hexadecimal sequence In RTF is possible to specify characters with the sequence \'XX being XX an hexadecimal number. With this changeset we guard against incorrect hexadecimal numbers which will be ignored. The other change added is to ignore carriadge returns in plain text. --- OpenChange/RTFHandler.m | 23 ++++++++++++++++++----- Tests/Unit/Fixtures/bad_hex_and_cr.rtf | 1 + Tests/Unit/TestRTFHandler.m | 9 +++++++++ 3 files changed, 28 insertions(+), 5 deletions(-) create mode 100644 Tests/Unit/Fixtures/bad_hex_and_cr.rtf diff --git a/OpenChange/RTFHandler.m b/OpenChange/RTFHandler.m index 67f2b2c9f..c89f4c677 100644 --- a/OpenChange/RTFHandler.m +++ b/OpenChange/RTFHandler.m @@ -608,7 +608,6 @@ static void _init_fontCws_table() word and is not part of the control word. */ end = _bytes; - *len = end-start-1; return start+1; @@ -1250,7 +1249,8 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting { // A hexadecimal value, based on the specified character set (may be used to identify 8-bit values). const char *b1, *b2; - unsigned short index; + short index; + short tmp; const unsigned short * active_charset; if (formattingOptions && formattingOptions->charset) @@ -1265,8 +1265,21 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting b1 = ADVANCE; b2 = ADVANCE; - index = (isdigit(*b1) ? *b1 - 48 : toupper(*b1) - 55) * 16; - index += (isdigit(*b2) ? *b2 - 48 : toupper(*b2) - 55); + tmp = (isdigit(*b1) ? *b1 - 48 : toupper(*b1) - 55); + if (tmp < 0 || tmp > 16) + { + // Incorrect first hexadecimal character. Skipping. + continue; + } + index = tmp*16; + + tmp = (isdigit(*b2) ? *b2 - 48 : toupper(*b2) - 55); + if (tmp < 0 || tmp > 16) + { + // Incorrect second hexadecimal character. Skipping. + continue; + } + index += tmp; s = [NSString stringWithCharacters: &(active_charset[index]) length: 1]; d = [s dataUsingEncoding: NSUTF8StringEncoding]; @@ -1435,7 +1448,7 @@ inline static void parseUl(RTFHandler *self, BOOL hasArg, int arg, RTFFormatting { c = *_bytes; // We avoid appending NULL bytes or endlines - if (c && (c != '\n')) + if (c && (c != '\n') && (c != '\r')) { const unsigned short * active_charset; if (formattingOptions && formattingOptions->charset) diff --git a/Tests/Unit/Fixtures/bad_hex_and_cr.rtf b/Tests/Unit/Fixtures/bad_hex_and_cr.rtf new file mode 100644 index 000000000..a59fb2f8f --- /dev/null +++ b/Tests/Unit/Fixtures/bad_hex_and_cr.rtf @@ -0,0 +1 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff0\deff0\stshfdbch0\stshfloch37\stshfhich37\stshfbi37\deflang3082\deflangfe3082\themelang3082\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp \f37\fs22\lang3082\langfe1033\langfenp1033 }{\*\defpap \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3082\langfe1033\cgrid\langnp3082\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af37\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3082\langfe1033\cgrid\langnp3082\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \ssemihidden \sunhideused \styrsid14902200 Hyperlink;}{\*\cs16 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf12 \sbasedon10 \ssemihidden \sunhideused \styrsid14902200 FollowedHyperlink;}{\*\cs17 \additive \rtlch\fcs1 \af0\afs22 \ltrch\fcs0 \f37\fs22\cf0 \sbasedon10 \ssemihidden \spriority0 \spersonal \scompose \styrsid14902200 EmailStyle171;}}{\*\revtbl {Unknown;}}{\*\rsidtbl \rsid8201463\rsid9795044\rsid14902200}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1701\margr1701\margt1417\margb1417\gutter0\ltrsect \deftab708\widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin150\dgvorigin0\dghshow1\dgvshow1\jexpand\viewkind5\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct\asianbrkrule\rsidroot9795044\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectdefaultcl\sectrsid9795044\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14902200 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \f37\fs22\lang3082\langfe1033\cgrid\langnp3082\langfenp1033 {\rtlch\fcs1 \af0 \ltrch\fcs0 \f410\cf0\insrsid9795044\charrsid14902200 Good hex:\'48 Bad1Hex:\'ZA Bad2Hex:\'A+ Ignored Carriadge Return}} \ No newline at end of file diff --git a/Tests/Unit/TestRTFHandler.m b/Tests/Unit/TestRTFHandler.m index 317122724..173e7fe9f 100644 --- a/Tests/Unit/TestRTFHandler.m +++ b/Tests/Unit/TestRTFHandler.m @@ -306,4 +306,13 @@ againstExpectedHTML: expected]; } +- (void) test_bad_hex_and_cr +{ + NSString *file =@"bad_hex_and_cr.rtf"; + NSString *expected=@"Good hex:H Bad1Hex: Bad2Hex: Ignored Carriadge Return"; + + [self checkHTMLConversionOfRTFFile: file + againstExpectedHTML: expected]; +} + @end From 3b0cfa00f7f53093da837309b840dba03a97d2ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 8 Feb 2016 22:14:18 +0100 Subject: [PATCH 12/38] Support for groups using EnableDomainBasedUID conf Using LDAP as source, the group entry must have a valid group objectClass such as posixGroup or group and have a valid UIDField which does not include the domain. With this changeset, SOGo is aware of these groups when it has an email and you can share a component such as a calendar with the member of the group. --- SoObjects/SOGo/SOGoGroup.m | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/SoObjects/SOGo/SOGoGroup.m b/SoObjects/SOGo/SOGoGroup.m index 431b39028..f59ecaf24 100644 --- a/SoObjects/SOGo/SOGoGroup.m +++ b/SoObjects/SOGo/SOGoGroup.m @@ -61,6 +61,7 @@ #include "SOGoCache.h" #include "SOGoSource.h" +#include "SOGoSystemDefaults.h" #include "SOGoUserManager.h" #include "SOGoUser.h" @@ -108,13 +109,29 @@ + (id) groupWithIdentifier: (NSString *) theID inDomain: (NSString *) domain { - NSString *uid; + NSRange r; + NSString *uid, *inDomain; + SOGoSystemDefaults *sd; uid = [theID hasPrefix: @"@"] ? [theID substringFromIndex: 1] : theID; + inDomain = domain; + + sd = [SOGoSystemDefaults sharedSystemDefaults]; + if ([sd enableDomainBasedUID]) + { + /* Split domain from uid */ + r = [uid rangeOfString: @"@" options: NSBackwardsSearch]; + if (r.location != NSNotFound) + { + if (!domain) + inDomain = [uid substringFromIndex: r.location + 1]; + uid = [uid substringToIndex: r.location]; + } + } return [SOGoGroup groupWithValue: uid andSourceSelector: @selector (lookupGroupEntryByUID:inDomain:) - inDomain: domain]; + inDomain: inDomain]; } + (id) groupWithEmail: (NSString *) theEmail From 15779c2cfb3ca52e6651fca2e4770027f6b78619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 8 Feb 2016 22:22:37 +0100 Subject: [PATCH 13/38] Keep all roles in calendar folder ACLs Instead of keeping only the highest access roles. This reverts 2c678101 to fix handling of ACLs with multiple groups. This is done because OpenChange library stores other roles/permissions in the ACLs that have limited scope to the MAPI protocol and it maintains an homogeneous returned data with other folders by returning the actual data is stored in the DB. By sorting the roles, we give the ability to callers to validate permissions more efficiency (less loops) and keep the right highest access level. As an example, check [SOGoApppointmentFolder:roleForComponentsWithAccessClass:forUser] for details. --- .../Appointments/SOGoAppointmentFolder.m | 94 +++++++++++-------- 1 file changed, 55 insertions(+), 39 deletions(-) diff --git a/SoObjects/Appointments/SOGoAppointmentFolder.m b/SoObjects/Appointments/SOGoAppointmentFolder.m index 8b690f25e..1b073a81e 100644 --- a/SoObjects/Appointments/SOGoAppointmentFolder.m +++ b/SoObjects/Appointments/SOGoAppointmentFolder.m @@ -3300,12 +3300,60 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir } /* acls */ + +/* Compare two permissions to set first the highest access right, if unknown, then + do nothing */ +static NSComparisonResult _comparePermissions (id perm1, id perm2, void *context) +{ + static NSDictionary *permMap = nil; + NSNumber *num_1, *num_2; + + if (!permMap) + { + NSMutableArray *numberObjs; + NSUInteger i, max = 16; + + numberObjs = [NSMutableArray arrayWithCapacity: max]; + for (i = 0; i < max; i++) + [numberObjs addObject: [NSNumber numberWithInteger: i]]; + + /* Build the map to compare easily */ + permMap = [[NSDictionary alloc] initWithObjects: numberObjs + forKeys: [NSArray arrayWithObjects: + SOGoRole_ObjectEraser, + SOGoRole_ObjectCreator, + SOGoRole_ObjectEditor, + SOGoCalendarRole_ConfidentialModifier, + SOGoCalendarRole_ConfidentialResponder, + SOGoCalendarRole_ConfidentialViewer, + SOGoCalendarRole_ConfidentialDAndTViewer, + SOGoCalendarRole_PrivateModifier, + SOGoCalendarRole_PrivateResponder, + SOGoCalendarRole_PrivateViewer, + SOGoCalendarRole_PrivateDAndTViewer, + SOGoCalendarRole_PublicModifier, + SOGoCalendarRole_PublicResponder, + SOGoCalendarRole_PublicViewer, + SOGoCalendarRole_PublicDAndTViewer, + SOGoCalendarRole_FreeBusyReader, nil]]; + [permMap retain]; + } + + num_1 = [permMap objectForKey: perm1]; + if (!num_1) + num_1 = [NSNumber numberWithInteger: 255]; + num_2 = [permMap objectForKey: perm2]; + if (!num_2) + num_2 = [NSNumber numberWithInteger: 255]; + + return [num_1 compare: num_2]; +} + - (NSArray *) aclsForUser: (NSString *) uid forObjectAtPath: (NSArray *) objectPathArray { NSMutableArray *aclsForUser; NSArray *superAcls; - static NSArray *rolesClassifications = nil; superAcls = [super aclsForUser: uid forObjectAtPath: objectPathArray]; if ([uid isEqualToString: [self defaultUserID]]) @@ -3321,44 +3369,12 @@ firstInstanceCalendarDateRange: (NGCalendarDateRange *) fir } else { - aclsForUser = [NSMutableArray array]; - if (!rolesClassifications) - { - rolesClassifications = - [NSArray arrayWithObjects: - [NSArray arrayWithObjects: - SOGoCalendarRole_PublicModifier, - SOGoCalendarRole_PublicResponder, - SOGoCalendarRole_PublicViewer, - SOGoCalendarRole_PublicDAndTViewer, - nil], - [NSArray arrayWithObjects: - SOGoCalendarRole_ConfidentialModifier, - SOGoCalendarRole_ConfidentialResponder, - SOGoCalendarRole_ConfidentialViewer, - SOGoCalendarRole_ConfidentialDAndTViewer, - nil], - [NSArray arrayWithObjects: - SOGoCalendarRole_PrivateModifier, - SOGoCalendarRole_PrivateResponder, - SOGoCalendarRole_PrivateViewer, - SOGoCalendarRole_PrivateDAndTViewer, - nil], - [NSArray arrayWithObject: SOGoRole_ObjectCreator], - [NSArray arrayWithObject: SOGoRole_ObjectEraser], - nil]; - [rolesClassifications retain]; - } - // When a user is a member of many groups for which there are access rights, multiple access rights - // can be returned for each classification. In this case, we only keep the highest access right. - int i, count = [rolesClassifications count]; - NSString *role; - for (i = 0; i < count; i++) - { - role = [[rolesClassifications objectAtIndex: i] firstObjectCommonWithArray: superAcls]; - if (role) - [aclsForUser addObject: role]; - } + /* Sort setting the highest access right first, so in the case + of a user member of several groups, the highest access right + is checked first, for instance, in + [SOGoAppointmentFolder:roleForComponentsWithAccessClass:forUser] */ + aclsForUser = (NSMutableArray *) [superAcls sortedArrayUsingFunction: _comparePermissions + context: NULL]; } return aclsForUser; From e08ee9a2650e86e5af8451eb9766f5034b9fd491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 15 Feb 2016 15:44:14 +0100 Subject: [PATCH 14/38] oc: Use enum mapistore_error instead of int This specifies a little the scope of the variable to make it more realistic with the actual values it may have. We do have a static typed compiled language, why don't we use it? --- OpenChange/MAPIStoreAppointmentWrapper.h | 188 ++++----- OpenChange/MAPIStoreAppointmentWrapper.m | 346 ++++++++-------- OpenChange/MAPIStoreAttachment.h | 14 +- OpenChange/MAPIStoreAttachment.m | 30 +- OpenChange/MAPIStoreCalendarAttachment.m | 44 +- OpenChange/MAPIStoreCalendarEmbeddedMessage.m | 42 +- OpenChange/MAPIStoreCalendarFolder.m | 8 +- OpenChange/MAPIStoreCalendarMessage.m | 26 +- OpenChange/MAPIStoreContactsAttachment.m | 48 +-- OpenChange/MAPIStoreContactsFolder.m | 4 +- OpenChange/MAPIStoreContactsMessage.m | 376 +++++++++--------- OpenChange/MAPIStoreContext.h | 18 +- OpenChange/MAPIStoreContext.m | 22 +- OpenChange/MAPIStoreDBMessage.m | 18 +- OpenChange/MAPIStoreEmbeddedMessage.m | 52 +-- OpenChange/MAPIStoreFAIMessage.m | 4 +- OpenChange/MAPIStoreFolder.h | 74 ++-- OpenChange/MAPIStoreFolder.m | 186 ++++----- OpenChange/MAPIStoreGCSFolder.m | 8 +- OpenChange/MAPIStoreGCSMessage.m | 20 +- OpenChange/MAPIStoreMailAttachment.m | 40 +- OpenChange/MAPIStoreMailFolder.m | 33 +- OpenChange/MAPIStoreMailMessage.h | 40 +- OpenChange/MAPIStoreMailMessage.m | 346 ++++++++-------- OpenChange/MAPIStoreMailMessageTable.m | 12 +- OpenChange/MAPIStoreMailVolatileMessage.h | 2 +- OpenChange/MAPIStoreMailVolatileMessage.m | 8 +- OpenChange/MAPIStoreMessage.h | 18 +- OpenChange/MAPIStoreMessage.m | 168 ++++---- OpenChange/MAPIStoreNotesFolder.m | 4 +- OpenChange/MAPIStoreNotesMessage.m | 6 +- OpenChange/MAPIStoreObject.h | 30 +- OpenChange/MAPIStoreObject.m | 32 +- OpenChange/MAPIStoreObjectProxy.m | 2 +- OpenChange/MAPIStorePermissionsTable.m | 16 +- OpenChange/MAPIStoreSOGo.m | 80 ++-- OpenChange/MAPIStoreSOGoObject.h | 24 +- OpenChange/MAPIStoreSOGoObject.m | 32 +- OpenChange/MAPIStoreSharingMessage.h | 106 ++--- OpenChange/MAPIStoreSharingMessage.m | 114 +++--- OpenChange/MAPIStoreTable.h | 20 +- OpenChange/MAPIStoreTable.m | 22 +- OpenChange/MAPIStoreTasksFolder.m | 2 +- OpenChange/MAPIStoreTasksMessage.m | 104 ++--- OpenChange/NSObject+MAPIStore.h | 16 +- OpenChange/NSObject+MAPIStore.m | 18 +- OpenChange/code-MAPIStorePropertySelectors.h | 4 +- OpenChange/gen-property-selectors.py | 2 +- 48 files changed, 1414 insertions(+), 1415 deletions(-) diff --git a/OpenChange/MAPIStoreAppointmentWrapper.h b/OpenChange/MAPIStoreAppointmentWrapper.h index d114076fe..998f3e175 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.h +++ b/OpenChange/MAPIStoreAppointmentWrapper.h @@ -68,105 +68,105 @@ - (void) fillMessageData: (struct mapistore_message *) dataPtr inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSenderEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSenderAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSenderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSenderEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSenderAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSenderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSenderEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagReceivedByAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagReceivedByEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagReceivedByName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagReceivedByEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagReceivedByAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagReceivedByEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagReceivedByName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagReceivedByEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagIconIndex: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagOwnerAppointmentId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidMeetingType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagStartDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentSequence: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentStateFlags: (void **) data +- (enum mapistore_error) getPidTagIconIndex: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagOwnerAppointmentId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidMeetingType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagStartDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentSequence: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentStateFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidResponseStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; + +- (enum mapistore_error) getPidLidAppointmentStartWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidCommonStart: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagEndDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentEndWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidCommonEnd: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentDuration: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentSubType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidBusyStatus: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidIndentedBusyStatus: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data // SUMMARY + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidLocation: (void **) data // LOCATION + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagBody: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidResponseStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; - -- (int) getPidLidAppointmentStartWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidCommonStart: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagEndDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentEndWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidCommonEnd: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentDuration: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentSubType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidBusyStatus: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidIndentedBusyStatus: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagNormalizedSubject: (void **) data // SUMMARY - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidLocation: (void **) data // LOCATION - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSensitivity: (void **) data // not implemented, depends on CLASS - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidIsRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentRecur: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidCleanGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidServerProcessed: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidServerProcessingActions: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidAppointmentReplyTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidIsRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentRecur: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidCleanGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidServerProcessed: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidServerProcessingActions: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidAppointmentReplyTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; /* reminders */ -- (int) getPidLidReminderSet: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderDelta: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderSignalTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderOverride: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderPlaySound: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidReminderFileParameter: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderSet: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderDelta: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderSignalTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderOverride: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderPlaySound: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidReminderFileParameter: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; @end diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index d1d4494d6..4b1d901ec 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -452,8 +452,8 @@ static NSCharacterSet *hexCharacterSet = nil; } } -- (int) getPidTagIconIndex: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t longValue; @@ -518,10 +518,10 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidTagOwnerAppointmentId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOwnerAppointmentId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; const char *utf8UID; union { uint32_t longValue; @@ -549,8 +549,8 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidLidMeetingType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidMeetingType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* TODO See 2.2.6.5 PidLidMeetingType (OXOCAL) */ @@ -559,10 +559,10 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidOwnerCriticalChange: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidOwnerCriticalChange: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; NSCalendarDate *lastModified; if ([[event attendees] count] > 0) @@ -578,10 +578,10 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidLidAttendeeCriticalChange: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAttendeeCriticalChange: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; NSCalendarDate *lastModified; if ([[event attendees] count] > 0) @@ -597,8 +597,8 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { const char *className; @@ -644,30 +644,30 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidAppointmentMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = talloc_strdup (memCtx, "IPM.Appointment"); return MAPISTORE_SUCCESS; } -- (int) getPidLidFInvited: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFInvited: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidLidAppointmentSequence: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentSequence: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, [[event sequence] unsignedIntValue]); return MAPISTORE_SUCCESS; } -- (int) getPidLidAppointmentStateFlags: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentStateFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t flags = 0x00; @@ -684,8 +684,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidResponseStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidResponseStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t status = 0x00; iCalPerson *person; @@ -722,14 +722,14 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidAppointmentNotAllowPropose: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentNotAllowPropose: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidLidAppointmentStartWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentStartWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; @@ -744,8 +744,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidTagStartDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagStartDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* "The PidTagStartDate property ([MS-OXPROPS] section 2.1077) SHOULD be set, and when set, it MUST be equal to the value of the @@ -764,8 +764,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidCommonStart: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCommonStart: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; @@ -777,8 +777,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidClipStart: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidClipStart: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; NSCalendarDate *dateValue, *start; @@ -806,8 +806,8 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidLidAppointmentEndWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentEndWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; NSInteger offset; @@ -827,8 +827,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidTagEndDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagEndDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; NSInteger offset; @@ -847,8 +847,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidCommonEnd: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCommonEnd: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; NSInteger offset; @@ -868,8 +868,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidClipEnd: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidClipEnd: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; NSCalendarDate *dateValue; @@ -896,10 +896,10 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) _getEntryIdFromCN: (NSString *) cn - andEmail: (NSString *) email - inData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getEntryIdFromCN: (NSString *) cn + andEmail: (NSString *) email + inData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *username; SOGoUserManager *mgr; @@ -921,11 +921,11 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) _getEmailAddress: (void **) data - forICalPerson: (iCalPerson *) person - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getEmailAddress: (void **) data + forICalPerson: (iCalPerson *) person + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; NSString *email; email = [person rfc822Email]; @@ -940,20 +940,20 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) _getAddrType: (void **) data - forICalPerson: (iCalPerson *) person - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getAddrType: (void **) data + forICalPerson: (iCalPerson *) person + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"SMTP" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) _getName: (void **) data - forICalPerson: (iCalPerson *) person - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getName: (void **) data + forICalPerson: (iCalPerson *) person + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; NSString *cn; cn = [person cn]; @@ -968,11 +968,11 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) _getEntryId: (void **) data - forICalPerson: (iCalPerson *) person - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getEntryId: (void **) data + forICalPerson: (iCalPerson *) person + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; NSString *email, *cn; if (person) @@ -991,32 +991,32 @@ static NSCharacterSet *hexCharacterSet = nil; } /* sender (organizer) */ -- (int) getPidTagSenderEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEmailAddress: data forICalPerson: [event organizer] inMemCtx: memCtx]; } -- (int) getPidTagSenderAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getAddrType: data forICalPerson: [event organizer] inMemCtx: memCtx]; } -- (int) getPidTagSenderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getName: data forICalPerson: [event organizer] inMemCtx: memCtx]; } -- (int) getPidTagSenderEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEntryId: data forICalPerson: [event organizer] @@ -1024,57 +1024,57 @@ static NSCharacterSet *hexCharacterSet = nil; } /* sender representing */ -- (int) getPidTagSentRepresentingEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderName: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderEntryId: data inMemCtx: memCtx]; } /* attendee */ -- (int) getPidTagReceivedByEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEmailAddress: data forICalPerson: [event userAsAttendee: user] inMemCtx: memCtx]; } -- (int) getPidTagReceivedByAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getAddrType: data forICalPerson: [event userAsAttendee: user] inMemCtx: memCtx]; } -- (int) getPidTagReceivedByName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getName: data - forICalPerson: [event userAsAttendee: user] + forICalPerson: [event userAsAttendee: user] inMemCtx: memCtx]; } -- (int) getPidTagReceivedByEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEntryId: data forICalPerson: [event userAsAttendee: user] @@ -1082,8 +1082,8 @@ static NSCharacterSet *hexCharacterSet = nil; } /* /attendee */ -- (int) getPidLidAppointmentDuration: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentDuration: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSTimeInterval timeValue; @@ -1093,16 +1093,16 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidAppointmentSubType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentSubType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [event isAllDay]); return MAPISTORE_SUCCESS; } -- (int) getPidLidBusyStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidBusyStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint8_t value; @@ -1116,24 +1116,24 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidIndentedBusyStatus: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidIndentedBusyStatus: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidBusyStatus: data inMemCtx: memCtx]; } -- (int) getPidTagNormalizedSubject: (void **) data // SUMMARY - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data // SUMMARY + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[event summary] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidLidLocation: (void **) data // LOCATION - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidLocation: (void **) data // LOCATION + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSString *location; location = [event location]; @@ -1145,14 +1145,14 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidLidWhere: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWhere: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidLocation: data inMemCtx: memCtx]; } -- (int) getPidLidServerProcessed: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidServerProcessed: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* TODO: we need to check whether the event has been processed internally by SOGo or if it was received only by mail. We only assume the SOGo case @@ -1160,8 +1160,8 @@ static NSCharacterSet *hexCharacterSet = nil; return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidLidServerProcessingActions: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidServerProcessingActions: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00000010 /* cpsCreatedOnPrincipal */ @@ -1171,8 +1171,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions + inMemCtx: (TALLOC_CTX *) memCtx { if ([event symbolicAccessClass] == iCalAccessPublic) return [self getNo: data inMemCtx: memCtx]; @@ -1180,8 +1180,8 @@ static NSCharacterSet *hexCharacterSet = nil; return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagSensitivity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* See [MS-OXCICAL] Section 2.1.3.11.20.4 */ uint32_t v; @@ -1207,8 +1207,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t v; if ([[event priority] isEqualToString: @"9"]) @@ -1223,8 +1223,8 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidNameKeywords: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameKeywords: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* See [MS-OXCICAL] Section 2.1.3.1.1.20.3 */ NSArray *categories; @@ -1239,10 +1239,10 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBody: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; NSRange range; NSString *stringValue; NSString *trimingString = @"\r\n\n"; @@ -1270,8 +1270,8 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidTagInternetCodepage: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInternetCodepage: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* ref: http://msdn.microsoft.com/en-us/library/dd317756%28v=vs.85%29.aspx @@ -1286,16 +1286,16 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [event isRecurrent]); return MAPISTORE_SUCCESS; } -- (int) getPidLidIsRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidIsRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [event isRecurrent] @@ -1304,16 +1304,16 @@ static NSCharacterSet *hexCharacterSet = nil; return MAPISTORE_SUCCESS; } -- (int) getPidLidIsException: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidIsException: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [event recurrenceId] != nil); return MAPISTORE_SUCCESS; } -- (int) getPidLidExceptionReplaceTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidExceptionReplaceTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; NSCalendarDate *dateValue; @@ -1333,8 +1333,8 @@ static NSCharacterSet *hexCharacterSet = nil; return rc; } -- (int) getPidLidRecurrencePattern: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidRecurrencePattern: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"No description" asUnicodeInMemCtx: memCtx]; @@ -1569,10 +1569,10 @@ ExtendedException: (1) ReservedBlockEE2Size: 00 00 00 00 */ -- (int) getPidLidAppointmentRecur: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentRecur: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if ([event isRecurrent]) *data = [self _computeAppointmentRecurInMemCtx: memCtx]; @@ -1582,10 +1582,10 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidRecurrenceType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidRecurrenceType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; iCalRecurrenceFrequency freq; iCalRecurrenceRule *rrule; enum RecurrenceType rectype; @@ -1614,7 +1614,7 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -// - (int) getPidLidGlobalObjectId: (void **) data +// - (enum mapistore_error) getPidLidGlobalObjectId: (void **) data // inMemCtx: (TALLOC_CTX *) memCtx // { // static char byteArrayId[] = {0x04, 0x00, 0x00, 0x00, 0x82, 0x00, 0xE0, @@ -1776,10 +1776,10 @@ ReservedBlockEE2Size: 00 00 00 00 talloc_free (localMemCtx); } -- (int) getPidLidGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if (!globalObjectId) [self _computeGlobalObjectIds]; @@ -1792,10 +1792,10 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidCleanGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCleanGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if (!cleanGlobalObjectId) [self _computeGlobalObjectIds]; @@ -1808,8 +1808,8 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidAppointmentReplyTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentReplyTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* We always return LAST-MODIFIED, which is a hack, but one that works because: the user is either (NOT recipient OR (is recipient AND its @@ -1817,7 +1817,7 @@ ReservedBlockEE2Size: 00 00 00 00 client OR the user is recipient and its status is defined, where this value is thus correct because the recipient status is the only property that can be changed. */ - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; NSCalendarDate *lastModified; lastModified = [event lastModified]; @@ -1860,8 +1860,8 @@ ReservedBlockEE2Size: 00 00 00 00 alarmSet = YES; } -- (int) getPidLidReminderSet: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderSet: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!alarmSet) [self _setupAlarm]; @@ -1871,8 +1871,8 @@ ReservedBlockEE2Size: 00 00 00 00 return MAPISTORE_SUCCESS; } -- (int) getPidLidReminderTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!alarmSet) [self _setupAlarm]; @@ -1882,10 +1882,10 @@ ReservedBlockEE2Size: 00 00 00 00 : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidReminderDelta: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderDelta: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; iCalTrigger *trigger; NSCalendarDate *startDate, *relationDate, *alarmDate; NSTimeInterval interval; @@ -1922,10 +1922,10 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidReminderSignalTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderSignalTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSCalendarDate *alarmDate; if (!alarmSet) @@ -1942,10 +1942,10 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidReminderOverride: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderOverride: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if (!alarmSet) [self _setupAlarm]; @@ -1958,10 +1958,10 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidReminderPlaySound: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderPlaySound: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if (!alarmSet) [self _setupAlarm]; @@ -1974,8 +1974,8 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidReminderFileParameter: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderFileParameter: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { // if (!alarmSet) // [self _setupAlarm]; @@ -1983,14 +1983,14 @@ ReservedBlockEE2Size: 00 00 00 00 return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidReminderType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidTimeZoneDescription: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTimeZoneDescription: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; NSString *tzid; @@ -2007,8 +2007,8 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidTimeZoneStruct: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTimeZoneStruct: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; @@ -2018,8 +2018,8 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidAppointmentTimeZoneDefinitionStartDisplay: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentTimeZoneDefinitionStartDisplay: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; @@ -2040,8 +2040,8 @@ ReservedBlockEE2Size: 00 00 00 00 return rc; } -- (int) getPidLidAppointmentTimeZoneDefinitionEndDisplay: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentTimeZoneDefinitionEndDisplay: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidAppointmentTimeZoneDefinitionStartDisplay: data inMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreAttachment.h b/OpenChange/MAPIStoreAttachment.h index bfa779b85..24ba32c43 100644 --- a/OpenChange/MAPIStoreAttachment.h +++ b/OpenChange/MAPIStoreAttachment.h @@ -36,13 +36,13 @@ - (void) setAID: (uint32_t) newAID; - (uint32_t) AID; -- (int) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr - withMID: (uint64_t *) mid - withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr - withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr + withMID: (uint64_t *) mid + withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr + withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr + inMemCtx: (TALLOC_CTX *) memCtx; /* helpers */ - (NSData *) mimeAttachTag; diff --git a/OpenChange/MAPIStoreAttachment.m b/OpenChange/MAPIStoreAttachment.m index cb85911e3..754436d7e 100644 --- a/OpenChange/MAPIStoreAttachment.m +++ b/OpenChange/MAPIStoreAttachment.m @@ -67,40 +67,40 @@ return mimeAttachTag; } -- (int) getPidTagMid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, [container objectId]); return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, aid); return MAPISTORE_SUCCESS; } -- (int) getPidTagRenderingPosition: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRenderingPosition: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0xffffffff); return MAPISTORE_SUCCESS; } -- (int) getPidTagAccessLevel: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccessLevel: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr - withMID: (uint64_t *) mid - withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) openEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr + withMID: (uint64_t *) mid + withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreEmbeddedMessage *attMessage; struct mapistore_message *mapistoreMsg; @@ -118,9 +118,9 @@ return (attMessage ? MAPISTORE_SUCCESS : MAPISTORE_ERROR); } -- (int) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr - withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) createEmbeddedMessage: (MAPIStoreEmbeddedMessage **) messagePtr + withMAPIStoreMsg: (struct mapistore_message **) mapistoreMsgPtr + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreEmbeddedMessage *attMessage; struct mapistore_message *mapistoreMsg; diff --git a/OpenChange/MAPIStoreCalendarAttachment.m b/OpenChange/MAPIStoreCalendarAttachment.m index e101e735b..b2044b602 100644 --- a/OpenChange/MAPIStoreCalendarAttachment.m +++ b/OpenChange/MAPIStoreCalendarAttachment.m @@ -94,64 +94,64 @@ flattenedValuesForKey: @""]; } -- (int) getPidTagAttachmentHidden: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachmentHidden: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { return [self getYes: data inMemCtx: localMemCtx]; } -- (int) getPidTagAttachmentFlags: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachmentFlags: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { *data = MAPILongValue (localMemCtx, 0x00000002); /* afException */ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachmentLinkId: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachmentLinkId: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { return [self getLongZero: data inMemCtx: localMemCtx]; } -- (int) getPidTagAttachFlags: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachFlags: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { return [self getLongZero: data inMemCtx: localMemCtx]; } -- (int) getPidTagAttachMethod: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachMethod: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { *data = MAPILongValue (localMemCtx, afEmbeddedMessage); return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachEncoding: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagAttachEncoding: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { *data = [[NSData data] asBinaryInMemCtx: localMemCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { *data = [@"Untitled" asUnicodeInMemCtx: localMemCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachmentContactPhoto: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachmentContactPhoto: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagExceptionReplaceTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagExceptionReplaceTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc; NSCalendarDate *dateValue; @@ -178,8 +178,8 @@ return rc; } -- (int) getPidTagExceptionStartTime: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagExceptionStartTime: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { enum mapistore_error rc; NSCalendarDate *dateValue; @@ -205,8 +205,8 @@ return rc; } -- (int) getPidTagExceptionEndTime: (void **) data - inMemCtx: (TALLOC_CTX *) localMemCtx +- (enum mapistore_error) getPidTagExceptionEndTime: (void **) data + inMemCtx: (TALLOC_CTX *) localMemCtx { enum mapistore_error rc; NSCalendarDate *dateValue; diff --git a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m index 986b106d3..6f0c8a776 100644 --- a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m +++ b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m @@ -89,73 +89,73 @@ *dataPtr = msgData; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = talloc_strdup (memCtx, "IPM.OLE.CLASS.{00061055-0000-0000-C000-000000000046}"); return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageFlags: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageFlags: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, MSGFLAG_UNMODIFIED); return MAPISTORE_SUCCESS; } -- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagResponseRequested: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagResponseRequested: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } /* discarded properties */ -- (int) getPidLidAppointmentLastSequence: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentLastSequence: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidMeetingWorkspaceUrl: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidMeetingWorkspaceUrl: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidContacts: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidContacts: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagSensitivity: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidPrivate: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPrivate: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidNameKeywords: (void **) - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameKeywords: (void **) + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidFExceptionalBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFExceptionalBody: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } diff --git a/OpenChange/MAPIStoreCalendarFolder.m b/OpenChange/MAPIStoreCalendarFolder.m index 5079c65cc..30547cb02 100644 --- a/OpenChange/MAPIStoreCalendarFolder.m +++ b/OpenChange/MAPIStoreCalendarFolder.m @@ -193,16 +193,16 @@ [(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]]; } -- (int) getPidTagContainerClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContainerClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPF.Appointment" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagDefaultPostMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Appointment" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 108471eae..62a29f118 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -228,8 +228,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; /* getters */ -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { SOGoUser *owner; @@ -242,8 +242,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; return MAPISTORE_SUCCESS; } -- (int) getPidLidSideEffects: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSideEffects: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, seOpenToDelete | seOpenToCopy | seOpenToMove @@ -252,7 +252,7 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; return MAPISTORE_SUCCESS; } -- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } @@ -347,8 +347,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; *dataPtr = msgData; } -- (int) getPidTagResponseRequested: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagResponseRequested: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } @@ -358,8 +358,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; MAPIStoreMessage base class, then the proxy method is not reached (see MAPIStoreObject). */ -- (int) getPidTagNormalizedSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreAppointmentWrapper *appointmentWrapper; @@ -370,8 +370,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagSensitivity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreAppointmentWrapper *appointmentWrapper; @@ -382,8 +382,8 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreAppointmentWrapper *appointmentWrapper; diff --git a/OpenChange/MAPIStoreContactsAttachment.m b/OpenChange/MAPIStoreContactsAttachment.m index f578dbc61..6b0d73133 100644 --- a/OpenChange/MAPIStoreContactsAttachment.m +++ b/OpenChange/MAPIStoreContactsAttachment.m @@ -92,52 +92,52 @@ return [container lastModificationTime]; } -- (int) getPidTagAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagAttachEncoding: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; { *data = [[NSData data] asBinaryInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachFlags: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagAttachmentFlags: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachmentFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachmentHidden: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagAttachmentLinkId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachmentLinkId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagAttachMethod: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachMethod: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00000001); return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachmentContactPhoto: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachmentContactPhoto: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagAttachDataBinary: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachDataBinary: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!photoData) ASSIGN (photoData, @@ -148,8 +148,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachSize: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachSize: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!photoData) ASSIGN (photoData, @@ -160,16 +160,16 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachExtension: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachExtension: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self fileExtension] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachLongFilename: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachLongFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *filename; @@ -181,15 +181,15 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachFilename: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagAttachLongFilename: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagAttachLongFilename: data inMemCtx: memCtx]; } diff --git a/OpenChange/MAPIStoreContactsFolder.m b/OpenChange/MAPIStoreContactsFolder.m index a04110d0f..fd6db947a 100644 --- a/OpenChange/MAPIStoreContactsFolder.m +++ b/OpenChange/MAPIStoreContactsFolder.m @@ -117,8 +117,8 @@ return [[self activeUserRoles] containsObject: SOGoRole_ObjectViewer]; } -- (int) getPidTagDefaultPostMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Contact" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreContactsMessage.m b/OpenChange/MAPIStoreContactsMessage.m index 41bbdc98f..4befdfd5d 100644 --- a/OpenChange/MAPIStoreContactsMessage.m +++ b/OpenChange/MAPIStoreContactsMessage.m @@ -104,8 +104,8 @@ return element; } -- (int) getPidTagIconIndex: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { /* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */ *data = MAPILongValue (memCtx, 0x00000200); @@ -113,52 +113,52 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAlternateRecipientAllowed: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAlternateRecipientAllowed: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagMessageFlags: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, MSGFLAG_READ); return MAPISTORE_SUCCESS; } -- (int) getPidTagDeleteAfterSubmit: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDeleteAfterSubmit: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = talloc_strdup (memCtx, "IPM.Contact"); return MAPISTORE_SUCCESS; } -- (int) getPidTagSendInternetEncoding: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSendInternetEncoding: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00065001); return MAPISTORE_SUCCESS; } -- (int) getPidTagNormalizedSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagDisplayName: data inMemCtx: memCtx]; } -- (int) getPidLidFileUnder: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFileUnder: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *surName, *givenName, *middleName; NSMutableString *fileUnder; @@ -184,22 +184,22 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidFileUnderId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFileUnderId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00008017); /* what ol2003 sets */ return MAPISTORE_SUCCESS; } -- (int) getPidTagAccount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidEmail1EmailAddress: data inMemCtx: memCtx]; } -- (int) getPidTagContactEmailAddresses: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContactEmailAddresses: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -212,8 +212,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagEmsAbTargetAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagEmsAbTargetAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -224,8 +224,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagSearchKey: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSearchKey: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -236,16 +236,16 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMailPermission: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMailPermission: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBody: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSString *stringValue; stringValue = [[sogoObject vCard] note]; @@ -257,8 +257,8 @@ return rc; } -- (int) getPidTagSensitivity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } @@ -267,8 +267,8 @@ // Contact Name Properties [MS-OXOCNTC 2.2.1.1] // --------------------------------------------------------- -- (int) getPidTagNickname: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNickname: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -278,8 +278,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagGeneration: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagGeneration: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -291,8 +291,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagSurname: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSurname: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -304,8 +304,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMiddleName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMiddleName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -317,8 +317,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagGivenName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagGivenName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -330,8 +330,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagDisplayNamePrefix: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayNamePrefix: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -398,9 +398,9 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 Store on *data the given email (position) It can return MAPISTORE_ERR_NOT_FOUND if the email doesn't exist */ -- (int) _getPidLidEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx - atPosition: (NSUInteger) position +- (enum mapistore_error) _getPidLidEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx + atPosition: (NSUInteger) position { NSString *email; @@ -412,60 +412,60 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidLidEmail1EmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail1EmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailAddress: data inMemCtx: memCtx atPosition: 1]; } -- (int) getPidLidEmail2EmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail2EmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailAddress: data inMemCtx: memCtx atPosition: 2]; } -- (int) getPidLidEmail3EmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail3EmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailAddress: data inMemCtx: memCtx atPosition: 3]; } -- (int) getPidLidEmail1OriginalDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail1OriginalDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidEmail1EmailAddress: data inMemCtx: memCtx]; } -- (int) getPidLidEmail2OriginalDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail2OriginalDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidEmail2EmailAddress: data inMemCtx: memCtx]; } -- (int) getPidLidEmail3OriginalDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail3OriginalDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidEmail3EmailAddress: data inMemCtx: memCtx]; } -- (int) getPidLidEmail1AddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail1AddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (![self _fetchEmailAddress: 1]) return MAPISTORE_ERR_NOT_FOUND; return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidLidEmail2AddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail2AddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (![self _fetchEmailAddress: 2]) return MAPISTORE_ERR_NOT_FOUND; return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidLidEmail3AddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail3AddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (![self _fetchEmailAddress: 3]) return MAPISTORE_ERR_NOT_FOUND; @@ -476,9 +476,9 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 Store on *data a string with the display name for the given email (position) It can return MAPISTORE_ERR_NOT_FOUND if the email doesn't exist */ -- (int) _getPidLidEmailDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx - atPosition: (NSUInteger) position +- (enum mapistore_error) _getPidLidEmailDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx + atPosition: (NSUInteger) position { NGVCard *vCard; NSString *fn, *email; @@ -495,20 +495,20 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidLidEmail1DisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail1DisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailDisplayName: data inMemCtx: memCtx atPosition: 1]; } -- (int) getPidLidEmail2DisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail2DisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailDisplayName: data inMemCtx: memCtx atPosition: 2]; } -- (int) getPidLidEmail3DisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail3DisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailDisplayName: data inMemCtx: memCtx atPosition: 3]; } @@ -544,9 +544,9 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 Store on *data an entryId for the given email (position) It can return MAPISTORE_ERR_NOT_FOUND if the email doesn't exist */ -- (int) _getPidLidEmailOriginalEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx - atPosition: (NSUInteger) position +- (enum mapistore_error) _getPidLidEmailOriginalEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx + atPosition: (NSUInteger) position { NSData *value; @@ -558,36 +558,36 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidLidEmail1OriginalEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail1OriginalEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailOriginalEntryId: data inMemCtx: memCtx atPosition: 1]; } -- (int) getPidLidEmail2OriginalEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail2OriginalEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailOriginalEntryId: data inMemCtx: memCtx atPosition: 2]; } -- (int) getPidLidEmail3OriginalEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidEmail3OriginalEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getPidLidEmailOriginalEntryId: data inMemCtx: memCtx atPosition: 3]; } -- (int) _getElement: (NSString *) elementTag - ofType: (NSString *) aType - excluding: (NSString *) aTypeToExclude - atPos: (NSUInteger) pos - inData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getElement: (NSString *) elementTag + ofType: (NSString *) aType + excluding: (NSString *) aTypeToExclude + atPos: (NSUInteger) pos + inData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSArray *elements; CardElement *ce; @@ -618,8 +618,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidTagBusinessFaxNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBusinessFaxNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"fax" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; @@ -656,8 +656,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return list; } -- (int) getPidLidAddressBookProviderArrayType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAddressBookProviderArrayType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { // [MS-OXOCNTC] 2.2.1.2.12 // https://msdn.microsoft.com/en-us/library/ee218011%28v=exchg.80%29.aspx @@ -677,8 +677,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidLidAddressBookProviderEmailList: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAddressBookProviderEmailList: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSArray *emailList = [self _buildAddressBookProviderEmailList]; @@ -697,49 +697,49 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Home Address -- (int) getPidTagHomeAddressStreet: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressStreet: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 2 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeAddressCity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressCity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 3 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeAddressStateOrProvince: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressStateOrProvince: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 4 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeAddressPostalCode: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressPostalCode: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 5 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeAddressCountry: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressCountry: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 6 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeAddressPostOfficeBox: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeAddressPostOfficeBox: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"home" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidLidHomeAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidHomeAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"label" ofType: @"home" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; @@ -747,50 +747,50 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Work Address -- (int) getPidLidWorkAddressStreet: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressStreet: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 2 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddressCity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressCity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 3 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddressState: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressState: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 4 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddressPostalCode: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressPostalCode: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 5 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddressCountry: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressCountry: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 6 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddressPostOfficeBox: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddressPostOfficeBox: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"work" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidLidWorkAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidWorkAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"label" ofType: @"work" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; @@ -798,57 +798,57 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Mailing Address -- (int) getPidTagStreetAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagStreetAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 2 inData: data inMemCtx: memCtx]; } -- (int) getPidTagLocality: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagLocality: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 3 inData: data inMemCtx: memCtx]; } -- (int) getPidTagStateOrProvince: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagStateOrProvince: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 4 inData: data inMemCtx: memCtx]; } -- (int) getPidTagPostalCode: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPostalCode: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 5 inData: data inMemCtx: memCtx]; } -- (int) getPidTagCountry: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagCountry: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 6 inData: data inMemCtx: memCtx]; } -- (int) getPidTagPostOfficeBox: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPostOfficeBox: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"adr" ofType: @"pref" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagPostalAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPostalAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"label" ofType: @"pref" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidLidPostalAddressId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPostalAddressId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSArray *elements; CardElement *element; @@ -878,36 +878,36 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Telephone Properties [MS-OXOCNTC 2.2.1.4] // ------------------------------------------------------- -- (int) getPidTagPagerTelephoneNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPagerTelephoneNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"pager" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagBusinessTelephoneNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBusinessTelephoneNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"work" excluding: @"fax" atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagHomeTelephoneNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHomeTelephoneNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"home" excluding: @"fax" atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagPrimaryTelephoneNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPrimaryTelephoneNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"pref" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagMobileTelephoneNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMobileTelephoneNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"tel" ofType: @"cell" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; @@ -917,12 +917,12 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Event Properties [MS-OXOCNTC 2.2.1.5] // --------------------------------------------------------- -- (int) getPidTagBirthday: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBirthday: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[sogoObject vCard] bday]; if ([stringValue length] != 0) @@ -938,12 +938,12 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidTagWeddingAnniversary: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagWeddingAnniversary: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSCalendarDate *dateValue; NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"x-ms-anniversary"] flattenedValuesForKey: @""]; @@ -963,8 +963,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Professional Properties [MS-OXOCNTC 2.2.1.6] // --------------------------------------------------------- -- (int) getPidTagTitle: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagTitle: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -974,8 +974,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidTagCompanyName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagCompanyName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { CardElement *org; @@ -986,8 +986,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidTagDepartmentName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDepartmentName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { CardElement *org; @@ -998,11 +998,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidTagOfficeLocation: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOfficeLocation: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"x-ms-office"] flattenedValuesForKey: @""]; @@ -1014,11 +1014,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidTagManagerName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagManagerName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"x-ms-manager"] flattenedValuesForKey: @""]; @@ -1030,11 +1030,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidTagAssistant: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAssistant: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"x-ms-assistant"] flattenedValuesForKey: @""]; @@ -1046,11 +1046,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidTagProfession: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagProfession: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[sogoObject vCard] role]; if (stringValue) @@ -1089,8 +1089,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 fetchedAttachments = YES; } -- (int) getPidLidHasPicture: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidHasPicture: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!fetchedAttachments) [self _fetchAttachmentParts]; @@ -1163,11 +1163,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 // Other Properties [MS-OXOCNTC 2.2.1.10] // --------------------------------------------------------- -- (int) getPidTagSpouseName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSpouseName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"x-ms-spouse"] flattenedValuesForKey: @""]; @@ -1179,8 +1179,8 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidLidInstantMessagingAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidInstantMessagingAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -1193,11 +1193,11 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return MAPISTORE_SUCCESS; } -- (int) getPidLidFreeBusyLocation: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFreeBusyLocation: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; stringValue = [[[sogoObject vCard] uniqueChildWithTag: @"fburl"] flattenedValuesForKey: @""]; @@ -1209,15 +1209,15 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 return rc; } -- (int) getPidTagPersonalHomePage: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPersonalHomePage: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"url" ofType: @"home" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; } -- (int) getPidTagBusinessHomePage: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBusinessHomePage: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getElement: @"url" ofType: @"work" excluding: nil atPos: 0 inData: data inMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreContext.h b/OpenChange/MAPIStoreContext.h index 533d7f278..4bde9d79a 100644 --- a/OpenChange/MAPIStoreContext.h +++ b/OpenChange/MAPIStoreContext.h @@ -72,10 +72,10 @@ forUser: (NSString *) username withRole: (enum mapistore_context_role) role; -+ (int) openContext: (MAPIStoreContext **) contextPtr - withURI: (const char *) newUri - connectionInfo: (struct mapistore_connection_info *) newConnInfo - andTDBIndexing: (struct indexing_context *) indexing; ++ (enum mapistore_error) openContext: (MAPIStoreContext **) contextPtr + withURI: (const char *) newUri + connectionInfo: (struct mapistore_connection_info *) newConnInfo + andTDBIndexing: (struct indexing_context *) indexing; - (id) initFromURL: (NSURL *) newUri withConnectionInfo: (struct mapistore_connection_info *) newConnInfo @@ -91,11 +91,11 @@ // - (id) lookupObject: (NSString *) objectURLString; /* backend methods */ -- (int) getPath: (char **) path - ofFMID: (uint64_t) fmid - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getRootFolder: (MAPIStoreFolder **) folderPtr - withFID: (uint64_t) fmid; +- (enum mapistore_error) getPath: (char **) path + ofFMID: (uint64_t) fmid + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getRootFolder: (MAPIStoreFolder **) folderPtr + withFID: (uint64_t) fmid; /* util methods */ - (NSString *) extractChildNameFromURL: (NSString *) childURL diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index 9b8e0a37a..f4170a6f7 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -212,16 +212,16 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) return completeURL; } -+ (int) openContext: (MAPIStoreContext **) contextPtr - withURI: (const char *) newUri - connectionInfo: (struct mapistore_connection_info *) newConnInfo - andTDBIndexing: (struct indexing_context *) indexing ++ (enum mapistore_error) openContext: (MAPIStoreContext **) contextPtr + withURI: (const char *) newUri + connectionInfo: (struct mapistore_connection_info *) newConnInfo + andTDBIndexing: (struct indexing_context *) indexing { MAPIStoreContext *context; Class contextClass; NSString *module; NSURL *baseURL; - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; context = nil; @@ -338,11 +338,11 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) return activeUser; } -- (int) getPath: (char **) path - ofFMID: (uint64_t) fmid - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPath: (char **) path + ofFMID: (uint64_t) fmid + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; NSString *objectURL, *url; url = [contextUrl absoluteString]; @@ -379,8 +379,8 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) { } -- (int) getRootFolder: (MAPIStoreFolder **) folderPtr - withFID: (uint64_t) newFid +- (enum mapistore_error) getRootFolder: (MAPIStoreFolder **) folderPtr + withFID: (uint64_t) newFid { enum mapistore_error rc; MAPIStoreFolder *baseFolder; diff --git a/OpenChange/MAPIStoreDBMessage.m b/OpenChange/MAPIStoreDBMessage.m index 98d357bf7..a397f7521 100644 --- a/OpenChange/MAPIStoreDBMessage.m +++ b/OpenChange/MAPIStoreDBMessage.m @@ -282,7 +282,7 @@ // We might get there if for some reasons, all classes weren't able // to tell us the message class. // -- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Note" asUnicodeInMemCtx: memCtx]; @@ -291,10 +291,10 @@ return MAPISTORE_SUCCESS; } -- (int) getProperties: (struct mapistore_property_data *) data - withTags: (enum MAPITAGS *) tags - andCount: (uint16_t) columnCount - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperties: (struct mapistore_property_data *) data + withTags: (enum MAPITAGS *) tags + andCount: (uint16_t) columnCount + inMemCtx: (TALLOC_CTX *) memCtx { [sogoObject reloadIfNeeded]; @@ -304,12 +304,12 @@ inMemCtx: memCtx]; } -- (int) getProperty: (void **) data - withTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperty: (void **) data + withTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) memCtx { id value; - int rc; + enum mapistore_error rc; value = [properties objectForKey: MAPIPropertyKey (propTag)]; if (value) diff --git a/OpenChange/MAPIStoreEmbeddedMessage.m b/OpenChange/MAPIStoreEmbeddedMessage.m index f609726db..ff5f8b825 100644 --- a/OpenChange/MAPIStoreEmbeddedMessage.m +++ b/OpenChange/MAPIStoreEmbeddedMessage.m @@ -56,81 +56,81 @@ static Class MAPIStoreAttachmentK; idForObjectWithKey: objectKey]; } -- (int) getPidTagAccessLevel: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccessLevel: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } /* disabled properties */ -- (int) getPidTagFolderId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFolderId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagChangeKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagParentSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagParentSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagChangeNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagInstID: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInstID: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagInstanceNum: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInstanceNum: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagRowType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRowType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagDepth: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDepth: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagIconIndex: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagGenerateExchangeViews: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagGenerateExchangeViews: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagOriginalMessageClass: (void **) dataa - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalMessageClass: (void **) dataa + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } diff --git a/OpenChange/MAPIStoreFAIMessage.m b/OpenChange/MAPIStoreFAIMessage.m index bfa093ff7..bc5608912 100644 --- a/OpenChange/MAPIStoreFAIMessage.m +++ b/OpenChange/MAPIStoreFAIMessage.m @@ -45,8 +45,8 @@ andType: MAPISTORE_FAI_TABLE]; } -- (int) getPidTagAssociated: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAssociated: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index 3f3bfb204..ab0a56da5 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -96,34 +96,34 @@ /* backend interface */ -- (int) openFolder: (MAPIStoreFolder **) childFolderPtr - withFID: (uint64_t) fid; -- (int) createFolder: (MAPIStoreFolder **) childFolderPtr - withRow: (struct SRow *) aRow - andFID: (uint64_t) fid; -- (int) deleteFolder; -- (int) getChildCount: (uint32_t *) rowCount - ofTableType: (enum mapistore_table_type) tableType; +- (enum mapistore_error) openFolder: (MAPIStoreFolder **) childFolderPtr + withFID: (uint64_t) fid; +- (enum mapistore_error) createFolder: (MAPIStoreFolder **) childFolderPtr + withRow: (struct SRow *) aRow + andFID: (uint64_t) fid; +- (enum mapistore_error) deleteFolder; +- (enum mapistore_error) getChildCount: (uint32_t *) rowCount + ofTableType: (enum mapistore_table_type) tableType; -- (int) createMessage: (MAPIStoreMessage **) messagePtr - withMID: (uint64_t) mid - isAssociated: (BOOL) isAssociated; +- (enum mapistore_error) createMessage: (MAPIStoreMessage **) messagePtr + withMID: (uint64_t) mid + isAssociated: (BOOL) isAssociated; -- (int) openMessage: (MAPIStoreMessage **) messagePtr - withMID: (uint64_t) mid - forWriting: (BOOL) readWrite - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) deleteMessageWithMID: (uint64_t) mid - andFlags: (uint8_t) flags; +- (enum mapistore_error) openMessage: (MAPIStoreMessage **) messagePtr + withMID: (uint64_t) mid + forWriting: (BOOL) readWrite + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) deleteMessageWithMID: (uint64_t) mid + andFlags: (uint8_t) flags; -- (int) moveCopyMessagesWithMIDs: (uint64_t *) srcMids - andCount: (uint32_t) count - fromFolder: (MAPIStoreFolder *) sourceFolder - withMIDs: (uint64_t *) targetMids - andChangeKeys: (struct Binary_r **) targetChangeKeys - andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists - wantCopy: (uint8_t) want_copy - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) moveCopyMessagesWithMIDs: (uint64_t *) srcMids + andCount: (uint32_t) count + fromFolder: (MAPIStoreFolder *) sourceFolder + withMIDs: (uint64_t *) targetMids + andChangeKeys: (struct Binary_r **) targetChangeKeys + andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists + wantCopy: (uint8_t) want_copy + inMemCtx: (TALLOC_CTX *) memCtx; - (enum mapistore_error) moveCopyToFolder: (MAPIStoreFolder *) targetFolder withNewName: (NSString *) newFolderName @@ -131,20 +131,20 @@ isRecursive: (BOOL) isRecursive inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getDeletedFMIDs: (struct UI8Array_r **) fmidsPtr - andCN: (uint64_t *) cnPtr - fromChangeNumber: (uint64_t) changeNum - inTableType: (enum mapistore_table_type) tableType - inMemCtx: (TALLOC_CTX *) mem_ctx; +- (enum mapistore_error) getDeletedFMIDs: (struct UI8Array_r **) fmidsPtr + andCN: (uint64_t *) cnPtr + fromChangeNumber: (uint64_t) changeNum + inTableType: (enum mapistore_table_type) tableType + inMemCtx: (TALLOC_CTX *) mem_ctx; -- (int) getTable: (MAPIStoreTable **) tablePtr - andRowCount: (uint32_t *) count - tableType: (enum mapistore_table_type) tableType - andHandleId: (uint32_t) handleId; +- (enum mapistore_error) getTable: (MAPIStoreTable **) tablePtr + andRowCount: (uint32_t *) count + tableType: (enum mapistore_table_type) tableType + andHandleId: (uint32_t) handleId; -- (int) modifyPermissions: (struct PermissionData *) permissions - withCount: (uint16_t) pcount - andFlags: (int8_t) flags; +- (enum mapistore_error) modifyPermissions: (struct PermissionData *) permissions + withCount: (uint16_t) pcount + andFlags: (int8_t) flags; - (enum mapistore_error) preloadMessageBodiesWithMIDs: (const struct UI8Array_r *) mids ofTableType: (enum mapistore_table_type) tableType; diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index c111f2305..6ffd5da00 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -365,10 +365,10 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return foundObject; } -- (int) openFolder: (MAPIStoreFolder **) childFolderPtr - withFID: (uint64_t) fid +- (enum mapistore_error) openFolder: (MAPIStoreFolder **) childFolderPtr + withFID: (uint64_t) fid { - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; MAPIStoreFolder *childFolder; MAPIStoreMapping *mapping; NSString *childURL; @@ -390,9 +390,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) createFolder: (MAPIStoreFolder **) childFolderPtr - withRow: (struct SRow *) aRow - andFID: (uint64_t) fid +- (enum mapistore_error) createFolder: (MAPIStoreFolder **) childFolderPtr + withRow: (struct SRow *) aRow + andFID: (uint64_t) fid { BOOL mapped; enum mapistore_error rc = MAPISTORE_SUCCESS; @@ -447,7 +447,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) deleteFolder +- (enum mapistore_error) deleteFolder { // TODO: raise exception in case underlying delete fails? // [propsMessage delete]; @@ -458,11 +458,11 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return MAPISTORE_SUCCESS; } -- (int) getChildCount: (uint32_t *) rowCount - ofTableType: (enum mapistore_table_type) tableType +- (enum mapistore_error) getChildCount: (uint32_t *) rowCount + ofTableType: (enum mapistore_table_type) tableType { NSArray *keys; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; //[self logWithFormat: @"METHOD '%s' (%d) -- tableType: %d", //__FUNCTION__, __LINE__, tableType]; @@ -483,16 +483,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) openMessage: (MAPIStoreMessage **) messagePtr - withMID: (uint64_t) mid - forWriting: (BOOL) readWrite - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) openMessage: (MAPIStoreMessage **) messagePtr + withMID: (uint64_t) mid + forWriting: (BOOL) readWrite + inMemCtx: (TALLOC_CTX *) memCtx; { NSString *messageURL; MAPIStoreMapping *mapping; MAPIStoreMessage *message; SOGoUser *ownerUser; - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; mapping = [self mapping]; messageURL = [mapping urlFromID: mid]; @@ -523,9 +523,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) createMessage: (MAPIStoreMessage **) messagePtr - withMID: (uint64_t) mid - isAssociated: (BOOL) isAssociated +- (enum mapistore_error) createMessage: (MAPIStoreMessage **) messagePtr + withMID: (uint64_t) mid + isAssociated: (BOOL) isAssociated { enum mapistore_error rc; MAPIStoreMessage *message; @@ -570,8 +570,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) deleteMessageWithMID: (uint64_t) mid - andFlags: (uint8_t) flags +- (enum mapistore_error) deleteMessageWithMID: (uint64_t) mid + andFlags: (uint8_t) flags { NSString *childURL; MAPIStoreMapping *mapping; @@ -580,7 +580,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe NSUInteger count, max; id msgObject; SOGoUser *ownerUser; - int rc; + enum mapistore_error rc; /* flags that control the behaviour of the operation (MAPISTORE_SOFT_DELETE or MAPISTORE_PERMANENT_DELETE) */ @@ -638,15 +638,15 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe } // private method -- (int) _moveCopyMessageWithMID: (uint64_t) srcMid - fromFolder: (MAPIStoreFolder *) sourceFolder - withMID: (uint64_t) targetMid - andChangeKey: (struct Binary_r *) targetChangeKey - andPredecessorChangeList: (struct Binary_r *) targetPredecessorChangeList - wantCopy: (uint8_t) wantCopy - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _moveCopyMessageWithMID: (uint64_t) srcMid + fromFolder: (MAPIStoreFolder *) sourceFolder + withMID: (uint64_t) targetMid + andChangeKey: (struct Binary_r *) targetChangeKey + andPredecessorChangeList: (struct Binary_r *) targetPredecessorChangeList + wantCopy: (uint8_t) wantCopy + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; MAPIStoreMessage *sourceMsg, *destMsg; //TALLOC_CTX *memCtx; struct SRow aRow; @@ -695,16 +695,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) moveCopyMessagesWithMIDs: (uint64_t *) srcMids - andCount: (uint32_t) midCount - fromFolder: (MAPIStoreFolder *) sourceFolder - withMIDs: (uint64_t *) targetMids - andChangeKeys: (struct Binary_r **) targetChangeKeys - andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists - wantCopy: (uint8_t) wantCopy - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) moveCopyMessagesWithMIDs: (uint64_t *) srcMids + andCount: (uint32_t) midCount + fromFolder: (MAPIStoreFolder *) sourceFolder + withMIDs: (uint64_t *) targetMids + andChangeKeys: (struct Binary_r **) targetChangeKeys + andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists + wantCopy: (uint8_t) wantCopy + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSUInteger count; NSMutableArray *oldMessageURLs; NSString *oldMessageURL; @@ -957,13 +957,13 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe withIDs: newIDs]; } -- (int) getDeletedFMIDs: (struct UI8Array_r **) fmidsPtr - andCN: (uint64_t *) cnPtr - fromChangeNumber: (uint64_t) changeNum - inTableType: (enum mapistore_table_type) tableType - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getDeletedFMIDs: (struct UI8Array_r **) fmidsPtr + andCN: (uint64_t *) cnPtr + fromChangeNumber: (uint64_t) changeNum + inTableType: (enum mapistore_table_type) tableType + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; NSString *baseURL, *format, *url; NSArray *keys; NSNumber *cnNbr; @@ -1016,12 +1016,12 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) getTable: (MAPIStoreTable **) tablePtr - andRowCount: (uint32_t *) countPtr - tableType: (enum mapistore_table_type) tableType - andHandleId: (uint32_t) handleId +- (enum mapistore_error) getTable: (MAPIStoreTable **) tablePtr + andRowCount: (uint32_t *) countPtr + tableType: (enum mapistore_table_type) tableType + andHandleId: (uint32_t) handleId { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; MAPIStoreTable *table; SOGoUser *ownerUser; @@ -1208,16 +1208,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe // folderKeys = nil; } -- (int) getPidTagParentFolderId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagParentFolderId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, [container objectId]); return MAPISTORE_SUCCESS; } -- (int) getPidTagFolderId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFolderId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, [self objectId]); @@ -1234,8 +1234,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe 0x00000010 Create Contents Table 0x00000020 Create Associated Contents Table */ -- (int) getPidTagAccess: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccess: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t access = 0; SOGoUser *ownerUser; @@ -1263,8 +1263,8 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return MAPISTORE_SUCCESS; } -- (int) getPidTagRights: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRights: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t rights = 0; SOGoUser *ownerUser; @@ -1292,74 +1292,74 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return MAPISTORE_SUCCESS; } -- (int) getPidTagAccessControlListData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccessControlListData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[NSData data] asBinaryInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttributeHidden: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttributeHidden: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagAttributeSystem: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttributeSystem: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagAttributeReadOnly: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttributeReadOnly: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagSubfolders: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSubfolders: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [self supportsSubFolders] && [[self folderKeys] count] > 0); return MAPISTORE_SUCCESS; } -- (int) getPidTagFolderChildCount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFolderChildCount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, [[self folderKeys] count]); return MAPISTORE_SUCCESS; } -- (int) getPidTagContentCount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContentCount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, [[self messageKeys] count]); return MAPISTORE_SUCCESS; } -- (int) getPidTagContentUnreadCount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContentUnreadCount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0); return MAPISTORE_SUCCESS; } -- (int) getPidTagAssociatedContentCount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAssociatedContentCount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, [[self faiMessageKeys] count]); return MAPISTORE_SUCCESS; } -- (int) getPidTagDeletedCountTotal: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDeletedCountTotal: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* TODO */ *data = MAPILongValue (memCtx, 0); @@ -1367,10 +1367,10 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return MAPISTORE_SUCCESS; } -- (int) getPidTagLocalCommitTimeMax: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagLocalCommitTimeMax: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSDate *date; date = [self lastMessageModificationTime]; @@ -1382,18 +1382,18 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe return rc; } -- (int) getPidTagDefaultPostMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Note" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getProperties: (struct mapistore_property_data *) data - withTags: (enum MAPITAGS *) tags - andCount: (uint16_t) columnCount - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperties: (struct mapistore_property_data *) data + withTags: (enum MAPITAGS *) tags + andCount: (uint16_t) columnCount + inMemCtx: (TALLOC_CTX *) memCtx { [dbFolder reloadIfNeeded]; @@ -1403,11 +1403,11 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe inMemCtx: memCtx]; } -- (int) getProperty: (void **) data - withTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperty: (void **) data + withTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; id value; value = [properties objectForKey: MAPIPropertyKey (propTag)]; @@ -1614,9 +1614,9 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe [users release]; } -- (int) modifyPermissions: (struct PermissionData *) permissions - withCount: (uint16_t) pcount - andFlags: (int8_t) flags +- (enum mapistore_error) modifyPermissions: (struct PermissionData *) permissions + withCount: (uint16_t) pcount + andFlags: (int8_t) flags { NSUInteger count, propCount; struct PermissionData *currentPermission; diff --git a/OpenChange/MAPIStoreGCSFolder.m b/OpenChange/MAPIStoreGCSFolder.m index 336474675..c70e1f1c3 100644 --- a/OpenChange/MAPIStoreGCSFolder.m +++ b/OpenChange/MAPIStoreGCSFolder.m @@ -86,9 +86,9 @@ static Class NSNumberK; [super dealloc]; } -- (int) deleteFolder +- (enum mapistore_error) deleteFolder { - int rc; + enum mapistore_error rc; NSException *error; NSString *name; @@ -138,8 +138,8 @@ static Class NSNumberK; [sogoObject renameTo: newDisplayName]; } -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *displayName; Class cClass; diff --git a/OpenChange/MAPIStoreGCSMessage.m b/OpenChange/MAPIStoreGCSMessage.m index 58b4a9ca2..84976917e 100644 --- a/OpenChange/MAPIStoreGCSMessage.m +++ b/OpenChange/MAPIStoreGCSMessage.m @@ -54,8 +54,8 @@ return [sogoObject lastModified]; } -- (int) getPidTagAccess: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccess: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreContext *context; WOContext *woContext; @@ -91,8 +91,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAccessLevel: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccessLevel: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStoreContext *context; MAPIStoreUserContext *userContext; @@ -120,10 +120,10 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagChangeKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSData *changeKey; MAPIStoreGCSFolder *parentFolder; NSString *nameInContainer; @@ -155,10 +155,10 @@ return rc; } -- (int) getPidTagPredecessorChangeList: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPredecessorChangeList: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSData *changeList; MAPIStoreGCSFolder *parentFolder; diff --git a/OpenChange/MAPIStoreMailAttachment.m b/OpenChange/MAPIStoreMailAttachment.m index 575808f39..17520202b 100644 --- a/OpenChange/MAPIStoreMailAttachment.m +++ b/OpenChange/MAPIStoreMailAttachment.m @@ -76,24 +76,24 @@ ASSIGN (bodyPart, newBodyPart); } -- (int) getPidTagAttachMethod: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachMethod: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00000001); // afByValue return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachTag: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachTag: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self mimeAttachTag] asBinaryInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachSize: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachSize: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t longValue; @@ -103,8 +103,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagRecordKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRecordKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { static char recordBytes[] = {0xd9, 0xd8, 0x11, 0xa3, 0xe2, 0x90, 0x18, 0x41, 0x9e, 0x04, 0x58, 0x46, 0x9d, 0x6d, 0x1b, @@ -121,16 +121,16 @@ return [bodyInfo filename]; } -- (int) getPidTagAttachLongFilename: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachLongFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self _fileName] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachFilename: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachFilename: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *fileName, *baseName, *ext; @@ -149,8 +149,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *fileName; @@ -165,8 +165,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachContentId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachContentId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[bodyInfo objectForKey: @"bodyId"] asUnicodeInMemCtx: memCtx]; @@ -174,8 +174,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachMimeTag: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachMimeTag: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *mimeTag, *fileName; @@ -193,8 +193,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagAttachDataBinary: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAttachDataBinary: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[bodyPart fetchBLOBWithPeek: YES] asBinaryInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreMailFolder.m b/OpenChange/MAPIStoreMailFolder.m index 92984b684..ee2ff7d61 100644 --- a/OpenChange/MAPIStoreMailFolder.m +++ b/OpenChange/MAPIStoreMailFolder.m @@ -208,9 +208,9 @@ static Class SOGoMailFolderK, MAPIStoreMailFolderK, MAPIStoreOutboxFolderK; return rc; } -- (int) deleteFolder +- (enum mapistore_error) deleteFolder { - int rc; + enum mapistore_error rc; NSException *error; NSString *name; @@ -234,8 +234,8 @@ static Class SOGoMailFolderK, MAPIStoreMailFolderK, MAPIStoreOutboxFolderK; return (rc == MAPISTORE_SUCCESS) ? [super deleteFolder] : rc; } -- (int) getPidTagContentUnreadCount: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContentUnreadCount: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { EOQualifier *searchQualifier; uint32_t longValue; @@ -250,8 +250,8 @@ static Class SOGoMailFolderK, MAPIStoreMailFolderK, MAPIStoreOutboxFolderK; return MAPISTORE_SUCCESS; } -- (int) getPidTagContainerClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagContainerClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPF.Note" asUnicodeInMemCtx: memCtx]; @@ -1363,15 +1363,14 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP) // Move (or eventually copy) the mails identified by // "srcMids" from the source folder into this folder. // -- (int) moveCopyMessagesWithMIDs: (uint64_t *) srcMids - andCount: (uint32_t) midCount - fromFolder: (MAPIStoreFolder *) sourceFolder - withMIDs: (uint64_t *) targetMids - andChangeKeys: (struct Binary_r **) targetChangeKeys - andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists - wantCopy: (uint8_t) wantCopy - inMemCtx: (TALLOC_CTX *) memCtx - +- (enum mapistore_error) moveCopyMessagesWithMIDs: (uint64_t *) srcMids + andCount: (uint32_t) midCount + fromFolder: (MAPIStoreFolder *) sourceFolder + withMIDs: (uint64_t *) targetMids + andChangeKeys: (struct Binary_r **) targetChangeKeys + andPredecessorChangeLists: (struct Binary_r **) targetPredecessorChangeLists + wantCopy: (uint8_t) wantCopy + inMemCtx: (TALLOC_CTX *) memCtx { NGImap4Connection *connection; NGImap4Client *client; @@ -1767,8 +1766,8 @@ _parseCOPYUID (NSString *line, NSArray **destUIDsP) @implementation MAPIStoreOutboxFolder -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"Outbox" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreMailMessage.h b/OpenChange/MAPIStoreMailMessage.h index 735861ff3..e12a4e9d7 100644 --- a/OpenChange/MAPIStoreMailMessage.h +++ b/OpenChange/MAPIStoreMailMessage.h @@ -57,27 +57,27 @@ - (NSString *) subject; -- (int) getPidTagIconIndex: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagFlagStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagIconIndex: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagFlagStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagMessageFlags: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagFollowupIcon: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagReceivedByEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSenderEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagDisplayTo: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagDisplayCc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagDisplayBcc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagMessageFlags: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagFollowupIcon: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagReceivedByEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagDisplayTo: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagDisplayCc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagDisplayBcc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; /* batch-mode helpers */ - (void) setBodyContentFromRawData: (NSArray *) rawContent; diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 7af79b110..451e171c8 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -482,10 +482,10 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return appointmentWrapper; } -- (int) getPidTagChangeKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSData *changeKey; MAPIStoreMailFolder *parentFolder; NSString *nameInContainer; @@ -518,10 +518,10 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -- (int) getPidTagPredecessorChangeList: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPredecessorChangeList: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSData *changeList; if (isNew) @@ -597,8 +597,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return version; } -- (int) getPidTagIconIndex: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t longValue; @@ -626,16 +626,16 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidLidResponseStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidResponseStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0); return MAPISTORE_SUCCESS; } -- (int) getPidLidImapDeleted: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidImapDeleted: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t longValue; @@ -648,8 +648,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagSubjectPrefix: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSubjectPrefix: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *subject; NSUInteger colIdx; @@ -670,8 +670,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagNormalizedSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue, *subject; NSUInteger quoteStartIdx, quoteEndIdx, colIdx; @@ -719,14 +719,14 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidLidFInvited: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidFInvited: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -742,8 +742,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagReplyRequested: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReplyRequested: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -753,38 +753,38 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidTagResponseRequested: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagResponseRequested: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagReplyRequested: data inMemCtx: memCtx]; } -- (int) getPidTagLatestDeliveryTime: (void **) data // DOUBT - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagLatestDeliveryTime: (void **) data // DOUBT + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagCreationTime: data inMemCtx: memCtx]; } -- (int) getPidTagOriginalSubmitTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalSubmitTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagCreationTime: data inMemCtx: memCtx]; } -- (int) getPidTagClientSubmitTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagClientSubmitTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagCreationTime: data inMemCtx: memCtx]; } -- (int) getPidTagMessageDeliveryTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageDeliveryTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagCreationTime: data inMemCtx: memCtx]; } -- (int) getPidTagMessageFlags: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageFlags: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { NSDictionary *coreInfos; NSArray *flags; @@ -807,8 +807,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagFlagStatus: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFlagStatus: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSDictionary *coreInfos; NSArray *flags; @@ -827,8 +827,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagFollowupIcon: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFollowupIcon: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSDictionary *coreInfos; NSArray *flags; @@ -847,45 +847,45 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagSensitivity: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagOriginalSensitivity: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalSensitivity: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSensitivity: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedRepresentingAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedRepresentingAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedByAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) getPidTagSenderAddressType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderAddressType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getSMTPAddrType: data inMemCtx: memCtx]; } -- (int) _getEmailAddressFromEmail: (NSString *) fullMail - inData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getEmailAddressFromEmail: (NSString *) fullMail + inData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NGMailAddress *ngAddress; NSString *email; @@ -905,9 +905,9 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) _getCNFromEmail: (NSString *) fullMail - inData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getCNFromEmail: (NSString *) fullMail + inData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NGMailAddress *ngAddress; NSString *cn; @@ -935,16 +935,16 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) _getEntryIdFromEmail: (NSString *) fullMail - inData: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) _getEntryIdFromEmail: (NSString *) fullMail + inData: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *username, *cn, *email; SOGoUserManager *mgr; NSDictionary *contactInfos; NGMailAddress *ngAddress; NSData *entryId; - int rc; + enum mapistore_error rc; if (fullMail) { @@ -981,111 +981,111 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -- (int) getPidTagSenderEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEmailAddressFromEmail: [sogoObject from] inData: data inMemCtx: memCtx]; } -- (int) getPidTagSenderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getCNFromEmail: [sogoObject from] inData: data inMemCtx: memCtx]; } -- (int) getPidTagSenderEntryId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSenderEntryId: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEntryIdFromEmail: [sogoObject from] inData: data inMemCtx: memCtx]; } -- (int) getPidTagOriginalAuthorName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalAuthorName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderEmailAddress: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderName: data inMemCtx: memCtx]; } -- (int) getPidTagSentRepresentingEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSentRepresentingEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSenderEntryId: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedByEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEmailAddressFromEmail: [sogoObject to] inData: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedByName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getCNFromEmail: [sogoObject to] inData: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedByEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedByEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getEntryIdFromEmail: [sogoObject to] inData: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedRepresentingName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedRepresentingName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagReceivedByName: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedRepresentingEmailAddress: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedRepresentingEmailAddress: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagReceivedByEmailAddress: data inMemCtx: memCtx]; } -- (int) getPidTagReceivedRepresentingEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReceivedRepresentingEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagReceivedByEntryId: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayTo: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayTo: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[sogoObject to] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagOriginalDisplayTo: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalDisplayTo: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagDisplayTo: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayCc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayCc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -1098,34 +1098,34 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagOriginalDisplayCc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalDisplayCc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagDisplayCc: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayBcc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayBcc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getEmptyString: data inMemCtx: memCtx]; } -- (int) getPidTagOriginalDisplayBcc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalDisplayBcc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagDisplayBcc: data inMemCtx: memCtx]; } -- (int) getPidNameContentType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameContentType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"message/rfc822" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t v; NSString *s; @@ -1143,8 +1143,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagInternetCodepage: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInternetCodepage: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSNumber *codepage; @@ -1161,11 +1161,11 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidTagBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBody: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSData *textContent; - int rc; + enum mapistore_error rc; if (!bodySetup) [self _fetchBodyData]; @@ -1200,11 +1200,11 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -- (int) getPidTagHtml: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHtml: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSData *htmlContent; - int rc; + enum mapistore_error rc; if (!bodySetup) [self _fetchBodyData]; @@ -1231,36 +1231,36 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -- (int) getPidTagRtfCompressed: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRtfCompressed: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = NULL; return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagRtfInSync: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRtfInSync: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagInternetMessageId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInternetMessageId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[sogoObject messageId] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagReadReceiptRequested: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagReadReceiptRequested: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1271,8 +1271,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidCleanGlobalObjectId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCleanGlobalObjectId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1283,7 +1283,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidServerProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidServerProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1294,7 +1294,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidServerProcessingActions: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidServerProcessingActions: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1305,9 +1305,9 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagProcessed: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; if (!headerSetup) [self _fetchHeaderData]; @@ -1320,7 +1320,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -// - (int) getPidLidServerProcessed: (void **) data +// - (enum mapistore_error) getPidLidServerProcessed: (void **) data // inMemCtx: (TALLOC_CTX *) memCtx // { // if (!headerSetup) @@ -1332,8 +1332,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) // : MAPISTORE_ERR_NOT_FOUND); // } -- (int) getPidLidPrivate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPrivate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1344,8 +1344,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : [self getNo: data inMemCtx: memCtx]); } -- (int) getPidTagMessageEditorFormat: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageEditorFormat: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t format; @@ -1364,33 +1364,33 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return MAPISTORE_SUCCESS; } -- (int) getPidLidReminderSet: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidReminderSet: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidUseTnef: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidUseTnef: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidRemoteStatus: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidRemoteStatus: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidLidAgingDontAgeMe: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAgingDontAgeMe: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } /* event getters */ -- (int) getPidTagStartDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagStartDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1400,10 +1400,10 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidAppointmentMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; if (!headerSetup) [self _fetchHeaderData]; @@ -1416,8 +1416,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) return rc; } -- (int) getPidLidAppointmentStartWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentStartWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1428,8 +1428,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidCommonStart: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCommonStart: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1440,8 +1440,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidTagEndDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagEndDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1451,8 +1451,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidAppointmentEndWhole: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentEndWhole: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1463,8 +1463,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidCommonEnd: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCommonEnd: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1475,8 +1475,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidAppointmentDuration: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentDuration: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1487,8 +1487,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidAppointmentSubType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentSubType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1499,8 +1499,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidBusyStatus: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidBusyStatus: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1511,8 +1511,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidLocation: (void **) data // LOCATION - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidLocation: (void **) data // LOCATION + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1523,8 +1523,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidIsRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidIsRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1535,8 +1535,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1547,8 +1547,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidAppointmentRecur: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAppointmentRecur: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1559,8 +1559,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidTagOwnerAppointmentId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOwnerAppointmentId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1571,8 +1571,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidLidMeetingType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidMeetingType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { if (!headerSetup) [self _fetchHeaderData]; @@ -1583,8 +1583,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) : MAPISTORE_ERR_NOT_FOUND); } -- (int) getPidTagTransportMessageHeaders: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagTransportMessageHeaders: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSDictionary *mailHeaders; NSEnumerator *keyEnumerator; diff --git a/OpenChange/MAPIStoreMailMessageTable.m b/OpenChange/MAPIStoreMailMessageTable.m index d315f6527..2375ca39b 100644 --- a/OpenChange/MAPIStoreMailMessageTable.m +++ b/OpenChange/MAPIStoreMailMessageTable.m @@ -340,10 +340,10 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK; [self cleanupCaches]; } -- (int) getRow: (struct mapistore_property_data **) dataP - withRowID: (uint32_t) rowId - andQueryType: (enum mapistore_query_type) queryType - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getRow: (struct mapistore_property_data **) dataP + withRowID: (uint32_t) rowId + andQueryType: (enum mapistore_query_type) queryType + inMemCtx: (TALLOC_CTX *) memCtx { if (!fetchedCoreInfos) { @@ -352,8 +352,8 @@ static Class MAPIStoreMailMessageK, NSDataK, NSStringK; prefetchCoreInfosForMessageKeys: [self restrictedChildKeys]]; } - return [super getRow: dataP withRowID: rowId - andQueryType: queryType inMemCtx: memCtx]; + return [super getRow: dataP withRowID: rowId + andQueryType: queryType inMemCtx: memCtx]; } @end diff --git a/OpenChange/MAPIStoreMailVolatileMessage.h b/OpenChange/MAPIStoreMailVolatileMessage.h index 212226abf..417faeff6 100644 --- a/OpenChange/MAPIStoreMailVolatileMessage.h +++ b/OpenChange/MAPIStoreMailVolatileMessage.h @@ -27,7 +27,7 @@ @interface MAPIStoreMailVolatileMessage : MAPIStoreMessage -- (int) submitWithFlags: (enum SubmitFlags) flags; +- (enum mapistore_error) submitWithFlags: (enum SubmitFlags) flags; @end diff --git a/OpenChange/MAPIStoreMailVolatileMessage.m b/OpenChange/MAPIStoreMailVolatileMessage.m index 1db930ef8..36c3179e7 100644 --- a/OpenChange/MAPIStoreMailVolatileMessage.m +++ b/OpenChange/MAPIStoreMailVolatileMessage.m @@ -290,17 +290,17 @@ static NSString *recTypes[] = { @"orig", @"to", @"cc", @"bcc" }; : ULLONG_MAX); } -- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Note" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { NSData *changeKey; - int rc; + enum mapistore_error rc; changeKey = [properties objectForKey: MAPIPropertyKey (PR_CHANGE_KEY)]; if (changeKey) @@ -1051,7 +1051,7 @@ MakeMessageBody (NSDictionary *mailProperties, NSDictionary *attachmentParts, NS return messageData; } -- (int) submitWithFlags: (enum SubmitFlags) flags +- (enum mapistore_error) submitWithFlags: (enum SubmitFlags) flags { enum mapistore_error rc = MAPISTORE_SUCCESS; NSDictionary *recipients; diff --git a/OpenChange/MAPIStoreMessage.h b/OpenChange/MAPIStoreMessage.h index f914e543a..fd89bb027 100644 --- a/OpenChange/MAPIStoreMessage.h +++ b/OpenChange/MAPIStoreMessage.h @@ -48,21 +48,21 @@ - (void) getMessageData: (struct mapistore_message **) dataPtr inMemCtx: (TALLOC_CTX *) memCtx; -- (int) modifyRecipientsWithRecipients: (struct mapistore_message_recipient *) recipients - andCount: (NSUInteger) max - andColumns: (struct SPropTagArray *) columns; +- (enum mapistore_error) modifyRecipientsWithRecipients: (struct mapistore_message_recipient *) recipients + andCount: (NSUInteger) max + andColumns: (struct SPropTagArray *) columns; - (NSArray *) attachmentKeys; - (NSArray *) attachmentKeysMatchingQualifier: (EOQualifier *) qualifier andSortOrderings: (NSArray *) sortOrderings; - (id) lookupAttachment: (NSString *) childKey; /* backend methods */ -- (int) createAttachment: (MAPIStoreAttachment **) attachmentPtr - inAID: (uint32_t *) aidPtr; -- (int) getAttachment: (MAPIStoreAttachment **) attachmentPtr - withAID: (uint32_t) aid; -- (int) getAttachmentTable: (MAPIStoreAttachmentTable **) tablePtr - andRowCount: (uint32_t *) countPtr; +- (enum mapistore_error) createAttachment: (MAPIStoreAttachment **) attachmentPtr + inAID: (uint32_t *) aidPtr; +- (enum mapistore_error) getAttachment: (MAPIStoreAttachment **) attachmentPtr + withAID: (uint32_t) aid; +- (enum mapistore_error) getAttachmentTable: (MAPIStoreAttachmentTable **) tablePtr + andRowCount: (uint32_t *) countPtr; - (enum mapistore_error) setReadFlag: (uint8_t) flag; - (enum mapistore_error) saveMessage: (TALLOC_CTX *) memCtx; diff --git a/OpenChange/MAPIStoreMessage.m b/OpenChange/MAPIStoreMessage.m index e6bda4578..d3ba9aae7 100644 --- a/OpenChange/MAPIStoreMessage.m +++ b/OpenChange/MAPIStoreMessage.m @@ -276,9 +276,9 @@ rtf2html (NSData *compressedRTF) return recipientProperties; } -- (int) modifyRecipientsWithRecipients: (struct mapistore_message_recipient *) newRecipients - andCount: (NSUInteger) max - andColumns: (struct SPropTagArray *) columns; +- (enum mapistore_error) modifyRecipientsWithRecipients: (struct mapistore_message_recipient *) newRecipients + andCount: (NSUInteger) max + andColumns: (struct SPropTagArray *) columns; { static NSString *recTypes[] = { @"orig", @"to", @"cc", @"bcc" }; NSDictionary *recipientProperties; @@ -318,7 +318,7 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) addPropertiesFromRow: (struct SRow *) aRow +- (enum mapistore_error) addPropertiesFromRow: (struct SRow *) aRow { enum mapistore_error rc; MAPIStoreContext *context; @@ -397,11 +397,11 @@ rtf2html (NSData *compressedRTF) return newAttachment; } -- (int) createAttachment: (MAPIStoreAttachment **) attachmentPtr - inAID: (uint32_t *) aidPtr +- (enum mapistore_error) createAttachment: (MAPIStoreAttachment **) attachmentPtr + inAID: (uint32_t *) aidPtr { MAPIStoreAttachment *attachment; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; attachment = [self createAttachment]; if (attachment) @@ -422,12 +422,12 @@ rtf2html (NSData *compressedRTF) return nil; } -- (int) getAttachment: (MAPIStoreAttachment **) attachmentPtr - withAID: (uint32_t) aid +- (enum mapistore_error) getAttachment: (MAPIStoreAttachment **) attachmentPtr + withAID: (uint32_t) aid { MAPIStoreAttachment *attachment; NSArray *keys; - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; keys = [self attachmentKeys]; if (aid < [keys count]) @@ -443,11 +443,11 @@ rtf2html (NSData *compressedRTF) return rc; } -- (int) getAttachmentTable: (MAPIStoreAttachmentTable **) tablePtr - andRowCount: (uint32_t *) countPtr +- (enum mapistore_error) getAttachmentTable: (MAPIStoreAttachmentTable **) tablePtr + andRowCount: (uint32_t *) countPtr { MAPIStoreAttachmentTable *attTable; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; attTable = [self attachmentTable]; if (attTable) @@ -582,8 +582,8 @@ rtf2html (NSData *compressedRTF) } /* getters */ -- (int) getPidTagInstID: (void **) data // TODO: DOUBT - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInstID: (void **) data // TODO: DOUBT + inMemCtx: (TALLOC_CTX *) memCtx { /* we return a unique id based on the key */ *data = MAPILongLongValue (memCtx, [[sogoObject nameInContainer] hash]); @@ -591,22 +591,22 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) getPidTagInstanceNum: (void **) data // TODO: DOUBT - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagInstanceNum: (void **) data // TODO: DOUBT + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagRowType: (void **) data // TODO: DOUBT - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagRowType: (void **) data // TODO: DOUBT + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, TBL_LEAF_ROW); return MAPISTORE_SUCCESS; } -- (int) getPidTagDepth: (void **) data // TODO: DOUBT - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDepth: (void **) data // TODO: DOUBT + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, 0); @@ -623,8 +623,8 @@ rtf2html (NSData *compressedRTF) 0x00000010 Create Contents Table 0x00000020 Create Associated Contents Table */ -- (int) getPidTagAccess: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccess: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t access = 0; BOOL userIsOwner; @@ -664,8 +664,8 @@ rtf2html (NSData *compressedRTF) 0x00000000 Read-Only 0x00000001 Modify */ -- (int) getPidTagAccessLevel: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAccessLevel: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t access = 0; BOOL userIsOwner; @@ -684,20 +684,20 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int ) getPidTagHasNamedProperties: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHasNamedProperties: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidLidSideEffects: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSideEffects: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidLidCurrentVersion: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCurrentVersion: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { // *data = MAPILongValue (memCtx, 115608); // Outlook 11.5608 *data = MAPILongValue (memCtx, 0x1ce3a); // Outlook 11.8330 @@ -705,34 +705,34 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) getPidLidCurrentVersionName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidCurrentVersionName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"11.0" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidLidAutoProcessState: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidAutoProcessState: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x00000000); return MAPISTORE_SUCCESS; } -- (int) getPidTagFolderId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagFolderId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, [container objectId]); return MAPISTORE_SUCCESS; } -- (int) getPidTagMid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; uint64_t obId; obId = [self objectId]; @@ -747,24 +747,24 @@ rtf2html (NSData *compressedRTF) return rc; } -- (int) getPidTagMessageLocaleId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageLocaleId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x0409); return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageFlags: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageFlags: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, MSGFLAG_FROMME | MSGFLAG_READ | MSGFLAG_UNMODIFIED); return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageSize: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageSize: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { /* TODO: choose another name in SOGo for that method */ *data = MAPILongValue (memCtx, [[sogoObject davContentLength] intValue]); @@ -772,30 +772,30 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) getPidTagImportance: (void **) data // TODO -> subclass? - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagImportance: (void **) data // TODO -> subclass? + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 1); return MAPISTORE_SUCCESS; } -- (int) getPidTagPriority: (void **) data // TODO -> subclass? - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagPriority: (void **) data // TODO -> subclass? + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagSensitivity: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSensitivity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; TALLOC_CTX *localMemCtx; char *prefix, *normalizedSubject; @@ -816,71 +816,71 @@ rtf2html (NSData *compressedRTF) return rc; } -- (int) getPidTagNormalizedSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagOriginalSubject: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalSubject: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagSubject: data inMemCtx: memCtx]; } -- (int) getPidTagConversationTopic: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagConversationTopic: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagNormalizedSubject: data inMemCtx: memCtx]; } -- (int) getPidTagSubjectPrefix: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSubjectPrefix: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getEmptyString: data inMemCtx: memCtx]; } -- (int) getPidTagDeleteAfterSubmit: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDeleteAfterSubmit: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayTo: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayTo: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getEmptyString: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayCc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayCc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getEmptyString: data inMemCtx: memCtx]; } -- (int) getPidTagDisplayBcc: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayBcc: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getEmptyString: data inMemCtx: memCtx]; } -// - (int) getPidTagOriginalDisplayTo: (void **) data +// - (enum mapistore_error) getPidTagOriginalDisplayTo: (void **) data // { // return [self getPidTagDisplayTo: data]; // } -// - (int) getPidTagOriginalDisplayCc: (void **) data +// - (enum mapistore_error) getPidTagOriginalDisplayCc: (void **) data // { // return [self getPidTagDisplayCc: data]; // } -// - (int) getPidTagOriginalDisplayBcc: (void **) data +// - (enum mapistore_error) getPidTagOriginalDisplayBcc: (void **) data // { // return [self getPidTagDisplayBcc: data]; // } -- (int) getPidTagLastModifierName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagLastModifierName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSURL *contextUrl; @@ -890,22 +890,22 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { [self subclassResponsibility: _cmd]; return MAPISTORE_ERR_NOT_FOUND; } -- (int) getPidTagOriginalMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagOriginalMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getProperty: data withTag: PidTagMessageClass inMemCtx: memCtx]; } -- (int) getPidTagHasAttachments: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHasAttachments: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, [[self attachmentKeys] count] > 0); @@ -913,8 +913,8 @@ rtf2html (NSData *compressedRTF) return MAPISTORE_SUCCESS; } -- (int) getPidTagAssociated: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagAssociated: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx];; } diff --git a/OpenChange/MAPIStoreNotesFolder.m b/OpenChange/MAPIStoreNotesFolder.m index ae2652d88..c3c1c4777 100644 --- a/OpenChange/MAPIStoreNotesFolder.m +++ b/OpenChange/MAPIStoreNotesFolder.m @@ -30,8 +30,8 @@ @implementation MAPIStoreNotesFolder -- (int) getPidTagDefaultPostMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.StickyNote" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreNotesMessage.m b/OpenChange/MAPIStoreNotesMessage.m index 52712277b..f594b6c27 100644 --- a/OpenChange/MAPIStoreNotesMessage.m +++ b/OpenChange/MAPIStoreNotesMessage.m @@ -32,8 +32,8 @@ @implementation MAPIStoreNotesMessage -- (int) getPidTagIconIndex: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { /* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */ // *longValue = 0x00000300 for blue @@ -46,7 +46,7 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.StickyNote" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreObject.h b/OpenChange/MAPIStoreObject.h index c5a466ac3..abf126658 100644 --- a/OpenChange/MAPIStoreObject.h +++ b/OpenChange/MAPIStoreObject.h @@ -68,27 +68,27 @@ - (NSMutableDictionary *) properties; /* ops */ -- (int) getProperties: (struct mapistore_property_data *) data - withTags: (enum MAPITAGS *) tags - andCount: (uint16_t) columnCount - inMemCtx: (TALLOC_CTX *) localMemCtx; +- (enum mapistore_error) getProperties: (struct mapistore_property_data *) data + withTags: (enum MAPITAGS *) tags + andCount: (uint16_t) columnCount + inMemCtx: (TALLOC_CTX *) localMemCtx; -- (int) addPropertiesFromRow: (struct SRow *) aRow; +- (enum mapistore_error) addPropertiesFromRow: (struct SRow *) aRow; -- (int) getProperty: (void **) data - withTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) localMemCtx; +- (enum mapistore_error) getProperty: (void **) data + withTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) localMemCtx; /* helper getters */ - (NSData *) getReplicaKeyFromGlobCnt: (uint64_t) objectCnt; -- (int) getReplicaKey: (void **) data - fromGlobCnt: (uint64_t) objectCnt - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getReplicaKey: (void **) data + fromGlobCnt: (uint64_t) objectCnt + inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagCreationTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagLastModificationTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagCreationTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagLastModificationTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; /* move and copy operations */ - (void) copyPropertiesToObject: (MAPIStoreObject *) newObject inMemCtx: (TALLOC_CTX *) memCtx; diff --git a/OpenChange/MAPIStoreObject.m b/OpenChange/MAPIStoreObject.m index ecb00dba3..c5c8cacb2 100644 --- a/OpenChange/MAPIStoreObject.m +++ b/OpenChange/MAPIStoreObject.m @@ -150,15 +150,15 @@ static Class NSExceptionK, MAPIStoreFolderK; return properties; } -- (int) getProperty: (void **) data - withTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperty: (void **) data + withTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) memCtx { MAPIStorePropertyGetter method = NULL; uint16_t propValue; SEL methodSel; id value; - int rc = MAPISTORE_ERR_NOT_FOUND; + enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; NSUInteger count, max; value = [properties objectForKey: MAPIPropertyKey (propTag)]; @@ -186,16 +186,16 @@ static Class NSExceptionK, MAPIStoreFolderK; return rc; } -- (int) getPidTagCreationTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagCreationTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self creationTime] asFileTimeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagLastModificationTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagLastModificationTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self lastModificationTime] asFileTimeInMemCtx: memCtx]; @@ -219,10 +219,10 @@ static Class NSExceptionK, MAPIStoreFolderK; return canGetProperty; } -- (int) getProperties: (struct mapistore_property_data *) data - withTags: (enum MAPITAGS *) tags - andCount: (uint16_t) columnCount - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getProperties: (struct mapistore_property_data *) data + withTags: (enum MAPITAGS *) tags + andCount: (uint16_t) columnCount + inMemCtx: (TALLOC_CTX *) memCtx { uint16_t count; @@ -239,7 +239,7 @@ static Class NSExceptionK, MAPIStoreFolderK; [proxies addObject: newProxy]; } -- (int) addPropertiesFromRow: (struct SRow *) aRow +- (enum mapistore_error) addPropertiesFromRow: (struct SRow *) aRow { struct SPropValue *cValue; NSUInteger counter; @@ -298,9 +298,9 @@ static Class NSExceptionK, MAPIStoreFolderK; return replicaKey; } -- (int) getReplicaKey: (void **) data - fromGlobCnt: (uint64_t) objectCnt - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getReplicaKey: (void **) data + fromGlobCnt: (uint64_t) objectCnt + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[self getReplicaKeyFromGlobCnt: objectCnt] asBinaryInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreObjectProxy.m b/OpenChange/MAPIStoreObjectProxy.m index 945d16167..1fc6157e6 100644 --- a/OpenChange/MAPIStoreObjectProxy.m +++ b/OpenChange/MAPIStoreObjectProxy.m @@ -51,7 +51,7 @@ MAPIStorePropertyGetter method; uint16_t propValue; SEL methodSel; - int rc; + enum mapistore_error rc; propValue = (propTag & 0xffff0000) >> 16; methodSel = MAPIStoreSelectorForPropertyGetter (propValue); diff --git a/OpenChange/MAPIStorePermissionsTable.m b/OpenChange/MAPIStorePermissionsTable.m index 76896836f..193ef9a77 100644 --- a/OpenChange/MAPIStorePermissionsTable.m +++ b/OpenChange/MAPIStorePermissionsTable.m @@ -84,16 +84,16 @@ return memberId; } -- (int) getPidTagMemberId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMemberId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongLongValue (memCtx, memberId); return MAPISTORE_SUCCESS; } -- (int) getPidTagEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSData *entryId; struct mapistore_connection_info *connInfo; @@ -110,8 +110,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMemberName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMemberName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *displayName; @@ -127,8 +127,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMemberRights: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMemberRights: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t rights; NSArray *roles; diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 14fd11c49..41c8bf42a 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -256,7 +256,7 @@ sogo_backend_create_context(TALLOC_CTX *mem_ctx, { NSAutoreleasePool *pool; MAPIStoreContext *context; - int rc; + enum mapistore_error rc; NS_CURRENT_THREAD_REGISTER(); pool = [NSAutoreleasePool new]; @@ -291,7 +291,7 @@ sogo_backend_create_root_folder (const char *username, NSAutoreleasePool *pool; NSString *userName, *folderName; NSString *mapistoreUri; - int rc; + enum mapistore_error rc; NS_CURRENT_THREAD_REGISTER(); pool = [NSAutoreleasePool new]; @@ -326,7 +326,7 @@ sogo_backend_list_contexts(const char *username, struct indexing_context *indexi { NSAutoreleasePool *pool; NSString *userName; - int rc; + enum mapistore_error rc; NS_CURRENT_THREAD_REGISTER(); pool = [NSAutoreleasePool new]; @@ -372,7 +372,7 @@ sogo_context_get_path(void *backend_object, TALLOC_CTX *mem_ctx, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreContext *context; - int rc; + enum mapistore_error rc; if (backend_object) { @@ -404,7 +404,7 @@ sogo_context_get_root_folder(void *backend_object, TALLOC_CTX *mem_ctx, NSAutoreleasePool *pool; MAPIStoreContext *context; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (backend_object) { @@ -445,7 +445,7 @@ sogo_folder_open_folder(void *folder_object, TALLOC_CTX *mem_ctx, uint64_t fid, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder, *childFolder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -487,7 +487,7 @@ sogo_folder_create_folder(void *folder_object, TALLOC_CTX *mem_ctx, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder, *childFolder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -528,7 +528,7 @@ sogo_folder_delete(void *folder_object) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -558,7 +558,7 @@ sogo_folder_get_child_count(void *folder_object, enum mapistore_table_type table struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -592,7 +592,7 @@ sogo_folder_open_message(void *folder_object, NSAutoreleasePool *pool; MAPIStoreFolder *folder; MAPIStoreMessage *message; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -632,7 +632,7 @@ sogo_folder_create_message(void *folder_object, NSAutoreleasePool *pool; MAPIStoreFolder *folder; MAPIStoreMessage *message; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -666,7 +666,7 @@ sogo_folder_delete_message(void *folder_object, uint64_t mid, uint8_t flags) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -703,7 +703,7 @@ sogo_folder_move_copy_messages(void *folder_object, MAPIStoreFolder *sourceFolder, *targetFolder; NSAutoreleasePool *pool; struct MAPIStoreTallocWrapper *wrapper; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -746,7 +746,7 @@ sogo_folder_move_folder(void *folder_object, void *target_folder_object, MAPIStoreFolder *moveFolder, *targetFolder; NSString *newFolderName; struct MAPIStoreTallocWrapper *wrapper; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -794,7 +794,7 @@ sogo_folder_copy_folder(void *folder_object, void *target_folder_object, TALLOC_ MAPIStoreFolder *copyFolder, *targetFolder; NSString *newFolderName; struct MAPIStoreTallocWrapper *wrapper; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -836,7 +836,7 @@ sogo_folder_get_deleted_fmids(void *folder_object, TALLOC_CTX *mem_ctx, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -873,7 +873,7 @@ sogo_folder_open_table(void *folder_object, TALLOC_CTX *mem_ctx, NSAutoreleasePool *pool; MAPIStoreFolder *folder; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -910,7 +910,7 @@ sogo_folder_modify_permissions(void *folder_object, uint8_t flags, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -942,7 +942,7 @@ sogo_folder_preload_message_bodies(void *folder_object, enum mapistore_table_typ struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreFolder *folder; - int rc; + enum mapistore_error rc; if (folder_object) { @@ -975,7 +975,7 @@ sogo_message_get_message_data(void *message_object, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreMessage *message; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1008,7 +1008,7 @@ sogo_message_create_attachment (void *message_object, TALLOC_CTX *mem_ctx, void NSAutoreleasePool *pool; MAPIStoreMessage *message; MAPIStoreAttachment *attachment; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1042,7 +1042,7 @@ sogo_message_open_attachment (void *message_object, TALLOC_CTX *mem_ctx, NSAutoreleasePool *pool; MAPIStoreMessage *message; MAPIStoreAttachment *attachment; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1075,7 +1075,7 @@ sogo_message_get_attachment_table (void *message_object, TALLOC_CTX *mem_ctx, vo NSAutoreleasePool *pool; MAPIStoreMessage *message; MAPIStoreAttachmentTable *table; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1111,7 +1111,7 @@ sogo_message_modify_recipients (void *message_object, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreMessage *message; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1173,7 +1173,7 @@ sogo_message_save (void *message_object, TALLOC_CTX *mem_ctx) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreMessage *message; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1203,7 +1203,7 @@ sogo_message_submit (void *message_object, enum SubmitFlags flags) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreMailVolatileMessage *message; - int rc; + enum mapistore_error rc; if (message_object) { @@ -1238,7 +1238,7 @@ sogo_message_attachment_open_embedded_message (void *attachment_object, NSAutoreleasePool *pool; MAPIStoreAttachment *attachment; MAPIStoreEmbeddedMessage *message; - int rc; + enum mapistore_error rc; if (attachment_object) { @@ -1277,7 +1277,7 @@ sogo_message_attachment_create_embedded_message (void *attachment_object, NSAutoreleasePool *pool; MAPIStoreAttachment *attachment; MAPIStoreEmbeddedMessage *message; - int rc; + enum mapistore_error rc; if (attachment_object) { @@ -1311,7 +1311,7 @@ static enum mapistore_error sogo_table_get_available_properties(void *table_obje struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1341,7 +1341,7 @@ sogo_table_set_columns (void *table_object, uint16_t count, enum MAPITAGS *prope struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1372,7 +1372,7 @@ sogo_table_set_restrictions (void *table_object, struct mapi_SRestriction *restr struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1405,7 +1405,7 @@ sogo_table_set_sort_order (void *table_object, struct SSortOrderSet *sort_order, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1440,7 +1440,7 @@ sogo_table_get_row (void *table_object, TALLOC_CTX *mem_ctx, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1473,7 +1473,7 @@ sogo_table_get_row_count (void *table_object, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1504,7 +1504,7 @@ sogo_table_handle_destructor (void *table_object, uint32_t handle_id) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreTable *table; - int rc; + enum mapistore_error rc; if (table_object) { @@ -1536,7 +1536,7 @@ static enum mapistore_error sogo_properties_get_available_properties(void *objec struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreObject *propObject; - int rc; + enum mapistore_error rc; if (object) { @@ -1569,7 +1569,7 @@ sogo_properties_get_properties (void *object, struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreObject *propObject; - int rc; + enum mapistore_error rc; if (object) { @@ -1601,7 +1601,7 @@ sogo_properties_set_properties (void *object, struct SRow *aRow) struct MAPIStoreTallocWrapper *wrapper; NSAutoreleasePool *pool; MAPIStoreObject *propObject; - int rc; + enum mapistore_error rc; if (object) { @@ -1679,10 +1679,10 @@ sogo_manager_generate_uri (TALLOC_CTX *mem_ctx, \return MAPISTORE_SUCCESS on success, otherwise MAPISTORE error */ -int mapistore_init_backend(void) +enum mapistore_error mapistore_init_backend(void) { struct mapistore_backend backend; - int ret; + enum mapistore_error ret; static BOOL registered = NO; if (registered) diff --git a/OpenChange/MAPIStoreSOGoObject.h b/OpenChange/MAPIStoreSOGoObject.h index 411736718..dc9748371 100644 --- a/OpenChange/MAPIStoreSOGoObject.h +++ b/OpenChange/MAPIStoreSOGoObject.h @@ -65,18 +65,18 @@ - (uint64_t) objectId; /* implemented getters */ -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSearchKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagGenerateExchangeViews: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagParentSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTagChangeKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSearchKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagGenerateExchangeViews: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagParentSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTagChangeKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; /* subclasses */ - (uint64_t) objectVersion; diff --git a/OpenChange/MAPIStoreSOGoObject.m b/OpenChange/MAPIStoreSOGoObject.m index 7f1cc4b6a..497ee5116 100644 --- a/OpenChange/MAPIStoreSOGoObject.m +++ b/OpenChange/MAPIStoreSOGoObject.m @@ -136,16 +136,16 @@ static Class MAPIStoreFolderK; } /* getters */ -- (int) getPidTagDisplayName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagDisplayName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [[sogoObject displayName] asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidTagSearchKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSearchKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *stringValue; @@ -156,31 +156,31 @@ static Class MAPIStoreFolderK; return MAPISTORE_SUCCESS; } -- (int) getPidTagGenerateExchangeViews: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagGenerateExchangeViews: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidTagParentSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagParentSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getReplicaKey: data fromGlobCnt: [container objectId] >> 16 inMemCtx: memCtx]; } -- (int) getPidTagSourceKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagSourceKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getReplicaKey: data fromGlobCnt: [self objectId] >> 16 inMemCtx: memCtx]; } /* helper getters */ -- (int) getPidTagChangeKey: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeKey: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; uint64_t obVersion; obVersion = [self objectVersion]; @@ -193,10 +193,10 @@ static Class MAPIStoreFolderK; return rc; } -- (int) getPidTagChangeNumber: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagChangeNumber: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc; + enum mapistore_error rc; struct mapistore_connection_info *connInfo; uint64_t obVersion; diff --git a/OpenChange/MAPIStoreSharingMessage.h b/OpenChange/MAPIStoreSharingMessage.h index 7db7f552f..101a64d6d 100644 --- a/OpenChange/MAPIStoreSharingMessage.h +++ b/OpenChange/MAPIStoreSharingMessage.h @@ -1,6 +1,6 @@ /* MAPIStoreSharingMessage.h - this file is part of SOGo-OpenChange * - * Copyright (C) 2015 Enrique J. Hernández + * Copyright (C) 2015-2016 Enrique J. Hernández * * Author: Enrique J. Hernández * @@ -39,58 +39,58 @@ fromMessage: (MAPIStoreMailMessage *) msg; /* getters */ -- (int) getPidLidSharingCapabilities: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingCapabilities: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingConfigurationUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingConfigUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingFlavor: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingFlavor: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingInitiatorEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingInitiatorName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingInitiatorSmtp: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingLocalType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingLocalType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingProviderGuid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingProviderGuid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingProviderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingProviderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingProviderUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingProviderUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingRemoteName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingRemoteName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingRemoteStoreUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameXSharingRemoteStoreUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingRemoteType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidTypeXSharingRemoteType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingResponseTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidLidSharingResponseType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getPidNameContentClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingCapabilities: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingCapabilities: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingConfigurationUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingConfigUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingFlavor: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingFlavor: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingInitiatorEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingInitiatorName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingInitiatorSmtp: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingLocalType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingLocalType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingProviderGuid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingProviderGuid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingProviderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingProviderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingProviderUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingProviderUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingRemoteName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingRemoteName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingRemoteStoreUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameXSharingRemoteStoreUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingRemoteType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidTypeXSharingRemoteType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingResponseTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidLidSharingResponseType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getPidNameContentClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx; /* Save */ - (void) saveWithMessage: (MAPIStoreMailMessage *) msg diff --git a/OpenChange/MAPIStoreSharingMessage.m b/OpenChange/MAPIStoreSharingMessage.m index e1e0e79da..27ecbd47b 100644 --- a/OpenChange/MAPIStoreSharingMessage.m +++ b/OpenChange/MAPIStoreSharingMessage.m @@ -1,6 +1,6 @@ /* MAPIStoreSharingMessage.m - this file is part of SOGo-OpenChange * - * Copyright (C) 2015 Enrique J. Hernández + * Copyright (C) 2015-2016 Enrique J. Hernández * * Author: Enrique J. Hernández * @@ -108,8 +108,8 @@ } -- (int) getPidLidSharingCapabilities: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingCapabilities: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; @@ -125,8 +125,8 @@ return rc; } -- (int) getPidNameXSharingCapabilities: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingCapabilities: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; @@ -143,22 +143,22 @@ return rc; } -- (int) getPidLidSharingConfigurationUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingConfigurationUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidNameXSharingConfigUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingConfigUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingConfigurationUrl: data inMemCtx: memCtx]; } -- (int) getPidLidSharingFlavor: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingFlavor: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { /* See [MS-OXSHARE] Section 2.2.2.5 for details */ enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; @@ -206,8 +206,8 @@ return rc; } -- (int) getPidNameXSharingFlavor: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingFlavor: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; id value; @@ -223,8 +223,8 @@ return rc; } -- (int) getPidLidSharingInitiatorEntryId: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingInitiatorEntryId: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; id value; @@ -244,38 +244,38 @@ return rc; } -- (int) getPidLidSharingInitiatorName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingInitiatorName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-initiatorname" inData: data inMemCtx: memCtx]; } -- (int) getPidLidSharingInitiatorSmtp: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingInitiatorSmtp: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-initiatorsmtp" inData: data inMemCtx: memCtx]; } -- (int) getPidLidSharingLocalType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingLocalType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-localtype" inData: data inMemCtx: memCtx]; } -- (int) getPidNameXSharingLocalType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingLocalType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingLocalType: data inMemCtx: memCtx]; } -- (int) getPidLidSharingProviderGuid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingProviderGuid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { const unsigned char providerGuidBytes[] = {0xAE, 0xF0, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46}; @@ -284,15 +284,15 @@ return MAPISTORE_SUCCESS; } -- (int) getPidNameXSharingProviderGuid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingProviderGuid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"AEF0060000000000C000000000000046" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getPidLidSharingProviderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingProviderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-providername" @@ -300,84 +300,84 @@ inMemCtx: memCtx]; } -- (int) getPidNameXSharingProviderName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingProviderName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingProviderName: data inMemCtx: memCtx]; } -- (int) getPidLidSharingProviderUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingProviderUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-providerurl" inData: data inMemCtx: memCtx]; } -- (int) getPidNameXSharingProviderUrl: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingProviderUrl: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingProviderUrl: data inMemCtx: memCtx]; } -- (int) getPidLidSharingRemoteName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingRemoteName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-remotename" inData: data inMemCtx: memCtx]; } -- (int) getPidNameXSharingRemoteName: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingRemoteName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingRemoteName: data inMemCtx: memCtx]; } -- (int) getPidLidSharingRemoteStoreUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingRemoteStoreUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-remotestoreuid" inData: data inMemCtx: memCtx]; } -- (int) getPidNameXSharingRemoteStoreUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameXSharingRemoteStoreUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingRemoteStoreUid: data inMemCtx: memCtx]; } -- (int) getPidLidSharingRemoteType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingRemoteType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-remotetype" inData: data inMemCtx: memCtx]; } -- (int) getPidTypeXSharingRemoteType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTypeXSharingRemoteType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingRemoteType: data inMemCtx: memCtx]; } -- (int) getPidLidSharingRemoteUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingRemoteUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self _getStringProperty: @"x-ms-sharing-remoteuid" inData: data inMemCtx: memCtx]; } -- (int) getPidUidXSharingRemoteUid: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidUidXSharingRemoteUid: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidLidSharingRemoteUid: data inMemCtx: memCtx]; } -- (int) getPidLidSharingResponseTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingResponseTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; id value; @@ -403,8 +403,8 @@ return rc; } -- (int) getPidLidSharingResponseType: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidSharingResponseType: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { enum mapistore_error rc = MAPISTORE_ERR_NOT_FOUND; @@ -423,8 +423,8 @@ return rc; } -- (int) getPidNameContentClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidNameContentClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = talloc_strdup (memCtx, "Sharing"); return MAPISTORE_SUCCESS; diff --git a/OpenChange/MAPIStoreTable.h b/OpenChange/MAPIStoreTable.h index 8c4b4718a..63e39dc79 100644 --- a/OpenChange/MAPIStoreTable.h +++ b/OpenChange/MAPIStoreTable.h @@ -88,17 +88,17 @@ typedef enum { - (void) cleanupCaches; -- (int) getAvailableProperties: (struct SPropTagArray **) propertiesP - inMemCtx: (TALLOC_CTX *) localMemCtx; +- (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP + inMemCtx: (TALLOC_CTX *) localMemCtx; - (void) setRestrictions: (const struct mapi_SRestriction *) res; -- (int) setColumns: (enum MAPITAGS *) newColumns - withCount: (uint16_t) newColumCount; -- (int) getRow: (struct mapistore_property_data **) dataP - withRowID: (uint32_t) rowId - andQueryType: (enum mapistore_query_type) queryType - inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getRowCount: (uint32_t *) countP - withQueryType: (enum mapistore_query_type) queryType; +- (enum mapistore_error) setColumns: (enum MAPITAGS *) newColumns + withCount: (uint16_t) newColumCount; +- (enum mapistore_error) getRow: (struct mapistore_property_data **) dataP + withRowID: (uint32_t) rowId + andQueryType: (enum mapistore_query_type) queryType + inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getRowCount: (uint32_t *) countP + withQueryType: (enum mapistore_query_type) queryType; /* helpers */ diff --git a/OpenChange/MAPIStoreTable.m b/OpenChange/MAPIStoreTable.m index 3b8270b6c..5bcba670e 100644 --- a/OpenChange/MAPIStoreTable.m +++ b/OpenChange/MAPIStoreTable.m @@ -366,8 +366,8 @@ static Class NSDataK, NSStringK; currentRow = (uint32_t) -1; } -- (int) getAvailableProperties: (struct SPropTagArray **) propertiesP - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getAvailableProperties: (struct SPropTagArray **) propertiesP + inMemCtx: (TALLOC_CTX *) memCtx { return [[isa childObjectClass] getAvailableProperties: propertiesP inMemCtx: memCtx]; @@ -749,8 +749,8 @@ static Class NSDataK, NSStringK; } /* proof of concept */ -- (int) setColumns: (enum MAPITAGS *) newColumns - withCount: (uint16_t) newColumnsCount +- (enum mapistore_error) setColumns: (enum MAPITAGS *) newColumns + withCount: (uint16_t) newColumnsCount { NSUInteger count; @@ -831,15 +831,15 @@ static Class NSDataK, NSStringK; return nil; } -- (int) getRow: (struct mapistore_property_data **) dataP - withRowID: (uint32_t) rowId - andQueryType: (enum mapistore_query_type) queryType - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getRow: (struct mapistore_property_data **) dataP + withRowID: (uint32_t) rowId + andQueryType: (enum mapistore_query_type) queryType + inMemCtx: (TALLOC_CTX *) memCtx { NSUInteger count; MAPIStoreObject *child; struct mapistore_property_data *rowData; - int rc; + enum mapistore_error rc; child = [self childAtRowID: rowId forQueryType: queryType]; if (child) @@ -858,8 +858,8 @@ static Class NSDataK, NSStringK; return rc; } -- (int) getRowCount: (uint32_t *) countP - withQueryType: (enum mapistore_query_type) queryType +- (enum mapistore_error) getRowCount: (uint32_t *) countP + withQueryType: (enum mapistore_query_type) queryType { NSArray *children; diff --git a/OpenChange/MAPIStoreTasksFolder.m b/OpenChange/MAPIStoreTasksFolder.m index 9bc76def1..f4f6ac160 100644 --- a/OpenChange/MAPIStoreTasksFolder.m +++ b/OpenChange/MAPIStoreTasksFolder.m @@ -128,7 +128,7 @@ [(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]]; } -- (int) getPidTagDefaultPostMessageClass: (void **) data +- (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Task" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 12a348d4c..728fdb909 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -68,8 +68,8 @@ @implementation MAPIStoreTasksMessage -- (int) getPidTagIconIndex: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagIconIndex: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { /* see http://msdn.microsoft.com/en-us/library/cc815472.aspx */ // Unassigned recurring task 0x00000501 @@ -83,16 +83,16 @@ return MAPISTORE_SUCCESS; } -- (int) getPidTagMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageClass: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = talloc_strdup(memCtx, "IPM.Task"); return MAPISTORE_SUCCESS; } -- (int) getPidTagNormalizedSubject: (void **) data // SUMMARY - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagNormalizedSubject: (void **) data // SUMMARY + inMemCtx: (TALLOC_CTX *) memCtx { iCalToDo *task; @@ -103,10 +103,10 @@ } /* FIXME: Should be combined somehow with the code in MAPIStoreAppointmentWrapper.m */ -- (int) getPidTagBody: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagBody: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSString *stringValue; iCalToDo *task; @@ -122,8 +122,8 @@ } /* FIXME: Should be combined somehow with the code in MAPIStoreAppointmentWrapper.m */ -- (int) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPrivate: (void **) data // private (bool), should depend on CLASS and permissions + inMemCtx: (TALLOC_CTX *) memCtx { iCalToDo *task; @@ -135,8 +135,8 @@ return [self getYes: data inMemCtx: memCtx]; } -- (int) getPidTagImportance: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagImportance: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { uint32_t v; iCalToDo *task; @@ -154,8 +154,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidTaskComplete: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskComplete: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { iCalToDo *task; @@ -166,8 +166,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidPercentComplete: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidPercentComplete: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { double doubleValue; iCalToDo *task; @@ -180,10 +180,10 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidTaskDateCompleted: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskDateCompleted: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSCalendarDate *dateValue; iCalToDo *task; @@ -198,54 +198,54 @@ return rc; } -- (int) getPidLidTaskState: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskState: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0x1); // not assigned return MAPISTORE_SUCCESS; } -- (int) getPidLidTaskMode: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskMode: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidLidTaskFRecurring: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskFRecurring: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidTaskAccepted: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskAccepted: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidTaskActualEffort: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskActualEffort: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidLidTaskEstimatedEffort: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskEstimatedEffort: (void **) data // TODO + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } -- (int) getPidTagHasAttachments: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagHasAttachments: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getNo: data inMemCtx: memCtx]; } -- (int) getPidLidTaskDueDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskDueDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSCalendarDate *dateValue; iCalToDo *task; @@ -259,10 +259,10 @@ return rc; } -- (int) getPidLidTaskStartDate: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskStartDate: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; NSCalendarDate *dateValue; iCalToDo *task; @@ -277,26 +277,26 @@ } -- (int) getPidTagMessageDeliveryTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidTagMessageDeliveryTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagLastModificationTime: data inMemCtx: memCtx]; } -- (int) getClientSubmitTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getClientSubmitTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagLastModificationTime: data inMemCtx: memCtx]; } -- (int) getLocalCommitTime: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getLocalCommitTime: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getPidTagLastModificationTime: data inMemCtx: memCtx]; } -- (int) getPidLidTaskStatus: (void **) data // status - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskStatus: (void **) data // status + inMemCtx: (TALLOC_CTX *) memCtx { NSString *status; uint32_t longValue; @@ -318,8 +318,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidTaskOwner: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskOwner: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { NSString *owner; @@ -330,8 +330,8 @@ return MAPISTORE_SUCCESS; } -- (int) getPidLidTaskOwnership: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getPidLidTaskOwnership: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx { return [self getLongZero: data inMemCtx: memCtx]; } diff --git a/OpenChange/NSObject+MAPIStore.h b/OpenChange/NSObject+MAPIStore.h index ff5bed57d..52c276c00 100644 --- a/OpenChange/NSObject+MAPIStore.h +++ b/OpenChange/NSObject+MAPIStore.h @@ -41,16 +41,16 @@ struct MAPIStoreTallocWrapper @interface NSObject (MAPIStoreDataTypes) -- (int) getValue: (void **) data - forTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getValue: (void **) data + forTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) memCtx; /* getter helpers */ -- (int) getEmptyString: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getLongZero: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getYes: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getNo: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; -- (int) getSMTPAddrType: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getEmptyString: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getLongZero: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getYes: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getNo: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; +- (enum mapistore_error) getSMTPAddrType: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; @end diff --git a/OpenChange/NSObject+MAPIStore.m b/OpenChange/NSObject+MAPIStore.m index 9ed02b7ab..9962806c4 100644 --- a/OpenChange/NSObject+MAPIStore.m +++ b/OpenChange/NSObject+MAPIStore.m @@ -74,12 +74,12 @@ MAPIStoreTallocWrapperDestroy (void *data) @implementation NSObject (MAPIStoreDataTypes) -- (int) getValue: (void **) data - forTag: (enum MAPITAGS) propTag - inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getValue: (void **) data + forTag: (enum MAPITAGS) propTag + inMemCtx: (TALLOC_CTX *) memCtx { uint16_t valueType; - int rc = MAPISTORE_SUCCESS; + enum mapistore_error rc = MAPISTORE_SUCCESS; // [self logWithFormat: @"property %.8x found", propTag]; valueType = (propTag & 0xffff); @@ -139,35 +139,35 @@ MAPIStoreTallocWrapperDestroy (void *data) } /* helper getters */ -- (int) getEmptyString: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getEmptyString: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"" asUnicodeInMemCtx: memCtx]; return MAPISTORE_SUCCESS; } -- (int) getLongZero: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getLongZero: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPILongValue (memCtx, 0); return MAPISTORE_SUCCESS; } -- (int) getYes: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getYes: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, YES); return MAPISTORE_SUCCESS; } -- (int) getNo: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getNo: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = MAPIBoolValue (memCtx, NO); return MAPISTORE_SUCCESS; } -- (int) getSMTPAddrType: (void **) data inMemCtx: (TALLOC_CTX *) memCtx +- (enum mapistore_error) getSMTPAddrType: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"SMTP" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/code-MAPIStorePropertySelectors.h b/OpenChange/code-MAPIStorePropertySelectors.h index f338ebe62..cf2148e0d 100644 --- a/OpenChange/code-MAPIStorePropertySelectors.h +++ b/OpenChange/code-MAPIStorePropertySelectors.h @@ -20,8 +20,8 @@ * Boston, MA 02111-1307, USA. */ -typedef int (*MAPIStorePropertyGetter) (id inst, SEL _cmd, - void **data, TALLOC_CTX *memCtx); +typedef enum mapistore_error (*MAPIStorePropertyGetter) (id inst, SEL _cmd, + void **data, TALLOC_CTX *memCtx); const MAPIStorePropertyGetter *MAPIStorePropertyGettersForClass (Class klass); SEL MAPIStoreSelectorForPropertyGetter (uint16_t propertyId); diff --git a/OpenChange/gen-property-selectors.py b/OpenChange/gen-property-selectors.py index f009d6864..d0431784b 100755 --- a/OpenChange/gen-property-selectors.py +++ b/OpenChange/gen-property-selectors.py @@ -235,7 +235,7 @@ if __name__ == "__main__": highest_prop_idx = prop_idx getters.append(" @selector (get%s:inMemCtx:)" % name) # preferred_types.append(" 0x%.4x" % (prop_tag & 0xffff)) - prototypes.append("- (int) get%s: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;" % name) + prototypes.append("- (enum mapistore_error) get%s: (void **) data inMemCtx: (TALLOC_CTX *) memCtx;" % name) current_getter_idx = current_getter_idx + 1 # setters[prop_idx] = " @selector (set%s:)" % name # prototypes.append("- (int) set%s: (void **) data;" % name) From 967cc29c4ebf7c4940f8f669e281b1f214e7b46e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 25 Jan 2016 22:46:44 +0100 Subject: [PATCH 15/38] oc: Query for fmids in behalf of owner's resource Instead of using connected active user because the fmids are related to the root folder (context) owner. This avoids returning back incorrect identifiers which mostly collide with already associated URLs. --- OpenChange/MAPIStoreContext.m | 29 +++++++++++++++++------------ OpenChange/MAPIStoreMapping.m | 4 ++-- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index f4170a6f7..d67205bef 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -494,8 +494,11 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) mappingId = [mapping idFromURL: childURL]; if (mappingId == NSNotFound) { + const char *owner; + [self logWithFormat: @"No id exist yet for '%@', requesting one", childURL]; - ret = mapistore_indexing_get_new_folderID (connInfo->mstore_ctx, &mappingId); + owner = [[userContext username] UTF8String]; + ret = mapistore_indexing_get_new_folderID_as_user (connInfo->mstore_ctx, owner, &mappingId); if (ret == MAPISTORE_SUCCESS) [mapping registerURL: childURL withID: mappingId]; else @@ -544,29 +547,31 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) return newChangeNumbers; } +/* Get new fmids from mapistore_indexing interface using resource's + owner user */ - (NSArray *) getNewFMIDs: (uint64_t) max { - TALLOC_CTX *memCtx; + const char *owner; + enum mapistore_error ret; NSMutableArray *newFMIDs; - uint64_t count; - struct UI8Array_r *numbers; NSString *newNumber; + uint64_t count, newFID; - memCtx = talloc_zero(NULL, TALLOC_CTX); newFMIDs = [NSMutableArray arrayWithCapacity: max]; + /* Get the resource's owner name */ + owner = [[userContext username] UTF8String]; - if (mapistore_indexing_get_new_folderIDs (connInfo->mstore_ctx, - memCtx, max, &numbers) - != MAPISTORE_SUCCESS || numbers->cValues != max) - abort (); for (count = 0; count < max; count++) { - newNumber = [NSString stringWithUnsignedLongLong: numbers->lpui8[count]]; + ret = mapistore_indexing_get_new_folderID_as_user (connInfo->mstore_ctx, owner, &newFID); + if (ret != MAPISTORE_SUCCESS) + [NSException raise: @"MAPIStoreIOException" + format: @"Impossible to get new fmid for %s", owner]; + + newNumber = [NSString stringWithUnsignedLongLong: newFID]; [newFMIDs addObject: newNumber]; } - talloc_free (memCtx); - return newFMIDs; } diff --git a/OpenChange/MAPIStoreMapping.m b/OpenChange/MAPIStoreMapping.m index b7d303ed6..2e2c9a66d 100644 --- a/OpenChange/MAPIStoreMapping.m +++ b/OpenChange/MAPIStoreMapping.m @@ -258,7 +258,7 @@ MAPIStoreMappingKeyFromId (uint64_t idNbr) if (oldURL != NULL) { [self errorWithFormat: - @"url with idNbr already registered: (oldUrl='%@', newUrl='%@', id=x%.16"PRIx64")", + @"url with idNbr already registered: (oldUrl='%@', newUrl='%@', id=0x%.16"PRIx64")", oldURL, urlString, idNbr]; return NO; } @@ -306,7 +306,7 @@ MAPIStoreMappingKeyFromId (uint64_t idNbr) } else [NSException raise: NSInvalidArgumentException - format: @"number of urls and ids do not match"]; + format: @"number of urls (%d) and ids (%d) do not match", max, [idNbrs count]]; } - (void) unregisterURLWithID: (uint64_t) idNbr From e86e3b24817d3cb027f5e0ba969eb90c8a88fab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 25 Jan 2016 22:56:47 +0100 Subject: [PATCH 16/38] oc: Get new change numbers using resource's owner Instead of using the connected active user. Although this provides no changes in the result, it could be depending on changes from the backend so it'd better have it accurated to what the OpenChange DB API offers. --- OpenChange/MAPIStoreContext.m | 42 ++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index d67205bef..4aee98acf 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -509,36 +509,56 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) return mappingId; } +/* Get new change number from openchange db interface using + resource's owner user */ - (uint64_t) getNewChangeNumber { + const char *owner; + enum MAPISTATUS retval; uint64_t newVersionNumber; - if (openchangedb_get_new_changeNumber (connInfo->oc_ctx, connInfo->username, &newVersionNumber) - != MAPI_E_SUCCESS) - abort (); + owner = [[userContext username] UTF8String]; + retval = openchangedb_get_new_changeNumber (connInfo->oc_ctx, owner, &newVersionNumber); + if (retval != MAPI_E_SUCCESS) + [NSException raise: @"MAPIStoreIOException" + format: @"Impossible to get new change number for %s: %s", owner, + mapi_get_errstr (retval)]; return newVersionNumber; } +/* Get new change numbers from openchange db interface using + resource's owner user */ - (NSArray *) getNewChangeNumbers: (uint64_t) max { + const char *owner; + enum MAPISTATUS retval; TALLOC_CTX *memCtx; NSMutableArray *newChangeNumbers; uint64_t count; struct UI8Array_r *numbers; NSString *newNumber; - memCtx = talloc_zero(NULL, TALLOC_CTX); - newChangeNumbers = [NSMutableArray arrayWithCapacity: max]; + memCtx = talloc_new (NULL); + if (!memCtx) + [NSException raise: @"MAPIStoreIOException" + format: @"Not enough memory to allocate change numbers"]; + + newChangeNumbers = [NSMutableArray arrayWithCapacity: max]; + owner = [[userContext username] UTF8String]; + + retval = openchangedb_get_new_changeNumbers (connInfo->oc_ctx, memCtx, owner, max, &numbers); + if (retval != MAPI_E_SUCCESS || numbers->cValues != max) + { + talloc_free (memCtx); + [NSException raise: @"MAPIStoreIOException" + format: @"Failing to get %d new change numbers: %s", max, + mapi_get_errstr (retval)]; + } - if (openchangedb_get_new_changeNumbers (connInfo->oc_ctx, - memCtx, connInfo->username, max, &numbers) - != MAPI_E_SUCCESS || numbers->cValues != max) - abort (); for (count = 0; count < max; count++) { - newNumber - = [NSString stringWithUnsignedLongLong: numbers->lpui8[count]]; + newNumber = [NSString stringWithUnsignedLongLong: numbers->lpui8[count]]; [newChangeNumbers addObject: newNumber]; } From c45baad18822f4c18d36becb4d917c102d70c6a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 25 Jan 2016 22:59:05 +0100 Subject: [PATCH 17/38] oc: Read FAI messages from shared folder must be possible At least, to be able to read a shared folder using Online mode. It requests the folder to know if the message can be read by current active user. --- OpenChange/MAPIStoreFAIMessage.m | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenChange/MAPIStoreFAIMessage.m b/OpenChange/MAPIStoreFAIMessage.m index bc5608912..1c0f1b9a0 100644 --- a/OpenChange/MAPIStoreFAIMessage.m +++ b/OpenChange/MAPIStoreFAIMessage.m @@ -24,6 +24,7 @@ #import "MAPIStoreActiveTables.h" #import "MAPIStoreContext.h" +#import "MAPIStoreFolder.h" #import "MAPIStoreUserContext.h" #import "NSObject+MAPIStore.h" @@ -69,7 +70,7 @@ - (BOOL) subscriberCanReadMessage { - return NO; + return [(MAPIStoreFolder *)container subscriberCanReadMessages]; } - (BOOL) subscriberCanModifyMessage From 026c37709a771b4909741508bd5380fc6487f9e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Wed, 27 Jan 2016 21:48:40 +0100 Subject: [PATCH 18/38] oc: Mimetise PidTagRights behaviour to PidTagMemberRights As specified by [MS-OXCFOLD] Section 2.2.2.2.2.8 we exclude FreeBusySimple and FreeBusyDetailed right flags. --- OpenChange/MAPIStoreFolder.m | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 6ffd5da00..39ac407be 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -1267,25 +1267,28 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe inMemCtx: (TALLOC_CTX *) memCtx { uint32_t rights = 0; - SOGoUser *ownerUser; - BOOL userIsOwner; + SOGoUser *activeUser, *ownerUser; ownerUser = [[self userContext] sogoUser]; + activeUser = [context activeUser]; - userIsOwner = [[context activeUser] isEqual: ownerUser]; - if (userIsOwner || [self subscriberCanReadMessages]) - rights |= RightsReadItems; - if (userIsOwner || [self subscriberCanCreateMessages]) - rights |= RightsCreateItems; - if (userIsOwner || [self subscriberCanModifyMessages]) - rights |= RightsEditOwn | RightsEditAll; - if (userIsOwner || [self subscriberCanDeleteMessages]) - rights |= RightsDeleteOwn | RightsDeleteAll; - if ((userIsOwner || [self subscriberCanCreateSubFolders]) - && [self supportsSubFolders]) - rights |= RightsCreateSubfolders; - if (userIsOwner) - rights |= RightsFolderOwner | RightsFolderContact; + if ([activeUser isEqual: ownerUser]) + { + rights = RightsReadItems | RightsCreateItems | RightsEditOwn | RightsEditAll + | RightsDeleteOwn | RightsDeleteAll | RightsFolderOwner | RightsFolderContact | RoleNone; + if ([self supportsSubFolders]) + rights |= RightsCreateSubfolders; + } + else + { + NSArray *roles; + + roles = [[self aclFolder] aclsForUser: [activeUser login]]; + rights = [self exchangeRightsForRoles: roles]; + /* FreeBusySimple and FreeBusyDetailed does not apply here + [MS-OXCFOLD] Section 2.2.2.2.2.8 */ + rights &= ~RightsFreeBusySimple & ~RightsFreeBusyDetailed; + } *data = MAPILongValue (memCtx, rights); From 8c8ad301b4e21a158030079f153374a94035392e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Wed, 27 Jan 2016 23:02:10 +0100 Subject: [PATCH 19/38] oc: Check FolderVisible permission to show permission list When the active user is not the owner of the resource as specified by [MS-OXCPERM] Section 3.2.5.1 --- OpenChange/MAPIStoreFolder.m | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 39ac407be..d94166e38 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -1021,9 +1021,10 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe tableType: (enum mapistore_table_type) tableType andHandleId: (uint32_t) handleId { + BOOL access; enum mapistore_error rc = MAPISTORE_SUCCESS; MAPIStoreTable *table; - SOGoUser *ownerUser; + SOGoUser *activeUser, *ownerUser; if (tableType == MAPISTORE_MESSAGE_TABLE) table = [self messageTable]; @@ -1034,8 +1035,19 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe else if (tableType == MAPISTORE_PERMISSIONS_TABLE) { ownerUser = [[self userContext] sogoUser]; - if ([[context activeUser] isEqual: ownerUser]) - table = [self permissionsTable]; + activeUser = [context activeUser]; + access = [activeUser isEqual: ownerUser]; + if (!access) + { + NSArray *roles; + + roles = [[self aclFolder] aclsForUser: [activeUser login]]; + /* Check FolderVisible right to return the table */ + access = ([self exchangeRightsForRoles: roles] & RoleNone) != 0; + } + + if (access) + table = [self permissionsTable]; else rc = MAPISTORE_ERR_DENIED; } From bcf94c5b4322ad50e7c48bce0937527aa04fdfd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Wed, 27 Jan 2016 23:03:08 +0100 Subject: [PATCH 20/38] oc: Check FolderOwner right to modify permissions As specified by [MS-OXCPERM] Section 3.2.5.2, the ModifyPermissions ROP is only possible to users which have this right. After this changeset, we check the active user can modify permission list. This is a security fix. --- OpenChange/MAPIStoreFolder.m | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index d94166e38..48c762499 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -1641,6 +1641,21 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe NSArray *permissionRoles; BOOL reset, isAdd = NO, isDelete = NO, isModify = NO; SOGoFolder *aclFolder; + SOGoUser *activeUser, *ownerUser; + + /* Check if we have permissions to modify the permissions. + See [MS-OXCPERM] Section 3.2.5.2 for details */ + ownerUser = [[self userContext] sogoUser]; + activeUser = [context activeUser]; + if (![activeUser isEqual: ownerUser]) + { + /* Check if we have FolderOwner right */ + NSArray *roles; + + roles = [[self aclFolder] aclsForUser: [activeUser login]]; + if (([self exchangeRightsForRoles: roles] & RightsFolderOwner) == 0) + return MAPISTORE_ERR_DENIED; + } aclFolder = [self aclFolder]; From dcb1d2f57459d5760a17ad69d12e3fb2af6d1ca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 28 Jan 2016 15:47:17 +0100 Subject: [PATCH 21/38] oc: API to know if a message can be deleted by a subscriber Instead of asking general container. This gives the possibility to perform the deletion depending on the data from the message, for instance, the user creator. --- OpenChange/MAPIStoreFolder.m | 2 +- OpenChange/MAPIStoreMessage.h | 1 + OpenChange/MAPIStoreMessage.m | 14 +++++++++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 48c762499..0d14550e1 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -597,7 +597,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe if ([[context activeUser] isEqual: ownerUser] || (![message isKindOfClass: MAPIStoreFAIMessageK] - && [self subscriberCanDeleteMessages])) + && ([self subscriberCanDeleteMessages] || [message subscriberCanDeleteMessage]))) { /* we ensure the table caches are loaded so that old and new state can be compared */ diff --git a/OpenChange/MAPIStoreMessage.h b/OpenChange/MAPIStoreMessage.h index fd89bb027..2f059733e 100644 --- a/OpenChange/MAPIStoreMessage.h +++ b/OpenChange/MAPIStoreMessage.h @@ -82,6 +82,7 @@ - (BOOL) subscriberCanReadMessage; - (BOOL) subscriberCanModifyMessage; +- (BOOL) subscriberCanDeleteMessage; @end diff --git a/OpenChange/MAPIStoreMessage.m b/OpenChange/MAPIStoreMessage.m index d3ba9aae7..5f341f600 100644 --- a/OpenChange/MAPIStoreMessage.m +++ b/OpenChange/MAPIStoreMessage.m @@ -547,7 +547,8 @@ rtf2html (NSData *compressedRTF) for (count = 0; count < max; count++) [[containerTables objectAtIndex: count] restrictedChildKeys]; } - + + /* TODO: Check the save process succeeded */ [self save: memCtx]; /* We make sure that any change-related properties are removed from the properties dictionary, to make sure that related methods will be @@ -649,8 +650,7 @@ rtf2html (NSData *compressedRTF) if (userIsOwner || ([self isKindOfClass: MAPIStoreEmbeddedMessageK] && [mainMessage subscriberCanModifyMessage]) - || [(MAPIStoreFolder *) - [mainMessage container] subscriberCanDeleteMessages]) + || [mainMessage subscriberCanDeleteMessage]) access |= 0x04; *data = MAPILongValue (memCtx, access); @@ -987,14 +987,22 @@ rtf2html (NSData *compressedRTF) return activeUserRoles; } +/* Can the current active user read the message? */ - (BOOL) subscriberCanReadMessage { return NO; } +/* Can the current active user modify the message? */ - (BOOL) subscriberCanModifyMessage { return NO; } +/* Can the current active user delete the message? */ +- (BOOL) subscriberCanDeleteMessage +{ + return NO; +} + @end From b92ca092ed92f73f80c23dab08e59716beaeec8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 28 Jan 2016 15:50:10 +0100 Subject: [PATCH 22/38] oc: Remove specialised PidTagAccess and PidTagAccessLevel As the generic one from MAPIStoreMessage applies here since we use subscriberCan* protocol to know the values from these properties. --- OpenChange/MAPIStoreGCSMessage.m | 66 -------------------------------- 1 file changed, 66 deletions(-) diff --git a/OpenChange/MAPIStoreGCSMessage.m b/OpenChange/MAPIStoreGCSMessage.m index 84976917e..97898ae50 100644 --- a/OpenChange/MAPIStoreGCSMessage.m +++ b/OpenChange/MAPIStoreGCSMessage.m @@ -54,72 +54,6 @@ return [sogoObject lastModified]; } -- (enum mapistore_error) getPidTagAccess: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx -{ - MAPIStoreContext *context; - WOContext *woContext; - SoSecurityManager *sm; - MAPIStoreUserContext *userContext; - uint32_t access; - - context = [self context]; - userContext = [self userContext]; - if ([[context activeUser] isEqual: [userContext sogoUser]]) - access = 0x03; - else - { - sm = [SoSecurityManager sharedSecurityManager]; - woContext = [userContext woContext]; - - access = 0; - if (![sm validatePermission: SoPerm_ChangeImagesAndFiles - onObject: sogoObject - inContext: woContext]) - access |= 1; - if (![sm validatePermission: SoPerm_AccessContentsInformation - onObject: sogoObject - inContext: woContext]) - access |= 2; - if (![sm validatePermission: SOGoPerm_DeleteObject - onObject: sogoObject - inContext: woContext]) - access |= 4; - } - *data = MAPILongValue (memCtx, access); - - return MAPISTORE_SUCCESS; -} - -- (enum mapistore_error) getPidTagAccessLevel: (void **) data // TODO - inMemCtx: (TALLOC_CTX *) memCtx -{ - MAPIStoreContext *context; - MAPIStoreUserContext *userContext; - WOContext *woContext; - SoSecurityManager *sm; - uint32_t accessLvl; - - context = [self context]; - userContext = [self userContext]; - if ([[context activeUser] isEqual: [userContext sogoUser]]) - accessLvl = 1; - else - { - sm = [SoSecurityManager sharedSecurityManager]; - woContext = [userContext woContext]; - if (![sm validatePermission: SoPerm_ChangeImagesAndFiles - onObject: sogoObject - inContext: woContext]) - accessLvl = 1; - else - accessLvl = 0; - } - *data = MAPILongValue (memCtx, accessLvl); - - return MAPISTORE_SUCCESS; -} - - (enum mapistore_error) getPidTagChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { From a9f336c69d3314dbd92ba686423c3973d4afd0f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 4 Feb 2016 11:31:00 +0100 Subject: [PATCH 23/38] oc: Check permissions on read opening a shared folder This is a security issue that allowed a user to read the number of messages and its subjects when it does not have any permission to read. Now the user cannot see other's folder without asking for me to the owner. --- OpenChange/MAPIStoreContext.m | 12 ++++++++++-- OpenChange/MAPIStoreSOGo.m | 5 +++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/OpenChange/MAPIStoreContext.m b/OpenChange/MAPIStoreContext.m index 4aee98acf..32a01e147 100644 --- a/OpenChange/MAPIStoreContext.m +++ b/OpenChange/MAPIStoreContext.m @@ -438,8 +438,16 @@ static inline NSURL *CompleteURLFromMapistoreURI (const char *uri) mapiStoreObjectWithSOGoObject: currentFolder inContainer: nil]; [baseFolder setContext: self]; - *folderPtr = baseFolder; - rc = MAPISTORE_SUCCESS; + + if ([[userContext sogoUser] isEqual: activeUser] + || [baseFolder subscriberCanReadMessages]) + { + *folderPtr = baseFolder; + rc = MAPISTORE_SUCCESS; + } + else + rc = MAPISTORE_ERR_DENIED; + } else if ([[userContext sogoUser] isEqual: activeUser]) rc = MAPISTORE_ERR_NOT_FOUND; diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 41c8bf42a..604482ee7 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -244,8 +244,13 @@ static void mapiapp_cleanup(void) \details Create a connection context to the sogo backend \param mem_ctx pointer to the memory context + \param conn_info pointer to the connection information available for this context + (database connection, connected user, replica server info) + \param indexing pointer to the indexing database connection \param uri pointer to the sogo path \param private_data pointer to the private backend context + + \note the developer must free allocated private_data */ static enum mapistore_error From 76e586deca7f19f4dbcc35876428d5e8a07e6ef7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Thu, 4 Feb 2016 12:19:09 +0100 Subject: [PATCH 24/38] oc: Added custom MAPI permissions This set is only available at sogo-openchange library scope but they are useful to provide all permissions set from any MAPI client --- OpenChange/MAPIStoreFolder.h | 7 +++++++ OpenChange/MAPIStoreFolder.m | 9 +++++++++ 2 files changed, 16 insertions(+) diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index ab0a56da5..d361bc12c 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -22,6 +22,7 @@ #define MAPISTOREFOLDER_H #import +#import @class NSArray; @class NSMutableArray; @@ -41,6 +42,12 @@ #import "MAPIStoreSOGoObject.h" +/* Custom MAPI Permissions */ +extern NSString *SOGoOpenChangeRole_EditOwned; +extern NSString *SOGoOpenChangeRole_DeleteOwned; +extern NSString *SOGoOpenChangeRole_FolderContact; +extern NSString *SOGoOpenChangeRole_FolderOwner; + @interface MAPIStoreFolder : MAPIStoreSOGoObject { MAPIStoreContext *context; diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 0d14550e1..82f96bfaf 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -65,6 +65,15 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMessageTableK, MAPIStoreFolderTableK; +/* Custom MAPI Permissions: + + This set have sogo-openchange library scope +*/ +NSString *SOGoOpenChangeRole_EditOwned = @"EditOwned"; +NSString *SOGoOpenChangeRole_DeleteOwned = @"DeleteOwned"; +NSString *SOGoOpenChangeRole_FolderContact = @"FolderContact"; +NSString *SOGoOpenChangeRole_FolderOwner = @"FolderOwner"; + @implementation MAPIStoreFolder + (void) initialize From 1ca1a273d9729edbeb6a76d0ae282c603bffbabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Sun, 7 Feb 2016 00:38:07 +0100 Subject: [PATCH 25/38] oc-notes: Implement edit own and delete own permissions By storing the PidTagCreatorName on creation and checking when trying to edit or delete an specific message. --- OpenChange/MAPIStoreDBFolder.h | 10 ++++ OpenChange/MAPIStoreDBFolder.m | 24 +++++----- OpenChange/MAPIStoreDBMessage.m | 84 ++++++++++++++++++++++++++++++--- 3 files changed, 98 insertions(+), 20 deletions(-) diff --git a/OpenChange/MAPIStoreDBFolder.h b/OpenChange/MAPIStoreDBFolder.h index 2415af934..1da4d1bd9 100644 --- a/OpenChange/MAPIStoreDBFolder.h +++ b/OpenChange/MAPIStoreDBFolder.h @@ -25,6 +25,16 @@ #import "MAPIStoreFolder.h" +extern NSString *MAPIStoreRightReadItems; +extern NSString *MAPIStoreRightCreateItems; +extern NSString *MAPIStoreRightEditOwn; +extern NSString *MAPIStoreRightEditAll; +extern NSString *MAPIStoreRightDeleteOwn; +extern NSString *MAPIStoreRightDeleteAll; +extern NSString *MAPIStoreRightCreateSubfolders; +extern NSString *MAPIStoreRightFolderOwner; +extern NSString *MAPIStoreRightFolderContact; + @interface MAPIStoreDBFolder : MAPIStoreFolder @end diff --git a/OpenChange/MAPIStoreDBFolder.m b/OpenChange/MAPIStoreDBFolder.m index a7c49b72d..6aea4dd9b 100644 --- a/OpenChange/MAPIStoreDBFolder.m +++ b/OpenChange/MAPIStoreDBFolder.m @@ -51,15 +51,15 @@ static Class EOKeyValueQualifierK, SOGoCacheGCSFolderK, MAPIStoreDBFolderK; -static NSString *MAPIStoreRightReadItems = @"RightsReadItems"; -static NSString *MAPIStoreRightCreateItems = @"RightsCreateItems"; -static NSString *MAPIStoreRightEditOwn = @"RightsEditOwn"; -static NSString *MAPIStoreRightEditAll = @"RightsEditAll"; -static NSString *MAPIStoreRightDeleteOwn = @"RightsDeleteOwn"; -static NSString *MAPIStoreRightDeleteAll = @"RightsDeleteAll"; -static NSString *MAPIStoreRightCreateSubfolders = @"RightsCreateSubfolders"; -static NSString *MAPIStoreRightFolderOwner = @"RightsFolderOwner"; -static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; +NSString *MAPIStoreRightReadItems = @"RightsReadItems"; +NSString *MAPIStoreRightCreateItems = @"RightsCreateItems"; +NSString *MAPIStoreRightEditOwn = @"RightsEditOwn"; +NSString *MAPIStoreRightEditAll = @"RightsEditAll"; +NSString *MAPIStoreRightDeleteOwn = @"RightsDeleteOwn"; +NSString *MAPIStoreRightDeleteAll = @"RightsDeleteAll"; +NSString *MAPIStoreRightCreateSubfolders = @"RightsCreateSubfolders"; +NSString *MAPIStoreRightFolderOwner = @"RightsFolderOwner"; +NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; @implementation MAPIStoreDBFolder @@ -355,8 +355,7 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; - (BOOL) subscriberCanModifyMessages { - return ([self _testRoleForActiveUser: MAPIStoreRightEditAll] - || [self _testRoleForActiveUser: MAPIStoreRightEditOwn]); + return [self _testRoleForActiveUser: MAPIStoreRightEditAll]; } - (BOOL) subscriberCanReadMessages @@ -377,8 +376,7 @@ static NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; - (BOOL) subscriberCanDeleteMessages { - return ([self _testRoleForActiveUser: MAPIStoreRightDeleteAll] - || [self _testRoleForActiveUser: MAPIStoreRightDeleteOwn]); + return [self _testRoleForActiveUser: MAPIStoreRightDeleteAll]; } - (BOOL) subscriberCanCreateSubFolders diff --git a/OpenChange/MAPIStoreDBMessage.m b/OpenChange/MAPIStoreDBMessage.m index a397f7521..ca2b772d0 100644 --- a/OpenChange/MAPIStoreDBMessage.m +++ b/OpenChange/MAPIStoreDBMessage.m @@ -27,6 +27,9 @@ #import #import #import +#import +#import +#import #import "MAPIStoreContext.h" #import "MAPIStorePropertySelectors.h" @@ -346,6 +349,16 @@ /* Update PredecessorChangeList accordingly */ [self _updatePredecessorChangeList]; + if (isNew) + { + NSString *lastModifierName; + + lastModifierName = (NSString *)[properties objectForKey: MAPIPropertyKey (PidTagLastModifierName)]; + if ([lastModifierName length] > 0) + [properties setObject: lastModifierName + forKey: MAPIPropertyKey (PidTagCreatorName)]; + } + // [self logWithFormat: @"Saving %@", [self description]]; // [self logWithFormat: @"%d props in dict", [properties count]]; @@ -364,20 +377,77 @@ return [msgClass isEqualToString: @"IPM.Microsoft.ScheduleData.FreeBusy"]; } -/* TODO: differentiate between the "Own" and "All" cases */ +//----------------------------- +// Permissions +//----------------------------- + - (BOOL) subscriberCanReadMessage { return [(MAPIStoreFolder *) container subscriberCanReadMessages]; - // || [self _messageIsFreeBusy]); +} + +- (SOGoUser *) _ownerUser +{ + NSString *ownerName; + SOGoUser *ownerUser = nil; + + ownerName = [properties objectForKey: MAPIPropertyKey (PidTagCreatorName)]; + if ([ownerName length] > 0) + ownerUser = [SOGoUser userWithLogin: ownerName]; + + return ownerUser; +} + +- (NSArray *) activeUserRoles +{ + /* Override because of this exception: NSInvalidArgumentException, + reason: [SOGoMAPIDBMessage-aclsForUser:] should be overridden by + subclass */ + if (!activeUserRoles) + { + SOGoUser *activeUser; + + activeUser = [[self context] activeUser]; + activeUserRoles = [[container aclFolder] aclsForUser: [activeUser login]]; + [activeUserRoles retain]; + } + + return activeUserRoles; } - (BOOL) subscriberCanModifyMessage { - return ((isNew - && [(MAPIStoreFolder *) container subscriberCanCreateMessages]) - || (!isNew - && [(MAPIStoreFolder *) container subscriberCanModifyMessages])); - // || [self _messageIsFreeBusy]); + BOOL rc; + NSArray *roles; + + roles = [self activeUserRoles]; + + if (isNew) + rc = [(MAPIStoreFolder *) container subscriberCanCreateMessages]; + else + rc = [roles containsObject: MAPIStoreRightEditAll]; + + /* Check if the message is owned and it has permission to edit it */ + if (!rc && [roles containsObject: MAPIStoreRightEditOwn]) + rc = [[[container context] activeUser] isEqual: [self _ownerUser]]; + + return rc; +} + +- (BOOL) subscriberCanDeleteMessage +{ + BOOL rc; + NSArray *roles; + + roles = [self activeUserRoles]; + + rc = [roles containsObject: MAPIStoreRightDeleteAll]; + + /* Check if the message is owned and it has permission to delete it */ + if (!rc && [roles containsObject: MAPIStoreRightDeleteOwn]) + rc = [[[container context] activeUser] isEqual: [self _ownerUser]]; + + return rc; } - (NSDate *) creationTime From 8b45ee886bf43b519688e4235adfb5a11ed68f1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Tue, 9 Feb 2016 16:19:18 +0100 Subject: [PATCH 26/38] oc: Use the same permission set original from MAPIStoreDBFolder To keep backwards compatibility. --- OpenChange/MAPIStoreDBFolder.m | 10 ---------- OpenChange/MAPIStoreFolder.h | 18 +++++++++++++----- OpenChange/MAPIStoreFolder.m | 18 ++++++++++-------- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/OpenChange/MAPIStoreDBFolder.m b/OpenChange/MAPIStoreDBFolder.m index 6aea4dd9b..4fc954112 100644 --- a/OpenChange/MAPIStoreDBFolder.m +++ b/OpenChange/MAPIStoreDBFolder.m @@ -51,16 +51,6 @@ static Class EOKeyValueQualifierK, SOGoCacheGCSFolderK, MAPIStoreDBFolderK; -NSString *MAPIStoreRightReadItems = @"RightsReadItems"; -NSString *MAPIStoreRightCreateItems = @"RightsCreateItems"; -NSString *MAPIStoreRightEditOwn = @"RightsEditOwn"; -NSString *MAPIStoreRightEditAll = @"RightsEditAll"; -NSString *MAPIStoreRightDeleteOwn = @"RightsDeleteOwn"; -NSString *MAPIStoreRightDeleteAll = @"RightsDeleteAll"; -NSString *MAPIStoreRightCreateSubfolders = @"RightsCreateSubfolders"; -NSString *MAPIStoreRightFolderOwner = @"RightsFolderOwner"; -NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; - @implementation MAPIStoreDBFolder + (void) initialize diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index d361bc12c..a6a591ec2 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -42,11 +42,19 @@ #import "MAPIStoreSOGoObject.h" -/* Custom MAPI Permissions */ -extern NSString *SOGoOpenChangeRole_EditOwned; -extern NSString *SOGoOpenChangeRole_DeleteOwned; -extern NSString *SOGoOpenChangeRole_FolderContact; -extern NSString *SOGoOpenChangeRole_FolderOwner; +/* MAPI Permissions + + This set has only sogo-openchange library scope + */ +extern NSString *MAPIStoreRightReadItems; +extern NSString *MAPIStoreRightCreateItems; +extern NSString *MAPIStoreRightEditOwn; +extern NSString *MAPIStoreRightEditAll; +extern NSString *MAPIStoreRightDeleteOwn; +extern NSString *MAPIStoreRightDeleteAll; +extern NSString *MAPIStoreRightCreateSubfolders; +extern NSString *MAPIStoreRightFolderOwner; +extern NSString *MAPIStoreRightFolderContact; @interface MAPIStoreFolder : MAPIStoreSOGoObject { diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index 82f96bfaf..a1ef53f94 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -65,14 +65,16 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMessageTableK, MAPIStoreFolderTableK; -/* Custom MAPI Permissions: - - This set have sogo-openchange library scope -*/ -NSString *SOGoOpenChangeRole_EditOwned = @"EditOwned"; -NSString *SOGoOpenChangeRole_DeleteOwned = @"DeleteOwned"; -NSString *SOGoOpenChangeRole_FolderContact = @"FolderContact"; -NSString *SOGoOpenChangeRole_FolderOwner = @"FolderOwner"; +/* MAPI permissions */ +NSString *MAPIStoreRightReadItems = @"RightsReadItems"; +NSString *MAPIStoreRightCreateItems = @"RightsCreateItems"; +NSString *MAPIStoreRightEditOwn = @"RightsEditOwn"; +NSString *MAPIStoreRightEditAll = @"RightsEditAll"; +NSString *MAPIStoreRightDeleteOwn = @"RightsDeleteOwn"; +NSString *MAPIStoreRightDeleteAll = @"RightsDeleteAll"; +NSString *MAPIStoreRightCreateSubfolders = @"RightsCreateSubfolders"; +NSString *MAPIStoreRightFolderOwner = @"RightsFolderOwner"; +NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; @implementation MAPIStoreFolder From 12ac1d30def9dcb7b983e8446591740f8e035f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Tue, 9 Feb 2016 16:23:15 +0100 Subject: [PATCH 27/38] oc: Implement edit own and delete own in GCSFolders And returning back PidTagCreatorName. This is done by checking the owner of the resource if the given permission is restricted to edit/delete own items. This requires a52bc3b to work in calendar folders as it requires to store and retrieve the MAPI custom permissions in the ACL. --- OpenChange/MAPIStoreGCSMessage.h | 7 +++ OpenChange/MAPIStoreGCSMessage.m | 86 ++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/OpenChange/MAPIStoreGCSMessage.h b/OpenChange/MAPIStoreGCSMessage.h index cac182874..2cfd480d0 100644 --- a/OpenChange/MAPIStoreGCSMessage.h +++ b/OpenChange/MAPIStoreGCSMessage.h @@ -23,6 +23,8 @@ #ifndef MAPISTOREGCSMESSAGE_H #define MAPISTOREGCSMESSAGE_H +#import + #import "MAPIStoreMessage.h" @interface MAPIStoreGCSMessage : MAPIStoreMessage @@ -30,6 +32,11 @@ } /* subclass helpers */ + +/* Return the message original creator */ +- (NSString *) creator; +- (NSString *) owner; +- (SOGoUser *) ownerUser; - (void) updateVersions; @end diff --git a/OpenChange/MAPIStoreGCSMessage.m b/OpenChange/MAPIStoreGCSMessage.m index 97898ae50..e1792fbdf 100644 --- a/OpenChange/MAPIStoreGCSMessage.m +++ b/OpenChange/MAPIStoreGCSMessage.m @@ -20,10 +20,12 @@ * Boston, MA 02111-1307, USA. */ +#import #import #import #import #import +#import #import #import #import @@ -35,6 +37,7 @@ #import "MAPIStoreTypes.h" #import "MAPIStoreUserContext.h" #import "NSData+MAPIStore.h" +#import "NSString+MAPIStore.h" #import "MAPIStoreGCSMessage.h" @@ -54,6 +57,24 @@ return [sogoObject lastModified]; } +- (enum mapistore_error) getPidTagCreatorName: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + enum mapistore_error rc; + NSString *creator; + + creator = [self creator]; + if (creator) + { + *data = [creator asUnicodeInMemCtx: memCtx]; + rc = MAPISTORE_SUCCESS; + } + else + rc = MAPISTORE_ERR_NOT_FOUND; + + return rc; +} + - (enum mapistore_error) getPidTagChangeKey: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { @@ -175,4 +196,69 @@ andPredecessorChangeList: predecessorChangeList]; } +//---------------------- +// Sharing +//---------------------- + +- (NSString *) creator +{ + return [self owner]; +} + +- (NSString *) owner +{ + return [sogoObject ownerInContext: nil]; +} + +- (SOGoUser *) ownerUser +{ + NSString *ownerName; + SOGoUser *owner = nil; + + ownerName = [self owner]; + if ([ownerName length] != 0) + owner = [SOGoUser userWithLogin: ownerName]; + + return owner; +} + +- (BOOL) subscriberCanModifyMessage +{ + BOOL rc; + NSArray *roles; + + roles = [self activeUserRoles]; + + if (isNew) + rc = [roles containsObject: SOGoRole_ObjectCreator]; + else + rc = [roles containsObject: SOGoRole_ObjectEditor]; + + /* Check if the message is owned and it has permission to edit it */ + if (!rc && [roles containsObject: MAPIStoreRightEditOwn]) + rc = [[[container context] activeUser] isEqual: [self ownerUser]]; + + return rc; +} + +- (BOOL) subscriberCanDeleteMessage +{ + BOOL rc; + NSArray *roles; + + roles = [self activeUserRoles]; + rc = [roles containsObject: SOGoRole_ObjectEraser]; + + /* Check if the message is owned and it has permission to delete it */ + if (!rc && [roles containsObject: MAPIStoreRightDeleteOwn]) + { + NSString *currentUser; + + currentUser = [[container context] activeUser]; + rc = [currentUser isEqual: [self ownerUser]]; + } + + return rc; +} + @end From dd32c659f693d3fe4154ad7f6dd2b0ddfed2d87e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Tue, 9 Feb 2016 16:34:04 +0100 Subject: [PATCH 28/38] oc-calendar: Add edit/delete own and Folder Contact/Owner sharing perm By storing these custom MAPI roles in the ACL. The extension field 'X-SOGO-COMPONENT-CREATED-BY' is used to store the event creator when it is done from Outlook. It is the same field SOGo uses when an event is created from a shared folder in the webmail. The creator and the organizer/owner of the event can be different and it can be used from external sources by checking the organizer field. This matches the specification from [MS-OXOCAL] Section 1.1 which defines the organizer as the owner or creator of the event. --- OpenChange/MAPIStoreAppointmentWrapper.h | 3 + OpenChange/MAPIStoreAppointmentWrapper.m | 57 +++++++++++++++++++ OpenChange/MAPIStoreCalendarEmbeddedMessage.m | 1 + OpenChange/MAPIStoreCalendarFolder.m | 44 +++++++++----- OpenChange/MAPIStoreCalendarMessage.m | 25 ++++---- OpenChange/iCalEvent+MAPIStore.h | 1 + OpenChange/iCalEvent+MAPIStore.m | 9 +++ 7 files changed, 111 insertions(+), 29 deletions(-) diff --git a/OpenChange/MAPIStoreAppointmentWrapper.h b/OpenChange/MAPIStoreAppointmentWrapper.h index 998f3e175..ac96dccc2 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.h +++ b/OpenChange/MAPIStoreAppointmentWrapper.h @@ -68,6 +68,9 @@ - (void) fillMessageData: (struct mapistore_message *) dataPtr inMemCtx: (TALLOC_CTX *) memCtx; +- (NSString *) creator; +- (NSString *) owner; + - (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; - (enum mapistore_error) getPidTagSenderAddressType: (void **) data diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index 4b1d901ec..7c16cf6b1 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -1023,6 +1023,63 @@ static NSCharacterSet *hexCharacterSet = nil; inMemCtx: memCtx]; } +/* creator (only if created from Outlook/SOGo or organizer as fallback */ +- (NSString *) creator +{ + iCalPerson *person; + NSDictionary *contactInfos; + NSString *creator = nil, *email; + SOGoUserManager *mgr; + + creator = [[event uniqueChildWithTag: @"x-sogo-component-created-by"] + flattenedValuesForKey: @""]; + if ([creator length] == 0) + { + person = [event organizer]; + if (person) + { + email = [person rfc822Email]; + if ([email length] > 0) + { + mgr = [SOGoUserManager sharedUserManager]; + contactInfos = [mgr contactInfosForUserWithUIDorEmail: email]; + if (contactInfos) + creator = [contactInfos objectForKey: @"sAMAccountName"]; + } + } + } + return creator; +} + +/* owner is the organizer of the event, if none, try with the creator + who has saved only from Outlook or SOGo */ +- (NSString *) owner +{ + iCalPerson *person; + NSDictionary *contactInfos; + NSString *email, *owner = nil; + SOGoUserManager *mgr; + + person = [event organizer]; + if (person) + { + email = [person rfc822Email]; + if ([email length] > 0) + { + mgr = [SOGoUserManager sharedUserManager]; + contactInfos = [mgr contactInfosForUserWithUIDorEmail: email]; + if (contactInfos) + owner = [contactInfos objectForKey: @"sAMAccountName"]; + } + } + + if (!owner) + owner = [[event uniqueChildWithTag: @"x-sogo-component-created-by"] + flattenedValuesForKey: @""]; + + return owner; +} + /* sender representing */ - (enum mapistore_error) getPidTagSentRepresentingEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx diff --git a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m index 6f0c8a776..02a776949 100644 --- a/OpenChange/MAPIStoreCalendarEmbeddedMessage.m +++ b/OpenChange/MAPIStoreCalendarEmbeddedMessage.m @@ -208,6 +208,7 @@ [[container event] updateFromMAPIProperties: properties inUserContext: [self userContext] withActiveUser: activeUser + isNew: NO inMemCtx: memCtx]; } diff --git a/OpenChange/MAPIStoreCalendarFolder.m b/OpenChange/MAPIStoreCalendarFolder.m index 30547cb02..ed949e638 100644 --- a/OpenChange/MAPIStoreCalendarFolder.m +++ b/OpenChange/MAPIStoreCalendarFolder.m @@ -81,11 +81,7 @@ Following rights are not supported by SOGo specifically: - - DeleteOwned : Delete only own objects - - EditOwned : Edit only own objects - CreateSubfolders: No calendar subfolders - - FolderOwner: No sharing folder ownership? - - FolderContact: No support to store this information - FolderVisible: It is inferred by other rights when extracting */ NSMutableArray *roles; @@ -95,26 +91,35 @@ [roles addObject: SOGoRole_ObjectCreator]; if (rights & RightsDeleteAll) [roles addObject: SOGoRole_ObjectEraser]; + if (rights & RightsDeleteOwn) + [roles addObject: MAPIStoreRightDeleteOwn]; + if (rights & RightsEditAll) { [roles addObject: SOGoCalendarRole_PublicModifier]; [roles addObject: SOGoCalendarRole_PrivateModifier]; [roles addObject: SOGoCalendarRole_ConfidentialModifier]; } - else if (rights & RightsReadItems) + if (rights & RightsEditOwn) + [roles addObject: MAPIStoreRightEditOwn]; + + if (rights & RightsReadItems) { [roles addObject: SOGoCalendarRole_PublicViewer]; [roles addObject: SOGoCalendarRole_PrivateViewer]; [roles addObject: SOGoCalendarRole_ConfidentialViewer]; } if (rights & RightsFreeBusySimple) - { - [roles addObject: SOGoCalendarRole_PublicDAndTViewer]; - } + [roles addObject: SOGoCalendarRole_PublicDAndTViewer]; + if (rights & RightsFreeBusyDetailed) - { - [roles addObject: SOGoCalendarRole_ConfidentialDAndTViewer]; - } + [roles addObject: SOGoCalendarRole_ConfidentialDAndTViewer]; + + if (rights & RightsFolderOwner) + [roles addObject: MAPIStoreRightFolderOwner]; + + if (rights & RightsFolderContact) + [roles addObject: MAPIStoreRightFolderContact]; // [self logWithFormat: @"roles for rights %.8x = (%@)", rights, roles]; @@ -136,19 +141,28 @@ else if ([roles containsObject: SOGoCalendarRole_PublicViewer] && [roles containsObject: SOGoCalendarRole_PrivateViewer] && [roles containsObject: SOGoCalendarRole_ConfidentialViewer]) - // We have to set by hand other rights as only the highest role is returned - // See SOGoAppointmentFolder.m:aclsForUser for details - rights |= RightsReadItems | RightsFreeBusySimple | RightsFreeBusyDetailed; + rights |= RightsReadItems; + + if ([roles containsObject: MAPIStoreRightEditOwn]) + rights |= RightsEditOwn; + if ([roles containsObject: MAPIStoreRightDeleteOwn]) + rights |= RightsDeleteOwn; if ([roles containsObject: SOGoCalendarRole_PublicDAndTViewer]) rights |= RightsFreeBusySimple; if ([roles containsObject: SOGoCalendarRole_ConfidentialDAndTViewer]) - rights |= RightsFreeBusyDetailed; + rights |= RightsFreeBusySimple | RightsFreeBusyDetailed; if ((rights & RightsReadItems) != 0 || (rights & RightsCreateItems) != 0 || (rights & RightsDeleteAll) != 0) rights |= RoleNone; /* actually "folder visible" */ + if ([roles containsObject: MAPIStoreRightFolderOwner]) + rights |= RightsFolderOwner | RoleNone; + + if ([roles containsObject: MAPIStoreRightFolderContact]) + rights |= RightsFolderContact; + // [self logWithFormat: @"rights for roles (%@) = %.8x", roles, rights]; return rights; diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index 62a29f118..de1675045 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -528,6 +528,16 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; ASSIGN (sogoObject, newObject); } +- (NSString *) creator +{ + return [[self _appointmentWrapper] creator]; +} + +- (NSString *) owner +{ + return [[self _appointmentWrapper] owner]; +} + - (BOOL) subscriberCanReadMessage { NSArray *roles; @@ -539,20 +549,6 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; || [self subscriberCanModifyMessage]); } -- (BOOL) subscriberCanModifyMessage -{ - BOOL rc; - NSArray *roles = [self activeUserRoles]; - - if (isNew) - rc = [roles containsObject: SOGoRole_ObjectCreator]; - else - rc = ([roles containsObject: SOGoCalendarRole_ComponentModifier] - || [roles containsObject: SOGoCalendarRole_ComponentResponder]); - - return rc; -} - - (void) _updateAttachedEvents { NSArray *allAttachments; @@ -632,6 +628,7 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; [masterEvent updateFromMAPIProperties: properties inUserContext: [self userContext] withActiveUser: activeUser + isNew: isNew inMemCtx: memCtx]; [self _updateAttachedEvents]; [[self userContext] activate]; diff --git a/OpenChange/iCalEvent+MAPIStore.h b/OpenChange/iCalEvent+MAPIStore.h index 198526687..8d73923e1 100644 --- a/OpenChange/iCalEvent+MAPIStore.h +++ b/OpenChange/iCalEvent+MAPIStore.h @@ -37,6 +37,7 @@ - (void) updateFromMAPIProperties: (NSDictionary *) properties inUserContext: (MAPIStoreUserContext *) userContext withActiveUser: (SOGoUser *) activeUser + isNew: (BOOL) isNew inMemCtx: (TALLOC_CTX *) memCtx; @end diff --git a/OpenChange/iCalEvent+MAPIStore.m b/OpenChange/iCalEvent+MAPIStore.m index 25877029b..1bf0d261a 100644 --- a/OpenChange/iCalEvent+MAPIStore.m +++ b/OpenChange/iCalEvent+MAPIStore.m @@ -247,6 +247,7 @@ - (void) updateFromMAPIProperties: (NSDictionary *) properties inUserContext: (MAPIStoreUserContext *) userContext withActiveUser: (SOGoUser *) activeUser + isNew: (BOOL) isNew inMemCtx: (TALLOC_CTX *) memCtx { BOOL isAllDay; @@ -573,6 +574,14 @@ } } } + // Creator (with sharing purposes) + if (isNew) + { + value = [properties objectForKey: MAPIPropertyKey (PidTagLastModifierName)]; + if (value) + [[self uniqueChildWithTag: @"x-sogo-component-created-by"] setSingleValue: value + forKey: @""]; + } } @end From 9d461d646faec68f0866bc8b459171471782086b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Tue, 9 Feb 2016 23:54:15 +0100 Subject: [PATCH 29/38] oc-contacts: Add edit/delete own and Folder Contact/Owner sharing perm By storing these custom MAPI roles in the ACL. An extension field called 'X-OPENCHANGE-CREATOR' is created in the vcard to validate the creator/owner of the contact in the shared folder. --- OpenChange/MAPIStoreContactsFolder.m | 31 +++++++++++++++++++++- OpenChange/MAPIStoreContactsMessage.m | 37 +++++++++++++++++++-------- 2 files changed, 56 insertions(+), 12 deletions(-) diff --git a/OpenChange/MAPIStoreContactsFolder.m b/OpenChange/MAPIStoreContactsFolder.m index fd6db947a..d55c34a25 100644 --- a/OpenChange/MAPIStoreContactsFolder.m +++ b/OpenChange/MAPIStoreContactsFolder.m @@ -74,18 +74,34 @@ - (NSArray *) rolesForExchangeRights: (uint32_t) rights { + /* Limitations + + Following rights are not supported by SOGo specifically: + + - CreateSubfolders: No contacts subfolders + - FolderVisible: It is inferred by other rights when extracting + */ NSMutableArray *roles; - roles = [NSMutableArray arrayWithCapacity: 6]; + roles = [NSMutableArray arrayWithCapacity: 8]; if (rights & RightsCreateItems) [roles addObject: SOGoRole_ObjectCreator]; if (rights & RightsDeleteAll) [roles addObject: SOGoRole_ObjectEraser]; + if (rights & RightsDeleteOwn) + [roles addObject: MAPIStoreRightDeleteOwn]; if (rights & RightsEditAll) [roles addObject: SOGoRole_ObjectEditor]; + if (rights & RightsEditOwn) + [roles addObject: MAPIStoreRightEditOwn]; if (rights & RightsReadItems) [roles addObject: SOGoRole_ObjectViewer]; + if (rights & RightsFolderOwner) + [roles addObject: MAPIStoreRightFolderOwner]; + if (rights & RightsFolderContact) + [roles addObject: MAPIStoreRightFolderContact]; + return roles; } @@ -95,15 +111,28 @@ if ([roles containsObject: SOGoRole_ObjectCreator]) rights |= RightsCreateItems; + if ([roles containsObject: SOGoRole_ObjectEraser]) rights |= RightsDeleteAll | RightsDeleteOwn; + else if ([roles containsObject: MAPIStoreRightDeleteOwn]) + rights |= RightsDeleteOwn; + if ([roles containsObject: SOGoRole_ObjectEditor]) rights |= RightsEditAll | RightsEditOwn; + else if ([roles containsObject: MAPIStoreRightEditOwn]) + rights |= RightsEditOwn; + if ([roles containsObject: SOGoRole_ObjectViewer]) rights |= RightsReadItems; if (rights != 0) rights |= RoleNone; /* actually "folder visible" */ + if ([roles containsObject: MAPIStoreRightFolderOwner]) + rights |= RightsFolderOwner | RoleNone; + + if ([roles containsObject: MAPIStoreRightFolderContact]) + rights |= RightsFolderContact; + return rights; } diff --git a/OpenChange/MAPIStoreContactsMessage.m b/OpenChange/MAPIStoreContactsMessage.m index 4befdfd5d..344f31c39 100644 --- a/OpenChange/MAPIStoreContactsMessage.m +++ b/OpenChange/MAPIStoreContactsMessage.m @@ -31,9 +31,11 @@ #import #import #import +#import #import #import #import +#import #import #import "MAPIStoreAttachment.h" @@ -1224,23 +1226,28 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 } // --------------------------------------------------------- +// Permissions +// --------------------------------------------------------- + +- (NSString *) creator +{ + return [[[sogoObject vCard] uniqueChildWithTag: @"x-openchange-creator"] + flattenedValuesForKey: @""]; +} + +- (NSString *) owner +{ + return [self creator]; +} - (BOOL) subscriberCanReadMessage { return [[self activeUserRoles] containsObject: SOGoRole_ObjectViewer]; } -- (BOOL) subscriberCanModifyMessage -{ - NSArray *roles; - - roles = [self activeUserRoles]; - - return ((isNew - && [roles containsObject: SOGoRole_ObjectCreator]) - || (!isNew && [roles containsObject: SOGoRole_ObjectEditor])); -} - +// --------------------------------------------------------- +// Save +// --------------------------------------------------------- - (void) saveDistList:(TALLOC_CTX *) memCtx { [self warnWithFormat: @"IPM.DistList messages are ignored"]; @@ -1584,6 +1591,14 @@ enum { // [MS-OXOCNTC] 2.2.1.2.11 if (value) [newCard setNote: value]; + /* Store the creator name for sharing purposes */ + if (isNew) + { + value = [[[self context] activeUser] login]; + [[newCard uniqueChildWithTag: @"x-openchange-creator"] + setSingleValue: value forKey: @""]; + } + // // we save the new/modified card // From 51408bbde04fb8e77a4446c4a6a07fabcf650d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Wed, 10 Feb 2016 09:48:09 +0100 Subject: [PATCH 30/38] oc-tasks: Add edit/delete own and Folder Contact/Owner sharing perm By storing these custom MAPI roles in the ACL. Take into account that a task folder is shared with a calendar folder with the same name, therefore permissions are shared and overwritten from different Outlook sections. The extension 'X-SOGO-COMPONENT-CREATED-BY' is used to store the task creator in both Outlook and SOGo Webmail. The PidLidTaskOwner is not yet properly managed and we are always returning the folder owner but to effects of sharing that extension is used by now which matches a little more with what the user expects until we fix the task ownership defined in [MS-OXOTASK]. --- OpenChange/MAPIStoreTasksFolder.m | 66 +++++++++++++++++++++++++++++- OpenChange/MAPIStoreTasksMessage.m | 38 +++++++++++++++++ 2 files changed, 102 insertions(+), 2 deletions(-) diff --git a/OpenChange/MAPIStoreTasksFolder.m b/OpenChange/MAPIStoreTasksFolder.m index f4f6ac160..4b198d2d1 100644 --- a/OpenChange/MAPIStoreTasksFolder.m +++ b/OpenChange/MAPIStoreTasksFolder.m @@ -75,6 +75,10 @@ return newMessage; } +// -------------------------------------------- +// Permissions and sharing +// -------------------------------------------- + - (NSArray *) rolesForExchangeRights: (uint32_t) rights { NSMutableArray *roles; @@ -82,21 +86,34 @@ roles = [NSMutableArray arrayWithCapacity: 6]; if (rights & RightsCreateItems) [roles addObject: SOGoRole_ObjectCreator]; + if (rights & RightsDeleteAll) [roles addObject: SOGoRole_ObjectEraser]; + if (rights & RightsDeleteOwn) + [roles addObject: MAPIStoreRightDeleteOwn]; + if (rights & RightsEditAll) { [roles addObject: SOGoCalendarRole_PublicModifier]; [roles addObject: SOGoCalendarRole_PrivateModifier]; [roles addObject: SOGoCalendarRole_ConfidentialModifier]; } - else if (rights & RightsReadItems) + if (rights & RightsEditOwn) + [roles addObject: MAPIStoreRightEditOwn]; + + if (rights & RightsReadItems) { [roles addObject: SOGoCalendarRole_PublicViewer]; [roles addObject: SOGoCalendarRole_PrivateViewer]; [roles addObject: SOGoCalendarRole_ConfidentialViewer]; } + if (rights & RightsFolderOwner) + [roles addObject: MAPIStoreRightFolderOwner]; + + if (rights & RightsFolderContact) + [roles addObject: MAPIStoreRightFolderContact]; + return roles; } @@ -116,20 +133,65 @@ && [roles containsObject: SOGoCalendarRole_PrivateViewer] && [roles containsObject: SOGoCalendarRole_ConfidentialViewer]) rights |= RightsReadItems; + + if ([roles containsObject: MAPIStoreRightEditOwn]) + rights |= RightsEditOwn; + if ([roles containsObject: MAPIStoreRightDeleteOwn]) + rights |= RightsDeleteOwn; + if (rights != 0) rights |= RoleNone; /* actually "folder visible" */ + if ([roles containsObject: MAPIStoreRightFolderOwner]) + rights |= RightsFolderOwner | RoleNone; + + if ([roles containsObject: MAPIStoreRightFolderContact]) + rights |= RightsFolderContact; + return rights; } +- (BOOL) subscriberCanModifyMessages +{ + static NSArray *modifierRoles = nil; + + if (!modifierRoles) + modifierRoles = [[NSArray alloc] initWithObjects: + SOGoCalendarRole_PublicModifier, + SOGoCalendarRole_PrivateModifier, + SOGoCalendarRole_ConfidentialModifier, + nil]; + + return ([[self activeUserRoles] firstObjectCommonWithArray: modifierRoles] + != nil); +} + +- (BOOL) subscriberCanReadMessages +{ + static NSArray *viewerRoles = nil; + + if (!viewerRoles) + viewerRoles = [[NSArray alloc] initWithObjects: + SOGoCalendarRole_PublicViewer, + SOGoCalendarRole_PrivateViewer, + SOGoCalendarRole_ConfidentialViewer, + nil]; + + return ([[self activeUserRoles] firstObjectCommonWithArray: viewerRoles] + != nil); +} + - (EOQualifier *) aclQualifier { return [EOQualifier qualifierWithQualifierFormat: [(SOGoAppointmentFolder *) sogoObject aclSQLListingFilter]]; } +// -------------------------------------------- +// Property getters +// -------------------------------------------- - (enum mapistore_error) getPidTagDefaultPostMessageClass: (void **) data - inMemCtx: (TALLOC_CTX *) memCtx + inMemCtx: (TALLOC_CTX *) memCtx { *data = [@"IPM.Task" asUnicodeInMemCtx: memCtx]; diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 728fdb909..382c61fa0 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -154,6 +154,9 @@ return MAPISTORE_SUCCESS; } +//------------------------------------ +// Specific task related properties +//------------------------------------ - (enum mapistore_error) getPidLidTaskComplete: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { @@ -323,6 +326,7 @@ { NSString *owner; + /* FIXME: This is wrong when setting task's request */ owner = [sogoObject ownerInContext: nil]; *data = [owner asUnicodeInMemCtx: memCtx]; @@ -336,6 +340,25 @@ return [self getLongZero: data inMemCtx: memCtx]; } +// ---------------------------------- +// Sharing +// ---------------------------------- +- (NSString *) creator +{ + iCalToDo *task; + + task = [sogoObject component: NO secure: YES]; + return [[task uniqueChildWithTag: @"x-sogo-component-created-by"] + flattenedValuesForKey: @""]; +} + +- (NSString *) owner +{ + /* This is not true but to allow a user edit its own tasks is required. + FIXME: When PidLidTaskOwner getter is properly implemented for Task Requests */ + return [self creator]; +} + - (BOOL) subscriberCanReadMessage { return ([[self activeUserRoles] @@ -354,6 +377,15 @@ rc = ([roles containsObject: SOGoCalendarRole_ComponentModifier] || [roles containsObject: SOGoCalendarRole_ComponentResponder]); + /* Check if the message is owned and it has permission to edit it */ + if (!rc && [roles containsObject: MAPIStoreRightEditOwn]) + { + NSString *currentUser; + + currentUser = [[container context] activeUser]; + rc = [currentUser isEqual: [self ownerUser]]; + } + return rc; } @@ -524,10 +556,16 @@ [vToDo setAccessClass: @"PUBLIC"]; } + /* Creation */ now = [NSCalendarDate date]; if ([sogoObject isNew]) { [vToDo setCreated: now]; + /* Creator is used for sharing purposes */ + value = [properties objectForKey: MAPIPropertyKey (PidTagLastModifierName)]; + if (value) + [[vToDo uniqueChildWithTag: @"x-sogo-component-created-by"] setSingleValue: value + forKey: @""]; } [vToDo setTimeStampAsDate: now]; From 17b2e3946c5e657309f462a2455e3abd5defa16f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Wed, 10 Feb 2016 11:32:28 +0100 Subject: [PATCH 31/38] oc-notes: Point which folder class must be used while opening subfolders It was using MAPIStoreDBFolder class instead of specialised version MAPIStoreNotesFolder and thus the shared subfolders where set to create messages as normal messages instead of notes. --- OpenChange/MAPIStoreNotesContext.m | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/OpenChange/MAPIStoreNotesContext.m b/OpenChange/MAPIStoreNotesContext.m index 725b0d158..f5b8b1be3 100644 --- a/OpenChange/MAPIStoreNotesContext.m +++ b/OpenChange/MAPIStoreNotesContext.m @@ -1,6 +1,7 @@ /* MAPIStoreNotesContext.m - this file is part of SOGo * * Copyright (C) 2010-2012 Inverse inc. + * Copyright (C) 2016 Enrique J. Hernandez * * Author: Wolfgang Sourdeau * @@ -30,13 +31,30 @@ #undef DEBUG #include +static Class MAPIStoreNotesFolderK; + @implementation MAPIStoreNotesContext ++ (void) initialize +{ + MAPIStoreNotesFolderK = [MAPIStoreNotesFolder class]; +} + + (NSString *) MAPIModuleName { return @"notes"; } ++ (enum mapistore_context_role) MAPIContextRole +{ + return MAPISTORE_NOTES_ROLE; +} + +- (Class) MAPIStoreFolderClass +{ + return MAPIStoreNotesFolderK; +} + + (struct mapistore_contexts_list *) listContextsForUser: (NSString *) userName withIndexing: (struct indexing_context *) indexing inMemCtx: (TALLOC_CTX *) memCtx From e1b1812364b830cd1bc57b3941bf59c270508743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Mon, 8 Feb 2016 14:45:57 +0100 Subject: [PATCH 32/38] oc-mail: Use UTF-8 when they are parts with multiple charsets If we have multiple parts with different encodings we recode all HTML parts to UTF-8 and we use it as message charset. This is neccesary because Outlook assummessa single charset for all the message. Also we convert the end of line in text/plain to
tag when showing them as HTML in multipart/mixed parts. --- OpenChange/MAPIStoreMailMessage.m | 150 +++++++++++++++++++++++------- 1 file changed, 116 insertions(+), 34 deletions(-) diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 7af79b110..2b3588ef5 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -27,6 +27,7 @@ #import #import #import +#import #import #import #import @@ -268,13 +269,20 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) { NSUInteger i; id bodyStructure; + BOOL hasHtml = NO; + BOOL hasText = NO; bodyStructure = [sogoObject bodyStructure]; /* multipart/mixed is the default type. - multipart/alternative is the only other type of multipart supported here. + multipart/alternative and multipart/related are the only other type of multipart supported for the + message body */ if ([[bodyStructure objectForKey: @"type"] isEqualToString: @"multipart"]) - multipartMixed = ! [[bodyStructure objectForKey: @"subtype"] isEqualToString: @"alternative"]; + { + NSString *subtype = [bodyStructure objectForKey: @"subtype"]; + multipartMixed = !([subtype isEqualToString: @"alternative"] || + [subtype isEqualToString: @"related"]); + } else multipartMixed = NO; @@ -311,24 +319,35 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) if (charset) [bodyPartsCharsets setObject: charset forKey: key]; if (mimeType) - [bodyPartsMimeTypes setObject: mimeType forKey: key]; + { + [bodyPartsMimeTypes setObject: mimeType forKey: key]; + if ([mimeType isEqualToString: @"text/plain"]) + hasText = YES; + else if ([mimeType isEqualToString: @"text/html"]) + hasHtml = YES; + } if (i == 0) { ASSIGN (headerMimeType, mimeType); - ASSIGN (headerCharset, charset); parameters = partParameters; } - else + + if (charset) { - /* We can only put one header charset so we will use utf-8 - when we have different charsets in the parts */ - if (headerCharset != charset) - ASSIGN (headerCharset, @"utf-8"); + if (headerCharset == nil) + ASSIGN (headerCharset, charset); + else if (![headerCharset isEqualToString: charset]) + { + /* Because we have different charsets we will encode all in UTF-8 */ + ASSIGN (headerCharset, @"utf-8"); + } } } - - + + if (!hasHtml || !hasText) + multipartMixed = NO; + if ([headerMimeType isEqualToString: @"text/calendar"] || [headerMimeType isEqualToString: @"application/ics"]) { @@ -367,17 +386,17 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) id result; NSString *key; NSEnumerator *enumerator; - NSMutableData *htmlContent = nil; - NSMutableData *textContent = nil; + NSMutableData *htmlContent; + NSMutableData *textContent; + NSStringEncoding headerEncoding; result = [sogoObject fetchParts: bodyContentKeys]; result = [[result valueForKey: @"RawResponse"] objectForKey: @"fetch"]; htmlContent = [[NSMutableData alloc] initWithCapacity: 0]; - if (multipartMixed || mailIsEvent) - textContent = htmlContent; - else - textContent = [[NSMutableData alloc] initWithCapacity: 0]; + textContent = [[NSMutableData alloc] initWithCapacity: 0]; + + headerEncoding = [NSString stringEncodingForEncodingNamed: headerCharset]; enumerator = [bodyContentKeys objectEnumerator]; while ((key = [enumerator nextObject])) @@ -396,36 +415,99 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) encoding = @"7-bit"; /* We should provide a case for each of the types in acceptedMimeTypes */ - if ([mimeType isEqualToString: @"text/html"] && !mailIsEvent) + if (!mailIsEvent) { - content = [content bodyDataFromEncoding: encoding]; - [htmlContent appendData: content]; - } - else if ([mimeType isEqualToString: @"text/plain"] && !mailIsEvent) - { - content = [content bodyDataFromEncoding: encoding]; - NSString *charset = [bodyPartsCharsets objectForKey: key]; - if (charset) + NSString *charset; + NSStringEncoding charsetEncoding; + NSString *stringValue; + BOOL html; + if ([mimeType isEqualToString: @"text/html"]) { - NSString *stringValue = [content bodyStringFromCharset: charset]; - [textContent appendData: [stringValue dataUsingEncoding: NSUTF8StringEncoding]]; + html = YES; + } + else if ([mimeType isEqualToString: @"text/plain"]) + { + html = NO; } else { - [textContent appendData: content]; + [self warnWithFormat: @"Unsupported MIME type for non-event body part: %@.", + mimeType]; + continue; } + + content = [content bodyDataFromEncoding: encoding]; + charset = [bodyPartsCharsets objectForKey: key]; + + stringValue = nil; + if (charset) + { + charsetEncoding = [NSString stringEncodingForEncodingNamed: charset]; + if ((charsetEncoding == headerEncoding) || !headerEncoding) + { + if (html) + [htmlContent appendData: content]; + else + [textContent appendData: content]; + } + else + { + stringValue = [content bodyStringFromCharset: charset]; + if (html) + [htmlContent appendData: [stringValue dataUsingEncoding: headerEncoding]]; + else + [textContent appendData: [stringValue dataUsingEncoding: headerEncoding]]; + } + + if (multipartMixed) + { + // We must add it also to the other mail representation + if (html) + { + // TODO: html conversion to text + if (stringValue && headerEncoding) + [textContent appendData: [stringValue dataUsingEncoding: headerEncoding]]; + else + [textContent appendData: content]; + } + else + { + if (headerEncoding) + { + if (stringValue == nil) + stringValue = [content bodyStringFromCharset: charset]; + + stringValue = [stringValue stringByReplacingOccurrencesOfString: @"\n" + withString: @"
"]; + [htmlContent appendData: [stringValue dataUsingEncoding: headerEncoding]]; + } + else + { + [htmlContent appendData: content]; + } + } + } + } + else + { + /* Without charset we cannot mangle the text, so we add as it stands */ + if (html || multipartMixed) + [htmlContent appendData: content]; + if (!html || multipartMixed) + [textContent appendData: content]; + } + } - else if (mailIsEvent && - ([mimeType isEqualToString: @"text/calendar"] || - [mimeType isEqualToString: @"application/ics"])) + else if ([mimeType isEqualToString: @"text/calendar"] || + [mimeType isEqualToString: @"application/ics"]) { content = [content bodyDataFromEncoding: encoding]; [textContent appendData: content]; } else { - [self warnWithFormat: @"Unsupported combination for body part. MIME type: %@. Event: %i", - mimeType, mailIsEvent]; + [self warnWithFormat: @"Unsupported combination for event body part. MIME type: %@", + mimeType]; } } From d2e7fdf4d24e3d2a317394587d5a9eb013561af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Thu, 18 Feb 2016 11:01:56 +0100 Subject: [PATCH 33/38] Tests for SOPE string-encoding-for-encoding-named-methods branch --- Tests/Unit/GNUmakefile | 1 + Tests/Unit/TestNGMimeType.m | 101 ++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Tests/Unit/TestNGMimeType.m diff --git a/Tests/Unit/GNUmakefile b/Tests/Unit/GNUmakefile index 6c93399e7..171b3576a 100644 --- a/Tests/Unit/GNUmakefile +++ b/Tests/Unit/GNUmakefile @@ -23,6 +23,7 @@ $(TEST_TOOL)_OBJC_FILES += \ \ TestNGMimeHeaderFieldGenerator.m \ TestNGMimeMessageGenerator.m \ + TestNGMimeType.m \ \ TestNSData+Crypto.m \ TestNSString+Crypto.m \ diff --git a/Tests/Unit/TestNGMimeType.m b/Tests/Unit/TestNGMimeType.m new file mode 100644 index 000000000..8cfe534b6 --- /dev/null +++ b/Tests/Unit/TestNGMimeType.m @@ -0,0 +1,101 @@ +/* TestNGMimeAddressHeaderFieldGenerator.m - this file is part of SOGo + * + * Copyright (C) 2016 + * + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#import +#import +#import "SOGoTest.h" +#include + +@interface TestNGMimeType : SOGoTest +@end + +@implementation TestNGMimeType + +- (void) test_EncodingForCharset +{ + int i; + NSArray *cases = [NSArray arrayWithObjects: + @"utf8", + [NSNumber numberWithInt: NSUTF8StringEncoding], + [NSNumber numberWithInt: NSUTF8StringEncoding], + + @"utf-8", + [NSNumber numberWithInt: NSUTF8StringEncoding], + [NSNumber numberWithInt: NSUTF8StringEncoding], + + @"ascii", + [NSNumber numberWithInt: NSASCIIStringEncoding], + [NSNumber numberWithInt: NSASCIIStringEncoding], + + @"us-ascii", + [NSNumber numberWithInt: NSASCIIStringEncoding], + [NSNumber numberWithInt: NSASCIIStringEncoding], + + @"iso-8859-5", + [NSNumber numberWithInt: NSISOCyrillicStringEncoding], + [NSNumber numberWithInt: NSISOCyrillicStringEncoding], + + @"windows-1251", + [NSNumber numberWithInt: NSWindowsCP1251StringEncoding], + [NSNumber numberWithInt: NSWindowsCP1251StringEncoding], + + @"inexistent_encoding", + [NSNumber numberWithInt: NSISOLatin1StringEncoding], + [NSNumber numberWithInt: 0], + + @"nil", + [NSNumber numberWithInt: [NSString defaultCStringEncoding]], + [NSNumber numberWithInt: 0], + + @"", + [NSNumber numberWithInt: [NSString defaultCStringEncoding]], + [NSNumber numberWithInt: 0], + + nil]; + + for (i=0; i < [cases count]; i+=3) + { + NSStringEncoding fromNGMimeType, fromNSString; + NSString *charset = [cases objectAtIndex: i]; + NSStringEncoding fromNGMimeTypeExpected = [[cases objectAtIndex: i+1] intValue]; + NSStringEncoding fromNSStringExpected = [[cases objectAtIndex: i+2] intValue]; + NSString *error; + + if ([charset isEqualToString: @"nil"]) + charset = nil; + + fromNGMimeType = [NGMimeType stringEncodingForCharset: charset]; + error = [NSString + stringWithFormat: + @"[NGMimeType stringEncodingForCharset: %@]=%i expected: %i", + charset, fromNGMimeType, fromNGMimeTypeExpected]; + testWithMessage(fromNGMimeType == fromNGMimeTypeExpected, error); + + fromNSString = [NSString stringEncodingForEncodingNamed: charset]; + error = [NSString + stringWithFormat: + @"[NSString stringEncodingForEncodingNamed: %@]=%i expected: %i", + charset, fromNSString, fromNSStringExpected]; + testWithMessage(fromNSString == fromNSStringExpected, error); + } +} + +@end From f388d180ae4fbb8c46c082e6020c9aa60dce0287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Amor=20Garc=C3=ADa?= Date: Mon, 8 Feb 2016 18:17:35 +0100 Subject: [PATCH 34/38] oc-mail: Better management of nested multipart types Instead of treating all the message either as alternative or mixed with this changeset the MIME type of the parent part is used. This allows a correct disposition of the message in the cases when nested multiparts elements are used. Also in mixed parts we convert between plain text and HTML as needed. --- OpenChange/MAPIStoreMailMessage.h | 2 +- OpenChange/MAPIStoreMailMessage.m | 79 +++++++++++++++++++------------ SoObjects/Mailer/SOGoMailObject.h | 6 +-- SoObjects/Mailer/SOGoMailObject.m | 49 +++++++++++++++---- 4 files changed, 93 insertions(+), 43 deletions(-) diff --git a/OpenChange/MAPIStoreMailMessage.h b/OpenChange/MAPIStoreMailMessage.h index 735861ff3..ed2fc2fd7 100644 --- a/OpenChange/MAPIStoreMailMessage.h +++ b/OpenChange/MAPIStoreMailMessage.h @@ -44,11 +44,11 @@ NSMutableDictionary *bodyPartsEncodings; NSMutableDictionary *bodyPartsCharsets; NSMutableDictionary *bodyPartsMimeTypes; + NSMutableDictionary *bodyPartsMixed; NSString *headerCharset; NSString *headerMimeType; BOOL bodySetup; - BOOL multipartMixed; NSArray *bodyContent; BOOL fetchedAttachments; diff --git a/OpenChange/MAPIStoreMailMessage.m b/OpenChange/MAPIStoreMailMessage.m index 2b3588ef5..65eb0f2c7 100644 --- a/OpenChange/MAPIStoreMailMessage.m +++ b/OpenChange/MAPIStoreMailMessage.m @@ -25,6 +25,7 @@ #import #import #import +#import #import #import #import @@ -42,6 +43,7 @@ #import #import #import +#import #import "Codepages.h" #import "NSData+MAPIStore.h" @@ -131,11 +133,11 @@ static NSArray *acceptedMimeTypes; bodyPartsEncodings = nil; bodyPartsCharsets = nil; bodyPartsMimeTypes = nil; + bodyPartsMixed = nil; headerSetup = NO; bodySetup = NO; bodyContent = nil; - multipartMixed = NO; mailIsEvent = NO; mailIsMeetingRequest = NO; @@ -155,6 +157,7 @@ static NSArray *acceptedMimeTypes; [bodyPartsEncodings release]; [bodyPartsCharsets release]; [bodyPartsMimeTypes release]; + [bodyPartsMixed release]; [bodyContent release]; @@ -260,7 +263,8 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) keys = [NSMutableArray array]; [sogoObject addRequiredKeysOfStructure: [sogoObject bodyStructure] - path: @"" toArray: keys + path: @"" + toArray: keys acceptedTypes: acceptedMimeTypes withPeek: YES]; [keys sortUsingFunction: _compareBodyKeysByPriority context: acceptedMimeTypes]; @@ -268,39 +272,29 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) if (keysCount > 0) { NSUInteger i; - id bodyStructure; BOOL hasHtml = NO; BOOL hasText = NO; - - bodyStructure = [sogoObject bodyStructure]; - /* multipart/mixed is the default type. - multipart/alternative and multipart/related are the only other type of multipart supported for the - message body - */ - if ([[bodyStructure objectForKey: @"type"] isEqualToString: @"multipart"]) - { - NSString *subtype = [bodyStructure objectForKey: @"subtype"]; - multipartMixed = !([subtype isEqualToString: @"alternative"] || - [subtype isEqualToString: @"related"]); - } - else - multipartMixed = NO; bodyContentKeys = [[NSMutableArray alloc] initWithCapacity: keysCount]; bodyPartsEncodings = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; bodyPartsCharsets = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; bodyPartsMimeTypes = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; + bodyPartsMixed = [[NSMutableDictionary alloc] initWithCapacity: keysCount]; for (i = 0; i < keysCount; i++) { + NSDictionary *bodyStructureKey; NSString *key; NSString *mimeType; + BOOL mixedPart; NSString *strippedKey; NSString *encoding; NSString *charset; NSDictionary *partParameters; + NSString *multipart; - key = [[keys objectAtIndex: i] objectForKey: @"key"]; + bodyStructureKey = [keys objectAtIndex: i]; + key = [bodyStructureKey objectForKey: @"key"]; if (key == nil) continue; @@ -312,7 +306,21 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) partParameters = [partHeaderData objectForKey: @"parameterList"]; encoding = [partHeaderData objectForKey: @"encoding"]; charset = [partParameters objectForKey: @"charset"]; - mimeType = [[keys objectAtIndex: i] objectForKey: @"mimeType"]; + mimeType = [bodyStructureKey objectForKey: @"mimeType"]; + + /* multipart/mixed is the default type. + multipart/alternative is the only other type of multipart supported now. + */ + multipart = [bodyStructureKey objectForKey: @"multipart"]; + if ([multipart isEqualToString: @""]) + { + mixedPart = NO; + } + else + { + mixedPart = !([multipart isEqualToString: @"multipart/alternative"] || + [multipart isEqualToString: @"multipart/related"]); + } if (encoding) [bodyPartsEncodings setObject: encoding forKey: key]; @@ -326,6 +334,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) else if ([mimeType isEqualToString: @"text/html"]) hasHtml = YES; } + [bodyPartsMixed setObject: [NSNumber numberWithBool: mixedPart] forKey: key]; if (i == 0) { @@ -336,17 +345,28 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) if (charset) { if (headerCharset == nil) - ASSIGN (headerCharset, charset); + { + ASSIGN (headerCharset, charset); + } else if (![headerCharset isEqualToString: charset]) { /* Because we have different charsets we will encode all in UTF-8 */ ASSIGN (headerCharset, @"utf-8"); } } + } if (!hasHtml || !hasText) - multipartMixed = NO; + { + NSArray *bodyPartsMixedKeys = [bodyPartsMixed allKeys]; + for (i = 0; i < [keys count]; i++) + { + NSString *key = [bodyPartsMixedKeys objectAtIndex: i]; + [bodyPartsMixed setObject: [NSNumber numberWithBool: NO] forKey: key]; + } + } + if ([headerMimeType isEqualToString: @"text/calendar"] || [headerMimeType isEqualToString: @"application/ics"]) @@ -410,9 +430,9 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) NSString *mimeType = [bodyPartsMimeTypes objectForKey: key]; if (mimeType == nil) continue; - NSString *encoding = [bodyPartsEncodings objectForKey: key]; - if (encoding == nil) - encoding = @"7-bit"; + NSString *contentEncoding = [bodyPartsEncodings objectForKey: key]; + if (contentEncoding == nil) + contentEncoding = @"7-bit"; /* We should provide a case for each of the types in acceptedMimeTypes */ if (!mailIsEvent) @@ -421,6 +441,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) NSStringEncoding charsetEncoding; NSString *stringValue; BOOL html; + BOOL mixed = [[bodyPartsMixed objectForKey: key] boolValue]; if ([mimeType isEqualToString: @"text/html"]) { html = YES; @@ -436,7 +457,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) continue; } - content = [content bodyDataFromEncoding: encoding]; + content = [content bodyDataFromEncoding: contentEncoding]; charset = [bodyPartsCharsets objectForKey: key]; stringValue = nil; @@ -459,7 +480,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) [textContent appendData: [stringValue dataUsingEncoding: headerEncoding]]; } - if (multipartMixed) + if (mixed) { // We must add it also to the other mail representation if (html) @@ -491,9 +512,9 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) else { /* Without charset we cannot mangle the text, so we add as it stands */ - if (html || multipartMixed) + if (html || mixed) [htmlContent appendData: content]; - if (!html || multipartMixed) + if (!html || mixed) [textContent appendData: content]; } @@ -501,7 +522,7 @@ _compareBodyKeysByPriority (id entry1, id entry2, void *data) else if ([mimeType isEqualToString: @"text/calendar"] || [mimeType isEqualToString: @"application/ics"]) { - content = [content bodyDataFromEncoding: encoding]; + content = [content bodyDataFromEncoding: contentEncoding]; [textContent appendData: content]; } else diff --git a/SoObjects/Mailer/SOGoMailObject.h b/SoObjects/Mailer/SOGoMailObject.h index af52334ee..8089bcf0b 100644 --- a/SoObjects/Mailer/SOGoMailObject.h +++ b/SoObjects/Mailer/SOGoMailObject.h @@ -129,9 +129,9 @@ NSArray *SOGoMailCoreInfoKeys; inContext: (id)_ctx; - (void) addRequiredKeysOfStructure: (NSDictionary *) info - path: (NSString *) p - toArray: (NSMutableArray *) keys - acceptedTypes: (NSArray *) types + path: (NSString *) p + toArray: (NSMutableArray *) keys + acceptedTypes: (NSArray *) types withPeek: (BOOL) withPeek; @end diff --git a/SoObjects/Mailer/SOGoMailObject.m b/SoObjects/Mailer/SOGoMailObject.m index dd4ee0358..2c4738061 100644 --- a/SoObjects/Mailer/SOGoMailObject.m +++ b/SoObjects/Mailer/SOGoMailObject.m @@ -516,12 +516,15 @@ static BOOL debugSoParts = NO; return s; } +/* This is defined before the public version without parentMimeType + argument to be able to call it recursively */ /* bulk fetching of plain/text content */ - (void) addRequiredKeysOfStructure: (NSDictionary *) info - path: (NSString *) p - toArray: (NSMutableArray *) keys - acceptedTypes: (NSArray *) types + path: (NSString *) p + toArray: (NSMutableArray *) keys + acceptedTypes: (NSArray *) types withPeek: (BOOL) withPeek + parentMultipart: (NSString *) parentMPart { /* This is used to collect the set of IMAP4 fetch-keys required to fetch @@ -536,6 +539,7 @@ static BOOL debugSoParts = NO; id body; NSString *bodyToken, *sp, *mimeType; id childInfo; + NSString *multipart; bodyToken = (withPeek ? @"body.peek" : @"body"); @@ -543,6 +547,12 @@ static BOOL debugSoParts = NO; [info valueForKey: @"type"], [info valueForKey: @"subtype"]] lowercaseString]; + + if ([[info valueForKey: @"type"] isEqualToString: @"multipart"]) + multipart = mimeType; + else + multipart = parentMPart; + if ([types containsObject: mimeType]) { if ([p length] > 0) @@ -557,7 +567,8 @@ static BOOL debugSoParts = NO; k = [NSString stringWithFormat: @"%@[text]", bodyToken]; } [keys addObject: [NSDictionary dictionaryWithObjectsAndKeys: k, @"key", - mimeType, @"mimeType", nil]]; + mimeType, @"mimeType", + multipart, @"multipart", nil]]; } parts = [info objectForKey: @"parts"]; @@ -571,9 +582,11 @@ static BOOL debugSoParts = NO; childInfo = [parts objectAtIndex: i]; [self addRequiredKeysOfStructure: childInfo - path: sp toArray: keys - acceptedTypes: types - withPeek: withPeek]; + path: sp + toArray: keys + acceptedTypes: types + withPeek: withPeek + parentMultipart: multipart]; } /* check body */ @@ -597,12 +610,28 @@ static BOOL debugSoParts = NO; else sp = [p length] > 0 ? (id)[p stringByAppendingString: @".1"] : (id)@"1"; [self addRequiredKeysOfStructure: body - path: sp toArray: keys - acceptedTypes: types - withPeek: withPeek]; + path: sp + toArray: keys + acceptedTypes: types + withPeek: withPeek + parentMultipart: multipart]; } } +- (void) addRequiredKeysOfStructure: (NSDictionary *) info + path: (NSString *) p + toArray: (NSMutableArray *) keys + acceptedTypes: (NSArray *) types + withPeek: (BOOL) withPeek +{ + [self addRequiredKeysOfStructure: (NSDictionary *) info + path: (NSString *) p + toArray: (NSMutableArray *) keys + acceptedTypes: (NSArray *) types + withPeek: (BOOL) withPeek + parentMultipart: @""]; +} + - (NSArray *) plainTextContentFetchKeys { /* From 12e952eb5524810a7a3cefa9cbc30f015c1d160d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Enrique=20J=2E=20Hern=C3=A1ndez=20Blasco?= Date: Mon, 22 Feb 2016 17:51:54 +0100 Subject: [PATCH 35/38] oc: Honor calendar WebMail UI permissions on OpenChange library By expanding roles from the given ACL to have these values as flags inside the OpenChange library. This only applies to Calendar and Tasks folders which stored four different access rights to three different types of events/tasks. As the events and tasks are stored in the same table, I have added two new classes to manage permissions in the same way and this avoids the code duplication called MAPIStoreCalTask(Folder|Message). --- OpenChange/GNUmakefile | 3 + OpenChange/MAPIStoreAppointmentWrapper.h | 1 + OpenChange/MAPIStoreAppointmentWrapper.m | 40 +++++---- OpenChange/MAPIStoreCalTaskFolder.h | 35 ++++++++ OpenChange/MAPIStoreCalTaskFolder.m | 101 +++++++++++++++++++++ OpenChange/MAPIStoreCalTaskMessage.h | 40 +++++++++ OpenChange/MAPIStoreCalTaskMessage.m | 107 +++++++++++++++++++++++ OpenChange/MAPIStoreCalendarFolder.h | 4 +- OpenChange/MAPIStoreCalendarMessage.h | 4 +- OpenChange/MAPIStoreCalendarMessage.m | 16 ++-- OpenChange/MAPIStoreFolder.h | 2 + OpenChange/MAPIStoreFolder.m | 8 ++ OpenChange/MAPIStoreGCSFolder.m | 1 + OpenChange/MAPIStoreMessage.h | 1 + OpenChange/MAPIStoreMessage.m | 10 +++ OpenChange/MAPIStorePermissionsTable.m | 1 + OpenChange/MAPIStoreTasksFolder.h | 4 +- OpenChange/MAPIStoreTasksMessage.h | 4 +- OpenChange/MAPIStoreTasksMessage.m | 65 +++++++------- 19 files changed, 381 insertions(+), 66 deletions(-) create mode 100644 OpenChange/MAPIStoreCalTaskFolder.h create mode 100644 OpenChange/MAPIStoreCalTaskFolder.m create mode 100644 OpenChange/MAPIStoreCalTaskMessage.h create mode 100644 OpenChange/MAPIStoreCalTaskMessage.m diff --git a/OpenChange/GNUmakefile b/OpenChange/GNUmakefile index 4fc207904..739fbd95b 100644 --- a/OpenChange/GNUmakefile +++ b/OpenChange/GNUmakefile @@ -78,6 +78,9 @@ $(SOGOBACKEND)_OBJC_FILES += \ MAPIStoreGCSMessage.m \ MAPIStoreGCSMessageTable.m \ \ + MAPIStoreCalTaskFolder.m \ + MAPIStoreCalTaskMessage.m \ + \ MAPIStoreCalendarAttachment.m \ MAPIStoreCalendarContext.m \ MAPIStoreCalendarFolder.m \ diff --git a/OpenChange/MAPIStoreAppointmentWrapper.h b/OpenChange/MAPIStoreAppointmentWrapper.h index ac96dccc2..5ed4c83ff 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.h +++ b/OpenChange/MAPIStoreAppointmentWrapper.h @@ -70,6 +70,7 @@ - (NSString *) creator; - (NSString *) owner; +- (NSUInteger) sensitivity; - (enum mapistore_error) getPidTagSenderEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx; diff --git a/OpenChange/MAPIStoreAppointmentWrapper.m b/OpenChange/MAPIStoreAppointmentWrapper.m index 7c16cf6b1..1881a16a5 100644 --- a/OpenChange/MAPIStoreAppointmentWrapper.m +++ b/OpenChange/MAPIStoreAppointmentWrapper.m @@ -1080,6 +1080,29 @@ static NSCharacterSet *hexCharacterSet = nil; return owner; } +- (NSUInteger) sensitivity +{ + NSString *accessClass = nil; + NSUInteger v; + + accessClass = [event accessClass]; + if (accessClass) + { + if ([accessClass isEqualToString: @"X-PERSONAL"]) + v = 0x1; + else if ([accessClass isEqualToString: @"PRIVATE"]) + v = 0x2; + else if ([accessClass isEqualToString: @"CONFIDENTIAL"]) + v = 0x3; + else + v = 0x0; /* PUBLIC */ + } + else + v = 0x0; /* PUBLIC */ + + return v; +} + /* sender representing */ - (enum mapistore_error) getPidTagSentRepresentingEmailAddress: (void **) data inMemCtx: (TALLOC_CTX *) memCtx @@ -1242,23 +1265,8 @@ static NSCharacterSet *hexCharacterSet = nil; { /* See [MS-OXCICAL] Section 2.1.3.11.20.4 */ uint32_t v; - NSString *accessClass; - - accessClass = [event accessClass]; - if (accessClass) - { - if ([accessClass isEqualToString: @"X-PERSONAL"]) - v = 0x1; - else if ([accessClass isEqualToString: @"PRIVATE"]) - v = 0x2; - else if ([accessClass isEqualToString: @"CONFIDENTIAL"]) - v = 0x3; - else - v = 0x0; /* PUBLIC */ - } - else - v = 0x0; /* PUBLIC */ + v = (uint32_t) [self sensitivity]; *data = MAPILongValue (memCtx, v); return MAPISTORE_SUCCESS; diff --git a/OpenChange/MAPIStoreCalTaskFolder.h b/OpenChange/MAPIStoreCalTaskFolder.h new file mode 100644 index 000000000..92b75e463 --- /dev/null +++ b/OpenChange/MAPIStoreCalTaskFolder.h @@ -0,0 +1,35 @@ +/* MAPIStoreCalTaskFolder.h - this file is part of SOGo + * + * Copyright (C) 2016 Enrique J. Hernandez + * + * Author: Enrique J. Hernandez + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef MAPISTORECALTASKFOLDER_H +#define MAPISTORECALTASKFOLDER_H + +#import "MAPIStoreGCSFolder.h" + +/* This class is intended to share code between Calendar and Tasks as + of nowadays share the table */ + +@interface MAPIStoreCalTaskFolder : MAPIStoreGCSFolder + +@end + +#endif /* MAPISTORECALTASKFOLDER_H */ diff --git a/OpenChange/MAPIStoreCalTaskFolder.m b/OpenChange/MAPIStoreCalTaskFolder.m new file mode 100644 index 000000000..8876c77e5 --- /dev/null +++ b/OpenChange/MAPIStoreCalTaskFolder.m @@ -0,0 +1,101 @@ +/* MAPIStoreCalTaskFolder.m - this file is part of SOGo + * + * Copyright (C) 2016 Enrique J. Hernandez + * + * Author: Enrique J. Hernandez + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#import +#import +#import +#import + +#import + +#import "MAPIStoreCalTaskFolder.h" + +@implementation MAPIStoreCalTaskFolder + +- (NSArray *) expandRoles: (NSArray *) roles +{ + static NSDictionary *rolesMap = nil; + NSArray *subRoles; + NSMutableSet *expandedRoles; + NSString *role, *subRole; + NSUInteger i, max, j; + + if (!rolesMap) + { + /* Build the map of array permissions */ + rolesMap = [[NSDictionary alloc] initWithObjects: [NSArray arrayWithObjects: + [NSArray arrayWithObjects: SOGoCalendarRole_PublicDAndTViewer, + SOGoCalendarRole_PublicViewer, + SOGoCalendarRole_PublicResponder, + SOGoCalendarRole_PublicModifier, nil], + [NSArray arrayWithObjects: SOGoCalendarRole_ConfidentialDAndTViewer, + SOGoCalendarRole_ConfidentialViewer, + SOGoCalendarRole_ConfidentialResponder, + SOGoCalendarRole_ConfidentialModifier, nil], + [NSArray arrayWithObjects: SOGoCalendarRole_PrivateDAndTViewer, + SOGoCalendarRole_PrivateViewer, + SOGoCalendarRole_PrivateResponder, + SOGoCalendarRole_PrivateModifier, nil], + [NSArray arrayWithObjects: SOGoCalendarRole_ComponentDAndTViewer, + SOGoCalendarRole_ComponentViewer, + SOGoCalendarRole_ComponentResponder, + SOGoCalendarRole_ComponentModifier, nil], + nil] + forKeys: [NSArray arrayWithObjects: @"Public", @"Confidential", @"Private", + @"Component", nil]]; + } + + max = [roles count]; + expandedRoles = [NSMutableSet set]; + for (i = 0; i < max; i++) + { + role = [roles objectAtIndex: i]; + subRoles = nil; + if ([role hasPrefix: @"Public"]) + subRoles = [rolesMap objectForKey: @"Public"]; + else if ([role hasPrefix: @"Confidential"]) + subRoles = [rolesMap objectForKey: @"Confidential"]; + else if ([role hasPrefix: @"Private"]) + subRoles = [rolesMap objectForKey: @"Private"]; + else if ([role hasPrefix: @"Component"]) + subRoles = [rolesMap objectForKey: @"Component"]; + + if (subRoles) + { + for (j = 0; j < [subRoles count]; j++) + { + subRole = [subRoles objectAtIndex: j]; + [expandedRoles addObject: subRole]; + + if ([subRole isEqualToString: role]) + break; + } + } + else + { + [expandedRoles addObject: role]; + } + } + + return [expandedRoles allObjects]; +} + +@end diff --git a/OpenChange/MAPIStoreCalTaskMessage.h b/OpenChange/MAPIStoreCalTaskMessage.h new file mode 100644 index 000000000..8e284b414 --- /dev/null +++ b/OpenChange/MAPIStoreCalTaskMessage.h @@ -0,0 +1,40 @@ +/* MAPIStoreCalTaskMessage.h - this file is part of SOGo + * + * Copyright (C) 2016 Enrique J. Hernandez + * + * Author: Enrique J. Hernandez + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef MAPISTORECALTASKMESSAGE_H +#define MAPISTORECALTASKMESSAGE_H + +#import "MAPIStoreGCSMessage.h" + +/* This class is intended to share common logic for Calendar and Tasks + as of today they are stored in the same table. This is relevant for + permissions */ +@interface MAPIStoreCalTaskMessage : MAPIStoreGCSMessage +{ +} + +/* Get the sensitivity (access class) from a message */ +- (NSUInteger) sensitivity; + +@end + +#endif /* MAPISTORECALTASKMESSAGE_H */ diff --git a/OpenChange/MAPIStoreCalTaskMessage.m b/OpenChange/MAPIStoreCalTaskMessage.m new file mode 100644 index 000000000..b88e9c2ef --- /dev/null +++ b/OpenChange/MAPIStoreCalTaskMessage.m @@ -0,0 +1,107 @@ +/* MAPIStoreCalTaskMessage.h - this file is part of SOGo + * + * Copyright (C) 2016 Enrique J. Hernandez + * + * Author: Enrique J. Hernandez + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +#import +#import + +#import + +#import + +#import "MAPIStoreFolder.h" +#import "MAPIStoreCalTaskMessage.h" + +@implementation MAPIStoreCalTaskMessage + +/* It must be implemented by subclasses */ +- (NSUInteger) sensitivity +{ + [self subclassResponsibility: _cmd]; + + return 0; +} + +- (NSArray *) expandRoles: (NSArray *) roles +{ + return [container expandRoles: roles]; +} + +- (BOOL) subscriberCanModifyMessage +{ + BOOL rc; + NSArray *roles; + + roles = [self activeUserRoles]; + + if (isNew) + rc = [roles containsObject: SOGoRole_ObjectCreator]; + else + rc = ([roles containsObject: SOGoCalendarRole_ComponentModifier] + || [roles containsObject: SOGoCalendarRole_ComponentResponder]); + + /* Check if the message is owned and it has permission to edit it */ + if (!rc && [roles containsObject: MAPIStoreRightEditOwn]) + { + NSString *currentUser; + + currentUser = [[container context] activeUser]; + rc = [currentUser isEqual: [self ownerUser]]; + } + + if (!rc) + { + NSUInteger sensitivity; + + /* Get sensitivity of the message to check if the user can + modify the message */ + sensitivity = [self sensitivity]; + /* FIXME: Use OpenChange constant names */ + switch (sensitivity) + { + case 0: /* PUBLIC */ + rc = [roles containsObject: SOGoCalendarRole_PublicModifier] + || [roles containsObject: SOGoCalendarRole_PublicResponder]; + break; + case 1: /* PERSONAL */ + case 2: /* PRIVATE */ + rc = [roles containsObject: SOGoCalendarRole_PrivateModifier] + || [roles containsObject: SOGoCalendarRole_PrivateResponder]; + break; + case 3: /* CONFIDENTIAL */ + rc = [roles containsObject: SOGoCalendarRole_ConfidentialModifier] + || [roles containsObject: SOGoCalendarRole_ConfidentialResponder]; + } + } + return rc; +} + +- (BOOL) subscriberCanReadMessage +{ + NSArray *roles; + + roles = [self activeUserRoles]; + + return ([roles containsObject: SOGoCalendarRole_ComponentViewer] + || [roles containsObject: SOGoCalendarRole_ComponentDAndTViewer] + || [self subscriberCanModifyMessage]); +} + +@end diff --git a/OpenChange/MAPIStoreCalendarFolder.h b/OpenChange/MAPIStoreCalendarFolder.h index fd6c5d20f..9b3a4cf5c 100644 --- a/OpenChange/MAPIStoreCalendarFolder.h +++ b/OpenChange/MAPIStoreCalendarFolder.h @@ -23,9 +23,9 @@ #ifndef MAPISTORECALENDARFOLDER_H #define MAPISTORECALENDARFOLDER_H -#import "MAPIStoreGCSFolder.h" +#import "MAPIStoreCalTaskFolder.h" -@interface MAPIStoreCalendarFolder : MAPIStoreGCSFolder +@interface MAPIStoreCalendarFolder : MAPIStoreCalTaskFolder @end diff --git a/OpenChange/MAPIStoreCalendarMessage.h b/OpenChange/MAPIStoreCalendarMessage.h index 8b2de759d..99e286073 100644 --- a/OpenChange/MAPIStoreCalendarMessage.h +++ b/OpenChange/MAPIStoreCalendarMessage.h @@ -23,13 +23,13 @@ #ifndef MAPISTORECALENDARMESSAGE_H #define MAPISTORECALENDARMESSAGE_H -#import "MAPIStoreGCSMessage.h" +#import "MAPIStoreCalTaskMessage.h" @class iCalCalendar; @class iCalEvent; @class MAPIStoreAppointmentWrapper; -@interface MAPIStoreCalendarMessage : MAPIStoreGCSMessage +@interface MAPIStoreCalendarMessage : MAPIStoreCalTaskMessage { iCalCalendar *calendar; iCalEvent *masterEvent; diff --git a/OpenChange/MAPIStoreCalendarMessage.m b/OpenChange/MAPIStoreCalendarMessage.m index de1675045..5ec92d07f 100644 --- a/OpenChange/MAPIStoreCalendarMessage.m +++ b/OpenChange/MAPIStoreCalendarMessage.m @@ -528,6 +528,11 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; ASSIGN (sogoObject, newObject); } +- (NSUInteger) sensitivity +{ + return [[self _appointmentWrapper] sensitivity]; +} + - (NSString *) creator { return [[self _appointmentWrapper] creator]; @@ -538,17 +543,6 @@ static Class NSArrayK, MAPIStoreAppointmentWrapperK; return [[self _appointmentWrapper] owner]; } -- (BOOL) subscriberCanReadMessage -{ - NSArray *roles; - - roles = [self activeUserRoles]; - - return ([roles containsObject: SOGoCalendarRole_ComponentViewer] - || [roles containsObject: SOGoCalendarRole_ComponentDAndTViewer] - || [self subscriberCanModifyMessage]); -} - - (void) _updateAttachedEvents { NSArray *allAttachments; diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index a6a591ec2..46e13d235 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -89,6 +89,8 @@ extern NSString *MAPIStoreRightFolderContact; - (MAPIStorePermissionsTable *) permissionsTable; - (NSArray *) permissionEntries; +- (NSArray *) expandRoles: (NSArray *) roles; + /* message objects and tables */ - (id) lookupMessage: (NSString *) messageKey; - (NSArray *) messageKeys; diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index a1ef53f94..43efcaff9 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -919,6 +919,11 @@ NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; return nil; } +- (NSArray *) expandRoles: (NSArray *) roles +{ + return roles; +} + - (void) _modifyPermissionEntryForUser: (NSString *) user withRoles: (NSArray *) roles isAddition: (BOOL) isAddition @@ -1053,6 +1058,7 @@ NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; NSArray *roles; roles = [[self aclFolder] aclsForUser: [activeUser login]]; + roles = [self expandRoles: roles]; // Not required here /* Check FolderVisible right to return the table */ access = ([self exchangeRightsForRoles: roles] & RoleNone) != 0; } @@ -1307,6 +1313,7 @@ NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; NSArray *roles; roles = [[self aclFolder] aclsForUser: [activeUser login]]; + roles = [self expandRoles: roles]; rights = [self exchangeRightsForRoles: roles]; /* FreeBusySimple and FreeBusyDetailed does not apply here [MS-OXCFOLD] Section 2.2.2.2.2.8 */ @@ -1664,6 +1671,7 @@ NSString *MAPIStoreRightFolderContact = @"RightsFolderContact"; NSArray *roles; roles = [[self aclFolder] aclsForUser: [activeUser login]]; + roles = [self expandRoles: roles]; // Not required if (([self exchangeRightsForRoles: roles] & RightsFolderOwner) == 0) return MAPISTORE_ERR_DENIED; } diff --git a/OpenChange/MAPIStoreGCSFolder.m b/OpenChange/MAPIStoreGCSFolder.m index c70e1f1c3..9b269df35 100644 --- a/OpenChange/MAPIStoreGCSFolder.m +++ b/OpenChange/MAPIStoreGCSFolder.m @@ -859,6 +859,7 @@ static Class NSNumberK; woContext = [[self userContext] woContext]; activeUserRoles = [activeUser rolesForObject: sogoObject inContext: woContext]; + activeUserRoles = [self expandRoles: activeUserRoles]; [activeUserRoles retain]; } diff --git a/OpenChange/MAPIStoreMessage.h b/OpenChange/MAPIStoreMessage.h index 2f059733e..b7441a74c 100644 --- a/OpenChange/MAPIStoreMessage.h +++ b/OpenChange/MAPIStoreMessage.h @@ -69,6 +69,7 @@ - (NSArray *) activeContainerMessageTables; - (NSArray *) activeUserRoles; +- (NSArray *) expandRoles: (NSArray *) roles; /* move & copy internal ops */ - (void) copyToMessage: (MAPIStoreMessage *) newMessage inMemCtx: (TALLOC_CTX *) memCtx; diff --git a/OpenChange/MAPIStoreMessage.m b/OpenChange/MAPIStoreMessage.m index 5f341f600..3e303e5a3 100644 --- a/OpenChange/MAPIStoreMessage.m +++ b/OpenChange/MAPIStoreMessage.m @@ -981,12 +981,22 @@ rtf2html (NSData *compressedRTF) activeUserRoles = [[context activeUser] rolesForObject: sogoObject inContext: [userContext woContext]]; + /* We use in this library the roles as flags, so we expand high + access rights with the lower ones */ + activeUserRoles = [self expandRoles: activeUserRoles]; [activeUserRoles retain]; } return activeUserRoles; } +/* Expand current roles with lower access roles to transform them to + flags */ +- (NSArray *) expandRoles: (NSArray *) roles +{ + return roles; +} + /* Can the current active user read the message? */ - (BOOL) subscriberCanReadMessage { diff --git a/OpenChange/MAPIStorePermissionsTable.m b/OpenChange/MAPIStorePermissionsTable.m index 193ef9a77..3bd2f84b7 100644 --- a/OpenChange/MAPIStorePermissionsTable.m +++ b/OpenChange/MAPIStorePermissionsTable.m @@ -134,6 +134,7 @@ NSArray *roles; roles = [[(MAPIStoreFolder *) container aclFolder] aclsForUser: userId]; + roles = [(MAPIStoreFolder *) container expandRoles: roles]; rights = [(MAPIStoreFolder *) container exchangeRightsForRoles: roles]; *data = MAPILongValue (memCtx, rights); diff --git a/OpenChange/MAPIStoreTasksFolder.h b/OpenChange/MAPIStoreTasksFolder.h index dc9b6791a..3d16a44ae 100644 --- a/OpenChange/MAPIStoreTasksFolder.h +++ b/OpenChange/MAPIStoreTasksFolder.h @@ -23,9 +23,9 @@ #ifndef MAPISTORETASKSFOLDER_H #define MAPISTORETASKSFOLDER_H -#import "MAPIStoreGCSFolder.h" +#import "MAPIStoreCalTaskFolder.h" -@interface MAPIStoreTasksFolder : MAPIStoreGCSFolder +@interface MAPIStoreTasksFolder : MAPIStoreCalTaskFolder @end diff --git a/OpenChange/MAPIStoreTasksMessage.h b/OpenChange/MAPIStoreTasksMessage.h index 3130b72a5..360c516ad 100644 --- a/OpenChange/MAPIStoreTasksMessage.h +++ b/OpenChange/MAPIStoreTasksMessage.h @@ -23,9 +23,9 @@ #ifndef MAPISTORETASKSMESSAGE_H #define MAPISTORETASKSMESSAGE_H -#import "MAPIStoreGCSMessage.h" +#import "MAPIStoreCalTaskMessage.h" -@interface MAPIStoreTasksMessage : MAPIStoreGCSMessage +@interface MAPIStoreTasksMessage : MAPIStoreCalTaskMessage @end diff --git a/OpenChange/MAPIStoreTasksMessage.m b/OpenChange/MAPIStoreTasksMessage.m index 382c61fa0..3cd3f1bfd 100644 --- a/OpenChange/MAPIStoreTasksMessage.m +++ b/OpenChange/MAPIStoreTasksMessage.m @@ -129,12 +129,23 @@ task = [sogoObject component: NO secure: YES]; - if ([task symbolicAccessClass] == iCalAccessPublic) + if ([task isPublic]) return [self getNo: data inMemCtx: memCtx]; return [self getYes: data inMemCtx: memCtx]; } +- (enum mapistore_error) getPidTagSensitivity: (void **) data + inMemCtx: (TALLOC_CTX *) memCtx +{ + uint32_t v; + + v = (uint32_t) [self sensitivity]; + + *data = MAPILongValue (memCtx, v); + return MAPISTORE_SUCCESS; +} + - (enum mapistore_error) getPidTagImportance: (void **) data inMemCtx: (TALLOC_CTX *) memCtx { @@ -343,6 +354,28 @@ // ---------------------------------- // Sharing // ---------------------------------- +- (NSUInteger) sensitivity +{ + iCalToDo *task; + NSUInteger v; + + task = [sogoObject component: NO secure: YES]; + /* FIXME: Use OpenChange constants names */ + switch ([task symbolicAccessClass]) + { + case iCalAccessPrivate: + v = 0x2; + break; + case iCalAccessConfidential: + v = 0x3; + break; + default: + v = 0x0; + break; + } + return v; +} + - (NSString *) creator { iCalToDo *task; @@ -359,36 +392,6 @@ return [self creator]; } -- (BOOL) subscriberCanReadMessage -{ - return ([[self activeUserRoles] - containsObject: SOGoCalendarRole_ComponentViewer] - || [self subscriberCanModifyMessage]); -} - -- (BOOL) subscriberCanModifyMessage -{ - BOOL rc; - NSArray *roles = [self activeUserRoles]; - - if (isNew) - rc = [roles containsObject: SOGoRole_ObjectCreator]; - else - rc = ([roles containsObject: SOGoCalendarRole_ComponentModifier] - || [roles containsObject: SOGoCalendarRole_ComponentResponder]); - - /* Check if the message is owned and it has permission to edit it */ - if (!rc && [roles containsObject: MAPIStoreRightEditOwn]) - { - NSString *currentUser; - - currentUser = [[container context] activeUser]; - rc = [currentUser isEqual: [self ownerUser]]; - } - - return rc; -} - - (void) save:(TALLOC_CTX *) memCtx { iCalCalendar *vCalendar; From 698918abf927fe7aa63ee3f70dfb7e02e5afd2db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Garc=C3=ADa=20S=C3=A1ez?= Date: Tue, 23 Feb 2016 15:08:15 +0100 Subject: [PATCH 36/38] Fix prepareRightsForm, keep the highest role userRights is sorted highest to lowest right so we have to assign only the first right found for each type --- UI/Scheduler/UIxCalUserRightsEditor.m | 31 +++++++++++++-------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/UI/Scheduler/UIxCalUserRightsEditor.m b/UI/Scheduler/UIxCalUserRightsEditor.m index 00534bff8..91738707a 100644 --- a/UI/Scheduler/UIxCalUserRightsEditor.m +++ b/UI/Scheduler/UIxCalUserRightsEditor.m @@ -57,25 +57,24 @@ { NSEnumerator *roles, *types; NSString *role, *type; - unsigned int length; - roles = [userRights objectEnumerator]; - role = [roles nextObject]; - while (role) + types = [[self rightTypes] objectEnumerator]; + type = [types nextObject]; + while (type) { - types = [[self rightTypes] objectEnumerator]; - type = [types nextObject]; - while (type) - { - if ([role hasPrefix: type]) - { - length = [type length]; - [rights setObject: [role substringFromIndex: length] - forKey: type]; - } - type = [types nextObject]; - } + roles = [userRights objectEnumerator]; role = [roles nextObject]; + while (role) + { + if ([role hasPrefix: type]) + { + [rights setObject: [role substringFromIndex: [type length]] + forKey: type]; + break; + } + role = [roles nextObject]; + } + type = [types nextObject]; } } From 9784995d416adc44755dd0082bda65ef5e841c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carlos=20P=C3=A9rez-Aradros=20Herce?= Date: Tue, 23 Feb 2016 15:01:13 +0100 Subject: [PATCH 37/38] Ensure sogo-tool loads all available products --- Tools/sogo-tool.m | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Tools/sogo-tool.m b/Tools/sogo-tool.m index 85c87d528..2f7fea3d4 100644 --- a/Tools/sogo-tool.m +++ b/Tools/sogo-tool.m @@ -29,6 +29,7 @@ #import #import +#import #import "SOGoTool.h" @@ -245,6 +246,9 @@ main (int argc, char **argv, char **env) pool = [NSAutoreleasePool new]; + /* load products */ + [[SOGoProductLoader productLoader] loadAllProducts]; + [SOGoSystemDefaults sharedSystemDefaults]; setupUserDefaults (); From e3c7bdd5d8a653d3dd8e2a33517eb5668c86e573 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Tue, 17 May 2016 13:41:33 -0400 Subject: [PATCH 38/38] Revert "Remove listRequiresDot option from *Source classes" This reverts commit 6b2ec7a2e75084359af75bcd3f473084eed09467. --- SoObjects/Contacts/SOGoContactSourceFolder.m | 29 +++++++--- SoObjects/SOGo/LDAPSource.h | 2 + SoObjects/SOGo/LDAPSource.m | 59 +++++++++++++------- SoObjects/SOGo/SOGoSource.h | 4 ++ SoObjects/SOGo/SQLSource.m | 11 ++++ 5 files changed, 77 insertions(+), 28 deletions(-) diff --git a/SoObjects/Contacts/SOGoContactSourceFolder.m b/SoObjects/Contacts/SOGoContactSourceFolder.m index 464a787c4..bf4f30bd8 100644 --- a/SoObjects/Contacts/SOGoContactSourceFolder.m +++ b/SoObjects/Contacts/SOGoContactSourceFolder.m @@ -353,15 +353,26 @@ NSArray *records, *result; EOSortOrdering *ordering; - records = [source fetchContactsMatching: filter inDomain: domain]; - [childRecords setObjects: records forKeys: [records objectsForKey: @"c_name" - notFoundMarker: nil]]; - records = [self _flattenedRecords: records]; - ordering = [EOSortOrdering sortOrderingWithKey: sortKey - selector: ((sortOrdering == NSOrderedDescending) - ? EOCompareCaseInsensitiveDescending - : EOCompareCaseInsensitiveAscending)]; - result = [records sortedArrayUsingKeyOrderArray: [NSArray arrayWithObject: ordering]]; + result = nil; + + if (([filter length] > 0 && [criteria isEqualToString: @"name_or_address"]) + || ![source listRequiresDot]) + { + records = [source fetchContactsMatching: filter + inDomain: domain]; + [childRecords setObjects: records + forKeys: [records objectsForKey: @"c_name" + notFoundMarker: nil]]; + records = [self _flattenedRecords: records]; + ordering + = [EOSortOrdering sortOrderingWithKey: sortKey + selector: ((sortOrdering == NSOrderedDescending) + ? EOCompareCaseInsensitiveDescending + : EOCompareCaseInsensitiveAscending)]; + result + = [records sortedArrayUsingKeyOrderArray: + [NSArray arrayWithObject: ordering]]; + } return result; } diff --git a/SoObjects/SOGo/LDAPSource.h b/SoObjects/SOGo/LDAPSource.h index 4958b0cee..9081196be 100644 --- a/SoObjects/SOGo/LDAPSource.h +++ b/SoObjects/SOGo/LDAPSource.h @@ -65,6 +65,8 @@ NSString *SieveHostField; NSArray *bindFields; + BOOL listRequiresDot; + NSString *domain; NSString *contactInfoAttribute; diff --git a/SoObjects/SOGo/LDAPSource.m b/SoObjects/SOGo/LDAPSource.m index 32553fe2d..2fa8f3773 100644 --- a/SoObjects/SOGo/LDAPSource.m +++ b/SoObjects/SOGo/LDAPSource.m @@ -110,6 +110,7 @@ static Class NSStringK; _scope = @"sub"; _filter = nil; _userPasswordAlgorithm = nil; + listRequiresDot = YES; searchAttributes = nil; passwordPolicy = NO; @@ -200,6 +201,9 @@ static Class NSStringK; kindField: [udSource objectForKey: @"KindFieldName"] andMultipleBookingsField: [udSource objectForKey: @"MultipleBookingsFieldName"]]; + dotValue = [udSource objectForKey: @"listRequiresDot"]; + if (dotValue) + [self setListRequiresDot: [dotValue boolValue]]; [self setContactMapping: [udSource objectForKey: @"mapping"] andObjectClasses: [udSource objectForKey: @"objectClasses"]]; @@ -367,6 +371,16 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses ASSIGN(multipleBookingsField, [newMultipleBookingsField lowercaseString]); } +- (void) setListRequiresDot: (BOOL) aBool +{ + listRequiresDot = aBool; +} + +- (BOOL) listRequiresDot +{ + return listRequiresDot; +} + - (void) setContactMapping: (NSDictionary *) newMapping andObjectClasses: (NSArray *) newObjectClasses { @@ -776,13 +790,15 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } - else + else if (!listRequiresDot) { qs = [NSMutableString stringWithFormat: @"(%@='*')", CNField]; if ([_filter length]) [qs appendFormat: @" AND %@", _filter]; qualifier = [EOQualifier qualifierWithQualifierFormat: qs]; } + else + qualifier = nil; return qualifier; } @@ -1173,25 +1189,29 @@ groupObjectClasses: (NSArray *) newGroupObjectClasses contacts = [NSMutableArray array]; - ldapConnection = [self _ldapConnection]; - qualifier = [self _qualifierForFilter: match]; - // attributes = [self _searchAttributes]; - attributes = [NSArray arrayWithObject: @"*"]; + if ([match length] > 0 || !listRequiresDot) + { + ldapConnection = [self _ldapConnection]; + qualifier = [self _qualifierForFilter: match]; + // attributes = [self _searchAttributes]; + attributes = [NSArray arrayWithObject: @"*"]; - if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame) - entries = [ldapConnection baseSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame) - entries = [ldapConnection flatSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - else /* we do it like before */ - entries = [ldapConnection deepSearchAtBaseDN: baseDN - qualifier: qualifier - attributes: attributes]; - while ((currentEntry = [entries nextObject])) - [contacts addObject: [self _convertLDAPEntryToContact: currentEntry]]; + if ([_scope caseInsensitiveCompare: @"BASE"] == NSOrderedSame) + entries = [ldapConnection baseSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + else if ([_scope caseInsensitiveCompare: @"ONE"] == NSOrderedSame) + entries = [ldapConnection flatSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + else /* we do it like before */ + entries = [ldapConnection deepSearchAtBaseDN: baseDN + qualifier: qualifier + attributes: attributes]; + while ((currentEntry = [entries nextObject])) + [contacts addObject: + [self _convertLDAPEntryToContact: currentEntry]]; + } return contacts; } @@ -1701,6 +1721,7 @@ _makeLDAPChanges (NGLdapConnection *ldapConnection, bindFields: nil kindField: nil andMultipleBookingsField: nil]; + [ab setListRequiresDot: NO]; [ab setModifiers: modifier]; [sources addObject: ab]; [ab release]; diff --git a/SoObjects/SOGo/SOGoSource.h b/SoObjects/SOGo/SOGoSource.h index 16ff54d19..d59a81086 100644 --- a/SoObjects/SOGo/SOGoSource.h +++ b/SoObjects/SOGo/SOGoSource.h @@ -41,6 +41,10 @@ - (NSString *) domain; +/* requires a "." to obtain the full list of contacts */ +- (void) setListRequiresDot: (BOOL) aBool; +- (BOOL) listRequiresDot; + - (BOOL) checkLogin: (NSString *) _login password: (NSString *) _pwd perr: (SOGoPasswordPolicyError *) _perr diff --git a/SoObjects/SOGo/SQLSource.m b/SoObjects/SOGo/SQLSource.m index 9665cea2a..307348f80 100644 --- a/SoObjects/SOGo/SQLSource.m +++ b/SoObjects/SOGo/SQLSource.m @@ -851,6 +851,17 @@ return _sourceID; } +- (void) setListRequiresDot: (BOOL) newListRequiresDot +{ +} + +- (BOOL) listRequiresDot +{ + /* This method is not implemented for SQLSource. It must enable a mechanism + where using "." is not required to list the content of addressbooks. */ + return YES; +} + /* card editing */ - (void) setModifiers: (NSArray *) newModifiers {