From 70a59d6cd1a77cbf16ddb7862c28b1f7fcb2b620 Mon Sep 17 00:00:00 2001 From: Penvern Vincent Date: Sat, 13 Apr 2024 02:09:09 +0200 Subject: [PATCH 01/21] add possibility to pre check encryption checkox --- src/modules/partition/PartitionViewStep.cpp | 2 ++ src/modules/partition/gui/ChoicePage.cpp | 7 +++++++ src/modules/partition/gui/ChoicePage.h | 1 + src/modules/partition/gui/EncryptWidget.cpp | 5 +++++ src/modules/partition/gui/EncryptWidget.h | 1 + src/modules/partition/partition.conf | 5 +++++ src/modules/partition/partition.schema.yaml | 1 + 7 files changed, 22 insertions(+) diff --git a/src/modules/partition/PartitionViewStep.cpp b/src/modules/partition/PartitionViewStep.cpp index 119bf1baa..4b170a8ab 100644 --- a/src/modules/partition/PartitionViewStep.cpp +++ b/src/modules/partition/PartitionViewStep.cpp @@ -698,6 +698,8 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) Calamares::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); gs->insert( "enableLuksAutomatedPartitioning", Calamares::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); + gs->insert( "preCheckEncryption", + Calamares::getBool( configurationMap, "preCheckEncryption", false ) ); QString partitionTableName = Calamares::getString( configurationMap, "defaultPartitionTableType" ); if ( partitionTableName.isEmpty() ) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 8a1313237..823525fd3 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -83,12 +83,14 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) , m_beforePartitionLabelsView( nullptr ) , m_bootloaderComboBox( nullptr ) , m_enableEncryptionWidget( true ) + , m_preCheckEncryption( false ) { setupUi( this ); auto gs = Calamares::JobQueue::instance()->globalStorage(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); + m_preCheckEncryption = gs->value( "preCheckEncryption" ).toBool(); // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); @@ -468,6 +470,11 @@ ChoicePage::onActionChanged() { m_encryptWidget->setFilesystem( FileSystem::typeForName( m_replaceFsTypesChoiceComboBox->currentText() ) ); } + + if ( m_preCheckEncryption ) + { + m_encryptWidget->setEncryptionCheckbox( m_preCheckEncryption ); + } } Device* currd = selectedDevice(); diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index 7deb4dec6..0508cb9cd 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -170,6 +170,7 @@ private: int m_lastSelectedDeviceIndex = -1; bool m_enableEncryptionWidget = false; + bool m_preCheckEncryption = false; QMutex m_coreMutex; }; diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index 176a7c610..3d5f122f2 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -70,6 +70,11 @@ EncryptWidget::EncryptWidget( QWidget* parent ) CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ); } +void EncryptWidget::setEncryptionCheckbox( bool preCheckEncrypt) +{ + m_ui->m_encryptCheckBox->setChecked( preCheckEncrypt ); +} + void EncryptWidget::reset( bool checkVisible ) { diff --git a/src/modules/partition/gui/EncryptWidget.h b/src/modules/partition/gui/EncryptWidget.h index 9669b4d21..8833f61ad 100644 --- a/src/modules/partition/gui/EncryptWidget.h +++ b/src/modules/partition/gui/EncryptWidget.h @@ -36,6 +36,7 @@ public: explicit EncryptWidget( QWidget* parent = nullptr ); + void setEncryptionCheckbox( bool preCheckEncrypt = false); void reset( bool checkVisible = true ); Encryption state() const; diff --git a/src/modules/partition/partition.conf b/src/modules/partition/partition.conf index 0975179de..3d335432f 100644 --- a/src/modules/partition/partition.conf +++ b/src/modules/partition/partition.conf @@ -240,6 +240,11 @@ defaultFileSystemType: "ext4" # If nothing is specified, LUKS is enabled in automated modes. #enableLuksAutomatedPartitioning: true +# When enableLuksAutomatedPartitioning is true, this option will pre-check +# encryption checkbox. This option is only usefull to help people to not forget +# to cypher their disk when installing in enterprise (for exemple). +#preCheckEncryption: false + # Partition layout. # # This optional setting specifies a custom partition layout. diff --git a/src/modules/partition/partition.schema.yaml b/src/modules/partition/partition.schema.yaml index 769c1abae..65bc723f5 100644 --- a/src/modules/partition/partition.schema.yaml +++ b/src/modules/partition/partition.schema.yaml @@ -34,6 +34,7 @@ properties: luksGeneration: { type: string, enum: [luks1, luks2] } # Also allows "luks" as alias of "luks1" enableLuksAutomatedPartitioning: { type: boolean, default: false } + preCheckEncryption: { type: boolean, default: false } allowManualPartitioning: { type: boolean, default: true } showNotEncryptedBootMessage: { type: boolean, default: true } From cc835cee6f6272ef8692e88f3008f36fffe01800 Mon Sep 17 00:00:00 2001 From: Penvern Vincent Date: Mon, 15 Apr 2024 16:34:35 +0200 Subject: [PATCH 02/21] do not use Global Storage for variable PreCheckEncryption, other modules don't have to know if this variable is set to true or false --- src/modules/partition/Config.cpp | 1 + src/modules/partition/Config.h | 10 +++++++++- src/modules/partition/PartitionViewStep.cpp | 2 -- src/modules/partition/gui/ChoicePage.cpp | 2 +- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/modules/partition/Config.cpp b/src/modules/partition/Config.cpp index 2010fecdd..f4e404c28 100644 --- a/src/modules/partition/Config.cpp +++ b/src/modules/partition/Config.cpp @@ -444,6 +444,7 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) m_allowZfsEncryption = Calamares::getBool( configurationMap, "allowZfsEncryption", true ); m_allowManualPartitioning = Calamares::getBool( configurationMap, "allowManualPartitioning", true ); + m_preCheckEncryption = Calamares::getBool( configurationMap, "preCheckEncryption", false ); m_showNotEncryptedBootMessage = Calamares::getBool( configurationMap, "showNotEncryptedBootMessage", true ); m_requiredPartitionTableType = Calamares::getStringList( configurationMap, "requiredPartitionTableType" ); diff --git a/src/modules/partition/Config.h b/src/modules/partition/Config.h index d8d68c6d2..199ddaf88 100644 --- a/src/modules/partition/Config.h +++ b/src/modules/partition/Config.h @@ -35,7 +35,7 @@ class Config : public QObject replaceModeFilesystemChanged ) Q_PROPERTY( bool allowManualPartitioning READ allowManualPartitioning CONSTANT FINAL ) - + Q_PROPERTY( bool preCheckEncryption READ preCheckEncryption CONSTANT FINAL ) Q_PROPERTY( bool showNotEncryptedBootMessage READ showNotEncryptedBootMessage CONSTANT FINAL ) public: @@ -148,6 +148,13 @@ public: /// @brief Is manual partitioning allowed (not explicitly disabled in the config file)? bool allowManualPartitioning() const { return m_allowManualPartitioning; } + /** @brief pre check encryption checkbox. + * + * parameter is used if enableLuksAutomatedPartitioning is true. + * Default value is false + */ + bool preCheckEncryption() const { return m_preCheckEncryption; } + /// @brief Show "Boot partition not encrypted" warning (not explicitly disabled in the config file)? bool showNotEncryptedBootMessage() const { return m_showNotEncryptedBootMessage; } @@ -199,6 +206,7 @@ private: QStringList m_requiredPartitionTableType; bool m_allowZfsEncryption = true; bool m_allowManualPartitioning = true; + bool m_preCheckEncryption = false; bool m_showNotEncryptedBootMessage = true; }; diff --git a/src/modules/partition/PartitionViewStep.cpp b/src/modules/partition/PartitionViewStep.cpp index 4b170a8ab..119bf1baa 100644 --- a/src/modules/partition/PartitionViewStep.cpp +++ b/src/modules/partition/PartitionViewStep.cpp @@ -698,8 +698,6 @@ PartitionViewStep::setConfigurationMap( const QVariantMap& configurationMap ) Calamares::getBool( configurationMap, "alwaysShowPartitionLabels", true ) ); gs->insert( "enableLuksAutomatedPartitioning", Calamares::getBool( configurationMap, "enableLuksAutomatedPartitioning", true ) ); - gs->insert( "preCheckEncryption", - Calamares::getBool( configurationMap, "preCheckEncryption", false ) ); QString partitionTableName = Calamares::getString( configurationMap, "defaultPartitionTableType" ); if ( partitionTableName.isEmpty() ) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 823525fd3..ccb59e5cb 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -90,7 +90,7 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) auto gs = Calamares::JobQueue::instance()->globalStorage(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); - m_preCheckEncryption = gs->value( "preCheckEncryption" ).toBool(); + m_preCheckEncryption = m_config->preCheckEncryption(); // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); From 5ac23cd3d60f956fd5525b66c738e0178e07d491 Mon Sep 17 00:00:00 2001 From: Penvern Vincent Date: Mon, 15 Apr 2024 22:44:42 +0200 Subject: [PATCH 03/21] Remove m_preCheckEncryption variable from ChoicePage --- src/modules/partition/gui/ChoicePage.cpp | 6 ++---- src/modules/partition/gui/ChoicePage.h | 1 - 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index ccb59e5cb..b2396ebc0 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -83,14 +83,12 @@ ChoicePage::ChoicePage( Config* config, QWidget* parent ) , m_beforePartitionLabelsView( nullptr ) , m_bootloaderComboBox( nullptr ) , m_enableEncryptionWidget( true ) - , m_preCheckEncryption( false ) { setupUi( this ); auto gs = Calamares::JobQueue::instance()->globalStorage(); m_enableEncryptionWidget = gs->value( "enableLuksAutomatedPartitioning" ).toBool(); - m_preCheckEncryption = m_config->preCheckEncryption(); // Set up drives combo m_mainLayout->setDirection( QBoxLayout::TopToBottom ); @@ -471,9 +469,9 @@ ChoicePage::onActionChanged() m_encryptWidget->setFilesystem( FileSystem::typeForName( m_replaceFsTypesChoiceComboBox->currentText() ) ); } - if ( m_preCheckEncryption ) + if ( m_config->preCheckEncryption() ) { - m_encryptWidget->setEncryptionCheckbox( m_preCheckEncryption ); + m_encryptWidget->setEncryptionCheckbox( m_config->preCheckEncryption() ); } } diff --git a/src/modules/partition/gui/ChoicePage.h b/src/modules/partition/gui/ChoicePage.h index 0508cb9cd..7deb4dec6 100644 --- a/src/modules/partition/gui/ChoicePage.h +++ b/src/modules/partition/gui/ChoicePage.h @@ -170,7 +170,6 @@ private: int m_lastSelectedDeviceIndex = -1; bool m_enableEncryptionWidget = false; - bool m_preCheckEncryption = false; QMutex m_coreMutex; }; From 8469fbd2e82c8008ed333007658f16cd2e4e3271 Mon Sep 17 00:00:00 2001 From: Penvern Vincent Date: Tue, 16 Apr 2024 18:08:11 +0200 Subject: [PATCH 04/21] Fix Next button behviour for all combinations of enableLuksAutomatedPartitioning and preCheckEncryption configure file variables --- src/modules/partition/gui/ChoicePage.cpp | 12 +++++------- src/modules/partition/gui/EncryptWidget.cpp | 16 ++++++++-------- src/modules/partition/gui/EncryptWidget.h | 1 + 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index b2396ebc0..3824f4c54 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -185,7 +185,6 @@ ChoicePage::init( PartitionCoreModule* core ) setModelToComboBox( m_drivesCombo, core->deviceModel() ); connect( m_drivesCombo, qOverload< int >( &QComboBox::currentIndexChanged ), this, &ChoicePage::applyDeviceChoice ); - connect( m_encryptWidget, &EncryptWidget::stateChanged, this, &ChoicePage::onEncryptWidgetStateChanged ); connect( m_reuseHomeCheckBox, &QCheckBox::stateChanged, this, &ChoicePage::onHomeCheckBoxStateChanged ); @@ -468,11 +467,8 @@ ChoicePage::onActionChanged() { m_encryptWidget->setFilesystem( FileSystem::typeForName( m_replaceFsTypesChoiceComboBox->currentText() ) ); } - - if ( m_config->preCheckEncryption() ) - { - m_encryptWidget->setEncryptionCheckbox( m_config->preCheckEncryption() ); - } + + m_encryptWidget->setEncryptionCheckbox( m_config->preCheckEncryption() ); } Device* currd = selectedDevice(); @@ -1580,7 +1576,9 @@ ChoicePage::calculateNextEnabled() const } } - if ( m_config->installChoice() != InstallChoice::Manual && m_encryptWidget->isVisible() ) + if ( m_config->installChoice() != InstallChoice::Manual + && (m_encryptWidget->isVisible() || + m_encryptWidget->isEncryptionCheckboxChecked())) { switch ( m_encryptWidget->state() ) { diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index 3d5f122f2..562166a6b 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -70,6 +70,11 @@ EncryptWidget::EncryptWidget( QWidget* parent ) CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ); } +bool EncryptWidget::isEncryptionCheckboxChecked() +{ + return m_ui->m_encryptCheckBox->isChecked(); +} + void EncryptWidget::setEncryptionCheckbox( bool preCheckEncrypt) { m_ui->m_encryptCheckBox->setChecked( preCheckEncrypt ); @@ -174,15 +179,10 @@ EncryptWidget::updateState( const bool notify ) } } - Encryption newState = state(); - - if ( newState != m_state ) + m_state = state(); + if ( notify ) { - m_state = newState; - if ( notify ) - { - Q_EMIT stateChanged( m_state ); - } + Q_EMIT stateChanged( m_state ); } } diff --git a/src/modules/partition/gui/EncryptWidget.h b/src/modules/partition/gui/EncryptWidget.h index 8833f61ad..c7cc23daa 100644 --- a/src/modules/partition/gui/EncryptWidget.h +++ b/src/modules/partition/gui/EncryptWidget.h @@ -39,6 +39,7 @@ public: void setEncryptionCheckbox( bool preCheckEncrypt = false); void reset( bool checkVisible = true ); + bool isEncryptionCheckboxChecked(); Encryption state() const; void setText( const QString& text ); From a7e86e8aff33f769017f4980b8727bed17303533 Mon Sep 17 00:00:00 2001 From: "Eugene San (eugenesan)" Date: Thu, 11 Apr 2024 19:52:38 -0700 Subject: [PATCH 05/21] Make sure we do not use missing crypto_keyfile in fstab module Replaces original commit with refactoring Refactoring will have to wait --- src/modules/fstab/main.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/modules/fstab/main.py b/src/modules/fstab/main.py index 78cae6349..bd7ae77c3 100755 --- a/src/modules/fstab/main.py +++ b/src/modules/fstab/main.py @@ -151,8 +151,12 @@ class FstabGenerator(object): if not mapper_name or not luks_uuid: return None - password = "/crypto_keyfile.bin" crypttab_options = self.crypttab_options + # Make sure to not use missing keyfile + if os.path.isfile(os.path.join(self.root_mount_point, "crypto_keyfile.bin")): + password = "/crypto_keyfile.bin" + else: + password = "none" # Set crypttab password for partition to none and remove crypttab options # if root partition was not encrypted From cf9837f48c453f870ab8530bf3f0b1fcab01ccea Mon Sep 17 00:00:00 2001 From: dalto Date: Mon, 22 Apr 2024 15:47:28 -0500 Subject: [PATCH 06/21] [partition] Don't crash is when going back without selecting a partition --- src/modules/partition/gui/ChoicePage.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 5cddfe798..4ff9b772b 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -679,7 +679,11 @@ ChoicePage::onLeave() { if ( m_config->installChoice() == InstallChoice::Alongside ) { - doAlongsideApply(); + if ( m_afterPartitionSplitterWidget->splitPartitionSize() >= 0 + && m_afterPartitionSplitterWidget->newPartitionSize() >= 0 ) + { + doAlongsideApply(); + } } if ( m_isEfi From cae7b9e868acc4a9ffa08a3b1e944b10800b48ec Mon Sep 17 00:00:00 2001 From: Sohrab Behdani Date: Sat, 27 Apr 2024 10:46:41 +0330 Subject: [PATCH 07/21] Added additional keyboard layout for Persian --- src/modules/keyboard/non-ascii-layouts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts index ef2e42787..c54c88193 100644 --- a/src/modules/keyboard/non-ascii-layouts +++ b/src/modules/keyboard/non-ascii-layouts @@ -9,3 +9,4 @@ ua us - ua-utf gr us - gr he us - he ar us - ar +fa us - fa From 246aa3e2176e34e6d6cacaca8c8c290155a1703c Mon Sep 17 00:00:00 2001 From: Sohrab Behdani Date: Sat, 27 Apr 2024 12:47:40 +0330 Subject: [PATCH 08/21] Fixed Persian Keyboard problem after installing --- src/modules/keyboard/non-ascii-layouts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts index c54c88193..db76bb61e 100644 --- a/src/modules/keyboard/non-ascii-layouts +++ b/src/modules/keyboard/non-ascii-layouts @@ -9,4 +9,4 @@ ua us - ua-utf gr us - gr he us - he ar us - ar -fa us - fa +ir us - fa From 5a90e0bc6a0d43fa4c98a2f2834d553dd74dd52c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 14:37:19 +0200 Subject: [PATCH 09/21] [users] Remove stray ; --- src/modules/users/ActiveDirectoryJob.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/modules/users/ActiveDirectoryJob.cpp b/src/modules/users/ActiveDirectoryJob.cpp index deb4c82d7..97a9f3cf7 100644 --- a/src/modules/users/ActiveDirectoryJob.cpp +++ b/src/modules/users/ActiveDirectoryJob.cpp @@ -51,7 +51,6 @@ ActiveDirectoryJob::exec() if ( !m_ip.isEmpty() ) { const QString hostsFilePath = Calamares::System::instance()->targetPath( QStringLiteral( "/etc/hosts" ) ); - ; QFile hostsFile( hostsFilePath ); if ( hostsFile.open( QIODevice::Append | QIODevice::Text ) ) { From 8c66a558d5f188863b14cc7c34d6a51a6e7ce4bc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 14:38:14 +0200 Subject: [PATCH 10/21] [welcome] Use different color-name The QColorConstants are deprecated, use other names instead (this avoids a compile warning from clang against Qt5). --- src/modules/welcome/checker/ResultDelegate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/welcome/checker/ResultDelegate.cpp b/src/modules/welcome/checker/ResultDelegate.cpp index 060febbb5..19f906a0d 100644 --- a/src/modules/welcome/checker/ResultDelegate.cpp +++ b/src/modules/welcome/checker/ResultDelegate.cpp @@ -35,7 +35,7 @@ paintRequirement( QPainter* painter, const QStyleOptionViewItem& option, const Q Calamares::ImageType statusImage = Calamares::StatusOk; - painter->setPen( QColorConstants::Black ); + painter->setPen( Qt::black ); if ( index.data( Calamares::RequirementsModel::Satisfied ).toBool() ) { painter->fillRect( textRect, option.palette.window().color() ); From 6dc83fb277dc70608b54aee5843cf0b58e417a15 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 14:48:10 +0200 Subject: [PATCH 11/21] [libcalamares] Deal with Qt5/6 differences in count() --- src/libcalamares/modulesystem/RequirementsModel.cpp | 2 +- src/libcalamares/modulesystem/RequirementsModel.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/libcalamares/modulesystem/RequirementsModel.cpp b/src/libcalamares/modulesystem/RequirementsModel.cpp index 3ad98ae88..4b44d62a4 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.cpp +++ b/src/libcalamares/modulesystem/RequirementsModel.cpp @@ -66,7 +66,7 @@ RequirementsModel::reCheckList() int RequirementsModel::rowCount( const QModelIndex& ) const { - return m_requirements.count(); + return static_cast< int >( m_requirements.count() ); // TODO 3.4 use qsizetype } QVariant diff --git a/src/libcalamares/modulesystem/RequirementsModel.h b/src/libcalamares/modulesystem/RequirementsModel.h index bd71ce81f..e6cd06854 100644 --- a/src/libcalamares/modulesystem/RequirementsModel.h +++ b/src/libcalamares/modulesystem/RequirementsModel.h @@ -61,8 +61,8 @@ public: QVariant data( const QModelIndex& index, int role ) const override; - int rowCount( const QModelIndex& ) const override; - int count() const { return m_requirements.count(); } + int rowCount( const QModelIndex& ) const override; // TODO 3.4 use qsizetype + int count() const { return static_cast< int >( m_requirements.count() ); } // TODO 3.4 use qsizetype ///@brief Debugging tool, describe the checking-state void describe() const; From 35990d9a6bd51300633e7dc18ca589d9edbb7a48 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 15:11:24 +0200 Subject: [PATCH 12/21] [libcalamares] Massage size types to avoid conversion warning --- src/libcalamares/compat/Size.h | 23 +++++++++++++++++++ .../modulesystem/RequirementsChecker.cpp | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/libcalamares/compat/Size.h diff --git a/src/libcalamares/compat/Size.h b/src/libcalamares/compat/Size.h new file mode 100644 index 000000000..5e217e4cb --- /dev/null +++ b/src/libcalamares/compat/Size.h @@ -0,0 +1,23 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2024 Adriaan de Groot + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + * + */ +#ifndef CALAMARES_COMPAT_SIZE_H +#define CALAMARES_COMPAT_SIZE_H + +#include + +namespace Calamares +{ +/* Compatibility of size types (e.g. qsizetype, STL sizes, int) between Qt5 and Qt6 */ + +using NumberForTr = int; + +} + +#endif diff --git a/src/libcalamares/modulesystem/RequirementsChecker.cpp b/src/libcalamares/modulesystem/RequirementsChecker.cpp index 1eb85113d..25930b942 100644 --- a/src/libcalamares/modulesystem/RequirementsChecker.cpp +++ b/src/libcalamares/modulesystem/RequirementsChecker.cpp @@ -11,6 +11,7 @@ #include "RequirementsChecker.h" #include "compat/Mutex.h" +#include "compat/Size.h" #include "modulesystem/Module.h" #include "modulesystem/Requirement.h" #include "modulesystem/RequirementsModel.h" @@ -120,7 +121,7 @@ RequirementsChecker::reportProgress() { cDebug() << "Remaining modules:" << remaining << Logger::DebugList( remainingNames ); unsigned int posInterval = ( m_progressTimer->interval() < 0 ) ? 1000 : uint( m_progressTimer->interval() ); - QString waiting = tr( "Waiting for %n module(s)…", "@status", remaining ); + QString waiting = tr( "Waiting for %n module(s)…", "@status", static_cast(remaining) ); QString elapsed = tr( "(%n second(s))", "@status", m_progressTimeouts * posInterval / 999 ); Q_EMIT requirementsProgress( waiting + QString( " " ) + elapsed ); } From 93094948fa78dc894fa5bc48b34d3feab5b2f879 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 15:22:35 +0200 Subject: [PATCH 13/21] [partition] Actually remove invalid fstab entries --- src/modules/partition/core/PartUtils.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index e233403b4..2b6fdbbea 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -262,8 +262,9 @@ lookForFstabEntries( const QString& partitionPath ) } fstabFile.close(); const int lineCount = fstabEntries.count(); - std::remove_if( + const auto invalidEntries = std::remove_if( fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); + fstabEntries.erase(invalidEntries); cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << lineCount << "lines in" << fstabFile.fileName(); } From bdbeadcd65393c205f1ce50154cf5ba6edd5cc19 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 16:59:25 +0200 Subject: [PATCH 14/21] [partition] Move fstab-handling This was declared in osprober, but implemented elsewhere. Move it to the "right" source file, add tests. While here, repair the listing of fstab entries (invalid entries were not stripped). --- src/modules/partition/CMakeLists.txt | 1 + src/modules/partition/core/OsproberEntry.cpp | 63 ++++++++++++++++++++ src/modules/partition/core/OsproberEntry.h | 15 ++++- src/modules/partition/core/PartUtils.cpp | 53 +++------------- src/modules/partition/tests/CMakeLists.txt | 12 ++-- src/modules/partition/tests/ConfigTests.cpp | 47 +++++++++++++++ 6 files changed, 140 insertions(+), 51 deletions(-) create mode 100644 src/modules/partition/core/OsproberEntry.cpp diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index 5a92e713e..3af8e4465 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -60,6 +60,7 @@ if(KPMcore_FOUND) core/DeviceList.cpp core/DeviceModel.cpp core/KPMHelpers.cpp + core/OsproberEntry.cpp core/PartitionActions.cpp core/PartitionCoreModule.cpp core/PartitionInfo.cpp diff --git a/src/modules/partition/core/OsproberEntry.cpp b/src/modules/partition/core/OsproberEntry.cpp new file mode 100644 index 000000000..4a59f7d07 --- /dev/null +++ b/src/modules/partition/core/OsproberEntry.cpp @@ -0,0 +1,63 @@ +/* === This file is part of Calamares - === + * + * SPDX-FileCopyrightText: 2015-2016 Teo Mrnjavac + * SPDX-FileCopyrightText: 2018-2019, 2024 Adriaan de Groot + * SPDX-FileCopyrightText: 2019 Collabora Ltd + * SPDX-License-Identifier: GPL-3.0-or-later + * + * Calamares is Free Software: see the License-Identifier above. + * + */ + +#include "OsproberEntry.h" + + +bool +FstabEntry::isValid() const +{ + return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty(); +} + +FstabEntry +FstabEntry::fromEtcFstab( const QString& rawLine ) +{ + QString line = rawLine.simplified(); + if ( line.startsWith( '#' ) ) + { + return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; + } + + QStringList splitLine = line.split( ' ' ); + if ( splitLine.length() != 6 ) + { + return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; + } + + return FstabEntry { + splitLine.at( 0 ), // path, or UUID, or LABEL, etc. + splitLine.at( 1 ), // mount point + splitLine.at( 2 ), // fs type + splitLine.at( 3 ), // options + splitLine.at( 4 ).toInt(), //dump + splitLine.at( 5 ).toInt() //pass + }; +} + +namespace Calamares +{ +FstabEntryList +fromEtcFstabContents( const QStringList& fstabLines ) +{ + FstabEntryList fstabEntries; + + for ( const QString& rawLine : fstabLines ) + { + fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) ); + } + const auto invalidEntries = std::remove_if( + fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); + fstabEntries.erase( invalidEntries, fstabEntries.end() ); + return fstabEntries; +} + +} // namespace Calamares diff --git a/src/modules/partition/core/OsproberEntry.h b/src/modules/partition/core/OsproberEntry.h index 86b7691b8..0db7c9a51 100644 --- a/src/modules/partition/core/OsproberEntry.h +++ b/src/modules/partition/core/OsproberEntry.h @@ -32,11 +32,24 @@ struct FstabEntry * If the string isn't valid (e.g. comment-line, or broken * fstab entry) then the entry that is returned is invalid. */ - static FstabEntry fromEtcFstab( const QString& ); // implemented in Partutils.cpp + static FstabEntry fromEtcFstab( const QString& ); }; typedef QList< FstabEntry > FstabEntryList; +namespace Calamares +{ +/** @brief Returns valid entries from the lines of a fstab file */ +FstabEntryList fromEtcFstabContents( const QStringList& fstabLines ); + +/** @brief Returns valid entries from the byte-contents of a fstab file */ +inline FstabEntryList +fromEtcFstabContents( const QByteArray& contents ) +{ + return fromEtcFstabContents( QString::fromLocal8Bit( contents ).split( '\n' ) ); +} +} // namespace Calamares + struct OsproberEntry { QString prettyName; diff --git a/src/modules/partition/core/PartUtils.cpp b/src/modules/partition/core/PartUtils.cpp index 2b6fdbbea..9818ea71f 100644 --- a/src/modules/partition/core/PartUtils.cpp +++ b/src/modules/partition/core/PartUtils.cpp @@ -254,31 +254,25 @@ lookForFstabEntries( const QString& partitionPath ) if ( fstabFile.open( QIODevice::ReadOnly | QIODevice::Text ) ) { - const QStringList fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' ); - - for ( const QString& rawLine : fstabLines ) - { - fstabEntries.append( FstabEntry::fromEtcFstab( rawLine ) ); - } + const auto fstabLines = QString::fromLocal8Bit( fstabFile.readAll() ).split( '\n' ); fstabFile.close(); - const int lineCount = fstabEntries.count(); - const auto invalidEntries = std::remove_if( - fstabEntries.begin(), fstabEntries.end(), []( const FstabEntry& x ) { return !x.isValid(); } ); - fstabEntries.erase(invalidEntries); - cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << lineCount + + const auto fstabEntries = Calamares::fromEtcFstabContents( fstabLines ); + cDebug() << Logger::SubEntry << "got" << fstabEntries.count() << "fstab entries from" << fstabLines.count() << "lines in" << fstabFile.fileName(); + return fstabEntries; } else { cWarning() << "Could not read fstab from mounted fs"; + return {}; } } else { cWarning() << "Could not mount existing fs"; + return {}; } - - return fstabEntries; } static QString @@ -642,36 +636,3 @@ canonicalFilesystemName( const QString& fsName, FileSystem::Type* fsType ) } } // namespace PartUtils - -/* Implementation of methods for FstabEntry, from OsproberEntry.h */ - -bool -FstabEntry::isValid() const -{ - return !partitionNode.isEmpty() && !mountPoint.isEmpty() && !fsType.isEmpty(); -} - -FstabEntry -FstabEntry::fromEtcFstab( const QString& rawLine ) -{ - QString line = rawLine.simplified(); - if ( line.startsWith( '#' ) ) - { - return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; - } - - QStringList splitLine = line.split( ' ' ); - if ( splitLine.length() != 6 ) - { - return FstabEntry { QString(), QString(), QString(), QString(), 0, 0 }; - } - - return FstabEntry { - splitLine.at( 0 ), // path, or UUID, or LABEL, etc. - splitLine.at( 1 ), // mount point - splitLine.at( 2 ), // fs type - splitLine.at( 3 ), // options - splitLine.at( 4 ).toInt(), //dump - splitLine.at( 5 ).toInt() //pass - }; -} diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index 1cb4ff7a1..3418859c4 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -14,6 +14,12 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) +set(PartitionModule_basic_SRC + ${PartitionModule_SOURCE_DIR}/core/OsproberEntry.cpp + ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp + ${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp + ) + calamares_add_test( partitionjobtest SOURCES @@ -40,10 +46,9 @@ calamares_add_test( partitioncreatelayoutstest SOURCES CreateLayoutsTests.cpp + ${PartitionModule_basic_SRC} ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp - ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionLayout.cpp - ${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp ${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp LIBRARIES calamares::kpmcore Calamares::calamaresui DEFINITIONS ${_partition_defs} @@ -66,9 +71,8 @@ calamares_add_test( partitionconfigtest SOURCES ConfigTests.cpp + ${PartitionModule_basic_SRC} ${PartitionModule_SOURCE_DIR}/core/DeviceModel.cpp - ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp - ${PartitionModule_SOURCE_DIR}/core/PartUtils.cpp ${PartitionModule_SOURCE_DIR}/Config.cpp LIBRARIES calamares::kpmcore Calamares::calamaresui DEFINITIONS diff --git a/src/modules/partition/tests/ConfigTests.cpp b/src/modules/partition/tests/ConfigTests.cpp index eae912f71..0e030d57e 100644 --- a/src/modules/partition/tests/ConfigTests.cpp +++ b/src/modules/partition/tests/ConfigTests.cpp @@ -9,6 +9,7 @@ #include "Config.h" +#include "core/OsproberEntry.h" #include "core/PartUtils.h" #include "GlobalStorage.h" @@ -17,6 +18,7 @@ #include "utils/System.h" #include "utils/Yaml.h" +#include #include #include @@ -35,6 +37,9 @@ private Q_SLOTS: void testLegacySize(); void testAll(); void testWeirdConfig(); + + void testNormalFstab(); + void testWeirdFstab(); }; ConfigTests::ConfigTests() = default; @@ -222,6 +227,48 @@ ConfigTests::testWeirdConfig() } } +void +ConfigTests::testNormalFstab() +{ + const auto contents + = QByteArrayLiteral( "# A FreeBSD fstab\n" + "/dev/nvd0p3 none swap sw 0 0\n" ); + const auto entries = Calamares::fromEtcFstabContents( contents ); + for ( const auto& e : entries ) + { + QVERIFY( e.isValid() ); + } + QCOMPARE( entries.count(), 1 ); +} + +void +ConfigTests::testWeirdFstab() +{ + const auto contents + = QByteArrayLiteral( "# \n" + "UUID=dae80d0a-f6c7-46f4-a04a-6761f2cfd9b6 / ext4 defaults,noatime 0 1\n" + "UUID=423892d5-a929-41a9-a846-f410cf3fe25b swap swap defaults,noatime 0 2\n" + "# another comment\n" + "borked 2\n" + "ok /dev1 ext4 none 0 0\n" + "bogus /dev2 ext4 none no later\n" + "# comment\n" ); + const auto entries = Calamares::fromEtcFstabContents( contents ); + QCOMPARE( entries.count(), 4 ); + + QStringList mountPoints; + for ( const auto& e : entries ) + { + mountPoints.append( e.mountPoint ); + } + mountPoints.sort(); + QCOMPARE( mountPoints, + QStringList() << "/" + << "/dev1" + << "/dev2" + << "swap" ); +} + QTEST_GUILESS_MAIN( ConfigTests ) From d6c6b7c64becb21dc66b5a04679e78a1b08e4d4a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 17:36:27 +0200 Subject: [PATCH 15/21] [libcalamares] Remove the commented-out sponsor info --- src/libcalamares/CalamaresAbout.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/libcalamares/CalamaresAbout.cpp b/src/libcalamares/CalamaresAbout.cpp index 31389c679..9ecf48547 100644 --- a/src/libcalamares/CalamaresAbout.cpp +++ b/src/libcalamares/CalamaresAbout.cpp @@ -22,15 +22,6 @@ static const char s_footer[] "and the Calamares " "translators team." ); -#if 0 -// Blue Systems sponsored until June 2022 -static const char s_sponsor[] = QT_TRANSLATE_NOOP( "AboutData", - "Calamares " - "development is sponsored by
" - "Blue Systems - " - "Liberating Software." ); -#endif - struct Maintainer { unsigned int start; From 4c8e91dc702ab792885ae130fb1a8686dacbc112 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 17:38:35 +0200 Subject: [PATCH 16/21] [libcalamares] Simplify collecting the maintainers info --- src/libcalamares/CalamaresAbout.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/libcalamares/CalamaresAbout.cpp b/src/libcalamares/CalamaresAbout.cpp index 9ecf48547..4ff44356d 100644 --- a/src/libcalamares/CalamaresAbout.cpp +++ b/src/libcalamares/CalamaresAbout.cpp @@ -48,14 +48,12 @@ static constexpr const Maintainer maintainers[] = { static QString aboutMaintainers() { - return std::accumulate( std::cbegin( maintainers ), - std::cend( maintainers ), - QString(), - []( QString& s, const Maintainer& m ) - { - s += m.text(); - return s; - } ); + QStringList s; + for ( const auto& m : maintainers ) + { + s.append( m.text() ); + } + return s.join( QString() ); } static QString From 4440bf3bfc2d8d4fd99fdf0241c18051d298c62c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 17:45:51 +0200 Subject: [PATCH 17/21] [partition] Simplify collecting partition descriptions --- src/modules/partition/PartitionViewStep.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/modules/partition/PartitionViewStep.cpp b/src/modules/partition/PartitionViewStep.cpp index 119bf1baa..db087b59d 100644 --- a/src/modules/partition/PartitionViewStep.cpp +++ b/src/modules/partition/PartitionViewStep.cpp @@ -223,9 +223,15 @@ PartitionViewStep::prettyStatus() const const QList< PartitionCoreModule::SummaryInfo > list = m_core->createSummaryInfo(); cDebug() << "Summary for Partition" << list.length() << choice; - auto joinDiskInfo = [ choice ]( QString& s, const PartitionCoreModule::SummaryInfo& i ) - { return s + diskDescription( 1, i, choice ); }; - const QString diskInfoLabel = std::accumulate( list.begin(), list.end(), QString(), joinDiskInfo ); + const QString diskInfoLabel = [ &choice, &list ]() + { + QStringList s; + for ( const auto& i : list ) + { + s.append( diskDescription( 1, i, choice ) ); + } + return s.join( QString() ); + }(); const QString jobsLabel = jobDescriptions( jobs() ).join( QStringLiteral( "
" ) ); return diskInfoLabel + "
" + jobsLabel; } From 366552f74314673ebccaeaa10d7883d11eb432c2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 17:49:23 +0200 Subject: [PATCH 18/21] Changes: update contributors See #2323 ; Vladislav pointed out the incompatibility but I implemented something different from the PR. --- CHANGES-3.3 | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES-3.3 b/CHANGES-3.3 index a355f90af..daaa7bc2f 100644 --- a/CHANGES-3.3 +++ b/CHANGES-3.3 @@ -10,11 +10,16 @@ the history of the 3.2 series (2018-05 - 2022-08). # 3.3.7 (unreleased) This release contains contributions from (alphabetically by first name): - - Nobody, yet + - Adriaan de Groot + - Vladislav Nepogodin ## Core ## + - Updated clang-formatting + - Some C++20 future-proofing (thanks Vladislav) ## Modules ## + - *partition* module did not filter out invalid fstab entries; + they were not written, either, so no net change. # 3.3.6 (2024-04-16) From fd37beae8b9abc1dee1979cd1f848b8f039904a3 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 20:42:24 +0200 Subject: [PATCH 19/21] Changes: update contributors --- CHANGES-3.3 | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES-3.3 b/CHANGES-3.3 index daaa7bc2f..4b0ed61b8 100644 --- a/CHANGES-3.3 +++ b/CHANGES-3.3 @@ -11,6 +11,7 @@ the history of the 3.2 series (2018-05 - 2022-08). This release contains contributions from (alphabetically by first name): - Adriaan de Groot + - Vincent Penvern - Vladislav Nepogodin ## Core ## @@ -20,6 +21,8 @@ This release contains contributions from (alphabetically by first name): ## Modules ## - *partition* module did not filter out invalid fstab entries; they were not written, either, so no net change. + - *partition* module now has a configurable default check-state + for the encryption checkbox. (thanks Vincent) # 3.3.6 (2024-04-16) From e6e46f1ebd26efdfd9fce04e4f0e162f5136c215 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 23:07:56 +0200 Subject: [PATCH 20/21] [partition] Polishing, formatting --- src/modules/partition/Config.h | 8 ++++---- src/modules/partition/gui/ChoicePage.cpp | 7 ++++--- src/modules/partition/gui/EncryptWidget.cpp | 6 ++++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/modules/partition/Config.h b/src/modules/partition/Config.h index 199ddaf88..8ec139169 100644 --- a/src/modules/partition/Config.h +++ b/src/modules/partition/Config.h @@ -148,10 +148,10 @@ public: /// @brief Is manual partitioning allowed (not explicitly disabled in the config file)? bool allowManualPartitioning() const { return m_allowManualPartitioning; } - /** @brief pre check encryption checkbox. - * - * parameter is used if enableLuksAutomatedPartitioning is true. - * Default value is false + /** @brief Pre-check encryption checkbox. + * + * This is meaningful only if enableLuksAutomatedPartitioning is @c true. + * Default value is @c false */ bool preCheckEncryption() const { return m_preCheckEncryption; } diff --git a/src/modules/partition/gui/ChoicePage.cpp b/src/modules/partition/gui/ChoicePage.cpp index 1d77fd75d..62cf0f6e1 100644 --- a/src/modules/partition/gui/ChoicePage.cpp +++ b/src/modules/partition/gui/ChoicePage.cpp @@ -1584,9 +1584,10 @@ ChoicePage::calculateNextEnabled() const } } - if ( m_config->installChoice() != InstallChoice::Manual - && (m_encryptWidget->isVisible() || - m_encryptWidget->isEncryptionCheckboxChecked())) + // You can have an invisible encryption checkbox, which is + // still checked -- then do the encryption. + if ( m_config->installChoice() != InstallChoice::Manual + && ( m_encryptWidget->isVisible() || m_encryptWidget->isEncryptionCheckboxChecked() ) ) { switch ( m_encryptWidget->state() ) { diff --git a/src/modules/partition/gui/EncryptWidget.cpp b/src/modules/partition/gui/EncryptWidget.cpp index 013018d25..8726df147 100644 --- a/src/modules/partition/gui/EncryptWidget.cpp +++ b/src/modules/partition/gui/EncryptWidget.cpp @@ -70,12 +70,14 @@ EncryptWidget::EncryptWidget( QWidget* parent ) CALAMARES_RETRANSLATE_SLOT( &EncryptWidget::retranslate ); } -bool EncryptWidget::isEncryptionCheckboxChecked() +bool +EncryptWidget::isEncryptionCheckboxChecked() { return m_ui->m_encryptCheckBox->isChecked(); } -void EncryptWidget::setEncryptionCheckbox( bool preCheckEncrypt) +void +EncryptWidget::setEncryptionCheckbox( bool preCheckEncrypt ) { m_ui->m_encryptCheckBox->setChecked( preCheckEncrypt ); } From d6897d6c36b62c8e4a0d9878feefd79a32863875 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 28 Apr 2024 23:11:52 +0200 Subject: [PATCH 21/21] Changes: update contributors --- CHANGES-3.3 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGES-3.3 b/CHANGES-3.3 index 4b0ed61b8..48435a0b4 100644 --- a/CHANGES-3.3 +++ b/CHANGES-3.3 @@ -11,6 +11,8 @@ the history of the 3.2 series (2018-05 - 2022-08). This release contains contributions from (alphabetically by first name): - Adriaan de Groot + - Eugene San + - Evan James - Vincent Penvern - Vladislav Nepogodin @@ -19,6 +21,8 @@ This release contains contributions from (alphabetically by first name): - Some C++20 future-proofing (thanks Vladislav) ## Modules ## + - *fstab* module does not add an encryption keyfile if it does + not exist. (thanks Eugene) - *partition* module did not filter out invalid fstab entries; they were not written, either, so no net change. - *partition* module now has a configurable default check-state @@ -30,7 +34,7 @@ This release contains contributions from (alphabetically by first name): This release contains contributions from (alphabetically by first name): - Adriaan de Groot - Anke Boersma - - Eugene Sam + - Eugene San - Evan James - Harald Sitter - Mike Stemle