Kaydet (Commit) 03263524 authored tarafından Giuseppe Castagno's avatar Giuseppe Castagno Kaydeden (comit) Jan Holesovsky

tdf#83531 Opening WebDAV URL WebDav fails if write is restricted

Happened because LOCK method was not allowed without credentials.

Change-Id: I7b204e67079791a08211410ced4b0b4f015d524a
Reviewed-on: https://gerrit.libreoffice.org/17856Reviewed-by: 's avatarJan Holesovsky <kendy@collabora.com>
Tested-by: 's avatarJan Holesovsky <kendy@collabora.com>
üst b4576f3d
......@@ -42,6 +42,7 @@
#include <com/sun/star/ucb/CommandFailedException.hpp>
#include <com/sun/star/ucb/CommandAbortedException.hpp>
#include <com/sun/star/ucb/InteractiveLockingLockedException.hpp>
#include <com/sun/star/ucb/InteractiveNetworkWriteException.hpp>
#include <com/sun/star/ucb/Lock.hpp>
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
#include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
......@@ -1010,6 +1011,19 @@ void SfxMedium::LockOrigFileOnDemand( bool bLoading, bool bNoUI )
bUIStatus = ShowLockedDocumentDialog( aLockData, bLoading, false );
}
}
catch( ucb::InteractiveNetworkWriteException& )
{
// This catch it's not really needed, here just for the sake of documentation on the behaviour.
// This is the most likely reason:
// - 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 ucb, avoiding the automatic
// management that takes part in cancelCommandExecution()
// Unfortunately there is no InteractiveNetwork*Exception available to signal this more correctly
// since it mostly happens on read/only part of webdav, this can be the most correct
// exception available
}
catch( uno::Exception& )
{}
}
......
......@@ -2990,6 +2990,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(
OUString( "Authentication error while tring 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() )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment