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