diff options
author | Oliver Bolte <obo@openoffice.org> | 2009-09-07 14:41:16 +0000 |
---|---|---|
committer | Oliver Bolte <obo@openoffice.org> | 2009-09-07 14:41:16 +0000 |
commit | 9fc697a9453d8334a9d923c70ec30ef23fd16e16 (patch) | |
tree | 197af40eece59c0aca1f9ac1ef8948cc7689dba8 /sfx2 | |
parent | 1e502bed77b503b4ebe4b08c569daa152bcf7bea (diff) |
CWS-TOOLING: integrate CWS dr72
2009-08-26 10:24:00 +0200 dr r275402 : #i92645# CODEPAGE is encrypted...
2009-08-24 14:37:36 +0200 dr r275316 : #i10000# enable exceptions for xlroot.cxx
2009-08-24 14:33:15 +0200 dr r275313 : #i10000# link openssl under solaris correctly
2009-08-21 17:41:16 +0200 dr r275267 : #i10000# unxlngi6 warning
2009-08-21 15:35:56 +0200 dr r275265 : #i10000# remove files again, already deleted in previous milestone...
2009-08-21 11:24:57 +0200 dr r275227 : #160401# port to DEV300
2009-08-21 09:53:45 +0200 dr r275221 : #i92645# full support for encrypted Word2007 files
2009-08-21 09:50:52 +0200 dr r275219 : #i92645# final changes for decryption
2009-08-20 19:48:40 +0200 dr r275195 : #i104370# missing parentheses, patch from cmc
2009-08-20 18:28:22 +0200 dr r275193 : #i92645# rework package decryption to repair 'Reload Document' functionality
2009-08-20 13:55:14 +0200 dr r275179 : #i92645# add new property names
2009-08-19 19:24:21 +0200 dr r275159 : #160401# open writeprotected files read-only, merged to DEV300
2009-08-18 14:41:47 +0200 dr r275109 : #i92645# add 'Aborted' property
2009-08-18 11:20:34 +0200 dr r275084 : #i92645# write back password to medium
2009-08-17 17:52:51 +0200 dr r275066 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs
2009-08-17 17:51:31 +0200 dr r275065 : #i92645# detect Word2007 docs with oox detection impl, this adds support of encryped Word2007; correct detection of templates and macro-enabled docs
2009-08-17 11:06:39 +0200 dr r275035 : #i92645# more password handling
2009-08-17 11:05:21 +0200 dr r275034 : #i92645# use new password input mechanism for BIFF filter and dumper in oox
2009-08-14 16:33:53 +0200 nn r274996 : #i104228# DelBroadcastAreasInRange: remove area from hash_set before deleting
2009-08-14 16:27:12 +0200 nn r274995 : #i104059# restore a change lost in the integration of fhawfixes1
2009-08-14 16:24:00 +0200 dr r274994 : #i92645# adapt BIFF import to latest changes
2009-08-14 16:21:30 +0200 dr r274993 : #i92645# adapt BIFF import to latest changes
2009-08-14 16:20:43 +0200 dr r274992 : #i92645# do not add default passwords to media descriptor
2009-08-13 19:20:45 +0200 dr r274965 : #i92645# add a helper to request a document password
2009-08-13 19:09:35 +0200 dr r274964 : #i92645# add a helper to request a document password
2009-08-13 19:09:03 +0200 dr r274963 : #i92645# add a helper to request a document password
2009-08-13 14:35:01 +0200 dr r274946 : #i92645# comment typo
2009-08-13 14:33:47 +0200 dr r274945 : #i92645# add a helper to request a document password
2009-08-13 14:04:47 +0200 dr r274941 : #i92645# add a helper to request a document password
2009-08-13 14:04:22 +0200 dr r274940 : #i92645# add a helper to request a document password
2009-08-13 11:16:27 +0200 dr r274927 : #i42303# show quick help if field name too long for button
2009-08-13 10:55:48 +0200 dr r274925 : #i31600# cut field name and add ellipsis, if too long for button
2009-08-12 18:47:26 +0200 dr r274914 : #i92645# ask user for a password
2009-08-12 18:02:39 +0200 dr r274909 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:59:11 +0200 dr r274906 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:41:18 +0200 dr r274905 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:40:33 +0200 dr r274904 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:40:08 +0200 dr r274903 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:39:30 +0200 dr r274902 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-12 16:15:28 +0200 dr r274899 : #i104183# move svtools/DocPasswordRequest to comphelper to be able to use it in oox
2009-08-11 19:51:12 +0200 dr r274877 : #i92645# open encrypted MSOOXML package protected with standard XL password 'VelvetSweatshop'
Diffstat (limited to 'sfx2')
-rw-r--r-- | sfx2/source/appl/appopen.cxx | 112 | ||||
-rw-r--r-- | sfx2/source/dialog/filedlghelper.cxx | 104 |
2 files changed, 100 insertions, 116 deletions
diff --git a/sfx2/source/appl/appopen.cxx b/sfx2/source/appl/appopen.cxx index 1351b21dc2..669a76ba0c 100644 --- a/sfx2/source/appl/appopen.cxx +++ b/sfx2/source/appl/appopen.cxx @@ -1,7 +1,7 @@ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * + * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite @@ -48,7 +48,6 @@ #include <com/sun/star/system/SystemShellExecuteFlags.hpp> #include <com/sun/star/document/MacroExecMode.hpp> #include <com/sun/star/document/UpdateDocMode.hpp> -#include <com/sun/star/task/XInteractionRequest.hpp> #include <com/sun/star/task/ErrorCodeRequest.hpp> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/embed/ElementModes.hpp> @@ -81,7 +80,7 @@ #include <svtools/templdlg.hxx> #include <osl/file.hxx> #include <svtools/extendedsecurityoptions.hxx> -#include <svtools/docpasswdrequest.hxx> +#include <comphelper/docpasswordhelper.hxx> #include <vcl/svapp.hxx> #include <vos/mutex.hxx> @@ -247,6 +246,50 @@ void SetTemplate_Impl( const String &rFileName, //-------------------------------------------------------------------- +class SfxDocPasswordVerifier : public ::comphelper::IDocPasswordVerifier +{ +public: + inline explicit SfxDocPasswordVerifier( const Reference< embed::XStorage >& rxStorage ) : + mxStorage( rxStorage ) {} + + virtual ::comphelper::DocPasswordVerifierResult + verifyPassword( const ::rtl::OUString& rPassword ); + +private: + Reference< embed::XStorage > mxStorage; +}; + +::comphelper::DocPasswordVerifierResult SfxDocPasswordVerifier::verifyPassword( const ::rtl::OUString& rPassword ) +{ + ::comphelper::DocPasswordVerifierResult eResult = ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD; + try + { + // check the password + // if the password correct is the stream will be opened successfuly + // and immediatelly closed + ::comphelper::OStorageHelper::SetCommonStoragePassword( mxStorage, rPassword ); + + mxStorage->openStreamElement( + ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ), + embed::ElementModes::READ | embed::ElementModes::NOCREATE ); + + // no exception -> success + eResult = ::comphelper::DocPasswordVerifierResult_OK; + } + catch( const packages::WrongPasswordException& ) + { + eResult = ::comphelper::DocPasswordVerifierResult_WRONG_PASSWORD; + } + catch( const uno::Exception& ) + { + // unknown error, do not try to ask again + eResult = ::comphelper::DocPasswordVerifierResult_ABORT; + } + return eResult; +} + +//-------------------------------------------------------------------- + sal_uInt32 CheckPasswd_Impl ( //Window *pWin, // Parent des Dialogs @@ -302,56 +345,13 @@ sal_uInt32 CheckPasswd_Impl Reference< ::com::sun::star::task::XInteractionHandler > xInteractionHandler = pFile->GetInteractionHandler(); if( xInteractionHandler.is() ) { - sal_Bool bRetry = sal_True; - sal_Bool bGotPasswd = sal_False; - ::rtl::OUString aPassword; - ::com::sun::star::task::PasswordRequestMode nDlgMode = ::com::sun::star::task::PasswordRequestMode_PASSWORD_ENTER; - - while( bRetry ) - { - bRetry = sal_False; - - RequestDocumentPassword* pPasswordRequest = new RequestDocumentPassword( nDlgMode, - INetURLObject( pFile->GetOrigURL() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ) ); - - Reference< XInteractionRequest > rRequest( pPasswordRequest ); - xInteractionHandler->handle( rRequest ); - - if ( pPasswordRequest->isPassword() ) - { - aPassword = pPasswordRequest->getPassword(); - bGotPasswd = sal_True; - - try - { - // check the password - // if the password correct is the stream will be opened successfuly - // and immediatelly closed - ::comphelper::OStorageHelper::SetCommonStoragePassword( - xStorage, - aPassword ); - - xStorage->openStreamElement( - ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "content.xml" ) ), - embed::ElementModes::READ | embed::ElementModes::NOCREATE ); - } - catch( const packages::WrongPasswordException& ) - { - // reask for the password - nDlgMode = ::com::sun::star::task::PasswordRequestMode_PASSWORD_REENTER; - bRetry = sal_True; - } - catch( const uno::Exception& ) - { - // do nothing special - // the error will be detected by loading - } - } - else - bGotPasswd = sal_False; - } + // use the comphelper password helper to request a password + ::rtl::OUString aDocumentName = INetURLObject( pFile->GetOrigURL() ).GetMainURL( INetURLObject::DECODE_WITH_CHARSET ); + SfxDocPasswordVerifier aVerifier( xStorage ); + ::rtl::OUString aPassword = ::comphelper::DocPasswordHelper::requestAndVerifyDocPassword( + aVerifier, ::rtl::OUString(), xInteractionHandler, aDocumentName, comphelper::DocPasswordRequestType_STANDARD ); - if ( bGotPasswd ) + if ( aPassword.getLength() > 0 ) { pSet->Put( SfxStringItem( SID_PASSWORD, aPassword ) ); @@ -893,7 +893,7 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq ) nDialog = pSystemDialogItem->GetValue() ? SFX2_IMPL_DIALOG_SYSTEM : SFX2_IMPL_DIALOG_OOO; String sStandardDir; - + SFX_REQUEST_ARG( rReq, pStandardDirItem, SfxStringItem, SID_STANDARD_DIR, FALSE ); if ( pStandardDirItem ) sStandardDir = pStandardDirItem->GetValue(); @@ -1188,19 +1188,19 @@ void SfxApplication::OpenDocExec_Impl( SfxRequest& rReq ) return; } - else + else { // check for "internal" protocols that should not be forwarded to the system Sequence < ::rtl::OUString > aProtocols(2); - // add special protocols that always should be treated as internal + // add special protocols that always should be treated as internal aProtocols[0] = ::rtl::OUString::createFromAscii("private:*"); aProtocols[1] = ::rtl::OUString::createFromAscii("vnd.sun.star.*"); try { // get registered protocol handlers from configuration - Reference < XNameAccess > xAccess( ::comphelper::ConfigurationHelper::openConfig( ::comphelper::getProcessServiceFactory(), + Reference < XNameAccess > xAccess( ::comphelper::ConfigurationHelper::openConfig( ::comphelper::getProcessServiceFactory(), ::rtl::OUString::createFromAscii("org.openoffice.Office.ProtocolHandler/HandlerSet"), ::comphelper::ConfigurationHelper::E_READONLY ), UNO_QUERY ); if ( xAccess.is() ) { diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx index adb6b581c6..bd5136ac9e 100644 --- a/sfx2/source/dialog/filedlghelper.cxx +++ b/sfx2/source/dialog/filedlghelper.cxx @@ -1,7 +1,7 @@ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * + * * Copyright 2008 by Sun Microsystems, Inc. * * OpenOffice.org - a multi-platform office productivity suite @@ -45,9 +45,7 @@ #include <com/sun/star/ui/dialogs/XFilePreview.hpp> #include <com/sun/star/ui/dialogs/XFilterManager.hpp> #include <com/sun/star/ui/dialogs/XFilterGroupManager.hpp> -#ifndef _COM_SUN_STAR_UI_DIALOGS_XFOLDERPICKER_HDL_ #include <com/sun/star/ui/dialogs/XFolderPicker.hpp> -#endif #include <com/sun/star/ui/dialogs/XFilePicker2.hpp> #include <com/sun/star/ui/dialogs/XAsynchronousExecutableDialog.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -82,12 +80,9 @@ #include <svtools/filter.hxx> #include <svtools/viewoptions.hxx> #include <svtools/moduleoptions.hxx> -#ifndef _SVT_HELPID_HRC #include <svtools/helpid.hrc> -#endif #include <svtools/pickerhelper.hxx> -#include <svtools/docpasswdrequest.hxx> -#include <svtools/docmspasswdrequest.hxx> +#include <comphelper/docpasswordrequest.hxx> #include <ucbhelper/content.hxx> #include <ucbhelper/commandenvironment.hxx> #include <comphelper/storagehelper.hxx> @@ -99,13 +94,9 @@ #include <sfx2/passwd.hxx> #include "sfxresid.hxx" #include <sfx2/sfxsids.hrc> -#ifndef _SFX_FILEDLGHELPER_HRC #include "filedlghelper.hrc" -#endif #include "filtergrouping.hxx" -#ifndef SFX2_REQUEST_HXX #include <sfx2/request.hxx> -#endif #include "filedlgimpl.hxx" #include <sfxlocal.hrc> @@ -557,13 +548,15 @@ void FileDialogHelper_Impl::updateSelectionBox() } // ------------------------------------------------------------------------ -struct CheckMSPasswordCapability + +namespace { + +bool lclCheckMSPasswordCapability( const String rFilterName ) { - sal_Bool operator() ( const String rFilterName ) - { - return rFilterName.EqualsAscii("MS Word 97"); - } -}; + return rFilterName.EqualsAscii("MS Word 97"); +} + +} // namespace // ------------------------------------------------------------------------ struct CheckPasswordCapability @@ -575,7 +568,7 @@ struct CheckPasswordCapability #if 0 // to be enabled in the future if (_pFilter->GetFilterName().EqualsAscii("MS Excel 97")) - // For now, we eanble password protection for Excel 97 as a + // For now, we eanble password protection for Excel 97 as a // special case. If we start having more filters supporting // export encryption with password, we should probably switch to // using a filter flag instead. @@ -583,8 +576,8 @@ struct CheckPasswordCapability #endif return ( _pFilter->IsOwnFormat() && _pFilter->UsesStorage() - && ( SOFFICE_FILEFORMAT_60 <= _pFilter->GetVersion() ) ) - || CheckMSPasswordCapability()( _pFilter->GetFilterName() ); + && ( SOFFICE_FILEFORMAT_60 <= _pFilter->GetVersion() ) ) + || lclCheckMSPasswordCapability( _pFilter->GetFilterName() ); } }; @@ -927,14 +920,14 @@ sal_Bool lcl_isSystemFilePicker( const uno::Reference< XFilePicker >& _rxFP ) // ----------- FileDialogHelper_Impl --------------------------- // ------------------------------------------------------------------------ -FileDialogHelper_Impl::FileDialogHelper_Impl( - FileDialogHelper* _pAntiImpl, - sal_Int16 nDialogType, - sal_Int64 nFlags, - sal_Int16 nDialog, - Window* _pPreferredParentWindow, +FileDialogHelper_Impl::FileDialogHelper_Impl( + FileDialogHelper* _pAntiImpl, + sal_Int16 nDialogType, + sal_Int64 nFlags, + sal_Int16 nDialog, + Window* _pPreferredParentWindow, const String& sStandardDir, - const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList ) :m_nDialogType ( nDialogType ) ,meContext ( FileDialogHelper::UNKNOWN_CONTEXT ) @@ -1092,8 +1085,8 @@ FileDialogHelper_Impl::FileDialogHelper_Impl( DBG_ERRORFILE( "FileDialogHelper::ctor with unknown type" ); break; } - - + + //Sequence < Any > aInitArguments( mbSystemPicker || !mpPreferredParentWindow ? 1 : 3 ); Sequence < Any > aInitArguments( !mpPreferredParentWindow ? 3 : 4 ); @@ -1115,7 +1108,7 @@ FileDialogHelper_Impl::FileDialogHelper_Impl( ); ::rtl::OUString sStandardDirTemp = ::rtl::OUString( sStandardDir ); - + aInitArguments[1] <<= NamedValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "StandardDir" ) ), makeAny( sStandardDirTemp ) @@ -1133,7 +1126,7 @@ FileDialogHelper_Impl::FileDialogHelper_Impl( makeAny( VCLUnoHelper::GetInterface( mpPreferredParentWindow ) ) ); - + } try @@ -1197,7 +1190,7 @@ FileDialogHelper_Impl::~FileDialogHelper_Impl() if ( mbDeleteMatcher ) delete mpMatcher; - + maPreViewTimer.SetTimeoutHdl( Link() ); ::comphelper::disposeComponent( mxFileDlg ); @@ -1525,7 +1518,7 @@ void FileDialogHelper_Impl::implGetAndCacheFiles(const uno::Reference< XInterfac if ( nFiles > 1 ) { rpURLList = new SvStringsDtor; - + INetURLObject aPath( lFiles[0] ); aPath.setFinalSlash(); @@ -1655,7 +1648,7 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList, implGetAndCacheFiles(mxFileDlg, rpURLList, getCurentSfxFilter()); if ( rpURLList == NULL || rpURLList->GetObject(0) == NULL ) return ERRCODE_ABORT; - + // check, wether or not we have to display a password box if ( mbHasPassword && mbIsPwdEnabled && xCtrlAccess.is() ) { @@ -1671,30 +1664,21 @@ ErrCode FileDialogHelper_Impl::execute( SvStringsDtor*& rpURLList, if( xInteractionHandler.is() ) { // TODO: find out a way to set the 1-15 char limits on MS Excel 97 filter. - if ( CheckMSPasswordCapability()( rFilter ) ) - { - RequestMSDocumentPassword* pMSPasswordRequest = new RequestMSDocumentPassword( - ::com::sun::star::task::PasswordRequestMode_PASSWORD_CREATE, *(rpURLList->GetObject(0)) ); - - uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pMSPasswordRequest ); - xInteractionHandler->handle( rRequest ); - if ( pMSPasswordRequest->isPassword() ) - rpSet->Put( SfxStringItem( SID_PASSWORD, pMSPasswordRequest->getPassword() ) ); - else - return ERRCODE_ABORT; - } + + bool bMSType = lclCheckMSPasswordCapability( rFilter ); + ::comphelper::DocPasswordRequestType eType = bMSType ? + ::comphelper::DocPasswordRequestType_MS : + ::comphelper::DocPasswordRequestType_STANDARD; + + ::comphelper::DocPasswordRequest* pPasswordRequest = new ::comphelper::DocPasswordRequest( + eType, ::com::sun::star::task::PasswordRequestMode_PASSWORD_CREATE, *(rpURLList->GetObject(0)) ); + + uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pPasswordRequest ); + xInteractionHandler->handle( rRequest ); + if ( pPasswordRequest->isPassword() ) + rpSet->Put( SfxStringItem( SID_PASSWORD, pPasswordRequest->getPassword() ) ); else - { - RequestDocumentPassword* pPasswordRequest = new RequestDocumentPassword( - ::com::sun::star::task::PasswordRequestMode_PASSWORD_CREATE, *(rpURLList->GetObject(0)) ); - - uno::Reference< com::sun::star::task::XInteractionRequest > rRequest( pPasswordRequest ); - xInteractionHandler->handle( rRequest ); - if ( pPasswordRequest->isPassword() ) - rpSet->Put( SfxStringItem( SID_PASSWORD, pPasswordRequest->getPassword() ) ); - else - return ERRCODE_ABORT; - } + return ERRCODE_ABORT; } } } @@ -2607,7 +2591,7 @@ Sequence < OUString > FileDialogHelper::GetMPath() const { if ( mpImp->mlLastURLs.size() > 0) return mpImp->mlLastURLs.getAsConstList(); - + if ( mpImp->mxFileDlg.is() ) return mpImp->mxFileDlg->getFiles(); else @@ -2636,7 +2620,7 @@ Sequence< ::rtl::OUString > FileDialogHelper::GetSelectedFiles() const if ( nFiles > 1 ) { aResultSeq = Sequence< ::rtl::OUString >( nFiles-1 ); - + INetURLObject aPath( lFiles[0] ); aPath.setFinalSlash(); @@ -2653,7 +2637,7 @@ Sequence< ::rtl::OUString > FileDialogHelper::GetSelectedFiles() const else aResultSeq = lFiles; } - + return aResultSeq; } |