diff --git a/src/fs/CMakeLists.txt b/src/fs/CMakeLists.txt index ab0b0f9..f62a1f4 100644 --- a/src/fs/CMakeLists.txt +++ b/src/fs/CMakeLists.txt @@ -17,6 +17,7 @@ set(FS_SRC fs/jfs.cpp fs/linuxswap.cpp fs/luks.cpp + fs/luks2.cpp fs/lvm2_pv.cpp fs/nilfs2.cpp fs/ntfs.cpp @@ -50,6 +51,7 @@ set(FS_LIB_HDRS fs/jfs.h fs/linuxswap.h fs/luks.h + fs/luks2.h fs/lvm2_pv.h fs/nilfs2.h fs/ntfs.h diff --git a/src/fs/filesystem.cpp b/src/fs/filesystem.cpp index fa2413c..c14ec19 100644 --- a/src/fs/filesystem.cpp +++ b/src/fs/filesystem.cpp @@ -66,7 +66,8 @@ const std::array< QColor, FileSystem::__lastType > FileSystem::defaultColorCode QColor( 160,210,180 ), QColor( 255,170,0 ), QColor( 170, 120, 255 ), - QColor( 177, 82, 69 ) + QColor( 177, 82, 69 ), + QColor( 170,30,77 ) } }; @@ -444,6 +445,7 @@ static const KLocalizedString* typeNames() kxi18nc("@item filesystem name", "f2fs"), kxi18nc("@item filesystem name", "udf"), kxi18nc("@item filesystem name", "iso9660"), + kxi18nc("@item filesystem name", "luks2") }; return s; diff --git a/src/fs/filesystem.h b/src/fs/filesystem.h index b4a7d0e..27e9d60 100644 --- a/src/fs/filesystem.h +++ b/src/fs/filesystem.h @@ -87,8 +87,9 @@ public: F2fs = 25, Udf = 26, Iso9660 = 27, + Luks2 = 28, - __lastType = 28 + __lastType = 29 }; /** The type of support for a given FileSystem action */ diff --git a/src/fs/filesystemfactory.cpp b/src/fs/filesystemfactory.cpp index fcd1136..78f21c5 100644 --- a/src/fs/filesystemfactory.cpp +++ b/src/fs/filesystemfactory.cpp @@ -35,6 +35,7 @@ #include "fs/jfs.h" #include "fs/linuxswap.h" #include "fs/luks.h" +#include "fs/luks2.h" #include "fs/lvm2_pv.h" #include "fs/nilfs2.h" #include "fs/ntfs.h" @@ -75,6 +76,7 @@ void FileSystemFactory::init() m_FileSystems.insert(FileSystem::Jfs, new FS::jfs(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::LinuxSwap, new FS::linuxswap(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Luks, new FS::luks(-1, -1, -1, QString())); + m_FileSystems.insert(FileSystem::Luks2, new FS::luks2(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Lvm2_PV, new FS::lvm2_pv(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Nilfs2, new FS::nilfs2(-1, -1, -1, QString())); m_FileSystems.insert(FileSystem::Ntfs, new FS::ntfs(-1, -1, -1, QString())); @@ -123,6 +125,7 @@ FileSystem* FileSystemFactory::create(FileSystem::Type t, qint64 firstsector, qi case FileSystem::Jfs: fs = new FS::jfs(firstsector, lastsector, sectorsused, label); break; case FileSystem::LinuxSwap: fs = new FS::linuxswap(firstsector, lastsector, sectorsused, label); break; case FileSystem::Luks: fs = new FS::luks(firstsector, lastsector, sectorsused, label); break; + case FileSystem::Luks2: fs = new FS::luks2(firstsector, lastsector, sectorsused, label); break; case FileSystem::Lvm2_PV: fs = new FS::lvm2_pv(firstsector, lastsector, sectorsused, label); break; case FileSystem::Nilfs2: fs = new FS::nilfs2(firstsector, lastsector, sectorsused, label); break; case FileSystem::Ntfs: fs = new FS::ntfs(firstsector, lastsector, sectorsused, label); break; @@ -138,10 +141,11 @@ FileSystem* FileSystemFactory::create(FileSystem::Type t, qint64 firstsector, qi default: break; } - if (fs != nullptr) + if (fs != nullptr) { fs->setUUID(uuid); + fs->setSectorSize(sectorSize); + } - fs->setSectorSize(sectorSize); return fs; } diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 91402c2..5f4cfe2 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -61,8 +61,9 @@ FileSystem::CommandSupportType luks::m_GetUUID = FileSystem::cmdSupportNone; luks::luks(qint64 firstsector, qint64 lastsector, qint64 sectorsused, - const QString& label) - : FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::Luks) + const QString& label, + FileSystem::Type t) + : FileSystem(firstsector, lastsector, sectorsused, label, t) , m_innerFs(nullptr) , m_isCryptOpen(false) , m_cryptsetupFound(m_Create != cmdSupportNone) diff --git a/src/fs/luks.h b/src/fs/luks.h index 0e414a3..e7221c8 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -26,7 +26,7 @@ #include "fs/filesystem.h" #include -#include +#include class Report; @@ -40,7 +40,7 @@ namespace FS class LIBKPMCORE_EXPORT luks : public FileSystem { public: - luks(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label); + luks(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, FileSystem::Type t = FileSystem::Luks); ~luks() override; public: @@ -199,7 +199,7 @@ public: static CommandSupportType m_UpdateUUID; static CommandSupportType m_GetUUID; -private: +protected: mutable FileSystem* m_innerFs; mutable bool m_isCryptOpen; diff --git a/src/plugins/sfdisk/sfdiskbackend.cpp b/src/plugins/sfdisk/sfdiskbackend.cpp index bc0d326..69079b4 100644 --- a/src/plugins/sfdisk/sfdiskbackend.cpp +++ b/src/plugins/sfdisk/sfdiskbackend.cpp @@ -28,6 +28,7 @@ #include "fs/filesystemfactory.h" #include "fs/luks.h" +#include "fs/luks2.h" #include "util/globallog.h" #include "util/externalcommand.h" @@ -232,7 +233,7 @@ void SfdiskBackend::scanDevicePartitions(Device& d, const QJsonArray& jsonPartit QString mountPoint; bool mounted; // sfdisk does not handle LUKS partitions - if (fs->type() == FileSystem::Luks) { + if (fs->type() == FileSystem::Luks || fs->type() == FileSystem::Luks2) { r |= PartitionRole::Luks; FS::luks* luksFs = static_cast(fs); luksFs->initLUKS(); @@ -339,7 +340,7 @@ FileSystem::Type SfdiskBackend::detectFileSystem(const QString& partitionPath) if (version == QStringLiteral("1")) rval = FileSystem::Luks; else if (version == QStringLiteral("2")) { - rval = FileSystem::Luks; + rval = FileSystem::Luks2; } } else if (s == QStringLiteral("exfat")) rval = FileSystem::Exfat;