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:
committed by
Jan Holesovsky
parent
b4576f3da4
commit
0326352470
@@ -42,6 +42,7 @@
|
|||||||
#include <com/sun/star/ucb/CommandFailedException.hpp>
|
#include <com/sun/star/ucb/CommandFailedException.hpp>
|
||||||
#include <com/sun/star/ucb/CommandAbortedException.hpp>
|
#include <com/sun/star/ucb/CommandAbortedException.hpp>
|
||||||
#include <com/sun/star/ucb/InteractiveLockingLockedException.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/Lock.hpp>
|
||||||
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
|
#include <com/sun/star/ucb/XCommandEnvironment.hpp>
|
||||||
#include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
|
#include <com/sun/star/ucb/XContentIdentifierFactory.hpp>
|
||||||
@@ -1010,6 +1011,19 @@ void SfxMedium::LockOrigFileOnDemand( bool bLoading, bool bNoUI )
|
|||||||
bUIStatus = ShowLockedDocumentDialog( aLockData, bLoading, false );
|
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& )
|
catch( uno::Exception& )
|
||||||
{}
|
{}
|
||||||
}
|
}
|
||||||
|
@@ -2990,6 +2990,28 @@ void Content::lock(
|
|||||||
false );
|
false );
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case DAVException::DAV_HTTP_ERROR:
|
||||||
//grab the error code
|
//grab the error code
|
||||||
switch( e.getStatus() )
|
switch( e.getStatus() )
|
||||||
|
Reference in New Issue
Block a user