summaryrefslogtreecommitdiff
path: root/unotools
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2021-07-25 21:35:05 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2021-07-26 14:25:35 +0200
commit6ed8c5a0f19901ab413c6610649326b2475c3a8c (patch)
tree948037d1a61f9e88547b88e107ba6e8a306c3833 /unotools
parenta23b44fd9f0119f7ea3523e32875f55c1a07c1cd (diff)
use officecfg for security options
Change-Id: I9d91fd5b260b82e05aac6567143386742953ecf6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/119486 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'unotools')
-rw-r--r--unotools/source/config/configitem.cxx145
-rw-r--r--unotools/source/config/itemholder1.cxx4
-rw-r--r--unotools/source/config/securityoptions.cxx956
-rw-r--r--unotools/source/misc/mediadescriptor.cxx2
4 files changed, 257 insertions, 850 deletions
diff --git a/unotools/source/config/configitem.cxx b/unotools/source/config/configitem.cxx
index 28c4159e21ad..bb77ac3d40b1 100644
--- a/unotools/source/config/configitem.cxx
+++ b/unotools/source/config/configitem.cxx
@@ -846,95 +846,102 @@ bool ConfigItem::SetSetProperties(
const OUString& rNode, const Sequence< PropertyValue >& rValues)
{
ValueCounter_Impl aCounter(m_nInValueChange);
- bool bRet = true;
Reference<XHierarchicalNameAccess> xHierarchyAccess = GetTree();
- if(xHierarchyAccess.is())
+ if(!xHierarchyAccess.is())
+ return true;
+ return SetSetProperties(xHierarchyAccess, rNode, rValues);
+}
+
+// Add or change properties
+bool ConfigItem::SetSetProperties(
+ css::uno::Reference<css::container::XHierarchicalNameAccess> const & xHierarchyAccess,
+ const OUString& rNode, const Sequence< PropertyValue >& rValues)
+{
+ bool bRet = true;
+ Reference<XChangesBatch> xBatch(xHierarchyAccess, UNO_QUERY);
+ try
{
- Reference<XChangesBatch> xBatch(xHierarchyAccess, UNO_QUERY);
- try
+ Reference<XNameContainer> xCont;
+ if(!rNode.isEmpty())
{
- Reference<XNameContainer> xCont;
- if(!rNode.isEmpty())
- {
- Any aNode = xHierarchyAccess->getByHierarchicalName(rNode);
- aNode >>= xCont;
- }
- else
- xCont.set(xHierarchyAccess, UNO_QUERY);
- if(!xCont.is())
- return false;
+ Any aNode = xHierarchyAccess->getByHierarchicalName(rNode);
+ aNode >>= xCont;
+ }
+ else
+ xCont.set(xHierarchyAccess, UNO_QUERY);
+ if(!xCont.is())
+ return false;
- Reference<XSingleServiceFactory> xFac(xCont, UNO_QUERY);
+ Reference<XSingleServiceFactory> xFac(xCont, UNO_QUERY);
- if(xFac.is())
- {
- const Sequence< OUString > aSubNodeNames = lcl_extractSetPropertyNames(rValues, rNode);
+ if(xFac.is())
+ {
+ const Sequence< OUString > aSubNodeNames = lcl_extractSetPropertyNames(rValues, rNode);
- for(const auto& rSubNodeName : aSubNodeNames)
- {
- if(!xCont->hasByName(rSubNodeName))
- {
- Reference<XInterface> xInst = xFac->createInstance();
- Any aVal; aVal <<= xInst;
- xCont->insertByName(rSubNodeName, aVal);
- }
- //set values
- }
- try
- {
- xBatch->commitChanges();
- }
- catch (css::uno::Exception &)
+ for(const auto& rSubNodeName : aSubNodeNames)
+ {
+ if(!xCont->hasByName(rSubNodeName))
{
- TOOLS_WARN_EXCEPTION("unotools.config", "Exception from commitChanges()");
+ Reference<XInterface> xInst = xFac->createInstance();
+ Any aVal; aVal <<= xInst;
+ xCont->insertByName(rSubNodeName, aVal);
}
+ //set values
+ }
+ try
+ {
+ xBatch->commitChanges();
+ }
+ catch (css::uno::Exception &)
+ {
+ TOOLS_WARN_EXCEPTION("unotools.config", "Exception from commitChanges()");
+ }
- const PropertyValue* pProperties = rValues.getConstArray();
+ const PropertyValue* pProperties = rValues.getConstArray();
- Sequence< OUString > aSetNames(rValues.getLength());
- OUString* pSetNames = aSetNames.getArray();
+ Sequence< OUString > aSetNames(rValues.getLength());
+ OUString* pSetNames = aSetNames.getArray();
- Sequence< Any> aSetValues(rValues.getLength());
- Any* pSetValues = aSetValues.getArray();
+ Sequence< Any> aSetValues(rValues.getLength());
+ Any* pSetValues = aSetValues.getArray();
- bool bEmptyNode = rNode.isEmpty();
- for(sal_Int32 k = 0; k < rValues.getLength(); k++)
- {
- pSetNames[k] = pProperties[k].Name.copy( bEmptyNode ? 1 : 0);
- pSetValues[k] = pProperties[k].Value;
- }
- bRet = PutProperties(aSetNames, aSetValues);
+ bool bEmptyNode = rNode.isEmpty();
+ for(sal_Int32 k = 0; k < rValues.getLength(); k++)
+ {
+ pSetNames[k] = pProperties[k].Name.copy( bEmptyNode ? 1 : 0);
+ pSetValues[k] = pProperties[k].Value;
}
- else
+ bRet = PutProperties(xHierarchyAccess, aSetNames, aSetValues, /*bAllLocales*/false);
+ }
+ else
+ {
+ //if no factory is available then the node contains basic data elements
+ for(const PropertyValue& rValue : rValues)
{
- //if no factory is available then the node contains basic data elements
- for(const PropertyValue& rValue : rValues)
+ try
{
- try
- {
- OUString sSubNode = lcl_extractSetPropertyName( rValue.Name, rNode );
+ OUString sSubNode = lcl_extractSetPropertyName( rValue.Name, rNode );
- if(xCont->hasByName(sSubNode))
- xCont->replaceByName(sSubNode, rValue.Value);
- else
- xCont->insertByName(sSubNode, rValue.Value);
+ if(xCont->hasByName(sSubNode))
+ xCont->replaceByName(sSubNode, rValue.Value);
+ else
+ xCont->insertByName(sSubNode, rValue.Value);
- OSL_ENSURE( xHierarchyAccess->hasByHierarchicalName(rValue.Name),
- "Invalid config path" );
- }
- catch (css::uno::Exception &)
- {
- TOOLS_WARN_EXCEPTION("unotools.config", "Exception from insert/replaceByName()");
- }
+ OSL_ENSURE( xHierarchyAccess->hasByHierarchicalName(rValue.Name),
+ "Invalid config path" );
+ }
+ catch (css::uno::Exception &)
+ {
+ TOOLS_WARN_EXCEPTION("unotools.config", "Exception from insert/replaceByName()");
}
- xBatch->commitChanges();
}
+ xBatch->commitChanges();
}
- catch (const Exception&)
- {
- TOOLS_WARN_EXCEPTION("unotools.config", "Exception from SetSetProperties");
- bRet = false;
- }
+ }
+ catch (const Exception&)
+ {
+ TOOLS_WARN_EXCEPTION("unotools.config", "Exception from SetSetProperties");
+ bRet = false;
}
return bRet;
}
diff --git a/unotools/source/config/itemholder1.cxx b/unotools/source/config/itemholder1.cxx
index cad18b90e2ed..7183ea2e12f9 100644
--- a/unotools/source/config/itemholder1.cxx
+++ b/unotools/source/config/itemholder1.cxx
@@ -149,10 +149,6 @@ void ItemHolder1::impl_newItem(TItemInfo& rItem)
rItem.pItem.reset( new SvtPathOptions() );
break;
- case EItem::SecurityOptions :
- rItem.pItem.reset( new SvtSecurityOptions() );
- break;
-
case EItem::ViewOptionsDialog :
rItem.pItem.reset( new SvtViewOptions(EViewType::Dialog, OUString()) );
break;
diff --git a/unotools/source/config/securityoptions.cxx b/unotools/source/config/securityoptions.cxx
index ff10bcb584b9..8414167e9af0 100644
--- a/unotools/source/config/securityoptions.cxx
+++ b/unotools/source/config/securityoptions.cxx
@@ -30,311 +30,169 @@
#include <tools/urlobj.hxx>
#include <unotools/pathoptions.hxx>
-
-#include "itemholder1.hxx"
+#include <officecfg/Office/Common.hxx>
// namespaces
-using namespace ::utl;
-using namespace ::osl;
using namespace ::com::sun::star::uno;
-#define ROOTNODE_SECURITY "Office.Common/Security/Scripting"
-#define DEFAULT_SECUREURL Sequence< OUString >()
-#define DEFAULT_TRUSTEDAUTHORS std::vector< SvtSecurityOptions::Certificate >()
-
-#define PROPERTYNAME_SECUREURL u"SecureURL"
-#define PROPERTYNAME_DOCWARN_SAVEORSEND u"WarnSaveOrSendDoc"
-#define PROPERTYNAME_DOCWARN_SIGNING u"WarnSignDoc"
-#define PROPERTYNAME_DOCWARN_PRINT u"WarnPrintDoc"
-#define PROPERTYNAME_DOCWARN_CREATEPDF u"WarnCreatePDF"
-#define PROPERTYNAME_DOCWARN_REMOVEPERSONALINFO u"RemovePersonalInfoOnSaving"
-#define PROPERTYNAME_DOCWARN_RECOMMENDPASSWORD u"RecommendPasswordProtection"
-#define PROPERTYNAME_CTRLCLICK_HYPERLINK u"HyperlinksWithCtrlClick"
-#define PROPERTYNAME_BLOCKUNTRUSTEDREFERERLINKS u"BlockUntrustedRefererLinks"
-#define PROPERTYNAME_MACRO_SECLEVEL u"MacroSecurityLevel"
#define PROPERTYNAME_MACRO_TRUSTEDAUTHORS u"TrustedAuthors"
-#define PROPERTYNAME_MACRO_DISABLE u"DisableMacrosExecution"
#define PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME u"SubjectName"
#define PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER u"SerialNumber"
#define PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA u"RawData"
-#define PROPERTYHANDLE_SECUREURL 0
-
-#define PROPERTYHANDLE_DOCWARN_SAVEORSEND 1
-#define PROPERTYHANDLE_DOCWARN_SIGNING 2
-#define PROPERTYHANDLE_DOCWARN_PRINT 3
-#define PROPERTYHANDLE_DOCWARN_CREATEPDF 4
-#define PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO 5
-#define PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD 6
-#define PROPERTYHANDLE_CTRLCLICK_HYPERLINK 7
-#define PROPERTYHANDLE_BLOCKUNTRUSTEDREFERERLINKS 8
-#define PROPERTYHANDLE_MACRO_SECLEVEL 9
-#define PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS 10
-#define PROPERTYHANDLE_MACRO_DISABLE 11
-
-#define PROPERTYHANDLE_INVALID -1
-
-#define CFG_READONLY_DEFAULT false
-
-// private declarations!
-class SvtSecurityOptions_Impl : public ConfigItem
+namespace SvtSecurityOptions
{
- private:
- virtual void ImplCommit() override;
-
- // public methods
-
- public:
-
- // constructor / destructor
-
- SvtSecurityOptions_Impl();
- virtual ~SvtSecurityOptions_Impl() override;
-
- // override methods of baseclass
-
- /*-****************************************************************************************************
- @short called for notify of configmanager
- @descr This 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.
- *//*-*****************************************************************************************************/
-
- virtual void Notify( const Sequence< OUString >& seqPropertyNames ) override;
-
- // public interface
-
- bool IsReadOnly ( SvtSecurityOptions::EOption eOption ) const;
-
- const Sequence< OUString >& GetSecureURLs( ) const { return m_seqSecureURLs;}
- void SetSecureURLs ( const Sequence< OUString >& seqURLList );
- inline sal_Int32 GetMacroSecurityLevel ( ) const;
- void SetMacroSecurityLevel ( sal_Int32 _nLevel );
-
- inline bool IsMacroDisabled ( ) const;
-
- const std::vector< SvtSecurityOptions::Certificate >& GetTrustedAuthors() const { return m_seqTrustedAuthors;}
- void SetTrustedAuthors ( const std::vector< SvtSecurityOptions::Certificate >& rAuthors );
-
- bool IsOptionSet ( SvtSecurityOptions::EOption eOption ) const;
- void SetOption ( SvtSecurityOptions::EOption eOption, bool bValue );
- bool IsOptionEnabled ( SvtSecurityOptions::EOption eOption ) const;
-
-
- void SetProperty( sal_Int32 nHandle, const Any& rValue, bool bReadOnly );
- void LoadAuthors();
- static sal_Int32 GetHandle( std::u16string_view rPropertyName );
- bool GetOption( SvtSecurityOptions::EOption eOption, bool*& rpValue, bool*& rpRO );
-
- /*-****************************************************************************************************
- @short return list of key names of our configuration management which represent our module tree
- @descr This method returns a static const list of key names. We need it to get needed values from our
- configuration management.
- @return A list of needed configuration keys is returned.
- *//*-*****************************************************************************************************/
- static Sequence< OUString > GetPropertyNames();
-
- Sequence< OUString > m_seqSecureURLs;
- bool m_bSaveOrSend;
- bool m_bSigning;
- bool m_bPrint;
- bool m_bCreatePDF;
- bool m_bRemoveInfo;
- bool m_bRecommendPwd;
- bool m_bCtrlClickHyperlink;
- bool m_bBlockUntrustedRefererLinks;
- sal_Int32 m_nSecLevel;
- std::vector< SvtSecurityOptions::Certificate > m_seqTrustedAuthors;
- bool m_bDisableMacros;
-
- bool m_bROSecureURLs;
- bool m_bROSaveOrSend;
- bool m_bROSigning;
- bool m_bROPrint;
- bool m_bROCreatePDF;
- bool m_bRORemoveInfo;
- bool m_bRORecommendPwd;
- bool m_bROCtrlClickHyperlink;
- bool m_bROBlockUntrustedRefererLinks;
- bool m_bROSecLevel;
- bool m_bROTrustedAuthors;
- bool m_bRODisableMacros;
-};
-
-// constructor
-
-SvtSecurityOptions_Impl::SvtSecurityOptions_Impl()
- :ConfigItem ( ROOTNODE_SECURITY )
- ,m_seqSecureURLs ( DEFAULT_SECUREURL )
- ,m_bSaveOrSend ( true )
- ,m_bSigning ( true )
- ,m_bPrint ( true )
- ,m_bCreatePDF ( true )
- ,m_bRemoveInfo ( true )
- ,m_bRecommendPwd(false)
- ,m_bCtrlClickHyperlink(false)
- ,m_bBlockUntrustedRefererLinks(false)
- ,m_nSecLevel ( 1 )
- ,m_seqTrustedAuthors ( DEFAULT_TRUSTEDAUTHORS )
- ,m_bDisableMacros ( 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_bRORecommendPwd(CFG_READONLY_DEFAULT)
- ,m_bROCtrlClickHyperlink(CFG_READONLY_DEFAULT)
- ,m_bROBlockUntrustedRefererLinks(CFG_READONLY_DEFAULT)
- ,m_bROSecLevel ( CFG_READONLY_DEFAULT )
- ,m_bROTrustedAuthors ( CFG_READONLY_DEFAULT )
- ,m_bRODisableMacros ( true ) // currently is not intended to be changed
+bool IsReadOnly( EOption eOption )
{
- 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!
- assert( seqNames.getLength() == seqValues.getLength() && "I miss some values of configuration keys!" );
-
- // 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();
+ bool bReadonly;
+ switch(eOption)
+ {
+ case SvtSecurityOptions::EOption::SecureUrls :
+ bReadonly = officecfg::Office::Common::Security::Scripting::SecureURL::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnSaveOrSend:
+ bReadonly = officecfg::Office::Common::Security::Scripting::WarnSaveOrSendDoc::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnSigning:
+ bReadonly = officecfg::Office::Common::Security::Scripting::WarnSignDoc::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnPrint:
+ bReadonly = officecfg::Office::Common::Security::Scripting::WarnPrintDoc::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnCreatePdf:
+ bReadonly = officecfg::Office::Common::Security::Scripting::WarnCreatePDF::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo:
+ bReadonly = officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::DocWarnRecommendPassword:
+ bReadonly = officecfg::Office::Common::Security::Scripting::RecommendPasswordProtection::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::MacroSecLevel:
+ bReadonly = officecfg::Office::Common::Security::Scripting::MacroSecurityLevel::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::MacroTrustedAuthors:
+ bReadonly = false; // TODO? officecfg::Office::Common::Security::Scripting::TrustedAuthors::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::CtrlClickHyperlink:
+ bReadonly = officecfg::Office::Common::Security::Scripting::HyperlinksWithCtrlClick::isReadOnly();
+ break;
+ case SvtSecurityOptions::EOption::BlockUntrustedRefererLinks:
+ bReadonly = officecfg::Office::Common::Security::Scripting::BlockUntrustedRefererLinks::isReadOnly();
+ break;
- // Enable notification mechanism of our baseclass.
- // We need it to get information about changes outside these class on our used configuration keys!*/
+ default:
+ assert(false);
+ bReadonly = true;
+ }
- EnableNotification( seqNames );
+ return bReadonly;
}
-// destructor
-
-SvtSecurityOptions_Impl::~SvtSecurityOptions_Impl()
+std::vector< OUString > GetSecureURLs()
{
- assert(!IsModified()); // should have been committed
+ if (utl::ConfigManager::IsFuzzing())
+ return {};
+ std::vector<OUString> aRet = comphelper::sequenceToContainer<std::vector<OUString>>(
+ officecfg::Office::Common::Security::Scripting::SecureURL::get());
+ SvtPathOptions aOpt;
+ std::transform(aRet.begin(), aRet.end(), aRet.begin(),
+ [&aOpt](const OUString& rUrl) -> OUString { return aOpt.SubstituteVariable( rUrl ); });
+ return aRet;
}
-void SvtSecurityOptions_Impl::SetProperty( sal_Int32 nProperty, const Any& rValue, bool bRO )
+void SetSecureURLs( const std::vector< OUString >& urlList )
{
- switch( nProperty )
- {
- case PROPERTYHANDLE_SECUREURL:
- {
- m_seqSecureURLs.realloc( 0 );
- rValue >>= m_seqSecureURLs;
- if (!utl::ConfigManager::IsFuzzing())
- {
- SvtPathOptions aOpt;
- std::transform(m_seqSecureURLs.begin(), m_seqSecureURLs.end(), m_seqSecureURLs.begin(),
- [&aOpt](const OUString& rUrl) -> OUString { return aOpt.SubstituteVariable( rUrl ); });
- }
- 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;
+// DBG_ASSERT(!officecfg::SecureURL::isReadOnly(), "SvtSecurityOptions_Impl::SetSecureURLs()\nYou tried to write on a readonly value!\n");
+// if (officecfg::SecureURL::isReadOnly())
+// return;
+ std::vector< OUString > lURLs( urlList );
+ SvtPathOptions aOpt;
+ std::transform(lURLs.begin(), lURLs.end(), lURLs.begin(),
+ [&aOpt](const OUString& rUrl) -> OUString { return aOpt.UseVariable( rUrl ); });
+ std::shared_ptr<comphelper::ConfigurationChanges> xChanges = comphelper::ConfigurationChanges::create();
+ officecfg::Office::Common::Security::Scripting::SecureURL::set(comphelper::containerToSequence(lURLs), xChanges);
+ xChanges->commit();
+}
- case PROPERTYHANDLE_DOCWARN_CREATEPDF:
- {
- rValue >>= m_bCreatePDF;
- m_bROCreatePDF = bRO;
+bool isSecureMacroUri(
+ OUString const & uri, OUString const & referer)
+{
+ switch (INetURLObject(uri).GetProtocol()) {
+ case INetProtocol::Macro:
+ if (uri.startsWithIgnoreAsciiCase("macro:///")) {
+ // Denotes an App-BASIC macro (see SfxMacroLoader::loadMacro), which
+ // is considered safe:
+ return true;
}
- break;
+ [[fallthrough]];
+ case INetProtocol::Slot:
+ return referer.equalsIgnoreAsciiCase("private:user")
+ || isTrustedLocationUri(referer);
+ default:
+ return true;
+ }
+}
- case PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO:
- {
- rValue >>= m_bRemoveInfo;
- m_bRORemoveInfo = bRO;
- }
- break;
+bool isUntrustedReferer(OUString const & referer)
+{
+ return IsOptionSet(EOption::BlockUntrustedRefererLinks)
+ && !(referer.isEmpty() || referer.startsWithIgnoreAsciiCase("private:")
+ || isTrustedLocationUri(referer));
+}
- case PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD:
+bool isTrustedLocationUri(OUString const & uri)
+{
+ for (const auto & url : GetSecureURLs())
+ {
+ if (utl::UCBContentHelper::IsSubPath(url, uri))
{
- rValue >>= m_bRecommendPwd;
- m_bRORecommendPwd = bRO;
+ return true;
}
- break;
+ }
+ return false;
+}
- case PROPERTYHANDLE_CTRLCLICK_HYPERLINK:
- {
- rValue >>= m_bCtrlClickHyperlink;
- m_bROCtrlClickHyperlink = bRO;
- }
- break;
+bool isTrustedLocationUriForUpdatingLinks(OUString const & uri)
+{
+ return GetMacroSecurityLevel() == 0 || uri.isEmpty()
+ || uri.startsWithIgnoreAsciiCase("private:")
+ || isTrustedLocationUri(uri);
+}
- case PROPERTYHANDLE_BLOCKUNTRUSTEDREFERERLINKS:
- {
- rValue >>= m_bBlockUntrustedRefererLinks;
- m_bROBlockUntrustedRefererLinks = bRO;
- }
- break;
+sal_Int32 GetMacroSecurityLevel()
+{
+ return officecfg::Office::Common::Security::Scripting::MacroSecurityLevel::get();
+}
- case PROPERTYHANDLE_MACRO_SECLEVEL:
- {
- rValue >>= m_nSecLevel;
- m_bROSecLevel = bRO;
- }
- break;
+void SetMacroSecurityLevel( sal_Int32 _nLevel )
+{
+ if( officecfg::Office::Common::Security::Scripting::MacroSecurityLevel::isReadOnly() )
+ return;
- case PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS:
- {
- // don't care about value here...
- m_bROTrustedAuthors = bRO;
- }
- break;
+ if( _nLevel > 3 || _nLevel < 0 )
+ _nLevel = 3;
- case PROPERTYHANDLE_MACRO_DISABLE:
- {
- rValue >>= m_bDisableMacros;
- m_bRODisableMacros = bRO;
- }
- break;
+ std::shared_ptr<comphelper::ConfigurationChanges> xChanges = comphelper::ConfigurationChanges::create();
+ officecfg::Office::Common::Security::Scripting::MacroSecurityLevel::set(_nLevel, xChanges);
+ xChanges->commit();
+}
-#if OSL_DEBUG_LEVEL > 0
- default:
- assert(false && "Unknown property!");
-#endif
- }
+bool IsMacroDisabled()
+{
+ return officecfg::Office::Common::Security::Scripting::DisableMacrosExecution::get();
}
-void SvtSecurityOptions_Impl::LoadAuthors()
+std::vector< SvtSecurityOptions::Certificate > GetTrustedAuthors()
{
- m_seqTrustedAuthors.clear(); // first clear
- const Sequence< OUString > lAuthors = GetNodeNames( PROPERTYNAME_MACRO_TRUSTEDAUTHORS );
- sal_Int32 c1 = lAuthors.getLength();
+ Reference<css::container::XHierarchicalNameAccess> xHierarchyAccess = utl::ConfigManager::acquireTree(u"Office.Common/Security/Scripting");
+ const Sequence< OUString > lAuthors = utl::ConfigItem::GetNodeNames( xHierarchyAccess, PROPERTYNAME_MACRO_TRUSTEDAUTHORS, utl::ConfigNameFormat::LocalPath );
+ sal_Int32 c1 = lAuthors.getLength();
if( !c1 )
- return;
+ return {};
sal_Int32 c2 = c1 * 3; // 3 Properties inside Struct TrustedAuthor
Sequence< OUString > lAllAuthors( c2 );
@@ -351,11 +209,11 @@ void SvtSecurityOptions_Impl::LoadAuthors()
++i2;
}
- Sequence< Any > lValues = GetProperties( lAllAuthors );
+ Sequence< Any > lValues = utl::ConfigItem::GetProperties( xHierarchyAccess, lAllAuthors, /*bAllLocales*/false );
if( lValues.getLength() != c2 )
- return;
+ return {};
- std::vector< SvtSecurityOptions::Certificate > v;
+ std::vector< SvtSecurityOptions::Certificate > aTrustedAuthors;
SvtSecurityOptions::Certificate aCert;
i2 = 0;
for( sal_Int32 i1 = 0; i1 < c1; ++i1 )
@@ -372,571 +230,117 @@ void SvtSecurityOptions_Impl::LoadAuthors()
// have been observed in the wild (fdo#55019):
if( !aCert.RawData.isEmpty() )
{
- v.push_back( aCert );
+ aTrustedAuthors.push_back( aCert );
}
}
- m_seqTrustedAuthors = v;
+ return aTrustedAuthors;
}
-sal_Int32 SvtSecurityOptions_Impl::GetHandle( std::u16string_view rName )
+void SetTrustedAuthors( const std::vector< Certificate >& rAuthors )
{
- sal_Int32 nHandle;
-
- if( rName == PROPERTYNAME_SECUREURL )
- nHandle = PROPERTYHANDLE_SECUREURL;
- else if( rName == PROPERTYNAME_DOCWARN_SAVEORSEND )
- nHandle = PROPERTYHANDLE_DOCWARN_SAVEORSEND;
- else if( rName == PROPERTYNAME_DOCWARN_SIGNING )
- nHandle = PROPERTYHANDLE_DOCWARN_SIGNING;
- else if( rName == PROPERTYNAME_DOCWARN_PRINT )
- nHandle = PROPERTYHANDLE_DOCWARN_PRINT;
- else if( rName == PROPERTYNAME_DOCWARN_CREATEPDF )
- nHandle = PROPERTYHANDLE_DOCWARN_CREATEPDF;
- else if( rName == PROPERTYNAME_DOCWARN_REMOVEPERSONALINFO )
- nHandle = PROPERTYHANDLE_DOCWARN_REMOVEPERSONALINFO;
- else if( rName == PROPERTYNAME_DOCWARN_RECOMMENDPASSWORD )
- nHandle = PROPERTYHANDLE_DOCWARN_RECOMMENDPASSWORD;
- else if( rName == PROPERTYNAME_CTRLCLICK_HYPERLINK )
- nHandle = PROPERTYHANDLE_CTRLCLICK_HYPERLINK;
- else if( rName == PROPERTYNAME_BLOCKUNTRUSTEDREFERERLINKS )
- nHandle = PROPERTYHANDLE_BLOCKUNTRUSTEDREFERERLINKS;
- else if( rName == PROPERTYNAME_MACRO_SECLEVEL )
- nHandle = PROPERTYHANDLE_MACRO_SECLEVEL;
- else if( rName == PROPERTYNAME_MACRO_TRUSTEDAUTHORS )
- nHandle = PROPERTYHANDLE_MACRO_TRUSTEDAUTHORS;
- else if( rName == PROPERTYNAME_MACRO_DISABLE )
- nHandle = PROPERTYHANDLE_MACRO_DISABLE;
-
- else
- nHandle = PROPERTYHANDLE_INVALID;
-
- return nHandle;
+// DBG_ASSERT(!m_bROTrustedAuthors, "SvtSecurityOptions_Impl::SetTrustedAuthors()\nYou tried to write on a readonly value!\n");
+// if( m_bROTrustedAuthors )
+// return;
+
+ Reference<css::container::XHierarchicalNameAccess> xHierarchyAccess = utl::ConfigManager::acquireTree(u"Office.Common/Security/Scripting");
+ sal_Int32 nCnt = rAuthors.size();
+ for( sal_Int32 i = 0; i < nCnt; ++i )
+ {
+ OUString aPrefix(
+ PROPERTYNAME_MACRO_TRUSTEDAUTHORS "/a"
+ + OUString::number(i) + "/");
+ Sequence< css::beans::PropertyValue > lPropertyValues( 3 );
+ lPropertyValues[ 0 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME;
+ lPropertyValues[ 0 ].Value <<= rAuthors[ i ].SubjectName;
+ lPropertyValues[ 1 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER;
+ lPropertyValues[ 1 ].Value <<= rAuthors[ i ].SerialNumber;
+ lPropertyValues[ 2 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA;
+ lPropertyValues[ 2 ].Value <<= rAuthors[ i ].RawData;
+
+ utl::ConfigItem::SetSetProperties( xHierarchyAccess, PROPERTYNAME_MACRO_TRUSTEDAUTHORS, lPropertyValues );
+ }
}
-bool SvtSecurityOptions_Impl::GetOption( SvtSecurityOptions::EOption eOption, bool*& rpValue, bool*& rpRO )
+bool IsOptionSet( EOption eOption )
{
- switch( eOption )
+ bool bSet = false;
+ switch(eOption)
{
case SvtSecurityOptions::EOption::DocWarnSaveOrSend:
- rpValue = &m_bSaveOrSend;
- rpRO = &m_bROSaveOrSend;
+ bSet = officecfg::Office::Common::Security::Scripting::WarnSaveOrSendDoc::get();
break;
case SvtSecurityOptions::EOption::DocWarnSigning:
- rpValue = &m_bSigning;
- rpRO = &m_bROSigning;
+ bSet = officecfg::Office::Common::Security::Scripting::WarnSignDoc::get();
break;
case SvtSecurityOptions::EOption::DocWarnPrint:
- rpValue = &m_bPrint;
- rpRO = &m_bROPrint;
+ bSet = officecfg::Office::Common::Security::Scripting::WarnPrintDoc::get();
break;
case SvtSecurityOptions::EOption::DocWarnCreatePdf:
- rpValue = &m_bCreatePDF;
- rpRO = &m_bROCreatePDF;
+ bSet = officecfg::Office::Common::Security::Scripting::WarnCreatePDF::get();
break;
case SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo:
- rpValue = &m_bRemoveInfo;
- rpRO = &m_bRORemoveInfo;
+ bSet = officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::get();
break;
case SvtSecurityOptions::EOption::DocWarnRecommendPassword:
- rpValue = &m_bRecommendPwd;
- rpRO = &m_bRORecommendPwd;
+ bSet = officecfg::Office::Common::Security::Scripting::RecommendPasswordProtection::get();
break;
case SvtSecurityOptions::EOption::CtrlClickHyperlink:
- rpValue = &m_bCtrlClickHyperlink;
- rpRO = &m_bROCtrlClickHyperlink;
+ bSet = officecfg::Office::Common::Security::Scripting::HyperlinksWithCtrlClick::get();
break;
case SvtSecurityOptions::EOption::BlockUntrustedRefererLinks:
- rpValue = &m_bBlockUntrustedRefererLinks;
- rpRO = &m_bROBlockUntrustedRefererLinks;
+ bSet = officecfg::Office::Common::Security::Scripting::BlockUntrustedRefererLinks::get();
break;
+
default:
- rpValue = nullptr;
- rpRO = nullptr;
- break;
+ assert(false);
}
- return rpValue != nullptr;
+ return bSet;
}
-void SvtSecurityOptions_Impl::Notify( const Sequence< OUString >& seqPropertyNames )
+void SetOption( EOption eOption, bool bValue )
{
- // 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 corresponding 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::ImplCommit()
-{
- // 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;
- std::transform(lURLs.begin(), lURLs.end(), lURLs.begin(),
- [&aOpt](const OUString& rUrl) -> OUString { return aOpt.UseVariable( rUrl ); });
- 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_BLOCKUNTRUSTEDREFERERLINKS:
- {
- bDone = !m_bROBlockUntrustedRefererLinks;
- if( bDone )
- lValues[ nRealCount ] <<= m_bBlockUntrustedRefererLinks;
- }
- 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.size();
- if( nCnt )
- {
- for( sal_Int32 i = 0; i < nCnt; ++i )
- {
- OUString aPrefix(
- PROPERTYNAME_MACRO_TRUSTEDAUTHORS "/a"
- + OUString::number(i) + "/");
- Sequence< css::beans::PropertyValue > lPropertyValues( 3 );
- lPropertyValues[ 0 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SUBJECTNAME;
- lPropertyValues[ 0 ].Value <<= m_seqTrustedAuthors[ i ].SubjectName;
- lPropertyValues[ 1 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_SERIALNUMBER;
- lPropertyValues[ 1 ].Value <<= m_seqTrustedAuthors[ i ].SerialNumber;
- lPropertyValues[ 2 ].Name = aPrefix + PROPERTYNAME_TRUSTEDAUTHOR_RAWDATA;
- lPropertyValues[ 2 ].Value <<= m_seqTrustedAuthors[ i ].RawData;
-
- 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 ] <<= m_bDisableMacros;
- }
- break;
-
- default:
- bDone = false;
- }
-
- if( bDone )
- {
- lNames[ nRealCount ] = lOrgNames[ nProperty ];
- ++nRealCount;
- }
- }
- // Set properties in configuration.
- lNames.realloc(nRealCount);
- lValues.realloc(nRealCount);
- PutProperties( lNames, lValues );
-}
-
-bool SvtSecurityOptions_Impl::IsReadOnly( SvtSecurityOptions::EOption eOption ) const
-{
- bool bReadonly;
+ std::shared_ptr<comphelper::ConfigurationChanges> xChanges = comphelper::ConfigurationChanges::create();
switch(eOption)
{
- case SvtSecurityOptions::EOption::SecureUrls :
- bReadonly = m_bROSecureURLs;
- break;
case SvtSecurityOptions::EOption::DocWarnSaveOrSend:
- bReadonly = m_bROSaveOrSend;
+ officecfg::Office::Common::Security::Scripting::WarnSaveOrSendDoc::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::DocWarnSigning:
- bReadonly = m_bROSigning;
+ officecfg::Office::Common::Security::Scripting::WarnSignDoc::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::DocWarnPrint:
- bReadonly = m_bROPrint;
+ officecfg::Office::Common::Security::Scripting::WarnPrintDoc::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::DocWarnCreatePdf:
- bReadonly = m_bROCreatePDF;
+ officecfg::Office::Common::Security::Scripting::WarnCreatePDF::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo:
- bReadonly = m_bRORemoveInfo;
+ officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::DocWarnRecommendPassword:
- bReadonly = m_bRORecommendPwd;
- break;
- case SvtSecurityOptions::EOption::MacroSecLevel:
- bReadonly = m_bROSecLevel;
- break;
- case SvtSecurityOptions::EOption::MacroTrustedAuthors:
- bReadonly = m_bROTrustedAuthors;
+ officecfg::Office::Common::Security::Scripting::RecommendPasswordProtection::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::CtrlClickHyperlink:
- bReadonly = m_bROCtrlClickHyperlink;
+ officecfg::Office::Common::Security::Scripting::HyperlinksWithCtrlClick::set(bValue, xChanges);
break;
case SvtSecurityOptions::EOption::BlockUntrustedRefererLinks:
- bReadonly = m_bROBlockUntrustedRefererLinks;
+ officecfg::Office::Common::Security::Scripting::BlockUntrustedRefererLinks::set(bValue, xChanges);
break;
default:
- bReadonly = true;
- }
-
- return bReadonly;
-}
-
-
-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();
- }
-}
-
-inline sal_Int32 SvtSecurityOptions_Impl::GetMacroSecurityLevel() const
-{
- return m_nSecLevel;
-}
-
-inline 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();
- }
- }
-}
-
-
-void SvtSecurityOptions_Impl::SetTrustedAuthors( const std::vector< 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();
- }
-}
-
-bool SvtSecurityOptions_Impl::IsOptionSet( SvtSecurityOptions::EOption eOption ) const
-{
- bool* pValue;
- bool* pRO;
- bool bRet = false;
-
- if( const_cast< SvtSecurityOptions_Impl* >( this )->GetOption( eOption, pValue, pRO ) )
- bRet = *pValue;
-
- return bRet;
-}
-
-void SvtSecurityOptions_Impl::SetOption( SvtSecurityOptions::EOption eOption, bool bValue )
-{
- bool* pValue;
- bool* pRO;
-
- if( GetOption( eOption, pValue, pRO ) && !*pRO && *pValue != bValue)
- {
- *pValue = bValue;
- SetModified();
- }
-}
-
-bool SvtSecurityOptions_Impl::IsOptionEnabled( SvtSecurityOptions::EOption eOption ) const
-{
- bool* pValue;
- bool* pRO;
- bool bRet = false;
-
- if( const_cast< SvtSecurityOptions_Impl* >( this )->GetOption( eOption, pValue, pRO ) )
- bRet = !*pRO;
-
- return bRet;
-}
-
-Sequence< OUString > SvtSecurityOptions_Impl::GetPropertyNames()
-{
- return Sequence< OUString >
- {
- PROPERTYNAME_SECUREURL,
- PROPERTYNAME_DOCWARN_SAVEORSEND,
- PROPERTYNAME_DOCWARN_SIGNING,
- PROPERTYNAME_DOCWARN_PRINT,
- PROPERTYNAME_DOCWARN_CREATEPDF,
- PROPERTYNAME_DOCWARN_REMOVEPERSONALINFO,
- PROPERTYNAME_DOCWARN_RECOMMENDPASSWORD,
- PROPERTYNAME_CTRLCLICK_HYPERLINK,
- PROPERTYNAME_BLOCKUNTRUSTEDREFERERLINKS,
- PROPERTYNAME_MACRO_SECLEVEL,
- PROPERTYNAME_MACRO_TRUSTEDAUTHORS,
- PROPERTYNAME_MACRO_DISABLE
- };
-}
-
-namespace {
-
-std::weak_ptr<SvtSecurityOptions_Impl> g_pSecurityOptions;
-
-}
-
-SvtSecurityOptions::SvtSecurityOptions()
-{
- // Global access, must be guarded (multithreading!).
- MutexGuard aGuard( GetInitMutex() );
-
- m_pImpl = g_pSecurityOptions.lock();
- if( !m_pImpl )
- {
- m_pImpl = std::make_shared<SvtSecurityOptions_Impl>();
- g_pSecurityOptions = m_pImpl;
-
- ItemHolder1::holdConfigItem(EItem::SecurityOptions);
- }
-}
-
-SvtSecurityOptions::~SvtSecurityOptions()
-{
- // Global access, must be guarded (multithreading!)
- MutexGuard aGuard( GetInitMutex() );
-
- m_pImpl.reset();
-}
-
-bool SvtSecurityOptions::IsReadOnly( EOption eOption ) const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->IsReadOnly(eOption);
-}
-
-Sequence< OUString > SvtSecurityOptions::GetSecureURLs() const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->GetSecureURLs();
-}
-
-void SvtSecurityOptions::SetSecureURLs( const Sequence< OUString >& seqURLList )
-{
- MutexGuard aGuard( GetInitMutex() );
- m_pImpl->SetSecureURLs( seqURLList );
-}
-
-bool SvtSecurityOptions::isSecureMacroUri(
- OUString const & uri, OUString const & referer) const
-{
- switch (INetURLObject(uri).GetProtocol()) {
- case INetProtocol::Macro:
- if (uri.startsWithIgnoreAsciiCase("macro:///")) {
- // Denotes an App-BASIC macro (see SfxMacroLoader::loadMacro), which
- // is considered safe:
- return true;
- }
- [[fallthrough]];
- case INetProtocol::Slot:
- return referer.equalsIgnoreAsciiCase("private:user")
- || isTrustedLocationUri(referer);
- default:
- return true;
+ assert(false);
}
+ xChanges->commit();
}
-bool SvtSecurityOptions::isUntrustedReferer(OUString const & referer) const {
- MutexGuard g(GetInitMutex());
- return m_pImpl->IsOptionSet(EOption::BlockUntrustedRefererLinks)
- && !(referer.isEmpty() || referer.startsWithIgnoreAsciiCase("private:")
- || isTrustedLocationUri(referer));
-}
+} // namespace SvtSecurityOptions
-bool SvtSecurityOptions::isTrustedLocationUri(OUString const & uri) const {
- MutexGuard g(GetInitMutex());
- for (const auto & url : std::as_const(m_pImpl->m_seqSecureURLs))
- {
- if (UCBContentHelper::IsSubPath(url, uri))
- {
- return true;
- }
- }
- return false;
-}
-
-bool SvtSecurityOptions::isTrustedLocationUriForUpdatingLinks(
- OUString const & uri) const
-{
- return GetMacroSecurityLevel() == 0 || uri.isEmpty()
- || uri.startsWithIgnoreAsciiCase("private:")
- || isTrustedLocationUri(uri);
-}
-
-sal_Int32 SvtSecurityOptions::GetMacroSecurityLevel() const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->GetMacroSecurityLevel();
-}
-
-void SvtSecurityOptions::SetMacroSecurityLevel( sal_Int32 _nLevel )
-{
- MutexGuard aGuard( GetInitMutex() );
- m_pImpl->SetMacroSecurityLevel( _nLevel );
-}
-
-bool SvtSecurityOptions::IsMacroDisabled() const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->IsMacroDisabled();
-}
-
-std::vector< SvtSecurityOptions::Certificate > SvtSecurityOptions::GetTrustedAuthors() const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->GetTrustedAuthors();
-}
-
-void SvtSecurityOptions::SetTrustedAuthors( const std::vector< Certificate >& rAuthors )
-{
- MutexGuard aGuard( GetInitMutex() );
- m_pImpl->SetTrustedAuthors( rAuthors );
-}
-
-bool SvtSecurityOptions::IsOptionSet( EOption eOption ) const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->IsOptionSet( eOption );
-}
-
-void SvtSecurityOptions::SetOption( EOption eOption, bool bValue )
-{
- MutexGuard aGuard( GetInitMutex() );
- m_pImpl->SetOption( eOption, bValue );
-}
-
-bool SvtSecurityOptions::IsOptionEnabled( EOption eOption ) const
-{
- MutexGuard aGuard( GetInitMutex() );
- return m_pImpl->IsOptionEnabled( eOption );
-}
-
-namespace
-{
- class theSecurityOptionsMutex : public rtl::Static<osl::Mutex, theSecurityOptionsMutex>{};
-}
-
-Mutex& SvtSecurityOptions::GetInitMutex()
-{
- return theSecurityOptionsMutex::get();
-}
// map personal info strings to 1, 2, ... to remove personal info
size_t SvtSecurityMapPersonalInfo::GetInfoID( const OUString sPersonalInfo )
{
- SvtSecurityMapPersonalInfoType::iterator aIter = aInfoIDs.find( sPersonalInfo );
+ auto aIter = aInfoIDs.find( sPersonalInfo );
if ( aIter == aInfoIDs.end() )
{
size_t nNewID = aInfoIDs.size() + 1;
diff --git a/unotools/source/misc/mediadescriptor.cxx b/unotools/source/misc/mediadescriptor.cxx
index 102aaaa1b3ed..f207faa3468b 100644
--- a/unotools/source/misc/mediadescriptor.cxx
+++ b/unotools/source/misc/mediadescriptor.cxx
@@ -601,7 +601,7 @@ bool MediaDescriptor::impl_openStreamWithPostData( const css::uno::Reference< cs
bool MediaDescriptor::impl_openStreamWithURL( const OUString& sURL, bool bLockFile )
{
OUString referer(getUnpackedValueOrDefault(PROP_REFERRER(), OUString()));
- if (SvtSecurityOptions().isUntrustedReferer(referer)) {
+ if (SvtSecurityOptions::isUntrustedReferer(referer)) {
return false;
}