diff options
Diffstat (limited to 'uui')
-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 7f384a70f3..1315b32bd5 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 ba09ba30a1..4a40445a55 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 677767bde4..bbfcaf7764 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 ad2a1b5926..0d38a5fd0a 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 8545b5de5d..db272a88f9 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 ce4515f9d4..bce3f96a0c 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 ); }; |