sc/source/filter/inc/workbooksettings.hxx | 8 ++++++-- sc/source/filter/inc/worksheetsettings.hxx | 6 +++++- sc/source/filter/oox/workbooksettings.cxx | 25 +++++++++++++++++++++++-- sc/source/filter/oox/worksheetsettings.cxx | 5 +++++ 4 files changed, 39 insertions(+), 5 deletions(-)
New commits: commit 2d5a9e9f26daf95f33afb0d28ffd088cdd41ae8c Author: Eike Rathke <er...@redhat.com> Date: Fri Feb 23 11:15:54 2018 +0100 tdf#115933 set document read-only on presence of hashValue attribute Though there's currently no way (password dialog) to edit the document other than saving it to a different file, this seems to be what is expected. Change-Id: Iafa8ac9f6e41c3011ed0ad4b19cc57382c9f2a75 diff --git a/sc/source/filter/oox/workbooksettings.cxx b/sc/source/filter/oox/workbooksettings.cxx index 9dd4caff95f1..34be4e5608fa 100644 --- a/sc/source/filter/oox/workbooksettings.cxx +++ b/sc/source/filter/oox/workbooksettings.cxx @@ -192,15 +192,31 @@ void WorkbookSettings::finalizeImport() aPropSet.setProperty( PROP_Wildcards, true ); // always in Excel // write protection - if( maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) ) try + if (maFileSharing.mbRecommendReadOnly || (maFileSharing.mnPasswordHash != 0) || + !maFileSharing.maHashValue.isEmpty()) try { getBaseFilter().getMediaDescriptor()[ "ReadOnly" ] <<= true; Reference< XPropertySet > xDocumentSettings( getBaseFilter().getModelFactory()->createInstance( "com.sun.star.document.Settings" ), UNO_QUERY_THROW ); PropertySet aSettingsProp( xDocumentSettings ); - if( maFileSharing.mbRecommendReadOnly ) + + /* TODO: not setting read-only if only mnPasswordHash ('password' + * attribute) is present looks a bit silly, any reason for that? + * 'readOnlyRecommended' is defined as "indicates on open, whether the + * application alerts the user that the file be marked as read-only", + * which sounds silly in itself and seems not to be present if the + * 'password' attribute isn't present, but.. */ + if (maFileSharing.mbRecommendReadOnly || !maFileSharing.maHashValue.isEmpty()) aSettingsProp.setProperty( PROP_LoadReadonly, true ); + + /* TODO: setting ModifyPasswordHash was commented out with commit + * 1a842832cd174d5ccfd832fdb94c93ae42e8eacc of which the filter + * fragment parts meanwhile contain PASSWORDTOMODIFY again, also for + * calc_OOXML.xcu, but setting the property doesn't raise a dialog. If + * it worked, a Sequence<PropertyValue> should be used for + * algorithmName,hashValue,... see also + * SfxObjectShell::SetModifyPasswordInfo() */ // if( maFileSharing.mnPasswordHash != 0 ) // aSettingsProp.setProperty( PROP_ModifyPasswordHash, static_cast< sal_Int32 >( maFileSharing.mnPasswordHash ) ); } commit 0fe1b2fb823470e2f5eae574f9c9f877eecc932d Author: Eike Rathke <er...@redhat.com> Date: Fri Feb 23 10:17:01 2018 +0100 Read algorithmName, hashValue, saltValue, spinCount, tdf#115933 prep Change-Id: I799d4652099059fcd09088c02537ed5dec087259 diff --git a/sc/source/filter/inc/workbooksettings.hxx b/sc/source/filter/inc/workbooksettings.hxx index 02c8fa204a7f..dda6cc366f15 100644 --- a/sc/source/filter/inc/workbooksettings.hxx +++ b/sc/source/filter/inc/workbooksettings.hxx @@ -30,8 +30,12 @@ namespace xls { /** Settings for workbook write protection. */ struct FileSharingModel { - OUString maUserName; /// User who added the write protection password. - sal_uInt16 mnPasswordHash; /// Hash value of the write protection password. + OUString maUserName; /// User who added the write protection password. + OUString maAlgorithmName; /// Algorithm name, "SHA-512", "SHA-1", ... + OUString maHashValue; /// Hash value computed by the algorithm, base-64 encoded + OUString maSaltValue; /// Salt value to be prepended to the password, base-64 encoded + sal_uInt32 mnSpinCount; /// Spin count, iterations to run algorithm + sal_uInt16 mnPasswordHash; /// Hash value of the write protection password. (unrelated to the above) bool mbRecommendReadOnly; /// True = recommend read-only mode on opening. explicit FileSharingModel(); diff --git a/sc/source/filter/oox/workbooksettings.cxx b/sc/source/filter/oox/workbooksettings.cxx index 44c017bbafbc..9dd4caff95f1 100644 --- a/sc/source/filter/oox/workbooksettings.cxx +++ b/sc/source/filter/oox/workbooksettings.cxx @@ -63,6 +63,7 @@ const sal_Int16 API_SHOWMODE_PLACEHOLDER = 2; /// Show placeholder } // namespace FileSharingModel::FileSharingModel() : + mnSpinCount( 0 ), mnPasswordHash( 0 ), mbRecommendReadOnly( false ) { @@ -108,6 +109,10 @@ WorkbookSettings::WorkbookSettings( const WorkbookHelper& rHelper ) : void WorkbookSettings::importFileSharing( const AttributeList& rAttribs ) { maFileSharing.maUserName = rAttribs.getXString( XML_userName, OUString() ); + maFileSharing.maAlgorithmName = rAttribs.getString( XML_algorithmName, OUString()); + maFileSharing.maHashValue = rAttribs.getString( XML_hashValue, OUString()); + maFileSharing.maSaltValue = rAttribs.getString( XML_saltValue, OUString()); + maFileSharing.mnSpinCount = rAttribs.getUnsigned( XML_spinCount, 0); maFileSharing.mnPasswordHash = oox::core::CodecHelper::getPasswordHash( rAttribs, XML_reservationPassword ); maFileSharing.mbRecommendReadOnly = rAttribs.getBool( XML_readOnlyRecommended, false ); } commit 62767cf6062d4e90ba5de9b19927b1a96d0f7e62 Author: Eike Rathke <er...@redhat.com> Date: Thu Feb 22 22:22:00 2018 +0100 Read algorithmName, hashValue, saltValue, spinCount, tdf#104250 prep Change-Id: Idc68ad62e8420646d5aecd0d4126084390a1ed55 diff --git a/sc/source/filter/inc/worksheetsettings.hxx b/sc/source/filter/inc/worksheetsettings.hxx index d2988d1150e9..46e19ee15f6c 100644 --- a/sc/source/filter/inc/worksheetsettings.hxx +++ b/sc/source/filter/inc/worksheetsettings.hxx @@ -43,7 +43,11 @@ struct SheetSettingsModel /** Sheet protection settings. */ struct SheetProtectionModel { - sal_uInt16 mnPasswordHash; /// Hash value from sheet protection password. + OUString maAlgorithmName; /// Algorithm name, "SHA-512", "SHA-1", ... + OUString maHashValue; /// Hash value computed by the algorithm, base-64 encoded + OUString maSaltValue; /// Salt value to be prepended to the password, base-64 encoded + sal_uInt32 mnSpinCount; /// Spin count, iterations to run algorithm + sal_uInt16 mnPasswordHash; /// Hash value from sheet protection password. (unrelated to the above) bool mbSheet; /// True = sheet protection enabled, locked cells are protected. bool mbObjects; /// True = objects locked. bool mbScenarios; /// True = scenarios locked. diff --git a/sc/source/filter/oox/worksheetsettings.cxx b/sc/source/filter/oox/worksheetsettings.cxx index f86abd370a12..06fc1db11da0 100644 --- a/sc/source/filter/oox/worksheetsettings.cxx +++ b/sc/source/filter/oox/worksheetsettings.cxx @@ -55,6 +55,7 @@ SheetSettingsModel::SheetSettingsModel() : } SheetProtectionModel::SheetProtectionModel() : + mnSpinCount( 0 ), mnPasswordHash( 0 ), mbSheet( false ), mbObjects( false ), @@ -106,6 +107,10 @@ void WorksheetSettings::importOutlinePr( const AttributeList& rAttribs ) void WorksheetSettings::importSheetProtection( const AttributeList& rAttribs ) { + maSheetProt.maAlgorithmName = rAttribs.getString( XML_algorithmName, OUString()); + maSheetProt.maHashValue = rAttribs.getString( XML_hashValue, OUString()); + maSheetProt.maSaltValue = rAttribs.getString( XML_saltValue, OUString()); + maSheetProt.mnSpinCount = rAttribs.getUnsigned( XML_spinCount, 0); maSheetProt.mnPasswordHash = oox::core::CodecHelper::getPasswordHash( rAttribs, XML_password ); maSheetProt.mbSheet = rAttribs.getBool( XML_sheet, false ); maSheetProt.mbObjects = rAttribs.getBool( XML_objects, false ); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits