summaryrefslogtreecommitdiff
path: root/external
diff options
context:
space:
mode:
Diffstat (limited to 'external')
-rw-r--r--external/libcmis/UnpackedTarball_libcmis.mk1
-rw-r--r--external/libcmis/exceptions.patch.1171
2 files changed, 172 insertions, 0 deletions
diff --git a/external/libcmis/UnpackedTarball_libcmis.mk b/external/libcmis/UnpackedTarball_libcmis.mk
index ede32bc8fad3..af5feed5e96a 100644
--- a/external/libcmis/UnpackedTarball_libcmis.mk
+++ b/external/libcmis/UnpackedTarball_libcmis.mk
@@ -21,6 +21,7 @@ $(eval $(call gb_UnpackedTarball_add_patches,libcmis,\
external/libcmis/http-session-cleanup.patch.1 \
external/libcmis/factory-no-retry-ssl.patch.1 \
external/libcmis/sharepoint-auth.patch.1 \
+ external/libcmis/exceptions.patch.1 \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libcmis/exceptions.patch.1 b/external/libcmis/exceptions.patch.1
new file mode 100644
index 000000000000..29a66f229c4c
--- /dev/null
+++ b/external/libcmis/exceptions.patch.1
@@ -0,0 +1,171 @@
+--- libcmis/src/libcmis/http-session.cxx.orig 2024-06-21 12:22:36.083125022 +0200
++++ libcmis/src/libcmis/http-session.cxx 2024-06-21 13:08:37.403016695 +0200
+@@ -653,7 +653,8 @@
+ m_authProvided = authProvider->authenticationQuery( m_username, m_password );
+ if ( !m_authProvided )
+ {
+- throw CurlException( "User cancelled authentication request" );
++ // report this as 401 so it becomes permissionDenied
++ throw CurlException("User cancelled authentication request", CURLE_OK, "", 401);
+ }
+ }
+ }
+@@ -762,6 +762,7 @@
+ if ( CURLE_SSL_CACERT == errCode )
+ {
+ vector< string > certificates;
++ string err(errBuff);
+
+ // We somehow need to rerun the request to get the certificate
+ curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYHOST, 0);
+@@ -814,7 +815,7 @@
+ }
+ else
+ {
+- throw CurlException( "Invalid SSL certificate" );
++ throw CurlException(err, CURLE_SSL_CACERT);
+ }
+ }
+ }
+@@ -827,7 +828,6 @@
+
+
+ void HttpSession::checkOAuth2( string url )
+-try
+ {
+ if ( m_oauth2Handler )
+ {
+@@ -836,10 +836,6 @@
+ oauth2Authenticate( );
+ }
+ }
+-catch ( const libcmis::Exception& e )
+-{
+- throw CurlException( e.what( ) );
+-}
+
+ long HttpSession::getHttpStatus( )
+ {
+@@ -906,15 +902,10 @@
+ }
+
+ void HttpSession::oauth2Refresh( )
+-try
+ {
+ const ScopeGuard<bool> inOauth2Guard(m_inOAuth2Authentication, true);
+ m_oauth2Handler->refresh( );
+ }
+-catch ( const libcmis::Exception& e )
+-{
+- throw CurlException( e.what() );
+-}
+
+ void HttpSession::initProtocols( )
+ {
+@@ -981,11 +972,43 @@
+ break;
+ default:
+ msg = what();
+- if ( !isCancelled( ) )
+- msg += ": " + m_url;
+- else
+- type = "permissionDenied";
+- break;
++ switch (m_code)
++ {
++ case CURLE_COULDNT_RESOLVE_PROXY:
++ case CURLE_COULDNT_RESOLVE_HOST:
++ type = "dnsFailed";
++ break;
++ case CURLE_COULDNT_CONNECT:
++ case CURLE_SSL_CONNECT_ERROR:
++ case CURLE_SSL_CERTPROBLEM:
++ case CURLE_SSL_CIPHER:
++ case CURLE_PEER_FAILED_VERIFICATION:
++#if CURL_AT_LEAST_VERSION(7, 19, 0)
++ case CURLE_SSL_ISSUER_ERROR:
++#endif
++ case CURLE_SSL_PINNEDPUBKEYNOTMATCH:
++ case CURLE_SSL_INVALIDCERTSTATUS:
++ case CURLE_FAILED_INIT:
++#if CURL_AT_LEAST_VERSION(7, 69, 0)
++ case CURLE_QUIC_CONNECT_ERROR:
++#endif
++ type = "connectFailed";
++ break;
++ case CURLE_OPERATION_TIMEDOUT:
++ type = "connectTimeout";
++ break;
++ case CURLE_WRITE_ERROR:
++ case CURLE_READ_ERROR: // error returned from our callbacks
++ case CURLE_ABORTED_BY_CALLBACK:
++ case CURLE_SEND_ERROR:
++ case CURLE_RECV_ERROR:
++ type = "transferFailed";
++ break;
++ default:
++ if ( !isCancelled( ) )
++ msg += ": " + m_url;
++ break;
++ }
+ }
+
+ return libcmis::Exception( msg, type );
+--- libcmis/src/libcmis/http-session.hxx.orig 2024-06-21 12:36:22.785868998 +0200
++++ libcmis/src/libcmis/http-session.hxx 2024-06-21 12:36:44.272966309 +0200
+@@ -71,10 +71,10 @@
+ {
+ }
+
+- CurlException( std::string message ) :
++ CurlException(std::string message, CURLcode const code) :
+ exception( ),
+ m_message( message ),
+- m_code( CURLE_OK ),
++ m_code(code),
+ m_url( ),
+ m_httpStatus( 0 ),
+ m_cancelled( true ),
+--- libcmis/src/libcmis/sharepoint-session.cxx.orig 2024-06-21 12:23:07.164265783 +0200
++++ libcmis/src/libcmis/sharepoint-session.cxx 2024-06-21 12:37:45.528243723 +0200
+@@ -289,6 +291,7 @@
+ if ( CURLE_SSL_CACERT == errCode )
+ {
+ vector< string > certificates;
++ string err(errBuff);
+
+ // We somehow need to rerun the request to get the certificate
+ curl_easy_setopt(m_curlHandle, CURLOPT_SSL_VERIFYHOST, 0);
+@@ -344,7 +344,7 @@
+ }
+ else
+ {
+- throw CurlException( "Invalid SSL certificate" );
++ throw CurlException(err, CURLE_SSL_CACERT);
+ }
+ }
+ }
+--- libcmis/src/libcmis/session-factory.cxx.orig 2024-06-21 15:37:55.132824666 +0200
++++ libcmis/src/libcmis/session-factory.cxx 2024-06-21 15:36:17.558408868 +0200
+@@ -96,7 +96,7 @@
+ }
+ catch (const CurlException& e)
+ {
+- if (strcmp(e.what(), "Invalid SSL certificate") == 0)
++ if (e.getErrorCode() == CURLE_SSL_CACERT)
+ {
+ // no point in trying other protocols
+ throw e.getCmisException();
+--- libcmis/qa/libcmis/test-atom.cxx.orig 2024-06-21 15:39:49.130310447 +0200
++++ libcmis/qa/libcmis/test-atom.cxx 2024-06-21 15:39:51.541320721 +0200
+@@ -323,8 +323,8 @@
+ }
+ catch ( const libcmis::Exception& e )
+ {
+- CPPUNIT_ASSERT_EQUAL_MESSAGE( "Wrong exception message",
+- string( "Invalid SSL certificate" ), string( e.what() ) );
++ CPPUNIT_ASSERT_EQUAL_MESSAGE( "Wrong exception type",
++ string("connectFailed"), string(e.getType()) );
+ }
+ }
+ }