diff options
Diffstat (limited to 'uui/source')
-rw-r--r-- | uui/source/iahndl.cxx | 47 | ||||
-rw-r--r-- | uui/source/iahndl.hxx | 11 | ||||
-rw-r--r-- | uui/source/ids.hrc | 3 | ||||
-rw-r--r-- | uui/source/ids.src | 7 | ||||
-rw-r--r-- | uui/source/secmacrowarnings.cxx | 21 | ||||
-rw-r--r-- | uui/source/secmacrowarnings.hxx | 2 |
6 files changed, 67 insertions, 24 deletions
diff --git a/uui/source/iahndl.cxx b/uui/source/iahndl.cxx index e4c33a274b17..ff7022fd241e 100644 --- a/uui/source/iahndl.cxx +++ b/uui/source/iahndl.cxx @@ -68,6 +68,8 @@ #include "com/sun/star/task/ErrorCodeRequest.hpp" #include "com/sun/star/task/MasterPasswordRequest.hpp" #include "com/sun/star/task/NoMasterException.hpp" +#include "com/sun/star/task/DocumentMacroConfirmationRequest.hpp" +#include "com/sun/star/task/DocumentMacroConfirmationRequest2.hpp" #include "com/sun/star/task/XInteractionAbort.hpp" #include "com/sun/star/task/XInteractionApprove.hpp" #include "com/sun/star/task/XInteractionDisapprove.hpp" @@ -113,6 +115,7 @@ #include "svtools/sfxecode.hxx" #include "toolkit/helper/vclunohelper.hxx" #include "comphelper/sequenceashashmap.hxx" +#include "comphelper/documentconstants.hxx" #include "unotools/configmgr.hxx" #include "ids.hrc" @@ -1255,7 +1258,23 @@ bool UUIInteractionHelper::handleErrorHandlerRequests( if (aAnyRequest >>= aMacroConfirmRequest) { handleMacroConfirmRequest( - aMacroConfirmRequest, + aMacroConfirmRequest.DocumentURL, + aMacroConfirmRequest.DocumentStorage, + ODFVER_012_TEXT, + aMacroConfirmRequest.DocumentSignatureInformation, + rRequest->getContinuations() + ); + return true; + } + + star::task::DocumentMacroConfirmationRequest2 aMacroConfirmRequest2; + if (aAnyRequest >>= aMacroConfirmRequest2) + { + handleMacroConfirmRequest( + aMacroConfirmRequest2.DocumentURL, + aMacroConfirmRequest2.DocumentZipStorage, + aMacroConfirmRequest2.DocumentVersion, + aMacroConfirmRequest2.DocumentSignatureInformation, rRequest->getContinuations() ); return true; @@ -3044,13 +3063,13 @@ UUIInteractionHelper::handleGenericErrorRequest( ErrCode nError = (ErrCode)nErrorCode; sal_Bool bWarning = !ERRCODE_TOERROR(nError); - if ( nError == ERRCODE_SFX_BROKENSIGNATURE ) + if ( nError == ERRCODE_SFX_BROKENSIGNATURE + || nError == ERRCODE_SFX_INCOMPLETE_ENCRYPTION ) { - // the broken signature warning needs a special title + // the security warning need a special title String aErrorString; ErrorHandler::GetErrorString( nErrorCode, aErrorString ); - std::auto_ptr< ResMgr > xManager( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) ); ::rtl::OUString aTitle; @@ -3064,7 +3083,8 @@ UUIInteractionHelper::handleGenericErrorRequest( } catch( star::uno::Exception& ) {} - ::rtl::OUString aErrTitle = String( ResId( STR_WARNING_BROKENSIGNATURE_TITLE, *xManager.get() ) ); + ::rtl::OUString aErrTitle = String( ResId( nError == ERRCODE_SFX_BROKENSIGNATURE ? STR_WARNING_BROKENSIGNATURE_TITLE : STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE, *xManager.get() ) ); + if ( aTitle.getLength() && aErrTitle.getLength() ) aTitle += ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( " - " ) ); aTitle += aErrTitle; @@ -3100,7 +3120,10 @@ namespace void UUIInteractionHelper::handleMacroConfirmRequest( - const star::task::DocumentMacroConfirmationRequest& _rRequest, + const ::rtl::OUString& aDocumentURL, + const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xZipStorage, + const ::rtl::OUString& aDocumentVersion, + const ::com::sun::star::uno::Sequence< ::com::sun::star::security::DocumentSignatureInformation > aSignInfo, star::uno::Sequence< star::uno::Reference< star::task::XInteractionContinuation > > const & rContinuations ) @@ -3114,17 +3137,17 @@ UUIInteractionHelper::handleMacroConfirmRequest( std::auto_ptr< ResMgr > pResMgr( ResMgr::CreateResMgr( CREATEVERSIONRESMGR_NAME( uui ) ) ); if ( pResMgr.get() ) { - bool bShowSignatures = _rRequest.DocumentSignatureInformation.getLength() > 0; + bool bShowSignatures = aSignInfo.getLength() > 0; MacroWarning aWarning( getParentProperty(), bShowSignatures, *pResMgr.get() ); - aWarning.SetDocumentURL( _rRequest.DocumentURL ); - if ( _rRequest.DocumentSignatureInformation.getLength() > 1 ) + aWarning.SetDocumentURL( aDocumentURL ); + if ( aSignInfo.getLength() > 1 ) { - aWarning.SetStorage( _rRequest.DocumentStorage, _rRequest.DocumentSignatureInformation ); + aWarning.SetStorage( xZipStorage, aDocumentVersion, aSignInfo ); } - else if ( _rRequest.DocumentSignatureInformation.getLength() == 1 ) + else if ( aSignInfo.getLength() == 1 ) { - aWarning.SetCertificate( _rRequest.DocumentSignatureInformation[ 0 ].Signer ); + aWarning.SetCertificate( aSignInfo[ 0 ].Signer ); } bApprove = aWarning.Execute() == RET_OK; diff --git a/uui/source/iahndl.hxx b/uui/source/iahndl.hxx index e8ae3fec2df5..f390e70674ea 100644 --- a/uui/source/iahndl.hxx +++ b/uui/source/iahndl.hxx @@ -36,13 +36,15 @@ #define INCLUDED_VECTOR #endif #include "osl/mutex.hxx" -#include "com/sun/star/beans/Optional.hpp" #include "com/sun/star/uno/Reference.hxx" #include "com/sun/star/uno/Sequence.hxx" + +#include "com/sun/star/beans/Optional.hpp" +#include "com/sun/star/embed/XStorage.hpp" #include "com/sun/star/task/InteractionClassification.hpp" #include "com/sun/star/task/PasswordRequestMode.hpp" -#include "com/sun/star/task/DocumentMacroConfirmationRequest.hpp" #include "com/sun/star/task/FutureDocumentVersionProductUpdateRequest.hpp" +#include "com/sun/star/security/DocumentSignatureInformation.hpp" #include "tools/solar.h" #include "tools/errcode.hxx" #include "vcl/wintypes.hxx" @@ -360,7 +362,10 @@ private: void handleMacroConfirmRequest( - const ::com::sun::star::task::DocumentMacroConfirmationRequest& _rRequest, + const ::rtl::OUString& aDocumentURL, + const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage >& xZipStorage, + const ::rtl::OUString& aDocumentVersion, + const ::com::sun::star::uno::Sequence< ::com::sun::star::security::DocumentSignatureInformation > aSignInfo, com::sun::star::uno::Sequence< com::sun::star::uno::Reference< com::sun::star::task::XInteractionContinuation > > const & diff --git a/uui/source/ids.hrc b/uui/source/ids.hrc index bfe6a48aed94..08624a3dda4e 100644 --- a/uui/source/ids.hrc +++ b/uui/source/ids.hrc @@ -87,7 +87,8 @@ #define STR_ALREADYOPEN_SAVE_MSG (RID_UUI_START + 50) #define STR_ALREADYOPEN_RETRY_SAVE_BTN (RID_UUI_START + 51) #define STR_ALREADYOPEN_SAVE_BTN (RID_UUI_START + 52) -#define RID_DLG_NEWER_VERSION_WARNING (RID_UUI_START + 36) +#define RID_DLG_NEWER_VERSION_WARNING (RID_UUI_START + 53) +#define STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE (RID_UUI_START + 54) #define ERRCODE_UUI_IO_ABORT (ERRCODE_AREA_UUI + 0) #define ERRCODE_UUI_IO_ACCESSDENIED (ERRCODE_AREA_UUI + 1) diff --git a/uui/source/ids.src b/uui/source/ids.src index 3f0e422c1449..cb011f27a7c0 100644 --- a/uui/source/ids.src +++ b/uui/source/ids.src @@ -50,6 +50,11 @@ String( STR_WARNING_BROKENSIGNATURE_TITLE ) Text [ en-US ] = "Invalid Document Signature" ; }; +String( STR_WARNING_INCOMPLETE_ENCRYPTION_TITLE ) +{ + Text [ en-US ] = "Non-Encrypted Streams" ; +}; + Resource RID_UUI_ERRHDL { String (ERRCODE_UUI_IO_ABORT & ERRCODE_RES_MASK) @@ -313,7 +318,7 @@ Resource RID_UUI_ERRHDL String (ERRCODE_UUI_IO_BROKENPACKAGE & ERRCODE_RES_MASK) { - Text [ en-US ] = "The file '$(ARG1)' is corrupt and therefore cannot be opened. Should %PRODUCTNAME repair the file?"; + Text [ en-US ] = "The file '$(ARG1)' is corrupt and therefore cannot be opened. %PRODUCTNAME can try to repair the file.\n\nThe corruption could be the result of document manipulation or of structural document damage due to data transmission.\n\nWe recommend that you do not trust the content of the repaired document.\nExecution of macros is disabled for this document.\n\nShould %PRODUCTNAME repair the file?\n"; }; String (ERRCODE_UUI_IO_BROKENPACKAGE_CANTREPAIR & ERRCODE_RES_MASK) diff --git a/uui/source/secmacrowarnings.cxx b/uui/source/secmacrowarnings.cxx index 0b2759cbbde8..776c3b4385f2 100644 --- a/uui/source/secmacrowarnings.cxx +++ b/uui/source/secmacrowarnings.cxx @@ -32,6 +32,7 @@ #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/security/XDocumentDigitalSignatures.hpp> #include <comphelper/sequence.hxx> +#include "comphelper/documentconstants.hxx" #include <comphelper/processfactory.hxx> #include <vcl/msgbox.hxx> @@ -122,8 +123,10 @@ IMPL_LINK( MacroWarning, ViewSignsBtnHdl, void*, EMPTYARG ) { DBG_ASSERT( mxCert.is(), "*MacroWarning::ViewSignsBtnHdl(): no certificate set!" ); + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[0] = uno::makeAny( maODFVersion ); uno::Reference< security::XDocumentDigitalSignatures > xD( - comphelper::getProcessServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.security.DocumentDigitalSignatures" ) ) ), uno::UNO_QUERY ); + comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.security.DocumentDigitalSignatures" ) ), aArgs ), uno::UNO_QUERY ); if( xD.is() ) { if( mxCert.is() ) @@ -139,8 +142,10 @@ IMPL_LINK( MacroWarning, EnableBtnHdl, void*, EMPTYARG ) { if( mbSignedMode && maAlwaysTrustCB.IsChecked() ) { // insert path into trusted path list + uno::Sequence< uno::Any > aArgs( 1 ); + aArgs[0] = uno::makeAny( maODFVersion ); uno::Reference< security::XDocumentDigitalSignatures > xD( - comphelper::getProcessServiceFactory()->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.security.DocumentDigitalSignatures" ) ) ), uno::UNO_QUERY ); + comphelper::getProcessServiceFactory()->createInstanceWithArguments( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.security.DocumentDigitalSignatures" ) ), aArgs ), uno::UNO_QUERY ); if( xD.is() ) { if( mxCert.is() ) @@ -337,21 +342,23 @@ void MacroWarning::FitControls() } void MacroWarning::SetStorage( const cssu::Reference < css::embed::XStorage >& rxStore, - const cssu::Sequence< security::DocumentSignatureInformation >& _rInfos ) + const ::rtl::OUString& aODFVersion, + const cssu::Sequence< security::DocumentSignatureInformation >& rInfos ) { mxStore = rxStore; - sal_Int32 nCnt = _rInfos.getLength(); + maODFVersion = aODFVersion; + sal_Int32 nCnt = rInfos.getLength(); if( mxStore.is() && nCnt > 0 ) { - mpInfos = &_rInfos; + mpInfos = &rInfos; String aCN_Id( String::CreateFromAscii( "CN" ) ); String s; - s = GetContentPart( _rInfos[ 0 ].Signer->getSubjectName(), aCN_Id ); + s = GetContentPart( rInfos[ 0 ].Signer->getSubjectName(), aCN_Id ); for( sal_Int32 i = 1 ; i < nCnt ; ++i ) { s.AppendAscii( "\n" ); - s += GetContentPart( _rInfos[ i ].Signer->getSubjectName(), aCN_Id ); + s += GetContentPart( rInfos[ i ].Signer->getSubjectName(), aCN_Id ); } maSignsFI.SetText( s ); diff --git a/uui/source/secmacrowarnings.hxx b/uui/source/secmacrowarnings.hxx index a3bac1dcdb9f..17280ecbbac1 100644 --- a/uui/source/secmacrowarnings.hxx +++ b/uui/source/secmacrowarnings.hxx @@ -60,6 +60,7 @@ private: cssu::Reference< css::security::XCertificate > mxCert; cssu::Reference< css::embed::XStorage > mxStore; + ::rtl::OUString maODFVersion; const cssu::Sequence< css::security::DocumentSignatureInformation >* mpInfos; FixedImage maSymbolImg; @@ -96,6 +97,7 @@ public: void SetDocumentURL( const String& rDocURL ); void SetStorage( const cssu::Reference < css::embed::XStorage >& rxStore, + const ::rtl::OUString& aODFVersion, const cssu::Sequence< css::security::DocumentSignatureInformation >& _rInfos ); void SetCertificate( const cssu::Reference< css::security::XCertificate >& _rxCert ); }; |