diff options
Diffstat (limited to 'unotools/source/config/securityoptions.cxx')
-rw-r--r-- | unotools/source/config/securityoptions.cxx | 1305 |
1 files changed, 1305 insertions, 0 deletions
diff --git a/unotools/source/config/securityoptions.cxx b/unotools/source/config/securityoptions.cxx new file mode 100644 index 000000000000..fb0ea146b71c --- /dev/null +++ b/unotools/source/config/securityoptions.cxx @@ -0,0 +1,1305 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_unotools.hxx" + +#include <unotools/securityoptions.hxx> +#include <unotools/configmgr.hxx> +#include <unotools/configitem.hxx> +#include <tools/debug.hxx> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/uno/Sequence.hxx> + +#include <com/sun/star/beans/PropertyValue.hpp> +#include <tools/urlobj.hxx> +#include <tools/wldcrd.hxx> + +#include <unotools/pathoptions.hxx> + +#include <rtl/logfile.hxx> +#include "itemholder1.hxx" + +//_________________________________________________________________________________________________________________ +// namespaces +//_________________________________________________________________________________________________________________ + +using namespace ::utl ; +using namespace ::rtl ; +using namespace ::osl ; +using namespace ::com::sun::star::uno ; + +//_________________________________________________________________________________________________________________ +// const +//_________________________________________________________________________________________________________________ + +#define ROOTNODE_SECURITY OUString(RTL_CONSTASCII_USTRINGPARAM("Office.Common/Security/Scripting")) +#define DEFAULT_SECUREURL Sequence< OUString >() +#define DEFAULT_SECLEVEL 3 +#define DEFAULT_TRUSTEDAUTHORS Sequence< SvtSecurityOptions::Certificate >() + +// xmlsec05 depricated +#define DEFAULT_STAROFFICEBASIC eALWAYS_EXECUTE + +#define CSTR_SECUREURL "SecureURL" +#define CSTR_DOCWARN_SAVEORSEND "WarnSaveOrSendDoc" +#define CSTR_DOCWARN_SIGNING "WarnSignDoc" +#define CSTR_DOCWARN_PRINT "WarnPrintDoc" +#define CSTR_DOCWARN_CREATEPDF "WarnCreatePDF" +#define CSTR_DOCWARN_REMOVEPERSONALINFO "RemovePersonalInfoOnSaving" +#define CSTR_DOCWARN_RECOMMENDPASSWORD "RecommendPasswordProtection" +#define CSTR_CTRLCLICK_HYPERLINK "HyperlinksWithCtrlClick" +#define CSTR_MACRO_SECLEVEL "MacroSecurityLevel" +#define CSTR_MACRO_TRUSTEDAUTHORS "TrustedAuthors" +#define CSTR_MACRO_DISABLE "DisableMacrosExecution" +#define CSTR_TRUSTEDAUTHOR_SUBJECTNAME "SubjectName" +#define CSTR_TRUSTEDAUTHOR_SERIALNUMBER "SerialNumber" +#define CSTR_TRUSTEDAUTHOR_RAWDATA "RawData" + +#define PROPERTYNAME_SECUREURL OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_SECUREURL )) +#define PROPERTYNAME_DOCWARN_SAVEORSEND OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_SAVEORSEND )) +#define PROPERTYNAME_DOCWARN_SIGNING OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_SIGNING )) +#define PROPERTYNAME_DOCWARN_PRINT OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_PRINT )) +#define PROPERTYNAME_DOCWARN_CREATEPDF OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_CREATEPDF )) +#define PROPERTYNAME_DOCWARN_REMOVEPERSONALINFO OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_REMOVEPERSONALINFO )) +#define PROPERTYNAME_DOCWARN_RECOMMENDPASSWORD OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_DOCWARN_RECOMMENDPASSWORD )) +#define PROPERTYNAME_CTRLCLICK_HYPERLINK OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_CTRLCLICK_HYPERLINK )) +#define PROPERTYNAME_MACRO_SECLEVEL OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_MACRO_SECLEVEL )) +#define PROPERTYNAME_MACRO_TRUSTEDAUTHORS OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_MACRO_TRUSTEDAUTHORS )) +#define PROPERTYNAME_MACRO_DISABLE OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_MACRO_DISABLE )) +#define PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_TRUSTEDAUTHOR_SUBJECTNAME)) +#define PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_TRUSTEDAUTHOR_SERIALNUMBER)) +#define PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA OUString(RTL_CONSTASCII_USTRINGPARAM(CSTR_TRUSTEDAUTHOR_RAWDATA)) + +// xmlsec05 depricated +#define PROPERTYNAME_STAROFFICEBASIC OUString(RTL_CONSTASCII_USTRINGPARAM("OfficeBasic" )) +#define PROPERTYNAME_EXECUTEPLUGINS OUString(RTL_CONSTASCII_USTRINGPARAM("ExecutePlugins" )) +#define PROPERTYNAME_WARNINGENABLED OUString(RTL_CONSTASCII_USTRINGPARAM("Warning" )) +#define PROPERTYNAME_CONFIRMATIONENABLED OUString(RTL_CONSTASCII_USTRINGPARAM("Confirmation" )) +// xmlsec05 depricated + + +#define PROPERTYHANDLE_SECUREURL 0 + +// xmlsec05 depricated +#define PROPERTYHANDLE_STAROFFICEBASIC 1 +#define PROPERTYHANDLE_EXECUTEPLUGINS 2 +#define PROPERTYHANDLE_WARNINGENABLED 3 +#define PROPERTYHANDLE_CONFIRMATIONENABLED 4 +// xmlsec05 depricated + +#define PROPERTYHANDLE_DOCWARN_SAVEORSEND 5 +#define PROPERTYHANDLE_DOCWARN_SIGNING 6 +#define PROPERTYHANDLE_DOCWARN_PRINT 7 +#define PROPERTYHANDLE_DOCWARN_CREATEPDF 8 +#define PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO 9 +#define PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD 10 +#define PROPERTYHANDLE_CTRLCLICK_HYPERLINK 11 +#define PROPERTYHANDLE_MACRO_SECLEVEL 12 +#define PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS 13 +#define PROPERTYHANDLE_MACRO_DISABLE 14 + +#define PROPERTYCOUNT 15 +#define PROPERTYHANDLE_INVALID -1 + +#define CFG_READONLY_DEFAULT sal_False + +//_________________________________________________________________________________________________________________ +// private declarations! +//_________________________________________________________________________________________________________________ + +class SvtSecurityOptions_Impl : public ConfigItem +{ + //------------------------------------------------------------------------------------------------------------- + // public methods + //------------------------------------------------------------------------------------------------------------- + + public: + + //--------------------------------------------------------------------------------------------------------- + // constructor / destructor + //--------------------------------------------------------------------------------------------------------- + + SvtSecurityOptions_Impl(); + ~SvtSecurityOptions_Impl(); + + //--------------------------------------------------------------------------------------------------------- + // overloaded methods of baseclass + //--------------------------------------------------------------------------------------------------------- + + /*-****************************************************************************************************//** + @short called for notify of configmanager + @descr These method is called from the ConfigManager before application ends or from the + PropertyChangeListener if the sub tree broadcasts changes. You must update your + internal values. + + @seealso baseclass ConfigItem + + @param "seqPropertyNames" is the list of properties which should be updated. + @return - + + @onerror - + *//*-*****************************************************************************************************/ + + virtual void Notify( const Sequence< OUString >& seqPropertyNames ); + + /*-****************************************************************************************************//** + @short write changes to configuration + @descr These method writes the changed values into the sub tree + and should always called in our destructor to guarantee consistency of config data. + + @seealso baseclass ConfigItem + + @param - + @return - + + @onerror - + *//*-*****************************************************************************************************/ + + virtual void Commit(); + + //--------------------------------------------------------------------------------------------------------- + // public interface + //--------------------------------------------------------------------------------------------------------- + + sal_Bool IsReadOnly ( SvtSecurityOptions::EOption eOption ) const ; + + Sequence< OUString > GetSecureURLs ( ) const ; + void SetSecureURLs ( const Sequence< OUString >& seqURLList ) ; + sal_Bool IsSecureURL ( const OUString& sURL, + const OUString& sReferer ) const ; + inline sal_Int32 GetMacroSecurityLevel ( ) const ; + void SetMacroSecurityLevel ( sal_Int32 _nLevel ) ; + + inline sal_Bool IsMacroDisabled ( ) const ; + + Sequence< SvtSecurityOptions::Certificate > GetTrustedAuthors ( ) const ; + void SetTrustedAuthors ( const Sequence< SvtSecurityOptions::Certificate >& rAuthors ) ; + sal_Bool IsTrustedAuthorsEnabled ( ) ; + + sal_Bool IsOptionSet ( SvtSecurityOptions::EOption eOption ) const ; + sal_Bool SetOption ( SvtSecurityOptions::EOption eOption, sal_Bool bValue ) ; + sal_Bool IsOptionEnabled ( SvtSecurityOptions::EOption eOption ) const ; +private: + + /*-****************************************************************************************************//** + @short return list of key names of ouer configuration management which represent our module tree + @descr These methods return a static const list of key names. We need it to get needed values from our + configuration management. + + @seealso - + + @param - + @return A list of needed configuration keys is returned. + + @onerror - + *//*-*****************************************************************************************************/ + + void SetProperty( sal_Int32 nHandle, const Any& rValue, sal_Bool bReadOnly ); + void LoadAuthors( void ); + static sal_Int32 GetHandle( const OUString& rPropertyName ); + bool GetOption( SvtSecurityOptions::EOption eOption, sal_Bool*& rpValue, sal_Bool*& rpRO ); + + static Sequence< OUString > GetPropertyNames(); + + Sequence< OUString > m_seqSecureURLs; + sal_Bool m_bSaveOrSend; + sal_Bool m_bSigning; + sal_Bool m_bPrint; + sal_Bool m_bCreatePDF; + sal_Bool m_bRemoveInfo; + sal_Bool m_bRecommendPwd; + sal_Bool m_bCtrlClickHyperlink; + sal_Int32 m_nSecLevel; + Sequence< SvtSecurityOptions::Certificate > m_seqTrustedAuthors; + sal_Bool m_bDisableMacros; + + sal_Bool m_bROSecureURLs; + sal_Bool m_bROSaveOrSend; + sal_Bool m_bROSigning; + sal_Bool m_bROPrint; + sal_Bool m_bROCreatePDF; + sal_Bool m_bRORemoveInfo; + sal_Bool m_bRORecommendPwd; + sal_Bool m_bROCtrlClickHyperlink; + sal_Bool m_bROSecLevel; + sal_Bool m_bROTrustedAuthors; + sal_Bool m_bRODisableMacros; + + + // xmlsec05 depricated + EBasicSecurityMode m_eBasicMode; + sal_Bool m_bExecutePlugins; + sal_Bool m_bWarning; + sal_Bool m_bConfirmation; + + sal_Bool m_bROConfirmation; + sal_Bool m_bROWarning; + sal_Bool m_bROExecutePlugins; + sal_Bool m_bROBasicMode; + public: + sal_Bool IsWarningEnabled() const; + void SetWarningEnabled( sal_Bool bSet ); + sal_Bool IsConfirmationEnabled() const; + void SetConfirmationEnabled( sal_Bool bSet ); + sal_Bool IsExecutePlugins() const; + void SetExecutePlugins( sal_Bool bSet ); + EBasicSecurityMode GetBasicMode ( ) const ; + void SetBasicMode ( EBasicSecurityMode eMode ) ; +}; + +//_________________________________________________________________________________________________________________ +// definitions +//_________________________________________________________________________________________________________________ + +//***************************************************************************************************************** +// constructor +//***************************************************************************************************************** +SvtSecurityOptions_Impl::SvtSecurityOptions_Impl() + :ConfigItem ( ROOTNODE_SECURITY ) + ,m_seqSecureURLs ( DEFAULT_SECUREURL ) + ,m_bSaveOrSend ( sal_True ) + ,m_bSigning ( sal_True ) + ,m_bPrint ( sal_True ) + ,m_bCreatePDF ( sal_True ) + ,m_bRemoveInfo ( sal_True ) + ,m_nSecLevel ( sal_True ) + ,m_seqTrustedAuthors ( DEFAULT_TRUSTEDAUTHORS ) + ,m_bDisableMacros ( sal_False ) + ,m_bROSecureURLs ( CFG_READONLY_DEFAULT ) + ,m_bROSaveOrSend ( CFG_READONLY_DEFAULT ) + ,m_bROSigning ( CFG_READONLY_DEFAULT ) + ,m_bROPrint ( CFG_READONLY_DEFAULT ) + ,m_bROCreatePDF ( CFG_READONLY_DEFAULT ) + ,m_bRORemoveInfo ( CFG_READONLY_DEFAULT ) + ,m_bROSecLevel ( CFG_READONLY_DEFAULT ) + ,m_bROTrustedAuthors ( CFG_READONLY_DEFAULT ) + ,m_bRODisableMacros ( sal_True ) // currently is not intended to be changed + + // xmlsec05 depricated + , m_eBasicMode ( DEFAULT_STAROFFICEBASIC ) + , m_bExecutePlugins ( sal_True ) + , m_bWarning ( sal_True ) + , m_bConfirmation ( sal_True ) + , m_bROConfirmation ( CFG_READONLY_DEFAULT ) + , m_bROWarning ( CFG_READONLY_DEFAULT ) + , m_bROExecutePlugins ( CFG_READONLY_DEFAULT ) + , m_bROBasicMode ( CFG_READONLY_DEFAULT ) + // xmlsec05 depricated + +{ + Sequence< OUString > seqNames = GetPropertyNames ( ); + Sequence< Any > seqValues = GetProperties ( seqNames ); + Sequence< sal_Bool > seqRO = GetReadOnlyStates ( seqNames ); + + // Safe impossible cases. + // We need values from ALL configuration keys. + // Follow assignment use order of values in relation to our list of key names! + DBG_ASSERT( !(seqNames.getLength()!=seqValues.getLength()), "SvtSecurityOptions_Impl::SvtSecurityOptions_Impl()\nI miss some values of configuration keys!\n" ); + + // Copy values from list in right order to our internal member. + sal_Int32 nPropertyCount = seqValues.getLength(); + for( sal_Int32 nProperty = 0 ; nProperty < nPropertyCount ; ++nProperty ) + SetProperty( nProperty, seqValues[ nProperty ], seqRO[ nProperty ] ); + + LoadAuthors(); + + // Enable notification mechanism of our baseclass. + // We need it to get information about changes outside these class on our used configuration keys!*/ + + EnableNotification( seqNames ); +} + +//***************************************************************************************************************** +// destructor +//***************************************************************************************************************** +SvtSecurityOptions_Impl::~SvtSecurityOptions_Impl() +{ + if( IsModified() ) + Commit(); +} + +void SvtSecurityOptions_Impl::SetProperty( sal_Int32 nProperty, const Any& rValue, sal_Bool bRO ) +{ + switch( nProperty ) + { + case PROPERTYHANDLE_SECUREURL: + { + m_seqSecureURLs.realloc( 0 ); + rValue >>= m_seqSecureURLs; + SvtPathOptions aOpt; + sal_uInt32 nCount = m_seqSecureURLs.getLength(); + for( sal_uInt32 nItem = 0 ; nItem < nCount ; ++nItem ) + m_seqSecureURLs[ nItem ] = aOpt.SubstituteVariable( m_seqSecureURLs[ nItem ] ); + m_bROSecureURLs = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_SAVEORSEND: + { + rValue >>= m_bSaveOrSend; + m_bROSaveOrSend = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_SIGNING: + { + rValue >>= m_bSigning; + m_bROSigning = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_PRINT: + { + rValue >>= m_bPrint; + m_bROPrint = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_CREATEPDF: + { + rValue >>= m_bCreatePDF; + m_bROCreatePDF = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO: + { + rValue >>= m_bRemoveInfo; + m_bRORemoveInfo = bRO; + } + break; + + case PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD: + { + rValue >>= m_bRecommendPwd; + m_bRORecommendPwd = bRO; + } + break; + + case PROPERTYHANDLE_CTRLCLICK_HYPERLINK: + { + rValue >>= m_bCtrlClickHyperlink; + m_bROCtrlClickHyperlink = bRO; + } + break; + + case PROPERTYHANDLE_MACRO_SECLEVEL: + { + rValue >>= m_nSecLevel; + m_bROSecLevel = bRO; + } + break; + + case PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS: + { + // don't care about value here... + m_bROTrustedAuthors = bRO; + } + break; + + case PROPERTYHANDLE_MACRO_DISABLE: + { + rValue >>= m_bDisableMacros; + m_bRODisableMacros = bRO; + } + break; + + + // xmlsec05 depricated + case PROPERTYHANDLE_STAROFFICEBASIC: + { + sal_Int32 nMode = 0; + rValue >>= nMode; + m_eBasicMode = (EBasicSecurityMode)nMode; + m_bROBasicMode = bRO; + } + break; + case PROPERTYHANDLE_EXECUTEPLUGINS: + { + rValue >>= m_bExecutePlugins; + m_bROExecutePlugins = bRO; + } + break; + case PROPERTYHANDLE_WARNINGENABLED: + { + rValue >>= m_bWarning; + m_bROWarning = bRO; + } + break; + case PROPERTYHANDLE_CONFIRMATIONENABLED: + { + rValue >>= m_bConfirmation; + m_bROConfirmation = bRO; + } + break; + // xmlsec05 depricated + + + #if OSL_DEBUG_LEVEL > 1 + default: + DBG_ASSERT( false, "SvtSecurityOptions_Impl::SetProperty()\nUnkown property!\n" ); + #endif + } +} + +void SvtSecurityOptions_Impl::LoadAuthors( void ) +{ + m_seqTrustedAuthors.realloc( 0 ); // first clear + Sequence< OUString > lAuthors = GetNodeNames( PROPERTYNAME_MACRO_TRUSTEDAUTHORS ); + sal_Int32 c1 = lAuthors.getLength(); + if( c1 ) + { + sal_Int32 c2 = c1 * 3; // 3 Properties inside Struct TrustedAuthor + Sequence< OUString > lAllAuthors( c2 ); + + sal_Int32 i1; + sal_Int32 i2; + OUString aSep( RTL_CONSTASCII_USTRINGPARAM( "/" ) ); + for( i1 = 0, i2 = 0 ; i1 < c1 ; ++i1 ) + { + lAllAuthors[ i2 ] = PROPERTYNAME_MACRO_TRUSTEDAUTHORS + aSep + lAuthors[ i1 ] + aSep + PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME; + ++i2; + lAllAuthors[ i2 ] = PROPERTYNAME_MACRO_TRUSTEDAUTHORS + aSep + lAuthors[ i1 ] + aSep + PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER; + ++i2; + lAllAuthors[ i2 ] = PROPERTYNAME_MACRO_TRUSTEDAUTHORS + aSep + lAuthors[ i1 ] + aSep + PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA; + ++i2; + } + + Sequence< Any > lValues = GetProperties( lAllAuthors ); + if( lValues.getLength() == c2 ) + { + m_seqTrustedAuthors.realloc( c1 ); + SvtSecurityOptions::Certificate aCert( 3 ); + for( i1 = 0, i2 = 0 ; i1 < c1 ; ++i1 ) + { + lValues[ i2 ] >>= aCert[ 0 ]; + ++i2; + lValues[ i2 ] >>= aCert[ 1 ]; + ++i2; + lValues[ i2 ] >>= aCert[ 2 ]; + ++i2; + m_seqTrustedAuthors[ i1 ] = aCert; + } + } + } +} + +sal_Int32 SvtSecurityOptions_Impl::GetHandle( const OUString& rName ) +{ + sal_Int32 nHandle; + + if( rName.compareToAscii( CSTR_SECUREURL ) == 0 ) + nHandle = PROPERTYHANDLE_SECUREURL; + else if( rName.compareToAscii( CSTR_DOCWARN_SAVEORSEND ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_SAVEORSEND; + else if( rName.compareToAscii( CSTR_DOCWARN_SIGNING ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_SIGNING; + else if( rName.compareToAscii( CSTR_DOCWARN_PRINT ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_PRINT; + else if( rName.compareToAscii( CSTR_DOCWARN_CREATEPDF ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_CREATEPDF; + else if( rName.compareToAscii( CSTR_DOCWARN_REMOVEPERSONALINFO ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO; + else if( rName.compareToAscii( CSTR_DOCWARN_RECOMMENDPASSWORD ) == 0 ) + nHandle = PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD; + else if( rName.compareToAscii( CSTR_CTRLCLICK_HYPERLINK ) == 0 ) + nHandle = PROPERTYHANDLE_CTRLCLICK_HYPERLINK; + else if( rName.compareToAscii( CSTR_MACRO_SECLEVEL ) == 0 ) + nHandle = PROPERTYHANDLE_MACRO_SECLEVEL; + else if( rName.compareToAscii( CSTR_MACRO_TRUSTEDAUTHORS ) == 0 ) + nHandle = PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS; + else if( rName.compareToAscii( CSTR_MACRO_DISABLE ) == 0 ) + nHandle = PROPERTYHANDLE_MACRO_DISABLE; + + // xmlsec05 depricated + else if( rName == PROPERTYNAME_STAROFFICEBASIC ) + nHandle = PROPERTYHANDLE_STAROFFICEBASIC; + else if( rName == PROPERTYNAME_EXECUTEPLUGINS ) + nHandle = PROPERTYHANDLE_EXECUTEPLUGINS; + else if( rName == PROPERTYNAME_WARNINGENABLED ) + nHandle = PROPERTYHANDLE_WARNINGENABLED; + else if( rName == PROPERTYNAME_CONFIRMATIONENABLED ) + nHandle = PROPERTYHANDLE_CONFIRMATIONENABLED; + // xmlsec05 depricated + + else + nHandle = PROPERTYHANDLE_INVALID; + + return nHandle; +} + +bool SvtSecurityOptions_Impl::GetOption( SvtSecurityOptions::EOption eOption, sal_Bool*& rpValue, sal_Bool*& rpRO ) +{ + switch( eOption ) + { + case SvtSecurityOptions::E_DOCWARN_SAVEORSEND: + rpValue = &m_bSaveOrSend; + rpRO = &m_bROSaveOrSend; + break; + case SvtSecurityOptions::E_DOCWARN_SIGNING: + rpValue = &m_bSigning; + rpRO = &m_bROSigning; + break; + case SvtSecurityOptions::E_DOCWARN_PRINT: + rpValue = &m_bPrint; + rpRO = &m_bROPrint; + break; + case SvtSecurityOptions::E_DOCWARN_CREATEPDF: + rpValue = &m_bCreatePDF; + rpRO = &m_bROCreatePDF; + break; + case SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO: + rpValue = &m_bRemoveInfo; + rpRO = &m_bRORemoveInfo; + break; + case SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD: + rpValue = &m_bRecommendPwd; + rpRO = &m_bRORecommendPwd; + break; + case SvtSecurityOptions::E_CTRLCLICK_HYPERLINK: + rpValue = &m_bCtrlClickHyperlink; + rpRO = &m_bROCtrlClickHyperlink; + break; + default: + rpValue = NULL; + rpRO = NULL; + break; + } + + return rpValue != NULL; +} + +void SvtSecurityOptions_Impl::Notify( const Sequence< OUString >& seqPropertyNames ) +{ + // Use given list of updated properties to get his values from configuration directly! + Sequence< Any > seqValues = GetProperties( seqPropertyNames ); + Sequence< sal_Bool > seqRO = GetReadOnlyStates( seqPropertyNames ); + // Safe impossible cases. + // We need values from ALL notified configuration keys. + DBG_ASSERT( !(seqPropertyNames.getLength()!=seqValues.getLength()), "SvtSecurityOptions_Impl::Notify()\nI miss some values of configuration keys!\n" ); + // Step over list of property names and get right value from coreesponding value list to set it on internal members! + sal_Int32 nCount = seqPropertyNames.getLength(); + for( sal_Int32 nProperty = 0 ; nProperty < nCount ; ++nProperty ) + SetProperty( GetHandle( seqPropertyNames[ nProperty ] ), seqValues[ nProperty ], seqRO[ nProperty ] ); + + // read set of trusted authors separately + LoadAuthors(); +} + +void SvtSecurityOptions_Impl::Commit() +{ + // Get names of supported properties, create a list for values and copy current values to it. + Sequence< OUString > lOrgNames = GetPropertyNames(); + sal_Int32 nOrgCount = lOrgNames.getLength(); + + Sequence< OUString > lNames(nOrgCount); + Sequence< Any > lValues(nOrgCount); + sal_Int32 nRealCount = 0; + bool bDone; + + ClearNodeSet( PROPERTYNAME_MACRO_TRUSTEDAUTHORS ); + + for( sal_Int32 nProperty = 0 ; nProperty < nOrgCount ; ++nProperty ) + { + switch( nProperty ) + { + case PROPERTYHANDLE_SECUREURL: + { + bDone = !m_bROSecureURLs; + if( bDone ) + { + Sequence< OUString > lURLs( m_seqSecureURLs ); + SvtPathOptions aOpt; + sal_Int32 nURLsCnt = lURLs.getLength(); + for( sal_Int32 nItem = 0 ; nItem < nURLsCnt ; ++nItem ) + lURLs[ nItem ] = aOpt.UseVariable( lURLs[ nItem ] ); + lValues[ nRealCount ] <<= lURLs; + } + } + break; + + case PROPERTYHANDLE_DOCWARN_SAVEORSEND: + { + bDone = !m_bROSaveOrSend; + if( bDone ) + lValues[ nRealCount ] <<= m_bSaveOrSend; + } + break; + + case PROPERTYHANDLE_DOCWARN_SIGNING: + { + bDone = !m_bROSigning; + if( bDone ) + lValues[ nRealCount ] <<= m_bSigning; + } + break; + + case PROPERTYHANDLE_DOCWARN_PRINT: + { + bDone = !m_bROPrint; + if( bDone ) + lValues[ nRealCount ] <<= m_bPrint; + } + break; + + case PROPERTYHANDLE_DOCWARN_CREATEPDF: + { + bDone = !m_bROCreatePDF; + if( bDone ) + lValues[ nRealCount ] <<= m_bCreatePDF; + } + break; + + case PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO: + { + bDone = !m_bRORemoveInfo; + if( bDone ) + lValues[ nRealCount ] <<= m_bRemoveInfo; + } + break; + + case PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD: + { + bDone = !m_bRORecommendPwd; + if( bDone ) + lValues[ nRealCount ] <<= m_bRecommendPwd; + } + break; + + case PROPERTYHANDLE_CTRLCLICK_HYPERLINK: + { + bDone = !m_bROCtrlClickHyperlink; + if( bDone ) + lValues[ nRealCount ] <<= m_bCtrlClickHyperlink; + } + break; + + case PROPERTYHANDLE_MACRO_SECLEVEL: + { + bDone = !m_bROSecLevel; + if( bDone ) + lValues[ nRealCount ] <<= m_nSecLevel; + } + break; + + case PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS: + { + bDone = !m_bROTrustedAuthors; + if( bDone ) + { + sal_Int32 nCnt = m_seqTrustedAuthors.getLength(); + if( nCnt ) + { + String s; + s.AppendAscii( CSTR_MACRO_TRUSTEDAUTHORS ); + s.AppendAscii( "/a" ); + + Sequence< Sequence< com::sun::star::beans::PropertyValue > > lPropertyValuesSeq( nCnt ); + for( sal_Int32 i = 0 ; i < nCnt ; ++i ) + { + String aPrefix( s ); + aPrefix += String::CreateFromInt32( i ); + aPrefix.AppendAscii( "/" ); + Sequence< com::sun::star::beans::PropertyValue > lPropertyValues( 3 ); + lPropertyValues[ 0 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME; + lPropertyValues[ 0 ].Value <<= m_seqTrustedAuthors[ i ][0]; + lPropertyValues[ 1 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER; + lPropertyValues[ 1 ].Value <<= m_seqTrustedAuthors[ i ][1]; + lPropertyValues[ 2 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA; + lPropertyValues[ 2 ].Value <<= m_seqTrustedAuthors[ i ][2]; + + + SetSetProperties( PROPERTYNAME_MACRO_TRUSTEDAUTHORS, lPropertyValues ); + } + + bDone = false; // because we save in loop above! + } + else + bDone = false; + } + } + break; + + case PROPERTYHANDLE_MACRO_DISABLE: + { + bDone = !m_bRODisableMacros; + if( bDone ) + lValues[ nRealCount ] <<= (sal_Bool)m_bDisableMacros; + } + break; + + + // xmlsec05 depricated + case PROPERTYHANDLE_STAROFFICEBASIC: + { + bDone = !m_bROBasicMode; + if( bDone ) + lValues[ nRealCount ] <<= (sal_Int32)m_eBasicMode; + } + break; + case PROPERTYHANDLE_EXECUTEPLUGINS: + { + bDone = !m_bROExecutePlugins; + if( bDone ) + lValues[ nRealCount ] <<= m_bExecutePlugins; + } + break; + case PROPERTYHANDLE_WARNINGENABLED: + { + bDone = !m_bROWarning; + if( bDone ) + lValues[ nRealCount ] <<= m_bWarning; + } + break; + case PROPERTYHANDLE_CONFIRMATIONENABLED: + { + bDone = !m_bROConfirmation; + if( bDone ) + lValues[ nRealCount ] <<= m_bConfirmation; + } + break; + // xmlsec05 depricated + + + default: + bDone = false; + } + + if( bDone ) + { + lNames[ nRealCount ] = lOrgNames[ nProperty ]; + ++nRealCount; + } + } + // Set properties in configuration. + lNames.realloc(nRealCount); + lValues.realloc(nRealCount); + PutProperties( lNames, lValues ); +} + +sal_Bool SvtSecurityOptions_Impl::IsReadOnly( SvtSecurityOptions::EOption eOption ) const +{ + sal_Bool bReadonly; + switch(eOption) + { + case SvtSecurityOptions::E_SECUREURLS : + bReadonly = m_bROSecureURLs; + break; + case SvtSecurityOptions::E_DOCWARN_SAVEORSEND: + bReadonly = m_bROSaveOrSend; + break; + case SvtSecurityOptions::E_DOCWARN_SIGNING: + bReadonly = m_bROSigning; + break; + case SvtSecurityOptions::E_DOCWARN_PRINT: + bReadonly = m_bROPrint; + break; + case SvtSecurityOptions::E_DOCWARN_CREATEPDF: + bReadonly = m_bROCreatePDF; + break; + case SvtSecurityOptions::E_DOCWARN_REMOVEPERSONALINFO: + bReadonly = m_bRORemoveInfo; + break; + case SvtSecurityOptions::E_DOCWARN_RECOMMENDPASSWORD: + bReadonly = m_bRORecommendPwd; + break; + case SvtSecurityOptions::E_MACRO_SECLEVEL: + bReadonly = m_bROSecLevel; + break; + case SvtSecurityOptions::E_MACRO_TRUSTEDAUTHORS: + bReadonly = m_bROTrustedAuthors; + break; + case SvtSecurityOptions::E_MACRO_DISABLE: + bReadonly = m_bRODisableMacros; + break; + case SvtSecurityOptions::E_CTRLCLICK_HYPERLINK: + bReadonly = m_bROCtrlClickHyperlink; + break; + + + // xmlsec05 depricated + case SvtSecurityOptions::E_BASICMODE: + bReadonly = m_bROBasicMode; + break; + case SvtSecurityOptions::E_EXECUTEPLUGINS: + bReadonly = m_bROExecutePlugins; + break; + case SvtSecurityOptions::E_WARNING: + bReadonly = m_bROWarning; + break; + case SvtSecurityOptions::E_CONFIRMATION: + bReadonly = m_bROConfirmation; + break; + // xmlsec05 depricated + + + default: + bReadonly = sal_True; + } + + return bReadonly; +} + +Sequence< OUString > SvtSecurityOptions_Impl::GetSecureURLs() const +{ + return m_seqSecureURLs; +} + +void SvtSecurityOptions_Impl::SetSecureURLs( const Sequence< OUString >& seqURLList ) +{ + DBG_ASSERT(!m_bROSecureURLs, "SvtSecurityOptions_Impl::SetSecureURLs()\nYou tried to write on a readonly value!\n"); + if (!m_bROSecureURLs && m_seqSecureURLs!=seqURLList) + { + m_seqSecureURLs = seqURLList; + SetModified(); + } +} + +sal_Bool SvtSecurityOptions_Impl::IsSecureURL( const OUString& sURL , + const OUString& sReferer) const +{ + sal_Bool bState = sal_False; + + // Check for uncritical protocols first + // All protocols different from "macro..." and "slot..." are secure per definition and must not be checked. + // "macro://#..." means AppBasic macros that are considered safe + INetURLObject aURL ( sURL ); + INetProtocol aProtocol = aURL.GetProtocol(); + + // All other URLs must checked in combination with referer and internal information about security + if ( (aProtocol != INET_PROT_MACRO && aProtocol != INET_PROT_SLOT) || + aURL.GetMainURL( INetURLObject::NO_DECODE ).matchIgnoreAsciiCaseAsciiL( "macro:///", 9 ) == 0) + { + // security check only for "macro" ( without app basic ) or "slot" protocols + bState = sal_True; + } + else + { + // check list of allowed URL patterns + // Trusted referer given? + // NO => bState will be false per default + // YES => search for it in our internal url list + if( sReferer.getLength() > 0 ) + { + // Search in internal list + ::rtl::OUString sRef = sReferer.toAsciiLowerCase(); + sal_uInt32 nCount = m_seqSecureURLs.getLength(); + for( sal_uInt32 nItem=0; nItem<nCount; ++nItem ) + { + OUString sCheckURL = m_seqSecureURLs[nItem].toAsciiLowerCase(); + sCheckURL += OUString(RTL_CONSTASCII_USTRINGPARAM("*")); + if( WildCard( sCheckURL ).Matches( sRef ) == sal_True ) + { + bState = sal_True; + break; + } + } + + if ( !bState ) + bState = sRef.compareToAscii("private:user") == COMPARE_EQUAL; + } + } + + // Return result of operation. + return bState; +} + +inline sal_Int32 SvtSecurityOptions_Impl::GetMacroSecurityLevel() const +{ + return m_nSecLevel; +} + +inline sal_Bool SvtSecurityOptions_Impl::IsMacroDisabled() const +{ + return m_bDisableMacros; +} + +void SvtSecurityOptions_Impl::SetMacroSecurityLevel( sal_Int32 _nLevel ) +{ + if( !m_bROSecLevel ) + { + if( _nLevel > 3 || _nLevel < 0 ) + _nLevel = 3; + + if( m_nSecLevel != _nLevel ) + { + m_nSecLevel = _nLevel; + SetModified(); + } + } +} + +Sequence< SvtSecurityOptions::Certificate > SvtSecurityOptions_Impl::GetTrustedAuthors() const +{ + return m_seqTrustedAuthors; +} + +void SvtSecurityOptions_Impl::SetTrustedAuthors( const Sequence< SvtSecurityOptions::Certificate >& rAuthors ) +{ + DBG_ASSERT(!m_bROTrustedAuthors, "SvtSecurityOptions_Impl::SetTrustedAuthors()\nYou tried to write on a readonly value!\n"); + if( !m_bROTrustedAuthors && rAuthors != m_seqTrustedAuthors ) + { + m_seqTrustedAuthors = rAuthors; + SetModified(); + } +} + +sal_Bool SvtSecurityOptions_Impl::IsTrustedAuthorsEnabled() +{ + return m_bROTrustedAuthors; +} + +sal_Bool SvtSecurityOptions_Impl::IsOptionSet( SvtSecurityOptions::EOption eOption ) const +{ + sal_Bool* pValue; + sal_Bool* pRO; + sal_Bool bRet = sal_False; + + if( ( const_cast< SvtSecurityOptions_Impl* >( this ) )->GetOption( eOption, pValue, pRO ) ) + bRet = *pValue; + + return bRet; +} + +sal_Bool SvtSecurityOptions_Impl::SetOption( SvtSecurityOptions::EOption eOption, sal_Bool bValue ) +{ + sal_Bool* pValue; + sal_Bool* pRO; + sal_Bool bRet = sal_False; + + if( GetOption( eOption, pValue, pRO ) ) + { + if( !*pRO ) + { + bRet = sal_True; + if( *pValue != bValue ) + { + *pValue = bValue; + SetModified(); + } + } + } + + return bRet; +} + +sal_Bool SvtSecurityOptions_Impl::IsOptionEnabled( SvtSecurityOptions::EOption eOption ) const +{ + sal_Bool* pValue; + sal_Bool* pRO; + sal_Bool bRet = sal_False; + + if( ( const_cast< SvtSecurityOptions_Impl* >( this ) )->GetOption( eOption, pValue, pRO ) ) + bRet = !*pRO; + + return bRet; +} + +Sequence< OUString > SvtSecurityOptions_Impl::GetPropertyNames() +{ + // Build static list of configuration key names. + static const OUString pProperties[] = + { + PROPERTYNAME_SECUREURL, + PROPERTYNAME_STAROFFICEBASIC, + PROPERTYNAME_EXECUTEPLUGINS, + PROPERTYNAME_WARNINGENABLED, + PROPERTYNAME_CONFIRMATIONENABLED, + PROPERTYNAME_DOCWARN_SAVEORSEND, + PROPERTYNAME_DOCWARN_SIGNING, + PROPERTYNAME_DOCWARN_PRINT, + PROPERTYNAME_DOCWARN_CREATEPDF, + PROPERTYNAME_DOCWARN_REMOVEPERSONALINFO, + PROPERTYNAME_DOCWARN_RECOMMENDPASSWORD, + PROPERTYNAME_CTRLCLICK_HYPERLINK, + PROPERTYNAME_MACRO_SECLEVEL, + PROPERTYNAME_MACRO_TRUSTEDAUTHORS, + PROPERTYNAME_MACRO_DISABLE + }; + // Initialize return sequence with these list ... + static const Sequence< OUString > seqPropertyNames( pProperties, PROPERTYCOUNT ); + // ... and return it. + return seqPropertyNames; +} + +//***************************************************************************************************************** +// initialize static member +// DON'T DO IT IN YOUR HEADER! +// see definition for further informations +//***************************************************************************************************************** +SvtSecurityOptions_Impl* SvtSecurityOptions::m_pDataContainer = NULL ; +sal_Int32 SvtSecurityOptions::m_nRefCount = 0 ; + +SvtSecurityOptions::SvtSecurityOptions() +{ + // Global access, must be guarded (multithreading!). + MutexGuard aGuard( GetInitMutex() ); + // Increase ouer refcount ... + ++m_nRefCount; + // ... and initialize ouer data container only if it not already exist! + if( m_pDataContainer == NULL ) + { + RTL_LOGFILE_CONTEXT(aLog, "unotools ( ??? ) ::SvtSecurityOptions_Impl::ctor()"); + m_pDataContainer = new SvtSecurityOptions_Impl; + + ItemHolder1::holdConfigItem(E_SECURITYOPTIONS); + } +} + +SvtSecurityOptions::~SvtSecurityOptions() +{ + // Global access, must be guarded (multithreading!) + MutexGuard aGuard( GetInitMutex() ); + // Decrease ouer refcount. + --m_nRefCount; + // If last instance was deleted ... + // we must destroy ouer static data container! + if( m_nRefCount <= 0 ) + { + delete m_pDataContainer; + m_pDataContainer = NULL; + } +} + +sal_Bool SvtSecurityOptions::IsReadOnly( EOption eOption ) const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsReadOnly(eOption); +} + +Sequence< OUString > SvtSecurityOptions::GetSecureURLs() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->GetSecureURLs(); +} + +void SvtSecurityOptions::SetSecureURLs( const Sequence< OUString >& seqURLList ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetSecureURLs( seqURLList ); +} + +sal_Bool SvtSecurityOptions::IsSecureURL( const OUString& sURL , + const OUString& sReferer ) const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsSecureURL( sURL, sReferer ); +} + +sal_Int32 SvtSecurityOptions::GetMacroSecurityLevel() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->GetMacroSecurityLevel(); +} + +void SvtSecurityOptions::SetMacroSecurityLevel( sal_Int32 _nLevel ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetMacroSecurityLevel( _nLevel ); +} + +sal_Bool SvtSecurityOptions::IsMacroDisabled() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsMacroDisabled(); +} + +Sequence< SvtSecurityOptions::Certificate > SvtSecurityOptions::GetTrustedAuthors() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->GetTrustedAuthors(); +} + +void SvtSecurityOptions::SetTrustedAuthors( const Sequence< Certificate >& rAuthors ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetTrustedAuthors( rAuthors ); +} + +sal_Bool SvtSecurityOptions::IsTrustedAuthorsEnabled() +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsTrustedAuthorsEnabled(); +} + +bool SvtSecurityOptions::IsOptionSet( EOption eOption ) const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsOptionSet( eOption ); +} + +bool SvtSecurityOptions::SetOption( EOption eOption, bool bValue ) +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->SetOption( eOption, bValue ); +} + +bool SvtSecurityOptions::IsOptionEnabled( EOption eOption ) const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsOptionEnabled( eOption ); +} + +Mutex& SvtSecurityOptions::GetInitMutex() +{ + // Initialize static mutex only for one time! + static Mutex* pMutex = NULL; + // If these method first called (Mutex not already exist!) ... + if( pMutex == NULL ) + { + // ... we must create a new one. Protect follow code with the global mutex - + // It must be - we create a static variable! + MutexGuard aGuard( Mutex::getGlobalMutex() ); + // We must check our pointer again - because it can be that another instance of ouer class will be faster then these! + if( pMutex == NULL ) + { + // Create the new mutex and set it for return on static variable. + static Mutex aMutex; + pMutex = &aMutex; + } + } + // Return new created or already existing mutex object. + return *pMutex; +} + + + + +// xmlsec05 depricated + +EBasicSecurityMode SvtSecurityOptions_Impl::GetBasicMode() const +{ + return m_eBasicMode; +} + +void SvtSecurityOptions_Impl::SetBasicMode( EBasicSecurityMode eMode ) +{ + DBG_ASSERT(!m_bROBasicMode, "SvtSecurityOptions_Impl::SetBasicMode()\nYou tried to write on a readonly value!\n"); + if (!m_bROBasicMode && m_eBasicMode!=eMode) + { + m_eBasicMode = eMode; + SetModified(); + } +} + +sal_Bool SvtSecurityOptions_Impl::IsExecutePlugins() const +{ + return m_bExecutePlugins; +} + +void SvtSecurityOptions_Impl::SetExecutePlugins( sal_Bool bSet ) +{ + DBG_ASSERT(!m_bROExecutePlugins, "SvtSecurityOptions_Impl::SetExecutePlugins()\nYou tried to write on a readonly value!\n"); + if (!m_bROExecutePlugins && m_bExecutePlugins!=bSet) + { + m_bExecutePlugins = bSet; + SetModified(); + } +} + +sal_Bool SvtSecurityOptions_Impl::IsWarningEnabled() const +{ + return m_bWarning; +} + +void SvtSecurityOptions_Impl::SetWarningEnabled( sal_Bool bSet ) +{ + DBG_ASSERT(!m_bROWarning, "SvtSecurityOptions_Impl::SetWarningEnabled()\nYou tried to write on a readonly value!\n"); + if (!m_bROWarning && m_bWarning!=bSet) + { + m_bWarning = bSet; + SetModified(); + } +} + +sal_Bool SvtSecurityOptions_Impl::IsConfirmationEnabled() const +{ + return m_bConfirmation; +} + +void SvtSecurityOptions_Impl::SetConfirmationEnabled( sal_Bool bSet ) +{ + DBG_ASSERT(!m_bROConfirmation, "SvtSecurityOptions_Impl::SetConfirmationEnabled()\nYou tried to write on a readonly value!\n"); + if (!m_bROConfirmation && m_bConfirmation!=bSet) + { + m_bConfirmation = bSet; + SetModified(); + } +} + + +sal_Bool SvtSecurityOptions::IsExecutePlugins() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsExecutePlugins(); +} + +void SvtSecurityOptions::SetExecutePlugins( sal_Bool bSet ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetExecutePlugins( bSet ); +} + +sal_Bool SvtSecurityOptions::IsWarningEnabled() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsWarningEnabled(); +} + +void SvtSecurityOptions::SetWarningEnabled( sal_Bool bSet ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetWarningEnabled( bSet ); +} + +sal_Bool SvtSecurityOptions::IsConfirmationEnabled() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->IsConfirmationEnabled(); +} + +void SvtSecurityOptions::SetConfirmationEnabled( sal_Bool bSet ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetConfirmationEnabled( bSet ); +} + +void SvtSecurityOptions::SetBasicMode( EBasicSecurityMode eMode ) +{ + MutexGuard aGuard( GetInitMutex() ); + m_pDataContainer->SetBasicMode( eMode ); +} + +EBasicSecurityMode SvtSecurityOptions::GetBasicMode() const +{ + MutexGuard aGuard( GetInitMutex() ); + return m_pDataContainer->GetBasicMode(); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |