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/17856
Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Tested-by: Jan Holesovsky <kendy@collabora.com>
This commit is contained in:
Giuseppe Castagno
2015-08-19 12:13:35 +02:00
committed by Jan Holesovsky
parent b4576f3da4
commit 0326352470
2 changed files with 36 additions and 0 deletions

View File

@@ -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& )
{}
}

View File

@@ -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() )