diff options
author | Benjamin Kahn <xkahn@zoned.net> | 2013-09-19 14:00:46 -0400 |
---|---|---|
committer | Cédric Bosdonnat <cedric.bosdonnat@free.fr> | 2013-09-23 23:00:14 +0200 |
commit | cba3ab1a16a77050c1b53f94481cbd074e8a1540 (patch) | |
tree | a7ba4c748ef578ba7ae42dd76df83f6f1b12a959 | |
parent | 07308e4a46ba69b252fcde1795b64460073495e2 (diff) |
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.HEADmaster
-rw-r--r-- | daemon/gvfsbackendcmis.c | 24 |
1 files 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); |