From 4641b917c737e4f02eece104b921fe1003335f46 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Thu, 1 Dec 2011 22:28:12 +0000 Subject: [PATCH] Monotone-Parent: 22be47412187379c5790339050a32efb324de72f Monotone-Revision: 0876527d52dfa5e4ddfcb4dee4220d4d6bd27eec Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2011-12-01T22:28:12 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 9 +++++++++ OpenChange/MAPIStoreFolder.h | 2 +- OpenChange/MAPIStoreFolder.m | 13 +++++++++++-- OpenChange/MAPIStoreSOGo.m | 7 +++++-- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2c8ab0f73..e264133f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2011-12-01 Wolfgang Sourdeau + * OpenChange/MAPIStoreFolder.m + (-openMessage:withMID:forWriting:inMemCtx:): takes a new + "forWriting:" parameter and make use of subscriberCanModifyMessage + and subscriberCanReadMessage to return a proper error code, if + needed. + + * OpenChange/MAPIStoreSOGo.m (sogo_folder_open_message): added the + "write_access" parameter. + * OpenChange/MAPIStoreTasksMessage.m: invoke component:secure: with the secure parameter set to "YES" in all accessors that requires the iCalTask object. diff --git a/OpenChange/MAPIStoreFolder.h b/OpenChange/MAPIStoreFolder.h index fa19b4a84..c124cdce7 100644 --- a/OpenChange/MAPIStoreFolder.h +++ b/OpenChange/MAPIStoreFolder.h @@ -111,9 +111,9 @@ 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; diff --git a/OpenChange/MAPIStoreFolder.m b/OpenChange/MAPIStoreFolder.m index c861f1407..1d961c8df 100644 --- a/OpenChange/MAPIStoreFolder.m +++ b/OpenChange/MAPIStoreFolder.m @@ -403,6 +403,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe - (int) openMessage: (MAPIStoreMessage **) messagePtr withMID: (uint64_t) mid + forWriting: (BOOL) readWrite inMemCtx: (TALLOC_CTX *) memCtx; { NSString *messageURL; @@ -417,8 +418,15 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe message = [self lookupMessageByURL: messageURL]; if (message) { - *messagePtr = message; - rc = MAPISTORE_SUCCESS; + if ([[context activeUser] isEqual: [context ownerUser]] + || (readWrite && [message subscriberCanModifyMessage]) + || (!readWrite && [message subscriberCanReadMessage])) + { + *messagePtr = message; + rc = MAPISTORE_SUCCESS; + } + else + rc = MAPISTORE_ERR_DENIED; } } @@ -580,6 +588,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe memCtx = talloc_zero (NULL, TALLOC_CTX); rc = [sourceFolder openMessage: &sourceMsg withMID: srcMid + forWriting: NO inMemCtx: memCtx]; if (rc != MAPISTORE_SUCCESS) goto end; diff --git a/OpenChange/MAPIStoreSOGo.m b/OpenChange/MAPIStoreSOGo.m index 3deda51e7..8cf4b70a7 100644 --- a/OpenChange/MAPIStoreSOGo.m +++ b/OpenChange/MAPIStoreSOGo.m @@ -359,7 +359,7 @@ sogo_folder_get_child_count(void *folder_object, uint8_t table_type, uint32_t *c static int sogo_folder_open_message(void *folder_object, TALLOC_CTX *mem_ctx, - uint64_t mid, + uint64_t mid, bool write_access, void **message_object) { struct MAPIStoreTallocWrapper *wrapper; @@ -375,7 +375,10 @@ sogo_folder_open_message(void *folder_object, wrapper = folder_object; folder = wrapper->MAPIStoreSOGoObject; pool = [NSAutoreleasePool new]; - rc = [folder openMessage: &message withMID: mid inMemCtx: mem_ctx]; + rc = [folder openMessage: &message + withMID: mid + forWriting: write_access + inMemCtx: mem_ctx]; if (rc == MAPISTORE_SUCCESS) *message_object = [message tallocWrapper: mem_ctx]; [pool release];