Kaydet (Commit) f1005a88 authored tarafından Kurt Zenker's avatar Kurt Zenker

INTEGRATION: CWS ucbfixes01 (1.23.10); FILE MERGED

2007/04/20 14:17:57 kso 1.23.10.2: #i74980# - Upon redict on POST, do a GET.
2007/04/18 15:34:05 kso 1.23.10.1: #134089# - Never allow URLs with empty hostnames.
üst f00bcef1
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
* *
* $RCSfile: DAVResourceAccess.cxx,v $ * $RCSfile: DAVResourceAccess.cxx,v $
* *
* $Revision: 1.23 $ * $Revision: 1.24 $
* *
* last change: $Author: rt $ $Date: 2007-01-29 14:34:47 $ * last change: $Author: kz $ $Date: 2007-05-10 13:06:49 $
* *
* The Contents of this file are made available subject to * The Contents of this file are made available subject to
* the terms of GNU Lesser General Public License Version 2.1. * the terms of GNU Lesser General Public License Version 2.1.
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "com/sun/star/ucb/XWebDAVCommandEnvironment.hpp" #include "com/sun/star/ucb/XWebDAVCommandEnvironment.hpp"
#include "ucbhelper/simpleauthenticationrequest.hxx" #include "ucbhelper/simpleauthenticationrequest.hxx"
#include "comphelper/seekableinput.hxx"
#include "DAVAuthListenerImpl.hxx" #include "DAVAuthListenerImpl.hxx"
#include "DAVResourceAccess.hxx" #include "DAVResourceAccess.hxx"
...@@ -169,10 +170,10 @@ void DAVResourceAccess::OPTIONS( ...@@ -169,10 +170,10 @@ void DAVResourceAccess::OPTIONS(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -209,10 +210,10 @@ void DAVResourceAccess::PROPFIND( ...@@ -209,10 +210,10 @@ void DAVResourceAccess::PROPFIND(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -250,10 +251,10 @@ void DAVResourceAccess::PROPFIND( ...@@ -250,10 +251,10 @@ void DAVResourceAccess::PROPFIND(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -289,10 +290,10 @@ void DAVResourceAccess::PROPPATCH( ...@@ -289,10 +290,10 @@ void DAVResourceAccess::PROPPATCH(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -328,10 +329,10 @@ void DAVResourceAccess::HEAD( ...@@ -328,10 +329,10 @@ void DAVResourceAccess::HEAD(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -340,7 +341,6 @@ void DAVResourceAccess::HEAD( ...@@ -340,7 +341,6 @@ void DAVResourceAccess::HEAD(
rtl::OUString::createFromAscii( "HEAD" ), rtl::OUString::createFromAscii( "HEAD" ),
aHeaders ); aHeaders );
m_xSession->HEAD( getRequestURI(), m_xSession->HEAD( getRequestURI(),
rHeaderNames, rHeaderNames,
rResource, rResource,
...@@ -367,10 +367,10 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET( ...@@ -367,10 +367,10 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
initialize(); initialize();
uno::Reference< io::XInputStream > xStream; uno::Reference< io::XInputStream > xStream;
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -405,10 +405,10 @@ void DAVResourceAccess::GET( ...@@ -405,10 +405,10 @@ void DAVResourceAccess::GET(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -444,10 +444,10 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET( ...@@ -444,10 +444,10 @@ uno::Reference< io::XInputStream > DAVResourceAccess::GET(
initialize(); initialize();
uno::Reference< io::XInputStream > xStream; uno::Reference< io::XInputStream > xStream;
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -486,10 +486,10 @@ void DAVResourceAccess::GET( ...@@ -486,10 +486,10 @@ void DAVResourceAccess::GET(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -517,6 +517,34 @@ void DAVResourceAccess::GET( ...@@ -517,6 +517,34 @@ void DAVResourceAccess::GET(
while ( bRetry ); while ( bRetry );
} }
//=========================================================================
namespace {
void resetInputStream( const uno::Reference< io::XInputStream > & rStream )
throw( DAVException )
{
try
{
uno::Reference< io::XSeekable > xSeekable(
rStream, uno::UNO_QUERY );
if ( xSeekable.is() )
{
xSeekable->seek( 0 );
return;
}
}
catch ( lang::IllegalArgumentException const & )
{
}
catch ( io::IOException const & )
{
}
throw DAVException( DAVException::DAV_INVALID_ARG );
}
} // namespace
//========================================================================= //=========================================================================
void DAVResourceAccess::PUT( void DAVResourceAccess::PUT(
const uno::Reference< io::XInputStream > & rStream, const uno::Reference< io::XInputStream > & rStream,
...@@ -525,10 +553,18 @@ void DAVResourceAccess::PUT( ...@@ -525,10 +553,18 @@ void DAVResourceAccess::PUT(
{ {
initialize(); initialize();
sal_Bool bRetry; // Make stream seekable, if it not. Needed, if request must be retried.
uno::Reference< io::XInputStream > xSeekableStream
= comphelper::OSeekableInputWrapper::CheckSeekableCanWrap(
rStream, m_xSMgr );
bool bRetry = false;
do do
{ {
bRetry = sal_False; if ( bRetry )
resetInputStream( xSeekableStream );
bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -538,7 +574,7 @@ void DAVResourceAccess::PUT( ...@@ -538,7 +574,7 @@ void DAVResourceAccess::PUT(
aHeaders ); aHeaders );
m_xSession->PUT( getRequestURI(), m_xSession->PUT( getRequestURI(),
rStream, xSeekableStream,
DAVRequestEnvironment( DAVRequestEnvironment(
getRequestURI(), getRequestURI(),
new DAVAuthListener_Impl( xEnv ), new DAVAuthListener_Impl( xEnv ),
...@@ -555,8 +591,7 @@ void DAVResourceAccess::PUT( ...@@ -555,8 +591,7 @@ void DAVResourceAccess::PUT(
} }
//========================================================================= //=========================================================================
uno::Reference< uno::Reference< io::XInputStream > DAVResourceAccess::POST(
io::XInputStream > DAVResourceAccess::POST(
const rtl::OUString & rContentType, const rtl::OUString & rContentType,
const rtl::OUString & rReferer, const rtl::OUString & rReferer,
const uno::Reference< io::XInputStream > & rInputStream, const uno::Reference< io::XInputStream > & rInputStream,
...@@ -565,11 +600,21 @@ uno::Reference< ...@@ -565,11 +600,21 @@ uno::Reference<
{ {
initialize(); initialize();
// Make stream seekable, if it not. Needed, if request must be retried.
uno::Reference< io::XInputStream > xSeekableStream
= comphelper::OSeekableInputWrapper::CheckSeekableCanWrap(
rInputStream, m_xSMgr );
uno::Reference< io::XInputStream > xStream; uno::Reference< io::XInputStream > xStream;
sal_Bool bRetry; bool bRetry = false;
do do
{ {
bRetry = sal_False; if ( bRetry )
{
resetInputStream( xSeekableStream );
bRetry = false;
}
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -581,7 +626,7 @@ uno::Reference< ...@@ -581,7 +626,7 @@ uno::Reference<
xStream = m_xSession->POST( getRequestURI(), xStream = m_xSession->POST( getRequestURI(),
rContentType, rContentType,
rReferer, rReferer,
rInputStream, xSeekableStream,
DAVRequestEnvironment( DAVRequestEnvironment(
getRequestURI(), getRequestURI(),
new DAVAuthListener_Impl( xEnv ), new DAVAuthListener_Impl( xEnv ),
...@@ -592,6 +637,12 @@ uno::Reference< ...@@ -592,6 +637,12 @@ uno::Reference<
bRetry = handleException( e ); bRetry = handleException( e );
if ( !bRetry ) if ( !bRetry )
throw; throw;
if ( e.getError() == DAVException::DAV_HTTP_REDIRECT )
{
// #i74980# - Upon POST redirect, do a GET.
return GET( xEnv );
}
} }
} }
while ( bRetry ); while ( bRetry );
...@@ -611,10 +662,20 @@ void DAVResourceAccess::POST( ...@@ -611,10 +662,20 @@ void DAVResourceAccess::POST(
{ {
initialize(); initialize();
sal_Bool bRetry; // Make stream seekable, if it not. Needed, if request must be retried.
uno::Reference< io::XInputStream > xSeekableStream
= comphelper::OSeekableInputWrapper::CheckSeekableCanWrap(
rInputStream, m_xSMgr );
bool bRetry = false;
do do
{ {
bRetry = sal_False; if ( bRetry )
{
resetInputStream( xSeekableStream );
bRetry = false;
}
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -626,7 +687,7 @@ void DAVResourceAccess::POST( ...@@ -626,7 +687,7 @@ void DAVResourceAccess::POST(
m_xSession->POST( getRequestURI(), m_xSession->POST( getRequestURI(),
rContentType, rContentType,
rReferer, rReferer,
rInputStream, xSeekableStream,
rOutputStream, rOutputStream,
DAVRequestEnvironment( DAVRequestEnvironment(
getRequestURI(), getRequestURI(),
...@@ -638,6 +699,13 @@ void DAVResourceAccess::POST( ...@@ -638,6 +699,13 @@ void DAVResourceAccess::POST(
bRetry = handleException( e ); bRetry = handleException( e );
if ( !bRetry ) if ( !bRetry )
throw; throw;
if ( e.getError() == DAVException::DAV_HTTP_REDIRECT )
{
// #i74980# - Upon POST redirect, do a GET.
GET( rOutputStream, xEnv );
return;
}
} }
} }
while ( bRetry ); while ( bRetry );
...@@ -650,10 +718,10 @@ void DAVResourceAccess::MKCOL( ...@@ -650,10 +718,10 @@ void DAVResourceAccess::MKCOL(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -688,10 +756,10 @@ void DAVResourceAccess::COPY( ...@@ -688,10 +756,10 @@ void DAVResourceAccess::COPY(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -728,10 +796,10 @@ void DAVResourceAccess::MOVE( ...@@ -728,10 +796,10 @@ void DAVResourceAccess::MOVE(
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -760,16 +828,15 @@ void DAVResourceAccess::MOVE( ...@@ -760,16 +828,15 @@ void DAVResourceAccess::MOVE(
//========================================================================= //=========================================================================
void DAVResourceAccess::DESTROY( void DAVResourceAccess::DESTROY(
const uno::Reference< const uno::Reference< ucb::XCommandEnvironment > & xEnv )
ucb::XCommandEnvironment > & xEnv )
throw( DAVException ) throw( DAVException )
{ {
initialize(); initialize();
sal_Bool bRetry; bool bRetry;
do do
{ {
bRetry = sal_False; bRetry = false;
try try
{ {
DAVRequestHeaders aHeaders; DAVRequestHeaders aHeaders;
...@@ -836,9 +903,15 @@ void DAVResourceAccess::initialize() ...@@ -836,9 +903,15 @@ void DAVResourceAccess::initialize()
{ {
NeonUri aURI( m_aURL ); NeonUri aURI( m_aURL );
rtl::OUString aPath( aURI.GetPath() ); rtl::OUString aPath( aURI.GetPath() );
/* #134089# - Check URI */
if ( !aPath.getLength() ) if ( !aPath.getLength() )
throw DAVException( DAVException::DAV_INVALID_ARG ); throw DAVException( DAVException::DAV_INVALID_ARG );
/* #134089# - Check URI */
if ( !aURI.GetHost().getLength() )
throw DAVException( DAVException::DAV_INVALID_ARG );
if ( !m_xSession.is() || !m_xSession->CanUse( m_aURL ) ) if ( !m_xSession.is() || !m_xSession->CanUse( m_aURL ) )
{ {
m_xSession.clear(); m_xSession.clear();
...@@ -935,12 +1008,11 @@ sal_Bool DAVResourceAccess::detectRedirectCycle( ...@@ -935,12 +1008,11 @@ sal_Bool DAVResourceAccess::detectRedirectCycle(
//========================================================================= //=========================================================================
sal_Bool DAVResourceAccess::handleException( DAVException & e ) sal_Bool DAVResourceAccess::handleException( DAVException & e )
throw ( DAVException )
{ {
switch ( e.getError() ) switch ( e.getError() )
{ {
case DAVException::DAV_HTTP_REDIRECT: case DAVException::DAV_HTTP_REDIRECT:
try
{
if ( !detectRedirectCycle( e.getData() ) ) if ( !detectRedirectCycle( e.getData() ) )
{ {
// set new URL and path. // set new URL and path.
...@@ -948,10 +1020,6 @@ sal_Bool DAVResourceAccess::handleException( DAVException & e ) ...@@ -948,10 +1020,6 @@ sal_Bool DAVResourceAccess::handleException( DAVException & e )
initialize(); initialize();
return sal_True; return sal_True;
} }
}
catch( DAVException const & )
{
}
return sal_False; return sal_False;
default: default:
......
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