ucb/source/ucp/webdav-curl/webdavcontent.cxx |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

New commits:
commit 98c05dd05318e6c8a77801d85c015539d933ffa6
Author:     Giuseppe Castagno <giuseppe.casta...@acca-esse.eu>
AuthorDate: Wed Aug 19 12:13:35 2015 +0200
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Mon Nov 1 18:26:43 2021 +0100

    ucb: webdav-curl: tdf#83531 Opening WebDAV URL WebDav fails if write is 
restricted
    
    Happened because LOCK method was not allowed without credentials.
    
    [ port of commit 0326352470aee1a774bb5aa314c4f3625c1372b3 ]
    
    Change-Id: Id94b96856737e50715c2a18427ba22c3776a8da9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/123272
    Tested-by: Michael Stahl <michael.st...@allotropia.de>
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx 
b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
index f9933c639074..43884cdbab47 100644
--- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
@@ -2997,6 +2997,28 @@ void Content::lock(
                         false );
             }
             break;
+            case DAVException::DAV_HTTP_AUTH:
+            {
+                SAL_WARN( "ucb.ucp.webdav", "lock: DAVException Authentication 
error - URL: <"
+                          << m_xIdentifier->getContentIdentifier() << ">" );
+                // this could mean:
+                // - interaction handler for credential management not present 
(happens, depending
+                //   on the LO framework processing)
+                // - the remote site is a WebDAV with special configuration: 
read/only for read operations
+                //   and read/write for write operations, the user is not 
allowed to lock/write and
+                //   she cancelled the credentials request.
+                //   this is not actually an error, but the exception is sent 
directly from here, avoiding the automatic
+                //   management that takes part in cancelCommandExecution() 
below
+                // Unfortunately there is no InteractiveNetwork*Exception 
available to signal this
+                // since it mostly happens on read/only part of webdav, this 
appears to be the most correct exception available
+                throw
+                    ucb::InteractiveNetworkWriteException(
+                        "Authentication error while trying to lock! Write only 
WebDAV perhaps?",
+                        static_cast< cppu::OWeakObject * >( this ),
+                        task::InteractionClassification_ERROR,
+                        e.getData() );
+            }
+            break;
             case DAVException::DAV_HTTP_ERROR:
                 //grab the error code
                 switch( e.getStatus() )

Reply via email to