diff options
-rw-r--r-- | external/libcmis/UnpackedTarball_cmis.mk | 1 | ||||
-rw-r--r-- | external/libcmis/libcmis-sharepoint-repository-root.patch | 24 | ||||
-rw-r--r-- | ucb/source/ucp/cmis/cmis_content.cxx | 2 |
3 files changed, 26 insertions, 1 deletions
diff --git a/external/libcmis/UnpackedTarball_cmis.mk b/external/libcmis/UnpackedTarball_cmis.mk index bd66e2efeb5e..8fb247fb87aa 100644 --- a/external/libcmis/UnpackedTarball_cmis.mk +++ b/external/libcmis/UnpackedTarball_cmis.mk @@ -17,6 +17,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,cmis, \ external/libcmis/libcmis-libxml2_compatibility.patch \ external/libcmis/libcmis-fix-google-drive.patch \ external/libcmis/libcmis-google-2FA-implementation.patch \ + external/libcmis/libcmis-sharepoint-repository-root.patch \ )) ifeq ($(OS)$(COM),WNTMSC) diff --git a/external/libcmis/libcmis-sharepoint-repository-root.patch b/external/libcmis/libcmis-sharepoint-repository-root.patch new file mode 100644 index 000000000000..f89b134cc7a4 --- /dev/null +++ b/external/libcmis/libcmis-sharepoint-repository-root.patch @@ -0,0 +1,24 @@ +diff --git a/src/libcmis/sharepoint-repository.cxx b/src/libcmis/sharepoint-repository.cxx +index 780624d..f992689 100644 +--- a/src/libcmis/sharepoint-repository.cxx ++++ b/src/libcmis/sharepoint-repository.cxx +@@ -35,7 +35,18 @@ SharePointRepository::SharePointRepository( std::string baseUrl ) : + m_description = "SharePoint repository"; + m_productName = "SharePoint"; + m_productVersion = "2010/2013"; +- m_rootId = baseUrl + "/getFolderByServerRelativeUrl('/')"; ++ // getFolderByServerRelativeUrl() API expects path to be ++ // *server-relative*, i.e. they must include site path. ++ // Given the baseUrl like "https://sp2013/sites/mysite/_api/Web" ++ // for a site "mysite" on sharepoint server "sp2013", ++ // the site root is '/sites/mysite/', not '/'. ++ // Trying to get folder '/' results in "Value does not fall ++ // within expected range" error. ++ // Preferrable here is to extract the root path from baseUrl, ++ // stripping server and api parts. But it can be unreliable ++ // if api part (_api/Web) is different for some server. ++ // On the other side, just querying empty path '' gives the root folder. ++ m_rootId = baseUrl + "/getFolderByServerRelativeUrl('')"; + + m_capabilities[ ACL ] = "discover"; + m_capabilities[ AllVersionsSearchable ] = "true"; diff --git a/ucb/source/ucp/cmis/cmis_content.cxx b/ucb/source/ucp/cmis/cmis_content.cxx index 5dd9951402f1..56853fd43d94 100644 --- a/ucb/source/ucp/cmis/cmis_content.cxx +++ b/ucb/source/ucp/cmis/cmis_content.cxx @@ -522,7 +522,7 @@ namespace cmis throw libcmis::Exception( "Object not found" ); } } - else if ( !m_sObjectPath.isEmpty( ) ) + else if (!(m_sObjectPath.isEmpty() || m_sObjectPath == "/")) { try { |