summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--RepositoryExternal.mk2
-rw-r--r--download.lst4
-rw-r--r--external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch69
-rw-r--r--external/libcmis/StaticLibrary_libcmis.mk15
-rw-r--r--external/libcmis/UnpackedTarball_libcmis.mk16
-rw-r--r--external/libcmis/boost-1.68.patch.015
-rw-r--r--external/libcmis/boost-win.patch84
-rw-r--r--external/libcmis/c++17.patch.0412
-rw-r--r--external/libcmis/libcmis-fix-error-handling.patch32
-rw-r--r--external/libcmis/libcmis-fix-google-drive-2.patch125
-rw-r--r--external/libcmis/libcmis-fix-google-drive.patch106
-rw-r--r--external/libcmis/libcmis-google-2FA-implementation.patch177
-rw-r--r--external/libcmis/libcmis-libxml2_compatibility.patch6
-rw-r--r--external/libcmis/libcmis-sharepoint-repository-root.patch24
-rw-r--r--external/libcmis/xwwwformurlencoded.patch.059
-rw-r--r--solenv/flatpak-manifest.in6
16 files changed, 82 insertions, 1070 deletions
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 346e7fe1ab42..602ff6de6a64 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -678,7 +678,7 @@ else # !SYSTEM_LIBCMIS
define gb_LinkTarget__use_libcmis
$(call gb_LinkTarget_set_include,$(1),\
- -I$(call gb_UnpackedTarball_get_dir,libcmis)/src \
+ -I$(call gb_UnpackedTarball_get_dir,libcmis)/inc \
$$(INCLUDE) \
)
$(call gb_LinkTarget_use_static_libraries,$(1),\
diff --git a/download.lst b/download.lst
index 473025400466..f457721e74c8 100644
--- a/download.lst
+++ b/download.lst
@@ -21,8 +21,8 @@ export CDR_SHA256SUM := e7a7e8b00a3df5798110024d7061fe9d1c3330277d2e4fa9213294f9
export CDR_TARBALL := libcdr-0.1.4.tar.xz
export CLUCENE_SHA256SUM := ddfdc433dd8ad31b5c5819cc4404a8d2127472a3b720d3e744e8c51d79732eab
export CLUCENE_TARBALL := 48d647fbd8ef8889e5a7f422c1bfda94-clucene-core-2.3.3.4.tar.gz
-export LIBCMIS_SHA256SUM := 6acbdf22ecdbaba37728729b75bfc085ee5a4b49a6024757cfb86ccd3da27b0e
-export LIBCMIS_TARBALL := libcmis-0.5.1.tar.gz
+export LIBCMIS_SHA256SUM := d7b18d9602190e10d437f8a964a32e983afd57e2db316a07d87477a79f5000a2
+export LIBCMIS_TARBALL := libcmis-0.5.2.tar.xz
export COINMP_SHA256SUM := 86c798780b9e1f5921fe4efe651a93cb420623b45aa1fdff57af8c37f116113f
export COINMP_TARBALL := CoinMP-1.7.6.tgz
export CPPUNIT_SHA256SUM := 3d569869d27b48860210c758c4f313082103a5e58219a7669b52bfd29d674780
diff --git a/external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch b/external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch
new file mode 100644
index 000000000000..f82c82f819f8
--- /dev/null
+++ b/external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch
@@ -0,0 +1,69 @@
+From 219e6d6586c8280dfd9c4851cee0d14d68b6ad65 Mon Sep 17 00:00:00 2001
+From: David Tardon <dtardon@redhat.com>
+Date: Fri, 28 Dec 2018 15:26:28 +0100
+Subject: [PATCH] rename class GetObject to avoid name clash on Windows
+
+---
+ src/libcmis/ws-objectservice.cxx | 2 +-
+ src/libcmis/ws-requests.cxx | 2 +-
+ src/libcmis/ws-requests.hxx | 7 +++----
+ 3 files changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/src/libcmis/ws-objectservice.cxx b/src/libcmis/ws-objectservice.cxx
+index 9e40085..d57f3cc 100644
+--- a/src/libcmis/ws-objectservice.cxx
++++ b/src/libcmis/ws-objectservice.cxx
+@@ -71,7 +71,7 @@ libcmis::ObjectPtr ObjectService::getObject( string repoId, string id )
+ {
+ libcmis::ObjectPtr object;
+
+- class GetObject request( repoId, id );
++ GetObjectRequest request( repoId, id );
+ vector< SoapResponsePtr > responses = m_session->soapRequest( m_url, request );
+ if ( responses.size( ) == 1 )
+ {
+diff --git a/src/libcmis/ws-requests.cxx b/src/libcmis/ws-requests.cxx
+index f8bc245..408d053 100644
+--- a/src/libcmis/ws-requests.cxx
++++ b/src/libcmis/ws-requests.cxx
+@@ -269,7 +269,7 @@ SoapResponsePtr GetTypeChildrenResponse::create( xmlNodePtr node, RelatedMultipa
+ return SoapResponsePtr( response );
+ }
+
+-void GetObject::toXml( xmlTextWriterPtr writer )
++void GetObjectRequest::toXml( xmlTextWriterPtr writer )
+ {
+ xmlTextWriterStartElement( writer, BAD_CAST( "cmism:getObject" ) );
+ xmlTextWriterWriteAttribute( writer, BAD_CAST( "xmlns:cmis" ), BAD_CAST( NS_CMIS_URL ) );
+diff --git a/src/libcmis/ws-requests.hxx b/src/libcmis/ws-requests.hxx
+index 2c4ae92..534d9a4 100644
+--- a/src/libcmis/ws-requests.hxx
++++ b/src/libcmis/ws-requests.hxx
+@@ -203,21 +203,20 @@ class GetTypeChildrenResponse : public SoapResponse
+ std::vector< libcmis::ObjectTypePtr > getChildren( ) { return m_children; }
+ };
+
+-#undef GetObject
+-class GetObject : public SoapRequest
++class GetObjectRequest : public SoapRequest
+ {
+ private:
+ std::string m_repositoryId;
+ std::string m_id;
+
+ public:
+- GetObject( std::string repoId, std::string id ) :
++ GetObjectRequest( std::string repoId, std::string id ) :
+ m_repositoryId( repoId ),
+ m_id( id )
+ {
+ }
+
+- ~GetObject( ) { }
++ ~GetObjectRequest( ) { }
+
+ void toXml( xmlTextWriterPtr writer );
+ };
+--
+2.19.2
+
diff --git a/external/libcmis/StaticLibrary_libcmis.mk b/external/libcmis/StaticLibrary_libcmis.mk
index 2998ec24d2fb..891af2a5f481 100644
--- a/external/libcmis/StaticLibrary_libcmis.mk
+++ b/external/libcmis/StaticLibrary_libcmis.mk
@@ -13,21 +13,9 @@ $(eval $(call gb_StaticLibrary_set_warnings_not_errors,libcmis))
ifeq ($(COM_IS_CLANG),TRUE)
# Avoid narrowing conversion error (even though the option is technically a warning)
-# caused by boost, and avoid -Wdynamic-exception-spec errors.
+# caused by boost
$(eval $(call gb_StaticLibrary_add_cxxflags,libcmis,\
-Wno-error=c++11-narrowing \
- -Wno-error=dynamic-exception-spec \
-))
-endif
-
-# Build as C++14 if necessary to avoid GCC C++17 "error: ISO C++1z does not
-# allow dynamic exception specifications", until upstream libcmis is ported to
-# C++17:
-ifeq ($(COM)-$(COM_IS_CLANG),GCC-)
-$(eval $(call gb_StaticLibrary_add_cxxflags,libcmis, \
- $(if $(filter -std=gnu++2a -std=c++2a -std=gnu++17 -std=gnu++1z -std=c++17 -std=c++1z, \
- $(CXXFLAGS_CXX11)), \
- -std=gnu++14) \
))
endif
@@ -36,6 +24,7 @@ $(eval $(call gb_StaticLibrary_add_defs,libcmis, \
))
$(eval $(call gb_StaticLibrary_set_include,libcmis, \
+ -I$(call gb_UnpackedTarball_get_dir,libcmis/inc) \
-I$(call gb_UnpackedTarball_get_dir,libcmis/src/libcmis) \
$$(INCLUDE) \
))
diff --git a/external/libcmis/UnpackedTarball_libcmis.mk b/external/libcmis/UnpackedTarball_libcmis.mk
index e7731b631dad..c648a7b02f00 100644
--- a/external/libcmis/UnpackedTarball_libcmis.mk
+++ b/external/libcmis/UnpackedTarball_libcmis.mk
@@ -13,21 +13,9 @@ $(eval $(call gb_UnpackedTarball_set_tarball,libcmis,$(LIBCMIS_TARBALL)))
$(eval $(call gb_UnpackedTarball_set_patchlevel,libcmis,1))
-# xwwwformurlencoded.patch.0 sent upstream as <https://github.com/tdf/libcmis/pull/20>
$(eval $(call gb_UnpackedTarball_add_patches,libcmis, \
- external/libcmis/libcmis-libxml2_compatibility.patch \
- external/libcmis/libcmis-fix-google-drive.patch \
- external/libcmis/libcmis-google-2FA-implementation.patch \
- external/libcmis/libcmis-fix-google-drive-2.patch \
- external/libcmis/libcmis-sharepoint-repository-root.patch \
- external/libcmis/libcmis-fix-error-handling.patch \
- external/libcmis/c++17.patch.0 \
- external/libcmis/boost-1.68.patch.0 \
- external/libcmis/xwwwformurlencoded.patch.0 \
+ external/libcmis/libcmis-libxml2_compatibility.patch \
+ external/libcmis/0001-rename-class-GetObject-to-avoid-name-clash-on-Window.patch \
))
-ifeq ($(OS),WNT)
-$(eval $(call gb_UnpackedTarball_add_patches,libcmis,external/libcmis/boost-win.patch))
-endif
-
# vim: set noet sw=4 ts=4:
diff --git a/external/libcmis/boost-1.68.patch.0 b/external/libcmis/boost-1.68.patch.0
deleted file mode 100644
index 2d86a4db2865..000000000000
--- a/external/libcmis/boost-1.68.patch.0
+++ /dev/null
@@ -1,15 +0,0 @@
---- src/libcmis/xml-utils.cxx.orig 2016-03-01 16:14:26 UTC
-+++ src/libcmis/xml-utils.cxx
-@@ -31,7 +31,12 @@
- #include <sstream>
- #include <stdlib.h>
-
-+#include <boost/version.hpp>
-+#if (BOOST_VERSION >= 106800)
-+#include <boost/uuid/detail/sha1.hpp>
-+#else
- #include <boost/uuid/sha1.hpp>
-+#endif
- #include <curl/curl.h>
-
- #include "xml-utils.hxx"
diff --git a/external/libcmis/boost-win.patch b/external/libcmis/boost-win.patch
deleted file mode 100644
index 33e0aa6b11c5..000000000000
--- a/external/libcmis/boost-win.patch
+++ /dev/null
@@ -1,84 +0,0 @@
-diff --git src/libcmis/atom-object.cxx src/libcmis/atom-object.cxx
-index ce21384..eef8102 100644
---- a/src/libcmis/atom-object.cxx
-+++ b/src/libcmis/atom-object.cxx
-@@ -30,6 +30,9 @@
- #include <locale>
- #include <sstream>
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time/posix_time/posix_time.hpp>
-
- #include "atom-document.hxx"
-diff --git src/libcmis/object.hxx src/libcmis/object.hxx
-index 449bb22..c320f06 100644
---- a/src/libcmis/object.hxx
-+++ b/src/libcmis/object.hxx
-@@ -36,6 +36,9 @@
- #include <stdbool.h>
- #endif
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time.hpp>
- #include <boost/shared_ptr.hpp>
- #include <libxml/tree.h>
-diff --git src/libcmis/property-type.hxx src/libcmis/property-type.hxx
-index 1a8bee9..6ac946c 100644
---- a/src/libcmis/property-type.hxx
-+++ b/src/libcmis/property-type.hxx
-@@ -28,6 +28,9 @@
- #ifndef _PROPERTY_TYPE_HXX_
- #define _PROPERTY_TYPE_HXX_
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time.hpp>
- #include <libxml/tree.h>
-
-diff --git src/libcmis/property.hxx src/libcmis/property.hxx
-index f9be04a..2977fb3 100644
---- a/src/libcmis/property.hxx
-+++ b/src/libcmis/property.hxx
-@@ -31,6 +31,9 @@
- #include <libxml/tree.h>
- #include <libxml/xmlwriter.h>
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time.hpp>
- #include <boost/shared_ptr.hpp>
-
-diff --git src/libcmis/ws-session.cxx src/libcmis/ws-session.cxx
-index b906a5a..bf50644 100644
---- a/src/libcmis/ws-session.cxx
-+++ b/src/libcmis/ws-session.cxx
-@@ -28,6 +28,9 @@
-
- #include <sstream>
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time.hpp>
- #include <libxml/parser.h>
- #include <libxml/tree.h>
-diff --git src/libcmis/xml-utils.hxx src/libcmis/xml-utils.hxx
-index 52853e2..2f80b91 100644
---- a/src/libcmis/xml-utils.hxx
-+++ b/src/libcmis/xml-utils.hxx
-@@ -33,6 +33,9 @@
- #include <sstream>
- #include <string>
-
-+#ifndef BOOST_DATE_TIME_NO_LIB
-+#define BOOST_DATE_TIME_NO_LIB
-+#endif
- #include <boost/date_time.hpp>
- #include <libxml/tree.h>
- #include <libxml/xpathInternals.h>
diff --git a/external/libcmis/c++17.patch.0 b/external/libcmis/c++17.patch.0
deleted file mode 100644
index e2e90f581610..000000000000
--- a/external/libcmis/c++17.patch.0
+++ /dev/null
@@ -1,412 +0,0 @@
---- src/libcmis/allowable-actions.cxx
-+++ src/libcmis/allowable-actions.cxx
-@@ -62,7 +62,7 @@
- }
- }
-
-- ObjectAction::Type ObjectAction::parseType( string type ) throw ( Exception )
-+ ObjectAction::Type ObjectAction::parseType( string type )
- {
- Type value = DeleteObject;
- if ( type == "canDeleteObject" )
---- src/libcmis/allowable-actions.hxx
-+++ src/libcmis/allowable-actions.hxx
-@@ -92,7 +92,7 @@
- /** Parses the permission name into one of the enum values or throws
- an exception for invalid input strings.
- */
-- static Type parseType( std::string type ) throw ( Exception );
-+ static Type parseType( std::string type );
-
- };
-
---- src/libcmis/document.hxx
-+++ src/libcmis/document.hxx
-@@ -56,7 +56,7 @@
-
- @return the parents folder if any.
- */
-- virtual std::vector< boost::shared_ptr< Folder > > getParents( ) throw ( Exception ) = 0;
-+ virtual std::vector< boost::shared_ptr< Folder > > getParents( ) = 0;
-
- /** Get the content stream without using a temporary file.
-
-@@ -74,7 +74,7 @@
- guaranteed.
- */
- virtual boost::shared_ptr< std::istream > getContentStream( std::string streamId = std::string( ) )
-- throw ( Exception ) = 0;
-+ = 0;
-
- /** Set or replace the content stream of the document.
-
-@@ -88,7 +88,7 @@
- capability.
- */
- virtual void setContentStream( boost::shared_ptr< std::ostream > os, std::string contentType,
-- std::string filename, bool overwrite = true ) throw ( Exception ) = 0;
-+ std::string filename, bool overwrite = true ) = 0;
-
- /** Get the content mime type.
- */
-@@ -107,12 +107,12 @@
-
- \return the Private Working Copy document
- */
-- virtual boost::shared_ptr< Document > checkOut( ) throw ( Exception ) = 0;
-+ virtual boost::shared_ptr< Document > checkOut( ) = 0;
-
- /** Cancels the checkout if the document is a private working copy, or
- throws an exception.
- */
-- virtual void cancelCheckout( ) throw ( Exception ) = 0;
-+ virtual void cancelCheckout( ) = 0;
-
- /** Check in the private working copy and create a new version or throw
- an exception.
-@@ -131,9 +131,9 @@
- virtual boost::shared_ptr< Document > checkIn( bool isMajor, std::string comment,
- const std::map< std::string, PropertyPtr >& properties,
- boost::shared_ptr< std::ostream > stream,
-- std::string contentType, std::string fileName ) throw ( Exception ) = 0;
-+ std::string contentType, std::string fileName ) = 0;
-
-- virtual std::vector< boost::shared_ptr< Document > > getAllVersions( ) throw ( Exception ) = 0;
-+ virtual std::vector< boost::shared_ptr< Document > > getAllVersions( ) = 0;
-
- // virtual methods form Object
- virtual std::vector< std::string > getPaths( );
---- src/libcmis/folder.cxx
-+++ src/libcmis/folder.cxx
-@@ -40,7 +40,7 @@
- return paths;
- }
-
-- libcmis::FolderPtr Folder::getFolderParent( ) throw ( libcmis::Exception )
-+ libcmis::FolderPtr Folder::getFolderParent( )
- {
- if ( getAllowableActions( ).get() && !getAllowableActions()->isAllowed( libcmis::ObjectAction::GetFolderParent ) )
- throw libcmis::Exception( string( "GetFolderParent not allowed on node " ) + getId() );
---- src/libcmis/folder.hxx
-+++ src/libcmis/folder.hxx
-@@ -59,20 +59,20 @@
-
- virtual std::vector< std::string > getPaths( );
-
-- virtual ::boost::shared_ptr< Folder > getFolderParent( ) throw ( Exception );
-- virtual std::vector< ObjectPtr > getChildren( ) throw ( Exception ) = 0;
-+ virtual ::boost::shared_ptr< Folder > getFolderParent( );
-+ virtual std::vector< ObjectPtr > getChildren( ) = 0;
- virtual std::string getParentId( );
- virtual std::string getPath( );
-
- virtual bool isRootFolder( );
-
- virtual ::boost::shared_ptr< Folder > createFolder( const std::map< std::string, PropertyPtr >& properties )
-- throw ( libcmis::Exception ) = 0;
-+ = 0;
- virtual ::boost::shared_ptr< Document > createDocument( const std::map< std::string, PropertyPtr >& properties,
-- boost::shared_ptr< std::ostream > os, std::string contentType, std::string fileName ) throw ( Exception ) = 0;
-+ boost::shared_ptr< std::ostream > os, std::string contentType, std::string fileName ) = 0;
-
- virtual std::vector< std::string > removeTree( bool allVersion = true, UnfileObjects::Type unfile = UnfileObjects::Delete,
-- bool continueOnError = false ) throw ( Exception ) = 0;
-+ bool continueOnError = false ) = 0;
-
- virtual std::string toString( );
- };
---- src/libcmis/object.cxx
-+++ src/libcmis/object.cxx
-@@ -226,7 +226,6 @@
- }
-
- ObjectPtr Object::addSecondaryType( string id, PropertyPtrMap properties )
-- throw ( Exception )
- {
- // First make sure the cmis:secondaryObjectTypeIds property can be defined
- map< string, PropertyTypePtr >& propertyTypes = getTypeDescription( )->
-@@ -253,7 +252,7 @@
- return updateProperties( newProperties );
- }
-
-- ObjectPtr Object::removeSecondaryType( string id ) throw ( Exception )
-+ ObjectPtr Object::removeSecondaryType( string id )
- {
- // First make sure the cmis:secondaryObjectTypeIds property can be defined
- map< string, PropertyTypePtr >& propertyTypes = getTypeDescription( )->
-@@ -297,12 +296,12 @@
- return m_typeDescription;
- }
-
-- vector< RenditionPtr> Object::getRenditions( string /*filter*/ ) throw ( Exception )
-+ vector< RenditionPtr> Object::getRenditions( string /*filter*/ )
- {
- return m_renditions;
- }
-
-- string Object::getThumbnailUrl( ) throw ( Exception )
-+ string Object::getThumbnailUrl( )
- {
- string url;
- vector< RenditionPtr > renditions = getRenditions( );
---- src/libcmis/object.hxx
-+++ src/libcmis/object.hxx
-@@ -129,8 +129,7 @@
- */
- virtual boost::shared_ptr< Object > addSecondaryType(
- std::string id,
-- PropertyPtrMap properties )
-- throw ( Exception );
-+ PropertyPtrMap properties );
-
- /** Convenience function removing a secondary type from the object.
-
-@@ -154,8 +153,7 @@
- to throw a constraint exception if it doesn't allow the
- operation.
- */
-- virtual boost::shared_ptr< Object > removeSecondaryType( std::string id )
-- throw ( Exception );
-+ virtual boost::shared_ptr< Object > removeSecondaryType( std::string id );
-
- /** Gives access to the properties of the object.
-
-@@ -179,8 +177,7 @@
- \attention
- The streamId of the rendition is used in getContentStream( )
- */
-- virtual std::vector< RenditionPtr> getRenditions( std::string filter = std::string( ) )
-- throw ( Exception );
-+ virtual std::vector< RenditionPtr> getRenditions( std::string filter = std::string( ) );
- virtual AllowableActionsPtr getAllowableActions( ) { return m_allowableActions; }
-
- /** Update the object properties and return the updated object.
-@@ -191,21 +188,21 @@
- are still two different instances to ease memory handling.
- */
- virtual boost::shared_ptr< Object > updateProperties(
-- const PropertyPtrMap& properties ) throw ( Exception ) = 0;
-+ const PropertyPtrMap& properties ) = 0;
-
- virtual ObjectTypePtr getTypeDescription( );
-
- /** Reload the data from the server.
- */
-- virtual void refresh( ) throw ( Exception ) = 0;
-+ virtual void refresh( ) = 0;
- virtual time_t getRefreshTimestamp( ) { return m_refreshTimestamp; }
-
-- virtual void remove( bool allVersions = true ) throw ( Exception ) = 0;
-+ virtual void remove( bool allVersions = true ) = 0;
-
-- virtual void move( boost::shared_ptr< Folder > source, boost::shared_ptr< Folder > destination ) throw ( Exception ) = 0;
-+ virtual void move( boost::shared_ptr< Folder > source, boost::shared_ptr< Folder > destination ) = 0;
-
-
-- virtual std::string getThumbnailUrl( ) throw ( Exception );
-+ virtual std::string getThumbnailUrl( );
-
- /** Dump the object as a string for debugging or display purpose.
- */
---- src/libcmis/object-type.cxx
-+++ src/libcmis/object-type.cxx
-@@ -293,22 +293,22 @@
- }
- }
-
-- void ObjectType::refresh( ) throw ( Exception )
-+ void ObjectType::refresh( )
- {
- throw Exception( "ObjectType::refresh() shouldn't be called" );
- }
-
-- ObjectTypePtr ObjectType::getParentType( ) throw ( Exception )
-+ ObjectTypePtr ObjectType::getParentType( )
- {
- throw Exception( "ObjectType::getParentType() shouldn't be called" );
- }
-
-- ObjectTypePtr ObjectType::getBaseType( ) throw ( Exception )
-+ ObjectTypePtr ObjectType::getBaseType( )
- {
- throw Exception( "ObjectType::getBaseType() shouldn't be called" );
- }
-
-- vector< ObjectTypePtr > ObjectType::getChildren( ) throw ( Exception )
-+ vector< ObjectTypePtr > ObjectType::getChildren( )
- {
- throw Exception( "ObjectType::getChildren() shouldn't be called" );
- }
---- src/libcmis/object-type.hxx
-+++ src/libcmis/object-type.hxx
-@@ -94,7 +94,7 @@
- This method needs to be implemented in subclasses or it will
- do nothing
- */
-- virtual void refresh( ) throw ( Exception );
-+ virtual void refresh( );
- virtual time_t getRefreshTimestamp( ) const;
-
- std::string getId( ) const;
-@@ -104,9 +104,9 @@
- std::string getQueryName( ) const;
- std::string getDescription( ) const;
-
-- virtual boost::shared_ptr< ObjectType > getParentType( ) throw ( Exception );
-- virtual boost::shared_ptr< ObjectType > getBaseType( ) throw ( Exception );
-- virtual std::vector< boost::shared_ptr< ObjectType > > getChildren( ) throw ( Exception );
-+ virtual boost::shared_ptr< ObjectType > getParentType( );
-+ virtual boost::shared_ptr< ObjectType > getBaseType( );
-+ virtual std::vector< boost::shared_ptr< ObjectType > > getChildren( );
-
- /** Get the parent type id without extracting the complete parent type from
- the repository. This is mainly provided for performance reasons.
---- src/libcmis/session-factory.cxx
-+++ src/libcmis/session-factory.cxx
-@@ -57,7 +57,7 @@
-
- Session* SessionFactory::createSession( string bindingUrl, string username,
- string password, string repository, bool noSslCheck,
-- libcmis::OAuth2DataPtr oauth2, bool verbose ) throw ( Exception )
-+ libcmis::OAuth2DataPtr oauth2, bool verbose )
- {
- Session* session = NULL;
-
-@@ -138,7 +138,7 @@
- }
-
- vector< RepositoryPtr > SessionFactory::getRepositories( string bindingUrl,
-- string username, string password, bool verbose ) throw ( Exception )
-+ string username, string password, bool verbose )
- {
- vector< RepositoryPtr > repos;
-
---- src/libcmis/session-factory.hxx
-+++ src/libcmis/session-factory.hxx
-@@ -128,7 +128,7 @@
- std::string password = std::string( ),
- std::string repositoryId = std::string( ),
- bool noSslCheck = false,
-- OAuth2DataPtr oauth2 = OAuth2DataPtr(), bool verbose = false ) throw ( Exception );
-+ OAuth2DataPtr oauth2 = OAuth2DataPtr(), bool verbose = false );
-
- /**
- Gets the informations of the repositories on the server.
-@@ -142,7 +142,7 @@
- static std::vector< RepositoryPtr > getRepositories( std::string bindingUrl,
- std::string username = std::string( ),
- std::string password = std::string( ),
-- bool verbose = false ) throw ( Exception );
-+ bool verbose = false );
- };
- }
-
---- src/libcmis/session.hxx
-+++ src/libcmis/session.hxx
-@@ -47,7 +47,7 @@
-
- /** Get the current repository.
- */
-- virtual RepositoryPtr getRepository( ) throw ( Exception ) = 0;
-+ virtual RepositoryPtr getRepository( ) = 0;
-
- virtual std::vector< RepositoryPtr > getRepositories( ) = 0;
-
-@@ -61,27 +61,27 @@
-
- /** Get the Root folder of the repository
- */
-- virtual FolderPtr getRootFolder() throw ( Exception )= 0;
-+ virtual FolderPtr getRootFolder() = 0;
-
- /** Get a CMIS object from its ID.
- */
-- virtual ObjectPtr getObject( std::string id ) throw ( Exception ) = 0;
-+ virtual ObjectPtr getObject( std::string id ) = 0;
-
- /** Get a CMIS object from one of its path.
- */
-- virtual ObjectPtr getObjectByPath( std::string path ) throw ( Exception ) = 0;
-+ virtual ObjectPtr getObjectByPath( std::string path ) = 0;
-
- /** Get a CMIS folder from its ID.
- */
-- virtual libcmis::FolderPtr getFolder( std::string id ) throw ( Exception ) = 0;
-+ virtual libcmis::FolderPtr getFolder( std::string id ) = 0;
-
- /** Get a CMIS object type from its ID.
- */
-- virtual ObjectTypePtr getType( std::string id ) throw ( Exception ) = 0;
-+ virtual ObjectTypePtr getType( std::string id ) = 0;
-
- /** Get all the CMIS base object types known by the server.
- */
-- virtual std::vector< ObjectTypePtr > getBaseTypes( ) throw ( Exception ) = 0;
-+ virtual std::vector< ObjectTypePtr > getBaseTypes( ) = 0;
-
- /** Enable or disable the SSL certificate verification.
-
---- src/libcmis/xml-utils.cxx
-+++ src/libcmis/xml-utils.cxx
-@@ -361,7 +361,6 @@
- string getXmlNodeAttributeValue( xmlNodePtr node,
- const char* attributeName,
- const char* defaultValue )
-- throw ( Exception )
- {
- xmlChar* xmlStr = xmlGetProp( node, BAD_CAST( attributeName ) );
- if ( xmlStr == NULL )
-@@ -450,7 +449,7 @@
- return str;
- }
-
-- bool parseBool( string boolStr ) throw ( Exception )
-+ bool parseBool( string boolStr )
- {
- bool value = false;
- if ( boolStr == "true" || boolStr == "1" )
-@@ -462,7 +461,7 @@
- return value;
- }
-
-- long parseInteger( string intStr ) throw ( Exception )
-+ long parseInteger( string intStr )
- {
- char* end;
- errno = 0;
-@@ -481,7 +480,7 @@
- return value;
- }
-
-- double parseDouble( string doubleStr ) throw ( Exception )
-+ double parseDouble( string doubleStr )
- {
- char* end;
- errno = 0;
---- src/libcmis/xml-utils.hxx
-+++ src/libcmis/xml-utils.hxx
-@@ -132,8 +132,7 @@
- */
- std::string getXmlNodeAttributeValue( xmlNodePtr node,
- const char* attributeName,
-- const char* defaultValue = NULL )
-- throw ( Exception );
-+ const char* defaultValue = NULL );
-
- /** Parse a xsd:dateTime string and return the corresponding UTC posix time.
- */
-@@ -142,11 +141,11 @@
- /// Write a UTC time object to an xsd:dateTime string
- std::string writeDateTime( boost::posix_time::ptime time );
-
-- bool parseBool( std::string str ) throw ( Exception );
-+ bool parseBool( std::string str );
-
-- long parseInteger( std::string str ) throw ( Exception );
-+ long parseInteger( std::string str );
-
-- double parseDouble( std::string str ) throw ( Exception );
-+ double parseDouble( std::string str );
-
- /** Trim spaces on the left and right of a string.
- */
diff --git a/external/libcmis/libcmis-fix-error-handling.patch b/external/libcmis/libcmis-fix-error-handling.patch
deleted file mode 100644
index d0f1ae29cebc..000000000000
--- a/external/libcmis/libcmis-fix-error-handling.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-diff -ur cmis.org/src/libcmis/xml-utils.cxx cmis/src/libcmis/xml-utils.cxx
---- cmis.org/src/libcmis/xml-utils.cxx 2016-12-09 02:19:47.900961750 +0100
-+++ cmis/src/libcmis/xml-utils.cxx 2016-12-09 02:23:56.392206339 +0100
-@@ -382,9 +382,14 @@
- // Get the time zone offset
- boost::posix_time::time_duration tzOffset( boost::posix_time::duration_from_string( "+00:00" ) );
-
-+ if ( dateTimeStr.empty( ) )
-+ return t; // obviously not a time
-+
- size_t teePos = dateTimeStr.find( 'T' );
-- string noTzStr = dateTimeStr.substr( 0, teePos + 1 );
-+ if ( teePos == string::npos )
-+ return t; // obviously not a time
-
-+ string noTzStr = dateTimeStr.substr( 0, teePos + 1 );
- string timeStr = dateTimeStr.substr( teePos + 1 );
-
- // Get the TZ if any
-@@ -459,10 +459,9 @@
- bool value = false;
- if ( boolStr == "true" || boolStr == "1" )
- value = true;
-- else if ( boolStr == "false" || boolStr == "0" )
-- value = false;
- else
-- throw Exception( string( "Invalid xsd:boolean input: " ) + boolStr );
-+ // treat everthing else, including absence of property, as 'false', not as an error
-+ value = false;
- return value;
- }
-
diff --git a/external/libcmis/libcmis-fix-google-drive-2.patch b/external/libcmis/libcmis-fix-google-drive-2.patch
deleted file mode 100644
index 7d11514d82ee..000000000000
--- a/external/libcmis/libcmis-fix-google-drive-2.patch
+++ /dev/null
@@ -1,125 +0,0 @@
-diff --git a/src/libcmis/oauth2-providers.cxx b/src/libcmis/oauth2-providers.cxx
-index 74c0fec..30fedb0 100644
---- a/src/libcmis/oauth2-providers.cxx
-+++ b/src/libcmis/oauth2-providers.cxx
-@@ -41,6 +41,7 @@
- #define CHALLENGE_PAGE_ACTION_LEN sizeof( CHALLENGE_PAGE_ACTION ) - 1
- #define PIN_FORM_ACTION "/signin/challenge/ipp"
- #define PIN_FORM_ACTION_LEN sizeof( PIN_FORM_ACTION ) - 1
-+#define PIN_INPUT_NAME "Pin"
-
- using namespace std;
-
-@@ -80,7 +81,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- // send the first get, receive the html login page
- res = session->httpGetRequest( authUrl )->getStream( )->str( );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -102,7 +103,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- loginEmailRes = session->httpPostRequest ( loginEmailLink, loginEmailIs, CONTENT_TYPE )
- ->getStream( )->str( );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -113,7 +114,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- if ( !parseResponse( loginEmailRes.c_str( ), loginPasswdPost, loginPasswdLink ) )
- return string( );
-
-- loginPasswdPost += "&Passwd=";
-+ loginPasswdPost += "Passwd=";
- loginPasswdPost += string( password );
-
- istringstream loginPasswdIs( loginPasswdPost );
-@@ -124,7 +125,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- loginPasswdRes = session->httpPostRequest ( loginPasswdLink, loginPasswdIs, CONTENT_TYPE )
- ->getStream( )->str( );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -152,7 +153,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- }
-
- loginChallengeLink = "https://accounts.google.com" + loginChallengeLink;
-- loginChallengePost += "Pin=";
-+ loginChallengePost += string( PIN_INPUT_NAME ) + "=";
- loginChallengePost += string( pin );
-
- istringstream loginChallengeIs( loginChallengePost );
-@@ -163,7 +164,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- loginChallengeRes = session->httpPostRequest ( loginChallengeLink, loginChallengeIs, CONTENT_TYPE )
- ->getStream( )->str( );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -221,7 +222,7 @@ string OAuth2Providers::OAuth2Alfresco( HttpSession* session, const string& auth
- {
- res = session->httpGetRequest( authUrl )->getStream( )->str( );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -247,7 +248,7 @@ string OAuth2Providers::OAuth2Alfresco( HttpSession* session, const string& auth
- // Alfresco code is in the redirect link
- resp = session->httpPostRequest( loginLink, loginIs, CONTENT_TYPE, false );
- }
-- catch ( const CurlException& e )
-+ catch ( const CurlException& )
- {
- return string( );
- }
-@@ -291,6 +292,8 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- if ( reader == NULL ) return 0;
-
- bool readInputField = false;
-+ bool bIsRightForm = false;
-+ bool bHasPinField = false;
-
- while ( true )
- {
-@@ -301,6 +304,12 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- // Find the redirect link
- if ( xmlStrEqual( nodeName, BAD_CAST( "form" ) ) )
- {
-+ // 2FA: Don't add fields form other forms not having pin field
-+ if ( bIsRightForm && !bHasPinField )
-+ post = string( "" );
-+ if ( bIsRightForm && bHasPinField )
-+ break;
-+
- xmlChar* action = xmlTextReaderGetAttribute( reader,
- BAD_CAST( "action" ));
-
-@@ -311,7 +320,7 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- bool bChallengePage = ( strncmp( (char*)action,
- CHALLENGE_PAGE_ACTION,
- CHALLENGE_PAGE_ACTION_LEN ) == 0 );
-- bool bIsRightForm = ( strncmp( (char*)action,
-+ bIsRightForm = ( strncmp( (char*)action,
- PIN_FORM_ACTION,
- PIN_FORM_ACTION_LEN ) == 0 );
- if ( ( xmlStrlen( action ) > 0 )
-@@ -332,6 +341,8 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- BAD_CAST( "name" ));
- xmlChar* value = xmlTextReaderGetAttribute( reader,
- BAD_CAST( "value" ));
-+ if ( name != NULL && strcmp( (char*)name, PIN_INPUT_NAME ) == 0 )
-+ bHasPinField = true;
- if ( ( name != NULL ) && ( value!= NULL ) )
- {
- if ( ( xmlStrlen( name ) > 0) && ( xmlStrlen( value ) > 0) )
-
diff --git a/external/libcmis/libcmis-fix-google-drive.patch b/external/libcmis/libcmis-fix-google-drive.patch
deleted file mode 100644
index 77961ce80863..000000000000
--- a/external/libcmis/libcmis-fix-google-drive.patch
+++ /dev/null
@@ -1,106 +0,0 @@
-diff -aru old-src/src/libcmis/oauth2-providers.cxx new-src/src/libcmis/oauth2-providers.cxx
---- old-src/src/libcmis/oauth2-providers.cxx 2016-03-01 17:14:26.000000000 +0100
-+++ new-src/src/libcmis/oauth2-providers.cxx 2016-04-28 11:28:25.233803971 +0200
-@@ -37,11 +37,28 @@
- string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUrl,
- const string& username, const string& password )
- {
-+ /* This member function implements 'Google OAuth 2.0'
-+ *
-+ * The interaction is carried out by libcmis, with no web browser involved.
-+ *
-+ * Normal sequence (without 2FA) is:
-+ * 1) a get to activate login page
-+ * receive first login page, html format
-+ * 2) subsequent post to sent email
-+ * receive html page for password input
-+ * 3) subsequent post to send password
-+ * receive html page for application consent
-+ * 4) subsequent post to send a consent for the application
-+ * receive a single-use authorization code
-+ * this code is returned as a string
-+ */
-+
- static const string CONTENT_TYPE( "application/x-www-form-urlencoded" );
- // STEP 1: Log in
- string res;
- try
- {
-+ // send the first get, receive the html login page
- res = session->httpGetRequest( authUrl )->getStream( )->str( );
- }
- catch ( const CurlException& e )
-@@ -49,20 +66,39 @@
- return string( );
- }
-
-- string loginPost, loginLink;
-- if ( !parseResponse( res.c_str( ), loginPost, loginLink ) )
-+ string loginEmailPost, loginEmailLink;
-+ if ( !parseResponse( res.c_str( ), loginEmailPost, loginEmailLink ) )
-+ return string( );
-+
-+ loginEmailPost += "Email=";
-+ loginEmailPost += string( username );
-+
-+ istringstream loginEmailIs( loginEmailPost );
-+ string loginEmailRes;
-+ try
-+ {
-+ // send a post with user email, receive the html page for password input
-+ loginEmailRes = session->httpPostRequest ( loginEmailLink, loginEmailIs, CONTENT_TYPE )
-+ ->getStream( )->str( );
-+ }
-+ catch ( const CurlException& e )
-+ {
-+ return string( );
-+ }
-+
-+ string loginPasswdPost, loginPasswdLink;
-+ if ( !parseResponse( loginEmailRes.c_str( ), loginPasswdPost, loginPasswdLink ) )
- return string( );
--
-- loginPost += "Email=";
-- loginPost += string( username );
-- loginPost += "&Passwd=";
-- loginPost += string( password );
--
-- istringstream loginIs( loginPost );
-- string loginRes;
-- try
-+
-+ loginPasswdPost += "&Passwd=";
-+ loginPasswdPost += string( password );
-+
-+ istringstream loginPasswdIs( loginPasswdPost );
-+ string loginPasswdRes;
-+ try
- {
-- loginRes = session->httpPostRequest ( loginLink, loginIs, CONTENT_TYPE )
-+ // send a post with user password, receive the application consent page
-+ loginPasswdRes = session->httpPostRequest ( loginPasswdLink, loginPasswdIs, CONTENT_TYPE )
- ->getStream( )->str( );
- }
- catch ( const CurlException& e )
-@@ -71,8 +107,8 @@
- }
-
- // STEP 2: allow libcmis to access google drive
-- string approvalPost, approvalLink;
-- if ( !parseResponse( loginRes. c_str( ), approvalPost, approvalLink) )
-+ string approvalPost, approvalLink;
-+ if ( !parseResponse( loginPasswdRes. c_str( ), approvalPost, approvalLink) )
- return string( );
- approvalPost += "submit_access=true";
-
-@@ -80,7 +116,8 @@
- string approvalRes;
- try
- {
-- approvalRes = session->httpPostRequest ( approvalLink, approvalIs,
-+ // send a post with application consent
-+ approvalRes = session->httpPostRequest ( approvalLink, approvalIs,
- CONTENT_TYPE) ->getStream( )->str( );
- }
- catch ( const CurlException& e )
-Only in new-src/src/libcmis: oauth2-providers.cxx~
diff --git a/external/libcmis/libcmis-google-2FA-implementation.patch b/external/libcmis/libcmis-google-2FA-implementation.patch
deleted file mode 100644
index efa7f0310191..000000000000
--- a/external/libcmis/libcmis-google-2FA-implementation.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-diff --git a/src/libcmis/oauth2-providers.cxx b/src/libcmis/oauth2-providers.cxx
---- a/src/libcmis/oauth2-providers.cxx
-+++ b/src/libcmis/oauth2-providers.cxx
-@@ -29,9 +29,15 @@
- #include <libxml/HTMLparser.h>
- #include <libxml/xmlreader.h>
-
-+#include "session-factory.hxx"
- #include "oauth2-providers.hxx"
- #include "http-session.hxx"
-
-+#define CHALLENGE_PAGE_ACTION "/signin"
-+#define CHALLENGE_PAGE_ACTION_LEN sizeof( CHALLENGE_PAGE_ACTION ) - 1
-+#define PIN_FORM_ACTION "/signin/challenge/ipp"
-+#define PIN_FORM_ACTION_LEN sizeof( PIN_FORM_ACTION ) - 1
-+
- using namespace std;
-
- #if LIBXML_VERSION < 20621
-@@ -51,10 +52,23 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- * 4) subsequent post to send a consent for the application
- * receive a single-use authorization code
- * this code is returned as a string
-+ *
-+ * Sequence with 2FA is:
-+ * 1) a get to activate login page
-+ * receive first login page, html format
-+ * 2) subsequent post to sent email
-+ * receive html page for password input
-+ * 3) subsequent post to send password
-+ * receive html page for pin input
-+ * 3b) subsequent post to send pin number
-+ * receive html page for application consent
-+ * 4) subsequent post to send a consent for the application
-+ * receive a single-use authorization code
-+ * this code is returned as a string
- */
-
- static const string CONTENT_TYPE( "application/x-www-form-urlencoded" );
-- // STEP 1: Log in
-+ // STEP 1: get login page
- string res;
- try
- {
-@@ -66,6 +80,8 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- return string( );
- }
-
-+ // STEP 2: send email
-+
- string loginEmailPost, loginEmailLink;
- if ( !parseResponse( res.c_str( ), loginEmailPost, loginEmailLink ) )
- return string( );
-@@ -86,6 +102,8 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- return string( );
- }
-
-+ // STEP 3: password page
-+
- string loginPasswdPost, loginPasswdLink;
- if ( !parseResponse( loginEmailRes.c_str( ), loginPasswdPost, loginPasswdLink ) )
- return string( );
-@@ -106,10 +124,60 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- return string( );
- }
-
-- // STEP 2: allow libcmis to access google drive
- string approvalPost, approvalLink;
- if ( !parseResponse( loginPasswdRes. c_str( ), approvalPost, approvalLink) )
- return string( );
-+
-+ // when 2FA is enabled, link doesn't start with 'http'
-+ if ( approvalLink.compare(0, 4, "http") != 0 )
-+ {
-+ // STEP 3b: 2 Factor Authentication, pin code request
-+
-+ string loginChallengePost( approvalPost );
-+ string loginChallengeLink( approvalLink );
-+
-+ libcmis::OAuth2AuthCodeProvider fallbackProvider = libcmis::SessionFactory::getOAuth2AuthCodeProvider( );
-+ string pin( fallbackProvider( "", "", "" ) );
-+
-+ if( pin.empty() )
-+ {
-+ // unset OAuth2AuthCode Provider to avoid showing pin request again in the HttpSession::oauth2Authenticate
-+ libcmis::SessionFactory::setOAuth2AuthCodeProvider( NULL );
-+ return string( );
-+ }
-+
-+ loginChallengeLink = "https://accounts.google.com" + loginChallengeLink;
-+ loginChallengePost += "Pin=";
-+ loginChallengePost += string( pin );
-+
-+ istringstream loginChallengeIs( loginChallengePost );
-+ string loginChallengeRes;
-+ try
-+ {
-+ // send a post with pin, receive the application consent page
-+ loginChallengeRes = session->httpPostRequest ( loginChallengeLink, loginChallengeIs, CONTENT_TYPE )
-+ ->getStream( )->str( );
-+ }
-+ catch ( const CurlException& e )
-+ {
-+ return string( );
-+ }
-+
-+ approvalPost = string();
-+ approvalLink = string();
-+
-+ if ( !parseResponse( loginChallengeRes. c_str( ), approvalPost, approvalLink) )
-+ return string( );
-+ }
-+ else if( approvalLink.compare( "https://accounts.google.com/ServiceLoginAuth" ) == 0 )
-+ {
-+ // wrong password,
-+ // unset OAuth2AuthCode Provider to avoid showing pin request again in the HttpSession::oauth2Authenticate
-+ libcmis::SessionFactory::setOAuth2AuthCodeProvider( NULL );
-+ return string( );
-+ }
-+
-+ // STEP 4: allow libcmis to access google drive
- approvalPost += "submit_access=true";
-
- istringstream approvalIs( approvalPost );
-@@ -125,7 +186,7 @@ string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUr
- throw e.getCmisException( );
- }
-
-- // STEP 3: Take the authentication code from the text bar
-+ // Take the authentication code from the text bar
- string code = parseCode( approvalRes.c_str( ) );
-
- return code;
-@@ -216,6 +277,9 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- if ( doc == NULL ) return 0;
- xmlTextReaderPtr reader = xmlReaderWalker( doc );
- if ( reader == NULL ) return 0;
-+
-+ bool readInputField = false;
-+
- while ( true )
- {
- // Go to the next node, quit if not found
-@@ -227,15 +291,30 @@ int OAuth2Providers::parseResponse ( const char* response, string& post, string&
- {
- xmlChar* action = xmlTextReaderGetAttribute( reader,
- BAD_CAST( "action" ));
-+
-+ // GDrive pin code page contains many forms.
-+ // We have to parse only the form with pin field.
- if ( action != NULL )
- {
-- if ( xmlStrlen(action) > 0)
-+ bool bChallengePage = ( strncmp( (char*)action,
-+ CHALLENGE_PAGE_ACTION,
-+ CHALLENGE_PAGE_ACTION_LEN ) == 0 );
-+ bool bIsRightForm = ( strncmp( (char*)action,
-+ PIN_FORM_ACTION,
-+ PIN_FORM_ACTION_LEN ) == 0 );
-+ if ( ( xmlStrlen( action ) > 0 )
-+ && ( ( bChallengePage && bIsRightForm ) || !bChallengePage ) )
-+ {
- link = string ( (char*) action);
-+ readInputField = true;
-+ }
-+ else
-+ readInputField = false;
- xmlFree (action);
- }
- }
- // Find input values
-- if ( !xmlStrcmp( nodeName, BAD_CAST( "input" ) ) )
-+ if ( readInputField && !xmlStrcmp( nodeName, BAD_CAST( "input" ) ) )
- {
- xmlChar* name = xmlTextReaderGetAttribute( reader,
- BAD_CAST( "name" ));
-
diff --git a/external/libcmis/libcmis-libxml2_compatibility.patch b/external/libcmis/libcmis-libxml2_compatibility.patch
index 6c4525eeece9..240b85b4d38e 100644
--- a/external/libcmis/libcmis-libxml2_compatibility.patch
+++ b/external/libcmis/libcmis-libxml2_compatibility.patch
@@ -9,6 +9,6 @@
+#define HTML_PARSE_RECOVER 0
+#endif
+
- string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUrl,
- const string& username, const string& password )
- {
+ namespace {
+
+ // Encodes the given data according to the application/x-www-form-urlencoded format, see
diff --git a/external/libcmis/libcmis-sharepoint-repository-root.patch b/external/libcmis/libcmis-sharepoint-repository-root.patch
deleted file mode 100644
index f89b134cc7a4..000000000000
--- a/external/libcmis/libcmis-sharepoint-repository-root.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-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/external/libcmis/xwwwformurlencoded.patch.0 b/external/libcmis/xwwwformurlencoded.patch.0
deleted file mode 100644
index b9f779cc6e80..000000000000
--- a/external/libcmis/xwwwformurlencoded.patch.0
+++ /dev/null
@@ -1,59 +0,0 @@
---- src/libcmis/oauth2-providers.cxx
-+++ src/libcmis/oauth2-providers.cxx
-@@ -26,6 +26,8 @@
- * instead of those above.
- */
-
-+#include <cassert>
-+
- #include <libxml/HTMLparser.h>
- #include <libxml/xmlreader.h>
-
-@@ -45,6 +47,29 @@
- #define HTML_PARSE_RECOVER 0
- #endif
-
-+namespace {
-+
-+// See <https://url.spec.whatwg.org/#concept-urlencoded-byte-serializer>:
-+void addXWwwFormUrlencoded(std::string * buffer, std::string const & data) {
-+ assert(buffer);
-+ for (string::const_iterator i = data.begin(); i != data.end(); ++i) {
-+ unsigned char c = static_cast<unsigned char>(*i);
-+ if (c == ' ' || c == '*' || c == '-' || c == '.' || (c >= '0' && c <= '9')
-+ || (c >= 'A' && c <= 'Z') || c == '_' || (c >= 'a' && c <= 'z'))
-+ {
-+ *buffer += static_cast<char>(c);
-+ } else {
-+ static const char hex[16] = {
-+ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
-+ *buffer += '%';
-+ *buffer += hex[c >> 4];
-+ *buffer += hex[c & 0xF];
-+ }
-+ }
-+}
-+
-+}
-+
- string OAuth2Providers::OAuth2Gdrive( HttpSession* session, const string& authUrl,
- const string& username, const string& password )
- {
-@@ -97,7 +120,7 @@
- return string( );
-
- loginEmailPost += "Email=";
-- loginEmailPost += string( username );
-+ addXWwwFormUrlencoded(&loginEmailPost, username);
-
- istringstream loginEmailIs( loginEmailPost );
- string loginEmailRes;
-@@ -119,7 +142,7 @@
- return string( );
-
- loginPasswdPost += "Passwd=";
-- loginPasswdPost += string( password );
-+ addXWwwFormUrlencoded(&loginPasswdPost, password);
-
- istringstream loginPasswdIs( loginPasswdPost );
- string loginPasswdRes;
diff --git a/solenv/flatpak-manifest.in b/solenv/flatpak-manifest.in
index 1454c089b8e9..1f1021367715 100644
--- a/solenv/flatpak-manifest.in
+++ b/solenv/flatpak-manifest.in
@@ -211,10 +211,10 @@
"dest-filename": "external/tarballs/libcdr-0.1.4.tar.xz"
},
{
- "url": "https://dev-www.libreoffice.org/src/libcmis-0.5.1.tar.gz",
- "sha256": "6acbdf22ecdbaba37728729b75bfc085ee5a4b49a6024757cfb86ccd3da27b0e",
+ "url": "https://dev-www.libreoffice.org/src/libcmis-0.5.2.tar.xz",
+ "sha256": "d7b18d9602190e10d437f8a964a32e983afd57e2db316a07d87477a79f5000a2",
"type": "file",
- "dest-filename": "external/tarballs/libcmis-0.5.1.tar.gz"
+ "dest-filename": "external/tarballs/libcmis-0.5.2.tar.xz"
},
{
"url": "https://dev-www.libreoffice.org/src/libe-book-0.1.3.tar.xz",