summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Kahn <xkahn@zoned.net>2013-09-19 14:00:46 -0400
committerCédric Bosdonnat <cedric.bosdonnat@free.fr>2013-09-23 23:00:14 +0200
commitcba3ab1a16a77050c1b53f94481cbd074e8a1540 (patch)
treea7ba4c748ef578ba7ae42dd76df83f6f1b12a959
parent07308e4a46ba69b252fcde1795b64460073495e2 (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.c24
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);