Monotone-Parent: 22be47412187379c5790339050a32efb324de72f

Monotone-Revision: 0876527d52dfa5e4ddfcb4dee4220d4d6bd27eec

Monotone-Author: wsourdeau@inverse.ca
Monotone-Date: 2011-12-01T22:28:12
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Wolfgang Sourdeau 2011-12-01 22:28:12 +00:00
parent 2c0553cdad
commit 4641b917c7
4 changed files with 26 additions and 5 deletions

View file

@ -1,5 +1,14 @@
2011-12-01 Wolfgang Sourdeau <wsourdeau@inverse.ca> 2011-12-01 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* 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: * OpenChange/MAPIStoreTasksMessage.m:
invoke component:secure: with the secure parameter set to "YES" in invoke component:secure: with the secure parameter set to "YES" in
all accessors that requires the iCalTask object. all accessors that requires the iCalTask object.

View file

@ -111,9 +111,9 @@
withMID: (uint64_t) mid withMID: (uint64_t) mid
isAssociated: (BOOL) isAssociated; isAssociated: (BOOL) isAssociated;
- (int) openMessage: (MAPIStoreMessage **) messagePtr - (int) openMessage: (MAPIStoreMessage **) messagePtr
withMID: (uint64_t) mid withMID: (uint64_t) mid
forWriting: (BOOL) readWrite
inMemCtx: (TALLOC_CTX *) memCtx; inMemCtx: (TALLOC_CTX *) memCtx;
- (int) deleteMessageWithMID: (uint64_t) mid - (int) deleteMessageWithMID: (uint64_t) mid
andFlags: (uint8_t) flags; andFlags: (uint8_t) flags;

View file

@ -403,6 +403,7 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
- (int) openMessage: (MAPIStoreMessage **) messagePtr - (int) openMessage: (MAPIStoreMessage **) messagePtr
withMID: (uint64_t) mid withMID: (uint64_t) mid
forWriting: (BOOL) readWrite
inMemCtx: (TALLOC_CTX *) memCtx; inMemCtx: (TALLOC_CTX *) memCtx;
{ {
NSString *messageURL; NSString *messageURL;
@ -417,8 +418,15 @@ Class NSExceptionK, MAPIStoreFAIMessageK, MAPIStoreMessageTableK, MAPIStoreFAIMe
message = [self lookupMessageByURL: messageURL]; message = [self lookupMessageByURL: messageURL];
if (message) if (message)
{ {
*messagePtr = message; if ([[context activeUser] isEqual: [context ownerUser]]
rc = MAPISTORE_SUCCESS; || (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); memCtx = talloc_zero (NULL, TALLOC_CTX);
rc = [sourceFolder openMessage: &sourceMsg rc = [sourceFolder openMessage: &sourceMsg
withMID: srcMid withMID: srcMid
forWriting: NO
inMemCtx: memCtx]; inMemCtx: memCtx];
if (rc != MAPISTORE_SUCCESS) if (rc != MAPISTORE_SUCCESS)
goto end; goto end;

View file

@ -359,7 +359,7 @@ sogo_folder_get_child_count(void *folder_object, uint8_t table_type, uint32_t *c
static int static int
sogo_folder_open_message(void *folder_object, sogo_folder_open_message(void *folder_object,
TALLOC_CTX *mem_ctx, TALLOC_CTX *mem_ctx,
uint64_t mid, uint64_t mid, bool write_access,
void **message_object) void **message_object)
{ {
struct MAPIStoreTallocWrapper *wrapper; struct MAPIStoreTallocWrapper *wrapper;
@ -375,7 +375,10 @@ sogo_folder_open_message(void *folder_object,
wrapper = folder_object; wrapper = folder_object;
folder = wrapper->MAPIStoreSOGoObject; folder = wrapper->MAPIStoreSOGoObject;
pool = [NSAutoreleasePool new]; 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) if (rc == MAPISTORE_SUCCESS)
*message_object = [message tallocWrapper: mem_ctx]; *message_object = [message tallocWrapper: mem_ctx];
[pool release]; [pool release];