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] 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);