From cba3ab1a16a77050c1b53f94481cbd074e8a1540 Mon Sep 17 00:00:00 2001 From: Benjamin Kahn Date: Thu, 19 Sep 2013 14:00:46 -0400 Subject: Support servers which do not set allowable_actions on an object Not all servers will broadcast permissions, so we need to check if the server supports each permission before we try to use it. Also, we were looking at the wrong data-structure for actions. --- daemon/gvfsbackendcmis.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/daemon/gvfsbackendcmis.c b/daemon/gvfsbackendcmis.c index 68759518..de07c673 100644 --- a/daemon/gvfsbackendcmis.c +++ b/daemon/gvfsbackendcmis.c @@ -166,15 +166,21 @@ cmis_object_to_file_info (libcmis_ObjectPtr object, /* Set the permissions based on the Allowable Actions*/ allowable_actions = libcmis_object_getAllowableActions (object); - can_read = libcmis_allowable_actions_isAllowed (object, libcmis_GetContentStream); - can_write = libcmis_allowable_actions_isAllowed (object, libcmis_SetContentStream); - can_delete = libcmis_allowable_actions_isAllowed (object, libcmis_DeleteObject); - can_rename = libcmis_allowable_actions_isAllowed (object, libcmis_UpdateProperties); - g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, can_read); - g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, can_write); - g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, can_delete); - g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, can_delete); - g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, can_rename); + can_read = libcmis_allowable_actions_isAllowed (allowable_actions, libcmis_GetContentStream); + can_write = libcmis_allowable_actions_isAllowed (allowable_actions, libcmis_SetContentStream); + can_delete = libcmis_allowable_actions_isAllowed (allowable_actions, libcmis_DeleteObject); + can_rename = libcmis_allowable_actions_isAllowed (allowable_actions, libcmis_UpdateProperties); + + if (libcmis_allowable_actions_isDefined (allowable_actions, libcmis_GetContentStream)) { + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ, can_read); + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME, can_rename); + } + if (libcmis_allowable_actions_isDefined (allowable_actions, libcmis_SetContentStream)) + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE, can_write); + if (libcmis_allowable_actions_isDefined (allowable_actions, libcmis_DeleteObject)) { + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE, can_delete); + g_file_info_set_attribute_boolean (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH, can_delete); + } libcmis_allowable_actions_free (allowable_actions); g_file_info_set_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILE, id); -- cgit v1.2.3