From 35ec8253ad80b0381e73a8f00fd3deb2309f5fe4 Mon Sep 17 00:00:00 2001 From: Armin Le Grand Date: Thu, 29 Sep 2016 18:00:35 +0200 Subject: profilesafe: Add values for SecureUserConfig Added default values for SecureUserConfig values to soffice.ini/rc which enable the mechanism, enable by default and set a maximum of three backups file in packed form. Added more handy flag for easy decision to add compressed/uncompressed. Change-Id: I5a624c09fec4e4278314e13fc5f693ac085d5e61 --- comphelper/source/misc/backupfilehelper.cxx | 26 +++++++++++--------------- configmgr/source/components.cxx | 2 -- desktop/source/app/app.cxx | 5 ++++- include/comphelper/backupfilehelper.hxx | 23 ++++++++++++++++++++--- instsetoo_native/CustomTarget_setup.mk | 3 +++ 5 files changed, 38 insertions(+), 21 deletions(-) diff --git a/comphelper/source/misc/backupfilehelper.cxx b/comphelper/source/misc/backupfilehelper.cxx index e02a8550644e..527030693bad 100644 --- a/comphelper/source/misc/backupfilehelper.cxx +++ b/comphelper/source/misc/backupfilehelper.cxx @@ -103,7 +103,7 @@ namespace { sal_uInt8 aArray[BACKUP_FILE_HELPER_BLOCK_SIZE]; sal_uInt64 nBytesTransfer(0); - sal_uInt64 nSize(getFullFileSize()); + sal_uInt64 nSize(getPackFileSize()); // set offset in source file - when this is zero, a new file is to be added if (osl::File::E_None == maFile->setPos(osl_Pos_Absolut, sal_Int64(getOffset()))) @@ -140,7 +140,7 @@ namespace sal_uInt8 aArray[BACKUP_FILE_HELPER_BLOCK_SIZE]; sal_uInt8 aBuffer[BACKUP_FILE_HELPER_BLOCK_SIZE]; sal_uInt64 nBytesTransfer(0); - sal_uInt64 nSize(getFullFileSize()); + sal_uInt64 nSize(getPackFileSize()); std::unique_ptr< z_stream > zstream(new z_stream); memset(zstream.get(), 0, sizeof(*zstream)); @@ -294,21 +294,22 @@ namespace public: + // create new, uncompressed entry PackedFileEntry( sal_uInt32 nFullFileSize, - sal_uInt32 nOffset, sal_uInt32 nCrc32, FileSharedPtr& rFile, bool bDoCompress) : mnFullFileSize(nFullFileSize), mnPackFileSize(nFullFileSize), - mnOffset(nOffset), + mnOffset(0), mnCrc32(nCrc32), maFile(rFile), mbDoCompress(bDoCompress) { } + // create entry to be loaded as header (read_header) PackedFileEntry() : mnFullFileSize(0), mnPackFileSize(0), @@ -669,7 +670,7 @@ namespace return bRetval; } - bool tryPush(FileSharedPtr& rFileCandidate) + bool tryPush(FileSharedPtr& rFileCandidate, bool bCompress) { sal_uInt64 nFileSize(0); @@ -724,19 +725,14 @@ namespace nCrc32 = createCrc32(rFileCandidate, 0); } - // create a file entry for a new file. Offset is set to 0 to mark - // the entry as new file entry - // the compress flag decides if entries should be compressed when - // they get written to the target package - static bool bUseCompression(true); - + // create a file entry for a new file. Offset is set automatically + // to 0 to mark the entry as new file entry maPackedFileEntryVector.push_back( PackedFileEntry( static_cast< sal_uInt32 >(nFileSize), - 0, nCrc32, rFileCandidate, - bUseCompression)); + bCompress)); mbChanged = true; } @@ -837,14 +833,14 @@ namespace comphelper return OUString(maBase + "/." + maName + ".pack"); } - bool BackupFileHelper::tryPush() + bool BackupFileHelper::tryPush(bool bCompress) { if (splitBaseURL() && baseFileExists()) { PackedFile aPackedFile(getName()); FileSharedPtr aBaseFile(new osl::File(mrBaseURL)); - if (aPackedFile.tryPush(aBaseFile)) + if (aPackedFile.tryPush(aBaseFile, bCompress)) { // reduce to allowed number and flush aPackedFile.tryReduceToNumBackups(mnNumBackups); diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx index 206d3462a15e..17f09a3c0c72 100644 --- a/configmgr/source/components.cxx +++ b/configmgr/source/components.cxx @@ -613,8 +613,6 @@ Components::Components( Components::~Components() { - SAL_WARN("configmgr", "################# Components::~Components() #####################"); - // get flag if _exit was already called which is a sign to not to secure user config const bool bExitWasCalled(comphelper::BackupFileHelper::getExitWasCalled()); diff --git a/desktop/source/app/app.cxx b/desktop/source/app/app.cxx index 798d60d71715..a9d10c3a99ba 100644 --- a/desktop/source/app/app.cxx +++ b/desktop/source/app/app.cxx @@ -569,11 +569,14 @@ void Desktop::Init() SetBootstrapError( BE_OFFICECONFIG_BROKEN, e.Message ); } + // test code for ProfileSafeMode to allow testing the fail + // of loading the office configuration initially. To use, + // either set to true and compile, or set a breakpoint + // in debugger and change the local bool static bool bTryHardOfficeconfigBroken(false); if (bTryHardOfficeconfigBroken) { - SAL_WARN("configmgr", "################# Desktop::Init() #####################"); SetBootstrapError(BE_OFFICECONFIG_BROKEN, OUString()); } } diff --git a/include/comphelper/backupfilehelper.hxx b/include/comphelper/backupfilehelper.hxx index 2c6cc25ded23..7cb20231927b 100644 --- a/include/comphelper/backupfilehelper.hxx +++ b/include/comphelper/backupfilehelper.hxx @@ -20,11 +20,24 @@ namespace comphelper { /** Helper class to backup/restore a single file + * + * This is a general class to manage backups/restore of the file + * given by the URL. The container holding the backups is created + * aside the original file, e.g for 'test.txt' a container + * called '.test.pack' will be used. If it was not yet backed-up + * this container file will be created at the 1st backup and deleted + * when the last gets removed. The container holds a stack with a + * maximum given number (in the constructor) of copies, these are by + * default compressed, but don't have to be (see tryPush). + * + * Due to being on a low system level here, no UNO API and not much + * other tooling can be used, as a consequence for the container a + * own simple format is used and e.g. the zip lib directly. * * You need to hand over the URL of the file to look at and * a maximum number of allowed copies. That number is internally - * limited to a max of 10 (see implementation). The number of - * allowed copies is limited to [1..max]. + * limited to a absolute max of 10 (see implementation). The number + * of allowed copies is limited to [1..max]. * * Calling tryPush() will check if there is no backup yet or if * there is one that the file has changed. If yes, a new copy is @@ -102,10 +115,14 @@ namespace comphelper * Also may cleanup older backups when NumBackups given in the * constructor has changed. * + * @param bCompress + * Defines if the new backup will be compressed when + * added. Default is true + * * @return bool * returns true if a new backup was actually created */ - bool tryPush(); + bool tryPush(bool bCompress = true); /** finds out if a restore is possible * diff --git a/instsetoo_native/CustomTarget_setup.mk b/instsetoo_native/CustomTarget_setup.mk index 173a8c6b9839..26fc42792a03 100644 --- a/instsetoo_native/CustomTarget_setup.mk +++ b/instsetoo_native/CustomTarget_setup.mk @@ -104,6 +104,7 @@ $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_ ) > $@ # for release-builds (building installers) adjust values in openoffice.lst.in +# Added 'SecureUserConfig' flags to enable and safe three registrymodifications.xcu versions $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_rcfile,soffice) : $(call gb_Output_announce,$(subst $(WORKDIR)/,,$@),$(true),ECH,1) ( \ @@ -118,6 +119,8 @@ $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_ && echo 'ProgressTextBaseline=145' \ && echo 'ProgressTextColor=255,255,255' \ && echo 'URE_BOOTSTRAP=$${ORIGIN}/$(call gb_Helper_get_rcfile,fundamental)' \ + && echo 'SecureUserConfig=true' \ + && echo 'SecureUserConfigNumCopies=3' \ ) > $@ $(call gb_CustomTarget_get_workdir,instsetoo_native/setup)/$(call gb_Helper_get_rcfile,uno) : -- cgit