From 0a8a5887dff002ed0249215414e5741137e65012 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 31 Mar 2016 18:43:38 +0200 Subject: [PATCH 01/57] Bring back LUKS code which was previously merged+reverted. Revert "Revert merge of branch luks-decorator." This reverts commit efd3179d9508d3d97b5aa1c54e5b817a305538ea. Messages: FS::luks is now a decorator for an actual FS composed inside. Implement cryptOpen/cryptClose/mount/unmount operations. detectFileSystem, which only uses blkid, is now in FileSystem.cpp. FileSystem::mount now requires a mountPoint. Use umount -A to immediately umount all mount points in unmountCmds. Add override keywords, TODO: add them everywhere. LibPartedBackend no longer links against libblkid. Fix LUKS handling in LibPartedBackend::scanDevicePartitions. Allow detecting FS::Type by path, and remove libparted workaround. FS detection now only uses blkid (from util-linux). --- src/core/partition.cpp | 9 +- src/fs/filesystem.cpp | 61 ++++- src/fs/filesystem.h | 6 +- src/fs/linuxswap.cpp | 4 +- src/fs/linuxswap.h | 8 +- src/fs/luks.cpp | 256 ++++++++++++++++++--- src/fs/luks.h | 30 ++- src/plugins/libparted/CMakeLists.txt | 2 +- src/plugins/libparted/libpartedbackend.cpp | 55 +---- src/plugins/libparted/libpartedbackend.h | 1 + src/util/CMakeLists.txt | 3 + src/util/helpers.cpp | 6 + src/util/helpers.h | 7 +- 13 files changed, 356 insertions(+), 92 deletions(-) diff --git a/src/core/partition.cpp b/src/core/partition.cpp index 5feaf85..5c8c200 100644 --- a/src/core/partition.cpp +++ b/src/core/partition.cpp @@ -1,5 +1,6 @@ /************************************************************************* * Copyright (C) 2008 by Volker Lanz * + * Copyright (C) 2015 by Teo Mrnjavac * * Copyright (C) 2016 by Andrius Štikonas * * * * This program is free software; you can redistribute it and/or * @@ -293,7 +294,7 @@ bool Partition::mount(Report& report) bool success = false; if (fileSystem().canMount(deviceNode())) - success = fileSystem().mount(deviceNode()); + success = fileSystem().mount(deviceNode(), mountPoint()); else { ExternalCommand mountCmd(report, QStringLiteral("mount"), QStringList() << QStringLiteral("-v") << deviceNode() << mountPoint()); if (mountCmd.run() && mountCmd.exitCode() == 0) @@ -322,7 +323,11 @@ bool Partition::unmount(Report& report) setMountPoint(QString()); } else { - ExternalCommand umountCmd(report, QStringLiteral("umount"), QStringList() << QStringLiteral("-v") << deviceNode()); + ExternalCommand umountCmd(report, + QStringLiteral("umount"), + { QStringLiteral("-v"), + QStringLiteral("-A"), + deviceNode() }); if (!umountCmd.run() || umountCmd.exitCode() != 0) success = false; } diff --git a/src/fs/filesystem.cpp b/src/fs/filesystem.cpp index f327ff7..b3e233c 100644 --- a/src/fs/filesystem.cpp +++ b/src/fs/filesystem.cpp @@ -1,5 +1,6 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * + * Copyright (C) 2015 by Teo Mrnjavac * * Copyright (C) 2016 by Andrius Štikonas * * * * This program is free software; you can redistribute it and/or * @@ -22,8 +23,10 @@ #include "util/capacity.h" #include + #include +#include const std::array< QColor, FileSystem::__lastType > FileSystem::defaultColorCode = { @@ -105,6 +108,61 @@ static QString readBlkIdValue(const QString& deviceNode, const QString& tag) return rval; } +FileSystem::Type FileSystem::detectFileSystem(const QString& partitionPath) +{ + FileSystem::Type rval = FileSystem::Unknown; + + blkid_cache cache; + if (blkid_get_cache(&cache, nullptr) == 0) { + blkid_dev dev; + + if ((dev = blkid_get_dev(cache, + partitionPath.toLocal8Bit().constData(), + BLKID_DEV_NORMAL)) != nullptr) { + QString s = QString::fromUtf8(blkid_get_tag_value(cache, + "TYPE", + partitionPath.toLocal8Bit().constData())); + + if (s == QStringLiteral("ext2")) rval = FileSystem::Ext2; + else if (s == QStringLiteral("ext3")) rval = FileSystem::Ext3; + else if (s.startsWith(QStringLiteral("ext4"))) rval = FileSystem::Ext4; + else if (s == QStringLiteral("swap")) rval = FileSystem::LinuxSwap; + else if (s == QStringLiteral("ntfs")) rval = FileSystem::Ntfs; + else if (s == QStringLiteral("reiserfs")) rval = FileSystem::ReiserFS; + else if (s == QStringLiteral("reiser4")) rval = FileSystem::Reiser4; + else if (s == QStringLiteral("xfs")) rval = FileSystem::Xfs; + else if (s == QStringLiteral("jfs")) rval = FileSystem::Jfs; + else if (s == QStringLiteral("hfs")) rval = FileSystem::Hfs; + else if (s == QStringLiteral("hfsplus")) rval = FileSystem::HfsPlus; + else if (s == QStringLiteral("ufs")) rval = FileSystem::Ufs; + else if (s == QStringLiteral("vfat")) { + // libblkid uses SEC_TYPE to distinguish between FAT16 and FAT32 + QString st = QString::fromUtf8(blkid_get_tag_value(cache, + "SEC_TYPE", + partitionPath.toLocal8Bit().constData())); + if (st == QStringLiteral("msdos")) + rval = FileSystem::Fat16; + else + rval = FileSystem::Fat32; + } else if (s == QStringLiteral("btrfs")) rval = FileSystem::Btrfs; + else if (s == QStringLiteral("ocfs2")) rval = FileSystem::Ocfs2; + else if (s == QStringLiteral("zfs_member")) rval = FileSystem::Zfs; + else if (s == QStringLiteral("hpfs")) rval = FileSystem::Hpfs; + else if (s == QStringLiteral("crypto_LUKS")) rval = FileSystem::Luks; + else if (s == QStringLiteral("exfat")) rval = FileSystem::Exfat; + else if (s == QStringLiteral("nilfs2")) rval = FileSystem::Nilfs2; + else if (s == QStringLiteral("LVM2_member")) rval = FileSystem::Lvm2_PV; + else if (s == QStringLiteral("f2fs")) rval = FileSystem::F2fs; + else + qWarning() << "blkid: unknown file system type " << s << " on " << partitionPath; + } + + blkid_put_cache(cache); + } + + return rval; +} + /** Reads the label for this FileSystem @param deviceNode the device node for the Partition the FileSystem is on @return the FileSystem label or an empty string in case of error @@ -387,8 +445,9 @@ void FileSystem::move(qint64 newStartSector) @param mountPoint the mount point to mount the FileSystem on @return true on success */ -bool FileSystem::mount(const QString& mountPoint) +bool FileSystem::mount(const QString &deviceNode, const QString &mountPoint) { + Q_UNUSED(deviceNode); Q_UNUSED(mountPoint); return false; diff --git a/src/fs/filesystem.h b/src/fs/filesystem.h index ecc093a..28a8324 100644 --- a/src/fs/filesystem.h +++ b/src/fs/filesystem.h @@ -1,5 +1,6 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * + * Copyright (C) 2015 by Teo Mrnjavac * * Copyright (C) 2016 by Andrius Štikonas * * * * This program is free software; you can redistribute it and/or * @@ -172,6 +173,7 @@ public: static QString nameForType(FileSystem::Type t); static QList types(); static FileSystem::Type typeForName(const QString& s); + static FileSystem::Type detectFileSystem(const QString& partitionPath); virtual bool canMount(const QString&) const { return false; /**< @return true if this FileSystem can be mounted */ @@ -183,8 +185,8 @@ public: virtual QString mountTitle() const; virtual QString unmountTitle() const; - virtual bool mount(const QString& mountPoint); - virtual bool unmount(const QString& mountPoint); + virtual bool mount(const QString& deviceNode, const QString& mountPoint); + virtual bool unmount(const QString& deviceNode); qint64 firstSector() const { return m_FirstSector; /**< @return the FileSystem's first sector */ diff --git a/src/fs/linuxswap.cpp b/src/fs/linuxswap.cpp index c1b0284..ddabaa9 100644 --- a/src/fs/linuxswap.cpp +++ b/src/fs/linuxswap.cpp @@ -131,8 +131,10 @@ QString linuxswap::unmountTitle() const return i18nc("@title:menu", "Deactivate swap"); } -bool linuxswap::mount(const QString& deviceNode) +bool linuxswap::mount(const QString& deviceNode, const QString& mountPoint) { + Q_UNUSED(mountPoint); + ExternalCommand cmd(QStringLiteral("swapon"), QStringList() << deviceNode); return cmd.run(-1) && cmd.exitCode() == 0; } diff --git a/src/fs/linuxswap.h b/src/fs/linuxswap.h index c4beef6..e7010df 100644 --- a/src/fs/linuxswap.h +++ b/src/fs/linuxswap.h @@ -55,11 +55,11 @@ public: return true; } - virtual bool mount(const QString& deviceNode); - virtual bool unmount(const QString& deviceNode); + virtual bool mount(const QString& deviceNode, const QString& mountPoint) override; + virtual bool unmount(const QString& deviceNode) override; - virtual QString mountTitle() const; - virtual QString unmountTitle() const; + virtual QString mountTitle() const override; + virtual QString unmountTitle() const override; virtual CommandSupportType supportCreate() const { return m_Create; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 7782e11..4daa45a 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -1,6 +1,7 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * * Copyright (C) 2013 by Andrius Štikonas * + * Copyright (C) 2015 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -18,11 +19,14 @@ #include "fs/luks.h" +#include "fs/filesystemfactory.h" + #include "gui/decryptluksdialog.h" #include "util/capacity.h" #include "util/externalcommand.h" +#include #include #include #include @@ -45,11 +49,22 @@ FileSystem::CommandSupportType luks::m_SetLabel = FileSystem::cmdSupportNone; FileSystem::CommandSupportType luks::m_UpdateUUID = FileSystem::cmdSupportNone; 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) +luks::luks(qint64 firstsector, + qint64 lastsector, + qint64 sectorsused, + const QString& label) + : FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::Luks) + , m_innerFs(nullptr) + , m_isCryptOpen(false) + , m_isMounted(false) { } +luks::~luks() +{ + delete m_innerFs; +} + void luks::init() { m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; @@ -88,39 +103,236 @@ qint64 luks::minCapacity() const QString luks::mountTitle() const { - return i18nc("@title:menu", "Decrypt"); + return i18nc("@title:menu", "Mount"); } QString luks::unmountTitle() const +{ + return i18nc("@title:menu", "Unmount"); +} + +QString luks::cryptOpenTitle() const +{ + return i18nc("@title:menu", "Decrypt"); +} + +QString luks::cryptCloseTitle() const { return i18nc("@title:menu", "Deactivate"); } -bool luks::mount(const QString& deviceNode) +bool luks::canMount(const QString& deviceNode) const { - QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 + return m_isCryptOpen && + !m_isMounted && + m_innerFs && + m_innerFs->canMount(deviceNode); +} - if (dlg->exec() == QDialog::Accepted) +bool luks::canUnmount(const QString& deviceNode) const +{ + return m_isCryptOpen && + m_isMounted && + m_innerFs && + m_innerFs->canUnmount(deviceNode); +} + +bool luks::isMounted() const +{ + return m_isCryptOpen && m_isMounted; +} + +bool luks::canCryptOpen(const QString&) const +{ + return !m_isCryptOpen && !m_isMounted; +} + +bool luks::canCryptClose(const QString&) const +{ + return m_isCryptOpen && !m_isMounted; +} + +bool luks::isCryptOpen() const +{ + return m_isCryptOpen; +} + +bool luks::cryptOpen(const QString& deviceNode) +{ + if (m_isCryptOpen) { - std::vector commands; - commands.push_back(QStringLiteral("echo")); - commands.push_back(QStringLiteral("cryptsetup")); - std::vector args; - args.push_back(QStringList() << dlg->luksPassphrase().text()); - args.push_back(QStringList() << QStringLiteral("luksOpen") << deviceNode << dlg->luksName().text()); - ExternalCommand cmd(commands, args); - delete dlg; - return cmd.run(-1) && cmd.exitCode() == 0; + if (!mapperName(deviceNode).isEmpty()) + { + qWarning() << "LUKS device" << deviceNode + << "already decrypted." + << "Cannot decrypt again."; + return false; + } + else + { + qWarning() << "LUKS device" << deviceNode + << "reportedly decrypted but mapper node not found." + << "Marking device as NOT decrypted and trying to " + "decrypt again anyway."; + m_isCryptOpen = false; + } } + QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 + + if (dlg->exec() != QDialog::Accepted) + { + delete dlg; + return false; + } + + std::vector commands; + commands.push_back(QStringLiteral("echo")); + commands.push_back(QStringLiteral("cryptsetup")); + std::vector args; + args.push_back(QStringList() << dlg->luksPassphrase().text()); + args.push_back(QStringList() << QStringLiteral("luksOpen") << deviceNode << dlg->luksName().text()); delete dlg; + + ExternalCommand cmd(commands, args); + if (!(cmd.run(-1) && cmd.exitCode() == 0)) + return false; + + if (m_innerFs) + { + delete m_innerFs; + m_innerFs = nullptr; + } + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + FileSystem::Type innerFsType = detectFileSystem(mapperNode); + m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, + *this); + + m_isCryptOpen = (m_innerFs != nullptr); + + if (m_isCryptOpen) + return true; + return false; +} + +bool luks::cryptClose(const QString& deviceNode) +{ + if (!m_isCryptOpen) + { + qWarning() << "Cannot close LUKS device" << deviceNode + << "because it's not open."; + return false; + } + + if (m_isMounted) + { + qWarning() << "Cannot close LUKS device" << deviceNode + << "because the filesystem is mounted."; + return false; + } + + ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksClose") << mapperName(deviceNode)); + if (!(cmd.run(-1) && cmd.exitCode() == 0)) + return false; + + delete m_innerFs; + m_innerFs = nullptr; + + m_isCryptOpen = (m_innerFs != nullptr); + + if (!m_isCryptOpen) + return true; + return false; +} + +bool luks::mount(const QString& deviceNode, const QString& mountPoint) +{ + if (!m_isCryptOpen) + { + qWarning() << "Cannot mount device" << deviceNode + << "before decrypting it first."; + return false; + } + + if (m_isMounted) + { + qWarning() << "Cannot mount device" << deviceNode + << "because it's already mounted."; + return false; + } + + Q_ASSERT(m_innerFs); + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + if (m_innerFs->canMount(mapperNode)) + { + if (m_innerFs->mount(mapperNode, mountPoint)) + { + m_isMounted = true; + return true; + } + } + else { + ExternalCommand mountCmd( + QStringLiteral("mount"), + { QStringLiteral("-v"), mapperNode, mountPoint }); + if (mountCmd.run() && mountCmd.exitCode() == 0) + { + m_isMounted = true; + return true; + } + } return false; } bool luks::unmount(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksClose") << mapperName(deviceNode)); - return cmd.run(-1) && cmd.exitCode() == 0; + if (!m_isCryptOpen) + { + qWarning() << "Cannot unmount device" << deviceNode + << "before decrypting it first."; + return false; + } + + if (!m_isMounted) + { + qWarning() << "Cannot unmount device" << deviceNode + << "because it's not mounted."; + return false; + } + + Q_ASSERT(m_innerFs); + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + if (m_innerFs->canUnmount(mapperNode)) + { + if (m_innerFs->unmount(mapperNode)) + { + m_isMounted = false; + return true; + } + } + else { + ExternalCommand unmountCmd( + QStringLiteral("mount"), + { QStringLiteral("-v"), QStringLiteral("-A"), mapperNode }); + if (unmountCmd.run() && unmountCmd.exitCode() == 0) + { + m_isMounted = false; + return true; + } + } + return false; } QString luks::readUUID(const QString& deviceNode) const @@ -140,16 +352,6 @@ bool luks::updateUUID(Report& report, const QString& deviceNode) const return cmd.run(-1) && cmd.exitCode() == 0; } -bool luks::canMount(const QString&) const -{ - return true; -} - -bool luks::canUnmount(const QString&) const -{ - return true; -} - QString luks::mapperName(const QString& deviceNode) { ExternalCommand cmd(QStringLiteral("find"), QStringList() << QStringLiteral("/dev/mapper/") << QStringLiteral("-exec") << QStringLiteral("cryptsetup") << QStringLiteral("status") << QStringLiteral("{}") << QStringLiteral(";")); diff --git a/src/fs/luks.h b/src/fs/luks.h index 2a0b80e..949585c 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -1,6 +1,7 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * * Copyright (C) 2013 by Andrius Štikonas * + * Copyright (C) 2015 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -24,7 +25,8 @@ #include "../fs/filesystem.h" -#include +#include +#include class Report; @@ -39,6 +41,7 @@ class LIBKPMCORE_EXPORT luks : public FileSystem { public: luks(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label); + virtual ~luks(); public: static void init(); @@ -86,13 +89,24 @@ public: virtual QString readUUID(const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual QString mountTitle() const override; + virtual QString unmountTitle() const override; + QString cryptOpenTitle() const; + QString cryptCloseTitle() const; + virtual bool canMount(const QString&) const; virtual bool canUnmount(const QString&) const; + bool isMounted() const; - virtual bool mount(const QString& deviceNode); - virtual bool unmount(const QString& deviceNode); - virtual QString mountTitle() const; - virtual QString unmountTitle() const; + bool canCryptOpen(const QString& deviceNode) const; + bool canCryptClose(const QString& deviceNode) const; + bool isCryptOpen() const; + + bool cryptOpen(const QString& deviceNode); + bool cryptClose(const QString& deviceNode); + + virtual bool mount(const QString& deviceNode, const QString& mountPoint) override; + virtual bool unmount(const QString& deviceNode) override; static QString mapperName(const QString& deviceNode); @@ -115,6 +129,12 @@ public: static CommandSupportType m_SetLabel; static CommandSupportType m_UpdateUUID; static CommandSupportType m_GetUUID; + +private: + FileSystem* m_innerFs; + + bool m_isCryptOpen; + bool m_isMounted; }; } diff --git a/src/plugins/libparted/CMakeLists.txt b/src/plugins/libparted/CMakeLists.txt index ec14b15..3471fa0 100644 --- a/src/plugins/libparted/CMakeLists.txt +++ b/src/plugins/libparted/CMakeLists.txt @@ -29,7 +29,7 @@ file (GLOB pmlibpartedbackendplugin_SRCS *.cpp) add_library(pmlibpartedbackendplugin SHARED ${pmlibpartedbackendplugin_SRCS}) -target_link_libraries(pmlibpartedbackendplugin kpmcore ${LIBPARTED_LIBS} ${BLKID_LIBRARIES} KF5::KIOCore KF5::I18n) +target_link_libraries(pmlibpartedbackendplugin kpmcore ${LIBPARTED_LIBS} KF5::KIOCore KF5::I18n) install(TARGETS pmlibpartedbackendplugin DESTINATION ${KDE_INSTALL_PLUGINDIR}) kcoreaddons_desktop_to_json(pmlibpartedbackendplugin pmlibpartedbackendplugin.desktop) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 0560f8d..7021ae5 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -1,7 +1,7 @@ /************************************************************************* * Copyright (C) 2008-2012 by Volker Lanz * + * Copyright (C) 2015-2016 by Teo Mrnjavac * * Copyright (C) 2016 by Andrius Štikonas * - * Copyright (C) 2016 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -50,7 +50,6 @@ #include #include -#include K_PLUGIN_FACTORY_WITH_JSON(LibPartedBackendFactory, "pmlibpartedbackendplugin.json", registerPlugin();) @@ -354,8 +353,10 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD QString mountPoint; bool mounted; if (fs->type() == FileSystem::Luks) { - mountPoint = FS::luks::mapperName(node); - mounted = (mountPoint != QString()) ? true : false; + mounted = dynamic_cast(fs)->isMounted(); + mountPoint = mountPoints.findByDevice(FS::luks::mapperName(node)) ? + mountPoints.findByDevice(FS::luks::mapperName(node))->mountPoint() : + QString(); } else { mountPoint = mountPoints.findByDevice(node) ? mountPoints.findByDevice(node)->mountPoint() : QString(); mounted = ped_partition_is_busy(pedPartition); @@ -486,50 +487,12 @@ FileSystem::Type LibPartedBackend::detectFileSystem(PedPartition* pedPartition) { FileSystem::Type rval = FileSystem::Unknown; - blkid_cache cache; - char* pedPath = nullptr; + char* pedPath = ped_partition_get_path(pedPartition); - if (blkid_get_cache(&cache, nullptr) == 0 && (pedPath = ped_partition_get_path(pedPartition))) { - blkid_dev dev; + if (pedPath) + rval = FileSystem::detectFileSystem(QString::fromUtf8(pedPath)); - if ((dev = blkid_get_dev(cache, pedPath, BLKID_DEV_NORMAL)) != nullptr) { - QString s = QString::fromUtf8(blkid_get_tag_value(cache, "TYPE", pedPath)); - if (s == QStringLiteral("ext2")) rval = FileSystem::Ext2; - else if (s == QStringLiteral("ext3")) rval = FileSystem::Ext3; - else if (s.startsWith(QStringLiteral("ext4"))) rval = FileSystem::Ext4; - else if (s == QStringLiteral("swap")) rval = FileSystem::LinuxSwap; - else if (s == QStringLiteral("ntfs")) rval = FileSystem::Ntfs; - else if (s == QStringLiteral("reiserfs")) rval = FileSystem::ReiserFS; - else if (s == QStringLiteral("reiser4")) rval = FileSystem::Reiser4; - else if (s == QStringLiteral("xfs")) rval = FileSystem::Xfs; - else if (s == QStringLiteral("jfs")) rval = FileSystem::Jfs; - else if (s == QStringLiteral("hfs")) rval = FileSystem::Hfs; - else if (s == QStringLiteral("hfsplus")) rval = FileSystem::HfsPlus; - else if (s == QStringLiteral("ufs")) rval = FileSystem::Ufs; - else if (s == QStringLiteral("vfat")) { - // libblkid uses SEC_TYPE to distinguish between FAT16 and FAT32 - QString st = QString::fromUtf8(blkid_get_tag_value(cache, "SEC_TYPE", pedPath)); - if (st == QStringLiteral("msdos")) - rval = FileSystem::Fat16; - else - rval = FileSystem::Fat32; - } else if (s == QStringLiteral("btrfs")) rval = FileSystem::Btrfs; - else if (s == QStringLiteral("ocfs2")) rval = FileSystem::Ocfs2; - else if (s == QStringLiteral("zfs_member")) rval = FileSystem::Zfs; - else if (s == QStringLiteral("hpfs")) rval = FileSystem::Hpfs; - else if (s == QStringLiteral("crypto_LUKS")) rval = FileSystem::Luks; - else if (s == QStringLiteral("exfat")) rval = FileSystem::Exfat; - else if (s == QStringLiteral("nilfs2")) rval = FileSystem::Nilfs2; - else if (s == QStringLiteral("LVM2_member")) rval = FileSystem::Lvm2_PV; - else if (s == QStringLiteral("f2fs")) rval = FileSystem::F2fs; - else - qWarning() << "blkid: unknown file system type " << s << " on " << pedPath; - } - - blkid_put_cache(cache); - - free(pedPath); - } + free(pedPath); return rval; } diff --git a/src/plugins/libparted/libpartedbackend.h b/src/plugins/libparted/libpartedbackend.h index 7f1e38a..f4853af 100644 --- a/src/plugins/libparted/libpartedbackend.h +++ b/src/plugins/libparted/libpartedbackend.h @@ -1,5 +1,6 @@ /************************************************************************* * Copyright (C) 2008, 2010 by Volker Lanz * + * Copyright (C) 2015 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index c8b2ea3..443afad 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,3 +1,5 @@ +set_source_files_properties( util/ismounted.c PROPERTIES LANGUAGE CXX ) + set(UTIL_SRC util/capacity.cpp util/externalcommand.cpp @@ -5,6 +7,7 @@ set(UTIL_SRC util/helpers.cpp util/htmlreport.cpp util/report.cpp + util/ismounted.c ) set(UTIL_LIB_HDRS diff --git a/src/util/helpers.cpp b/src/util/helpers.cpp index 9a17311..fd81e2e 100644 --- a/src/util/helpers.cpp +++ b/src/util/helpers.cpp @@ -18,6 +18,7 @@ #include "util/helpers.h" #include "../util/globallog.h" +#include "../util/ismounted.h" #include "../ops/operation.h" @@ -67,3 +68,8 @@ void showColumnsContextMenu(const QPoint& p, QTreeWidget& tree) tree.resizeColumnToContents(action->data().toInt()); } } + +bool isMounted(const QString& deviceNode) +{ + return is_mounted(deviceNode.toLatin1().constData()); +} diff --git a/src/util/helpers.h b/src/util/helpers.h index fe033ad..9d549df 100644 --- a/src/util/helpers.h +++ b/src/util/helpers.h @@ -19,11 +19,10 @@ #define HELPERS__H -#include "../util/libpartitionmanagerexport.h" - #include "../fs/filesystem.h" -class KAboutData; +#include "../util/libpartitionmanagerexport.h" + class QString; class QPoint; class QTreeWidget; @@ -36,4 +35,6 @@ LIBKPMCORE_EXPORT void showColumnsContextMenu(const QPoint& p, QTreeWidget& tree LIBKPMCORE_EXPORT bool checkAccessibleDevices(); +LIBKPMCORE_EXPORT bool isMounted(const QString& deviceNode); + #endif From 45311941caffd4fea0f6815d3c44e2b583858921 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 10 Sep 2015 14:47:13 +0200 Subject: [PATCH 02/57] Add mounted state accessors to FS::luks. --- src/fs/luks.cpp | 11 +++++++++++ src/fs/luks.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 4daa45a..7d6157b 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -142,6 +142,11 @@ bool luks::isMounted() const return m_isCryptOpen && m_isMounted; } +void luks::setMounted(bool mounted) +{ + m_isMounted = mounted; +} + bool luks::canCryptOpen(const QString&) const { return !m_isCryptOpen && !m_isMounted; @@ -157,6 +162,11 @@ bool luks::isCryptOpen() const return m_isCryptOpen; } +void luks::setCryptOpen(bool cryptOpen) +{ + m_isCryptOpen = cryptOpen; +} + bool luks::cryptOpen(const QString& deviceNode) { if (m_isCryptOpen) @@ -417,4 +427,5 @@ QString luks::getPayloadOffset(const QString& deviceNode) } return QStringLiteral("---"); } + } diff --git a/src/fs/luks.h b/src/fs/luks.h index 949585c..5006fc7 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -97,10 +97,12 @@ public: virtual bool canMount(const QString&) const; virtual bool canUnmount(const QString&) const; bool isMounted() const; + void setMounted(bool mounted); bool canCryptOpen(const QString& deviceNode) const; bool canCryptClose(const QString& deviceNode) const; bool isCryptOpen() const; + void setCryptOpen(bool cryptOpen); bool cryptOpen(const QString& deviceNode); bool cryptClose(const QString& deviceNode); From 49cde487cc2ec8eca78a08c34b213a2093a5db79 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 10 Sep 2015 14:47:50 +0200 Subject: [PATCH 03/57] Check if the mapper node is mounted. --- src/plugins/libparted/libpartedbackend.cpp | 30 +++++++++++++++++----- 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 7021ae5..f7a6177 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -351,14 +351,32 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD // libparted does not handle LUKS partitions QString mountPoint; - bool mounted; + bool mounted = false; if (fs->type() == FileSystem::Luks) { - mounted = dynamic_cast(fs)->isMounted(); - mountPoint = mountPoints.findByDevice(FS::luks::mapperName(node)) ? - mountPoints.findByDevice(FS::luks::mapperName(node))->mountPoint() : - QString(); + FS::luks* luksFs = dynamic_cast(fs); + QString mapperNode = FS::luks::mapperName(node); + bool isCryptOpen = !mapperNode.isEmpty(); + luksFs->setCryptOpen(isCryptOpen); + + if (isCryptOpen) { + mountPoint = mountPoints.findByDevice(mapperNode) ? + mountPoints.findByDevice(mapperNode)->mountPoint() : + QString(); + // We cannot use libparted to check the mounted status because + // we don't have a PedPartition for the mapper device, so we use + // check_mount_point from util-linux instead, defined in the + // private header ismounted.h and copied into KPMcore & wrapped + // in helpers.h for convenience. + mounted = isMounted(mapperNode); + } else { + mounted = false; + } + + luksFs->setMounted(mounted); } else { - mountPoint = mountPoints.findByDevice(node) ? mountPoints.findByDevice(node)->mountPoint() : QString(); + mountPoint = mountPoints.findByDevice(node) ? + mountPoints.findByDevice(node)->mountPoint() : + QString(); mounted = ped_partition_is_busy(pedPartition); } From 1aff54c0470439775e05d1540882dcc296a0f9d0 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 7 Apr 2016 16:13:29 +0200 Subject: [PATCH 04/57] Use C++11 initialization instead of << for readability. --- src/fs/luks.cpp | 48 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 7d6157b..3fd2a94 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -93,7 +93,8 @@ bool luks::supportToolFound() const FileSystem::SupportTool luks::supportToolName() const { - return SupportTool(QStringLiteral("cryptsetup"), QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); + return SupportTool(QStringLiteral("cryptsetup"), + QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); } qint64 luks::minCapacity() const @@ -200,8 +201,10 @@ bool luks::cryptOpen(const QString& deviceNode) commands.push_back(QStringLiteral("echo")); commands.push_back(QStringLiteral("cryptsetup")); std::vector args; - args.push_back(QStringList() << dlg->luksPassphrase().text()); - args.push_back(QStringList() << QStringLiteral("luksOpen") << deviceNode << dlg->luksName().text()); + args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ QStringLiteral("luksOpen"), + deviceNode, + dlg->luksName().text() }); delete dlg; ExternalCommand cmd(commands, args); @@ -245,7 +248,8 @@ bool luks::cryptClose(const QString& deviceNode) return false; } - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksClose") << mapperName(deviceNode)); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksClose"), mapperName(deviceNode) }); if (!(cmd.run(-1) && cmd.exitCode() == 0)) return false; @@ -347,7 +351,8 @@ bool luks::unmount(const QString& deviceNode) QString luks::readUUID(const QString& deviceNode) const { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksUUID") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksUUID"), deviceNode }); if (cmd.run()) { return cmd.output().simplified(); } @@ -358,15 +363,27 @@ bool luks::updateUUID(Report& report, const QString& deviceNode) const { QUuid uuid = QUuid::createUuid(); - ExternalCommand cmd(report, QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksUUID") << deviceNode << QStringLiteral("--uuid") << uuid.toString()); + ExternalCommand cmd(report, + QStringLiteral("cryptsetup"), + { QStringLiteral("luksUUID"), + deviceNode, + QStringLiteral("--uuid"), + uuid.toString() }); return cmd.run(-1) && cmd.exitCode() == 0; } QString luks::mapperName(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("find"), QStringList() << QStringLiteral("/dev/mapper/") << QStringLiteral("-exec") << QStringLiteral("cryptsetup") << QStringLiteral("status") << QStringLiteral("{}") << QStringLiteral(";")); + ExternalCommand cmd(QStringLiteral("find"), + { QStringLiteral("/dev/mapper/"), + QStringLiteral("-exec"), + QStringLiteral("cryptsetup"), + QStringLiteral("status"), + QStringLiteral("{}"), + QStringLiteral(";") }); if (cmd.run()) { - QRegExp rxDeviceName(QStringLiteral("(/dev/mapper/[A-Za-z0-9-/]+) is active[A-Za-z0-9- \\.\n]+[A-Za-z0-9-: \n]+") + deviceNode); + QRegExp rxDeviceName(QStringLiteral("(/dev/mapper/[A-Za-z0-9-/]+) is " + "active[A-Za-z0-9- \\.\n]+[A-Za-z0-9-: \n]+") + deviceNode); if (rxDeviceName.indexIn(cmd.output()) > -1) return rxDeviceName.cap(1); } @@ -375,7 +392,8 @@ QString luks::mapperName(const QString& deviceNode) QString luks::getCipherName(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksDump") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksDump"), deviceNode }); if (cmd.run()) { QRegExp rxCipherName(QStringLiteral("(?:Cipher name:\\s+)([A-Za-z0-9-]+)")); if (rxCipherName.indexIn(cmd.output()) > -1) @@ -386,7 +404,8 @@ QString luks::getCipherName(const QString& deviceNode) QString luks::getCipherMode(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksDump") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksDump"), deviceNode }); if (cmd.run()) { QRegExp rxCipherMode(QStringLiteral("(?:Cipher mode:\\s+)([A-Za-z0-9-]+)")); if (rxCipherMode.indexIn(cmd.output()) > -1) @@ -397,7 +416,8 @@ QString luks::getCipherMode(const QString& deviceNode) QString luks::getHashName(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksDump") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksDump"), deviceNode }); if (cmd.run()) { QRegExp rxHash(QStringLiteral("(?:Hash spec:\\s+)([A-Za-z0-9-]+)")); if (rxHash.indexIn(cmd.output()) > -1) @@ -408,7 +428,8 @@ QString luks::getHashName(const QString& deviceNode) QString luks::getKeySize(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksDump") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksDump"), deviceNode }); if (cmd.run()) { QRegExp rxKeySize(QStringLiteral("(?:MK bits:\\s+)(\\d+)")); if (rxKeySize.indexIn(cmd.output()) > -1) @@ -419,7 +440,8 @@ QString luks::getKeySize(const QString& deviceNode) QString luks::getPayloadOffset(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksDump") << deviceNode); + ExternalCommand cmd(QStringLiteral("cryptsetup"), + { QStringLiteral("luksDump"), deviceNode }); if (cmd.run()) { QRegExp rxPayloadOffset(QStringLiteral("(?:Payload offset:\\s+)(\\d+)")); if (rxPayloadOffset.indexIn(cmd.output()) > -1) From 1b7909976016acadedeaffa4c0570da27ec09a55 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 12 Apr 2016 11:26:07 +0200 Subject: [PATCH 05/57] Preliminary LUKS create support. --- src/fs/luks.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++- src/fs/luks.h | 5 ++-- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 3fd2a94..b5858ae 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -67,6 +67,7 @@ luks::~luks() void luks::init() { + m_Create = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Copy = cmdSupportCore; m_Move = cmdSupportCore; @@ -74,13 +75,77 @@ void luks::init() m_GetUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; } +bool luks::create(Report& report, const QString& deviceNode) const +{ + + QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 + + if (dlg->exec() != QDialog::Accepted) + { + delete dlg; + return false; + } + + std::vector commands; + commands.push_back(QStringLiteral("echo")); + commands.push_back(QStringLiteral("cryptsetup")); + std::vector args; + args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ QStringLiteral("-s"), + QStringLiteral("512"), + QStringLiteral("luksFormat"), + deviceNode, + QStringLiteral("-") }); + + ExternalCommand createCmd(commands, args); + if (!(createCmd.run(-1) && createCmd.exitCode() == 0)) + return false; + + commands.clear(); + commands.push_back(QStringLiteral("echo")); + commands.push_back(QStringLiteral("cryptsetup")); + args.clear(); + args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ QStringLiteral("luksOpen"), + deviceNode, + dlg->luksName().text() }); + delete dlg; + + ExternalCommand openCmd(commands, args); + if (!(openCmd.run(-1) && openCmd.exitCode() == 0)) + return false; + + if (m_innerFs) + { + delete m_innerFs; + m_innerFs = nullptr; + } + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + + //FIXME: don't hardcode inner fs type + FileSystem::Type innerFsType = FileSystem::Ext4; + m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, + *this); + + m_isCryptOpen = (m_innerFs != nullptr); + + if (m_isCryptOpen) + return true; + return false; + +} + bool luks::supportToolFound() const { return // m_GetUsed != cmdSupportNone && // m_GetLabel != cmdSupportNone && // m_SetLabel != cmdSupportNone && -// m_Create != cmdSupportNone && + m_Create != cmdSupportNone && // m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && // m_Grow != cmdSupportNone && diff --git a/src/fs/luks.h b/src/fs/luks.h index 5006fc7..5bcff08 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -83,6 +83,7 @@ public: return m_GetUUID; } + virtual bool create(Report &report, const QString &deviceNode) const override; virtual qint64 minCapacity() const; virtual SupportTool supportToolName() const; virtual bool supportToolFound() const; @@ -133,9 +134,9 @@ public: static CommandSupportType m_GetUUID; private: - FileSystem* m_innerFs; + mutable FileSystem* m_innerFs; - bool m_isCryptOpen; + mutable bool m_isCryptOpen; bool m_isMounted; }; } From c41f843aff4a6178eecbdd9703222a23151f3f0b Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 13 Apr 2016 15:55:35 +0200 Subject: [PATCH 06/57] Actually create inner fs. --- src/fs/luks.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index b5858ae..b11c4a0 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -130,6 +130,7 @@ bool luks::create(Report& report, const QString& deviceNode) const FileSystem::Type innerFsType = FileSystem::Ext4; m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, *this); + m_innerFs->create(report, mapperNode); m_isCryptOpen = (m_innerFs != nullptr); From 3f10c8e2d55f411de3b8200d0ccb933da0c305f8 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 13 Apr 2016 15:56:07 +0200 Subject: [PATCH 07/57] We don't need the dash because ExternalCommand already does the piping. --- src/fs/luks.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index b11c4a0..f38a151 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -94,8 +94,7 @@ bool luks::create(Report& report, const QString& deviceNode) const args.push_back({ QStringLiteral("-s"), QStringLiteral("512"), QStringLiteral("luksFormat"), - deviceNode, - QStringLiteral("-") }); + deviceNode }); ExternalCommand createCmd(commands, args); if (!(createCmd.run(-1) && createCmd.exitCode() == 0)) From 7993257541dd25e956b14c048a774b2772bda57d Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 13 Apr 2016 17:01:53 +0200 Subject: [PATCH 08/57] Inner fs mount checks must use mapper name. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index f38a151..bd06520 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -192,7 +192,7 @@ bool luks::canMount(const QString& deviceNode) const return m_isCryptOpen && !m_isMounted && m_innerFs && - m_innerFs->canMount(deviceNode); + m_innerFs->canMount(mapperName(deviceNode)); } bool luks::canUnmount(const QString& deviceNode) const @@ -200,7 +200,7 @@ bool luks::canUnmount(const QString& deviceNode) const return m_isCryptOpen && m_isMounted && m_innerFs && - m_innerFs->canUnmount(deviceNode); + m_innerFs->canUnmount(mapperName(deviceNode)); } bool luks::isMounted() const From 9970fb7b1d4ec0bef338050caf3659e9cb1bb2f4 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 13 Apr 2016 18:32:21 +0200 Subject: [PATCH 09/57] Make sure to create the inner fs when detecting. --- src/fs/luks.cpp | 12 ++++++++---- src/fs/luks.h | 2 ++ src/plugins/libparted/libpartedbackend.cpp | 2 ++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index bd06520..93f5d9f 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -286,10 +286,7 @@ bool luks::cryptOpen(const QString& deviceNode) if (mapperNode.isEmpty()) return false; - FileSystem::Type innerFsType = detectFileSystem(mapperNode); - m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, - *this); - + loadInnerFilesystem(mapperNode); m_isCryptOpen = (m_innerFs != nullptr); if (m_isCryptOpen) @@ -328,6 +325,13 @@ bool luks::cryptClose(const QString& deviceNode) return false; } +void luks::loadInnerFilesystem(const QString& mapperNode) +{ + FileSystem::Type innerFsType = detectFileSystem(mapperNode); + m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, + *this); +} + bool luks::mount(const QString& deviceNode, const QString& mountPoint) { if (!m_isCryptOpen) diff --git a/src/fs/luks.h b/src/fs/luks.h index 5bcff08..88b5af7 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -108,6 +108,8 @@ public: bool cryptOpen(const QString& deviceNode); bool cryptClose(const QString& deviceNode); + void loadInnerFilesystem(const QString& mapperNode); + virtual bool mount(const QString& deviceNode, const QString& mountPoint) override; virtual bool unmount(const QString& deviceNode) override; diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index f7a6177..639d69a 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -359,6 +359,8 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD luksFs->setCryptOpen(isCryptOpen); if (isCryptOpen) { + luksFs->loadInnerFilesystem(mapperNode); + mountPoint = mountPoints.findByDevice(mapperNode) ? mountPoints.findByDevice(mapperNode)->mountPoint() : QString(); From 12e7da5b1cd730d7eeb7488e99676c3423d4547b Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 15 Apr 2016 15:10:14 +0200 Subject: [PATCH 10/57] Add LUKS role. Both open and closed LUKS "filesystems" should use this. --- src/core/partitionrole.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/partitionrole.h b/src/core/partitionrole.h index 4c8c84a..1834148 100644 --- a/src/core/partitionrole.h +++ b/src/core/partitionrole.h @@ -41,6 +41,7 @@ public: Extended = 2, /**< Extended */ Logical = 4, /**< Logical inside an extended */ Unallocated = 8, /**< No real Partition, just unallocated space */ + LUKS = 16, Any = 255 /**< In case we're looking for a Partition with a PartitionRole, any will do */ }; From 4c8b531bf4f4336bc4aebee01f8fb82a6cf56c2e Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 15 Apr 2016 15:11:51 +0200 Subject: [PATCH 11/57] Set the LUKS role if LUKS detected. --- src/plugins/libparted/libpartedbackend.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 639d69a..a8122c0 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -353,13 +353,14 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD QString mountPoint; bool mounted = false; if (fs->type() == FileSystem::Luks) { + r |= PartitionRole::LUKS; FS::luks* luksFs = dynamic_cast(fs); QString mapperNode = FS::luks::mapperName(node); bool isCryptOpen = !mapperNode.isEmpty(); luksFs->setCryptOpen(isCryptOpen); if (isCryptOpen) { - luksFs->loadInnerFilesystem(mapperNode); + luksFs->loadInnerFileSystem(mapperNode); mountPoint = mountPoints.findByDevice(mapperNode) ? mountPoints.findByDevice(mapperNode)->mountPoint() : From e1383df143ca0f61dd7e59b9bb17513e277063d7 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 15 Apr 2016 15:33:32 +0200 Subject: [PATCH 12/57] Assume the inner FS is already set when creating LUKS FS. An open LUKS FS now reports the type of its inner FS. Build a list of "LUKS-encryptable" filesystem types. --- src/fs/luks.cpp | 53 +++++++++++++++++++++++++++++++++++-------------- src/fs/luks.h | 6 +++++- 2 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 93f5d9f..1e99b8d 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -77,7 +77,7 @@ void luks::init() bool luks::create(Report& report, const QString& deviceNode) const { - + Q_ASSERT(m_innerFs); QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 if (dlg->exec() != QDialog::Accepted) @@ -114,21 +114,10 @@ bool luks::create(Report& report, const QString& deviceNode) const if (!(openCmd.run(-1) && openCmd.exitCode() == 0)) return false; - if (m_innerFs) - { - delete m_innerFs; - m_innerFs = nullptr; - } - QString mapperNode = mapperName(deviceNode); if (mapperNode.isEmpty()) return false; - - //FIXME: don't hardcode inner fs type - FileSystem::Type innerFsType = FileSystem::Ext4; - m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, - *this); m_innerFs->create(report, mapperNode); m_isCryptOpen = (m_innerFs != nullptr); @@ -136,7 +125,6 @@ bool luks::create(Report& report, const QString& deviceNode) const if (m_isCryptOpen) return true; return false; - } bool luks::supportToolFound() const @@ -286,7 +274,7 @@ bool luks::cryptOpen(const QString& deviceNode) if (mapperNode.isEmpty()) return false; - loadInnerFilesystem(mapperNode); + loadInnerFileSystem(mapperNode); m_isCryptOpen = (m_innerFs != nullptr); if (m_isCryptOpen) @@ -325,13 +313,20 @@ bool luks::cryptClose(const QString& deviceNode) return false; } -void luks::loadInnerFilesystem(const QString& mapperNode) +void luks::loadInnerFileSystem(const QString& mapperNode) { + Q_ASSERT(!m_innerFs); FileSystem::Type innerFsType = detectFileSystem(mapperNode); m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, *this); } +void luks::createInnerFileSystem(FileSystem::Type type) +{ + Q_ASSERT(!m_innerFs); + m_innerFs = FileSystemFactory::cloneWithNewType(type, *this); +} + bool luks::mount(const QString& deviceNode, const QString& mountPoint) { if (!m_isCryptOpen) @@ -418,6 +413,13 @@ bool luks::unmount(const QString& deviceNode) return false; } +FileSystem::Type luks::type() const +{ + if (m_isCryptOpen && m_innerFs) + return m_innerFs->type(); + return FileSystem::Luks; +} + QString luks::readUUID(const QString& deviceNode) const { ExternalCommand cmd(QStringLiteral("cryptsetup"), @@ -519,4 +521,25 @@ QString luks::getPayloadOffset(const QString& deviceNode) return QStringLiteral("---"); } +bool luks::canEncryptType(FileSystem::Type type) +{ + switch (type) + { + case Ext2: + case Ext3: + case Ext4: + case LinuxSwap: + case ReiserFS: + case Reiser4: + case Xfs: + case Jfs: + case Btrfs: + case Zfs: + case Lvm2_PV: + return true; + default: + return false; + } +} + } diff --git a/src/fs/luks.h b/src/fs/luks.h index 88b5af7..478c7ef 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -108,11 +108,14 @@ public: bool cryptOpen(const QString& deviceNode); bool cryptClose(const QString& deviceNode); - void loadInnerFilesystem(const QString& mapperNode); + void loadInnerFileSystem(const QString& mapperNode); + void createInnerFileSystem(Type type); virtual bool mount(const QString& deviceNode, const QString& mountPoint) override; virtual bool unmount(const QString& deviceNode) override; + virtual FileSystem::Type type() const override; + static QString mapperName(const QString& deviceNode); static QString getCipherName(const QString& deviceNode); @@ -120,6 +123,7 @@ public: static QString getHashName(const QString& deviceNode); static QString getKeySize(const QString& deviceNode); static QString getPayloadOffset(const QString& deviceNode); + static bool canEncryptType(FileSystem::Type type); public: static CommandSupportType m_GetUsed; From b4a57db54d47071fd96e3aafbd297f81b4bc81d0 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 15 Apr 2016 15:43:21 +0200 Subject: [PATCH 13/57] Update copyright and strings. --- src/core/partitionrole.cpp | 4 ++++ src/core/partitionrole.h | 3 ++- src/fs/luks.cpp | 2 +- src/fs/luks.h | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/partitionrole.cpp b/src/core/partitionrole.cpp index 2805ce4..105ca16 100644 --- a/src/core/partitionrole.cpp +++ b/src/core/partitionrole.cpp @@ -1,6 +1,7 @@ /************************************************************************* * Copyright (C) 2008 by Volker Lanz * * Copyright (C) 2016 by Andrius Štikonas * + * Copyright (C) 2016 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -36,5 +37,8 @@ QString PartitionRole::toString() const if (roles() & Primary) return i18nc("@item partition role", "primary"); + if (roles() & LUKS) + return i18nc("@item partition role", "LUKS"); + return i18nc("@item partition role", "none"); } diff --git a/src/core/partitionrole.h b/src/core/partitionrole.h index 1834148..90ef7cb 100644 --- a/src/core/partitionrole.h +++ b/src/core/partitionrole.h @@ -1,5 +1,6 @@ /************************************************************************* * Copyright (C) 2008 by Volker Lanz * + * Copyright (C) 2016 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * @@ -41,7 +42,7 @@ public: Extended = 2, /**< Extended */ Logical = 4, /**< Logical inside an extended */ Unallocated = 8, /**< No real Partition, just unallocated space */ - LUKS = 16, + LUKS = 16, /**< Encrypted partition with LUKS key management */ Any = 255 /**< In case we're looking for a Partition with a PartitionRole, any will do */ }; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 1e99b8d..676f349 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -1,7 +1,7 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * * Copyright (C) 2013 by Andrius Štikonas * - * Copyright (C) 2015 by Teo Mrnjavac * + * Copyright (C) 2015-2016 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * diff --git a/src/fs/luks.h b/src/fs/luks.h index 478c7ef..45c48c2 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -1,7 +1,7 @@ /************************************************************************* * Copyright (C) 2012 by Volker Lanz * * Copyright (C) 2013 by Andrius Štikonas * - * Copyright (C) 2015 by Teo Mrnjavac * + * Copyright (C) 2015-2016 by Teo Mrnjavac * * * * This program is free software; you can redistribute it and/or * * modify it under the terms of the GNU General Public License as * From 26026b62320b88afcd378f1c274cc040e58a768b Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 19 Apr 2016 16:46:18 +0200 Subject: [PATCH 14/57] PartitionRole::LUKS is now PartitionRole::Luks. --- src/core/partitionrole.cpp | 2 +- src/core/partitionrole.h | 2 +- src/plugins/libparted/libpartedbackend.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/core/partitionrole.cpp b/src/core/partitionrole.cpp index 105ca16..2900b89 100644 --- a/src/core/partitionrole.cpp +++ b/src/core/partitionrole.cpp @@ -37,7 +37,7 @@ QString PartitionRole::toString() const if (roles() & Primary) return i18nc("@item partition role", "primary"); - if (roles() & LUKS) + if (roles() & Luks) return i18nc("@item partition role", "LUKS"); return i18nc("@item partition role", "none"); diff --git a/src/core/partitionrole.h b/src/core/partitionrole.h index 90ef7cb..bf366c4 100644 --- a/src/core/partitionrole.h +++ b/src/core/partitionrole.h @@ -42,7 +42,7 @@ public: Extended = 2, /**< Extended */ Logical = 4, /**< Logical inside an extended */ Unallocated = 8, /**< No real Partition, just unallocated space */ - LUKS = 16, /**< Encrypted partition with LUKS key management */ + Luks = 16, /**< Encrypted partition with LUKS key management */ Any = 255 /**< In case we're looking for a Partition with a PartitionRole, any will do */ }; diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index a8122c0..85d367e 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -353,7 +353,7 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD QString mountPoint; bool mounted = false; if (fs->type() == FileSystem::Luks) { - r |= PartitionRole::LUKS; + r |= PartitionRole::Luks; FS::luks* luksFs = dynamic_cast(fs); QString mapperNode = FS::luks::mapperName(node); bool isCryptOpen = !mapperNode.isEmpty(); From 46c3536a4c9dff73511510fbf68483cdb96b187f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 19 Apr 2016 17:10:59 +0100 Subject: [PATCH 15/57] Use UUID of LUKS partition for mapper name. --- src/fs/luks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 676f349..6f42320 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -257,7 +257,7 @@ bool luks::cryptOpen(const QString& deviceNode) args.push_back({ dlg->luksPassphrase().text() }); args.push_back({ QStringLiteral("luksOpen"), deviceNode, - dlg->luksName().text() }); + QStringLiteral("luks-") + readUUID(deviceNode) }); delete dlg; ExternalCommand cmd(commands, args); From 7edc601a36206f3121f5b0e1b5792433e8f89c8a Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 21 Apr 2016 17:05:27 +0200 Subject: [PATCH 16/57] Allow the UI to set a passphrase before creation instead of asking. --- src/fs/luks.cpp | 20 +++++++++----------- src/fs/luks.h | 3 +++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 6f42320..54ff999 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -78,19 +78,13 @@ void luks::init() bool luks::create(Report& report, const QString& deviceNode) const { Q_ASSERT(m_innerFs); - QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 - - if (dlg->exec() != QDialog::Accepted) - { - delete dlg; - return false; - } + Q_ASSERT(!m_passphrase.isEmpty()); std::vector commands; commands.push_back(QStringLiteral("echo")); commands.push_back(QStringLiteral("cryptsetup")); std::vector args; - args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ m_passphrase }); args.push_back({ QStringLiteral("-s"), QStringLiteral("512"), QStringLiteral("luksFormat"), @@ -104,11 +98,10 @@ bool luks::create(Report& report, const QString& deviceNode) const commands.push_back(QStringLiteral("echo")); commands.push_back(QStringLiteral("cryptsetup")); args.clear(); - args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ m_passphrase }); args.push_back({ QStringLiteral("luksOpen"), deviceNode, - dlg->luksName().text() }); - delete dlg; + QStringLiteral("luks-") + readUUID(deviceNode) }); ExternalCommand openCmd(commands, args); if (!(openCmd.run(-1) && openCmd.exitCode() == 0)) @@ -175,6 +168,11 @@ QString luks::cryptCloseTitle() const return i18nc("@title:menu", "Deactivate"); } +void luks::setPassphrase(const QString& passphrase) +{ + m_passphrase = passphrase; +} + bool luks::canMount(const QString& deviceNode) const { return m_isCryptOpen && diff --git a/src/fs/luks.h b/src/fs/luks.h index 45c48c2..11eaf21 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -95,6 +95,8 @@ public: QString cryptOpenTitle() const; QString cryptCloseTitle() const; + void setPassphrase(const QString&); + virtual bool canMount(const QString&) const; virtual bool canUnmount(const QString&) const; bool isMounted() const; @@ -143,6 +145,7 @@ private: mutable FileSystem* m_innerFs; mutable bool m_isCryptOpen; + QString m_passphrase; bool m_isMounted; }; } From d126f0488669a28e8ebc8ef1876401d84626dfb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 21 Apr 2016 17:22:48 +0100 Subject: [PATCH 17/57] Add initial support for growing LUKS volumes. Added support for filling btrfs, ext and swap partitions. --- src/fs/btrfs.cpp | 3 ++- src/fs/ext2.cpp | 4 +++- src/fs/filesystem.cpp | 2 +- src/fs/linuxswap.cpp | 3 ++- src/fs/luks.cpp | 26 +++++++++++++++++++++++++- src/fs/luks.h | 1 + 6 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/fs/btrfs.cpp b/src/fs/btrfs.cpp index 34336ca..bf3f8cf 100644 --- a/src/fs/btrfs.cpp +++ b/src/fs/btrfs.cpp @@ -143,7 +143,8 @@ bool btrfs::resize(Report& report, const QString& deviceNode, qint64 length) con ExternalCommand mountCmd(report, QStringLiteral("mount"), QStringList() << QStringLiteral("-v") << QStringLiteral("-t") << QStringLiteral("btrfs") << deviceNode << tempDir.path()); if (mountCmd.run(-1) && mountCmd.exitCode() == 0) { - ExternalCommand resizeCmd(report, QStringLiteral("btrfs"), QStringList() << QStringLiteral("filesystem") << QStringLiteral("resize") << QString::number(length) << tempDir.path()); + QString len = length == -1 ? QStringLiteral("max") : QString::number(length); + ExternalCommand resizeCmd(report, QStringLiteral("btrfs"), QStringList() << QStringLiteral("filesystem") << QStringLiteral("resize") << len << tempDir.path()); if (resizeCmd.run(-1) && resizeCmd.exitCode() == 0) rval = true; diff --git a/src/fs/ext2.cpp b/src/fs/ext2.cpp index ad318be..6c9603f 100644 --- a/src/fs/ext2.cpp +++ b/src/fs/ext2.cpp @@ -137,7 +137,9 @@ bool ext2::create(Report& report, const QString& deviceNode) const bool ext2::resize(Report& report, const QString& deviceNode, qint64 length) const { const QString len = QString::number(length / 512) + QStringLiteral("s"); - ExternalCommand cmd(report, QStringLiteral("resize2fs"), QStringList() << deviceNode << len); + const QStringList command = length == -1 ? QStringList() << deviceNode : QStringList() << deviceNode << len; + + ExternalCommand cmd(report, QStringLiteral("resize2fs"), command); return cmd.run(-1) && cmd.exitCode() == 0; } diff --git a/src/fs/filesystem.cpp b/src/fs/filesystem.cpp index b3e233c..8f87611 100644 --- a/src/fs/filesystem.cpp +++ b/src/fs/filesystem.cpp @@ -185,7 +185,7 @@ bool FileSystem::create(Report& report, const QString& deviceNode) const return true; } -/** Resized a FileSystem to a given new length +/** Resize a FileSystem to a given new length @param report Report to write status information to @param deviceNode the device node for the Partition the FileSystem is on @param newLength the new length for the FileSystem in bytes diff --git a/src/fs/linuxswap.cpp b/src/fs/linuxswap.cpp index ddabaa9..29674da 100644 --- a/src/fs/linuxswap.cpp +++ b/src/fs/linuxswap.cpp @@ -83,6 +83,7 @@ bool linuxswap::create(Report& report, const QString& deviceNode) const bool linuxswap::resize(Report& report, const QString& deviceNode, qint64 length) const { + Q_UNUSED(length); const QString label = readLabel(deviceNode); const QString uuid = readUUID(deviceNode); @@ -92,7 +93,7 @@ bool linuxswap::resize(Report& report, const QString& deviceNode, qint64 length) if (!uuid.isEmpty()) args << QStringLiteral("-U") << uuid; - args << deviceNode << QString::number(length / 1024); + args << deviceNode; ExternalCommand cmd(report, QStringLiteral("mkswap"), args); return cmd.run(-1) && cmd.exitCode() == 0; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 54ff999..ae5864d 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -25,6 +25,7 @@ #include "util/capacity.h" #include "util/externalcommand.h" +#include "util/report.h" #include #include @@ -69,6 +70,7 @@ void luks::init() { m_Create = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; + m_Grow = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Copy = cmdSupportCore; m_Move = cmdSupportCore; m_Backup = cmdSupportCore; @@ -129,7 +131,7 @@ bool luks::supportToolFound() const m_Create != cmdSupportNone && // m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && -// m_Grow != cmdSupportNone && + m_Grow != cmdSupportNone && // m_Shrink != cmdSupportNone && m_Copy != cmdSupportNone && m_Move != cmdSupportNone && @@ -418,6 +420,28 @@ FileSystem::Type luks::type() const return FileSystem::Luks; } +bool luks::resize(Report& report, const QString& deviceNode, qint64) const +{ + Q_ASSERT(m_innerFs); + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("resize") << mapperNode); + report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); + + bool rval = false; + if (cryptResizeCmd.run(-1)) + { + rval = m_innerFs->resize(report, mapperNode, -1); + } + else + report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition %1 failed.", deviceNode); + + return rval; +} + QString luks::readUUID(const QString& deviceNode) const { ExternalCommand cmd(QStringLiteral("cryptsetup"), diff --git a/src/fs/luks.h b/src/fs/luks.h index 11eaf21..4cc142e 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -89,6 +89,7 @@ public: virtual bool supportToolFound() const; virtual QString readUUID(const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; virtual QString mountTitle() const override; virtual QString unmountTitle() const override; From 27d5ff82e61ee87a5073f62044d43b499f6e3232 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 21 Apr 2016 18:36:04 +0200 Subject: [PATCH 18/57] Cache the passphrase in a LUKS open session. --- src/fs/luks.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index ae5864d..c9daa08 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -250,11 +250,12 @@ bool luks::cryptOpen(const QString& deviceNode) return false; } + QString passphrase = dlg->luksPassphrase().text(); std::vector commands; commands.push_back(QStringLiteral("echo")); commands.push_back(QStringLiteral("cryptsetup")); std::vector args; - args.push_back({ dlg->luksPassphrase().text() }); + args.push_back({ passphrase }); args.push_back({ QStringLiteral("luksOpen"), deviceNode, QStringLiteral("luks-") + readUUID(deviceNode) }); @@ -278,7 +279,10 @@ bool luks::cryptOpen(const QString& deviceNode) m_isCryptOpen = (m_innerFs != nullptr); if (m_isCryptOpen) + { + m_passphrase = passphrase; return true; + } return false; } @@ -306,6 +310,8 @@ bool luks::cryptClose(const QString& deviceNode) delete m_innerFs; m_innerFs = nullptr; + m_passphrase.clear(); + m_isCryptOpen = (m_innerFs != nullptr); if (!m_isCryptOpen) From 8c1dd32baa37d2b5063dad0772b7e32fbc2b1654 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 21 Apr 2016 18:02:57 +0100 Subject: [PATCH 19/57] Remove luksName from DecryptLuksDialog. --- src/gui/decryptluksdialog.h | 3 --- src/gui/decryptluksdialogwidget.h | 4 ---- src/gui/decryptluksdialogwidgetbase.ui | 15 +-------------- 3 files changed, 1 insertion(+), 21 deletions(-) diff --git a/src/gui/decryptluksdialog.h b/src/gui/decryptluksdialog.h index a8e5ffe..07504d6 100644 --- a/src/gui/decryptluksdialog.h +++ b/src/gui/decryptluksdialog.h @@ -42,9 +42,6 @@ class DecryptLuksDialog : public QDialog const QString& m_DeviceNode; public: - QLineEdit& luksName() { return widget().luksName(); } - const QLineEdit& luksName() const { return widget().luksName(); } - QLineEdit& luksPassphrase() { return widget().luksPassphrase(); } const QLineEdit& luksPassphrase() const { return widget().luksPassphrase(); } }; diff --git a/src/gui/decryptluksdialogwidget.h b/src/gui/decryptluksdialogwidget.h index d4d10b0..da5acaa 100644 --- a/src/gui/decryptluksdialogwidget.h +++ b/src/gui/decryptluksdialogwidget.h @@ -31,10 +31,6 @@ class DecryptLuksDialogWidget : public QWidget, public Ui::DecryptLuksDialogWidg public: DecryptLuksDialogWidget(QWidget* parent); - public: - QLineEdit& luksName() { return *m_LineEditName; } - const QLineEdit& luksName() const { return *m_LineEditName; } - QLineEdit& luksPassphrase() { return *m_LineEditPassphrase; } const QLineEdit& luksPassphrase() const { return *m_LineEditPassphrase; } }; diff --git a/src/gui/decryptluksdialogwidgetbase.ui b/src/gui/decryptluksdialogwidgetbase.ui index a26346d..1bcc61f 100644 --- a/src/gui/decryptluksdialogwidgetbase.ui +++ b/src/gui/decryptluksdialogwidgetbase.ui @@ -17,19 +17,6 @@ - - - &Name: - - - m_LineEditName - - - - - - - &Passphrase: @@ -39,7 +26,7 @@ - + QLineEdit::Password From 33c049926f94d40f111e8df4d28e70eaf7eddbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 21 Apr 2016 21:19:49 +0100 Subject: [PATCH 20/57] Add initial support for reading and writing innerFS labels. --- src/fs/luks.cpp | 19 +++++++++++++++++-- src/fs/luks.h | 2 ++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index c9daa08..5f3de48 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -69,6 +69,8 @@ luks::~luks() void luks::init() { m_Create = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; + m_SetLabel = cmdSupportFileSystem; + m_GetLabel = cmdSupportFileSystem; m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Grow = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Copy = cmdSupportCore; @@ -126,8 +128,8 @@ bool luks::supportToolFound() const { return // m_GetUsed != cmdSupportNone && -// m_GetLabel != cmdSupportNone && -// m_SetLabel != cmdSupportNone && + m_GetLabel != cmdSupportNone && + m_SetLabel != cmdSupportNone && m_Create != cmdSupportNone && // m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && @@ -426,6 +428,19 @@ FileSystem::Type luks::type() const return FileSystem::Luks; } +QString luks::readLabel(const QString& deviceNode) const +{ + if (m_isCryptOpen && m_innerFs) + return m_innerFs->readLabel(mapperName(deviceNode)); + return QStringLiteral(); +} + +bool luks::writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) +{ + Q_ASSERT(m_innerFs); + return m_innerFs->writeLabel(report, mapperName(deviceNode), newLabel); +} + bool luks::resize(Report& report, const QString& deviceNode, qint64) const { Q_ASSERT(m_innerFs); diff --git a/src/fs/luks.h b/src/fs/luks.h index 4cc142e..81308a4 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -90,6 +90,8 @@ public: virtual QString readUUID(const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const; virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; + virtual QString readLabel(const QString& deviceNode) const; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); virtual QString mountTitle() const override; virtual QString unmountTitle() const override; From 433cb5651bbd2a936558cb6392ca09e5caa468d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 22 Apr 2016 13:23:57 +0100 Subject: [PATCH 21/57] Enable growing luks->reiserfs. --- src/fs/ext2.cpp | 4 ++-- src/fs/reiserfs.cpp | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/fs/ext2.cpp b/src/fs/ext2.cpp index 260a2a2..78f95af 100644 --- a/src/fs/ext2.cpp +++ b/src/fs/ext2.cpp @@ -137,9 +137,9 @@ bool ext2::create(Report& report, const QString& deviceNode) const bool ext2::resize(Report& report, const QString& deviceNode, qint64 length) const { const QString len = QString::number(length / 512) + QStringLiteral("s"); - const QStringList command = length == -1 ? QStringList() << deviceNode : QStringList() << deviceNode << len; + const QStringList args = length == -1 ? QStringList() << deviceNode : QStringList() << deviceNode << len; - ExternalCommand cmd(report, QStringLiteral("resize2fs"), command); + ExternalCommand cmd(report, QStringLiteral("resize2fs"), args); return cmd.run(-1) && cmd.exitCode() == 0; } diff --git a/src/fs/reiserfs.cpp b/src/fs/reiserfs.cpp index 337969c..41925fb 100644 --- a/src/fs/reiserfs.cpp +++ b/src/fs/reiserfs.cpp @@ -148,7 +148,10 @@ bool reiserfs::create(Report& report, const QString& deviceNode) const bool reiserfs::resize(Report& report, const QString& deviceNode, qint64 length) const { - ExternalCommand cmd(report, QStringLiteral("resize_reiserfs"), { deviceNode, QStringLiteral("-q"), QStringLiteral("-s"), QString::number(length) }); + const QStringList args = length == -1 ? + QStringList() << deviceNode << QStringLiteral("-q") : + QStringList() << deviceNode << QStringLiteral("-q") << QStringLiteral("-s") << QString::number(length); + ExternalCommand cmd(report, QStringLiteral("resize_reiserfs"), args); bool rval = cmd.start(-1); From 8e3e9309edf87e237d2b157ff74d72d6d57fc2a9 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 22 Apr 2016 16:48:31 +0200 Subject: [PATCH 22/57] suggestedMapperName as a separate method. --- src/fs/luks.cpp | 9 +++++++-- src/fs/luks.h | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index d08b0fd..221b979 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -105,7 +105,7 @@ bool luks::create(Report& report, const QString& deviceNode) const args.push_back({ m_passphrase }); args.push_back({ QStringLiteral("luksOpen"), deviceNode, - QStringLiteral("luks-") + readUUID(deviceNode) }); + suggestedMapperName(deviceNode) }); ExternalCommand openCmd(commands, args); if (!(openCmd.run(-1) && openCmd.exitCode() == 0)) @@ -260,7 +260,7 @@ bool luks::cryptOpen(const QString& deviceNode) args.push_back({ passphrase }); args.push_back({ QStringLiteral("luksOpen"), deviceNode, - QStringLiteral("luks-") + readUUID(deviceNode) }); + suggestedMapperName(deviceNode) }); delete dlg; ExternalCommand cmd(commands, args); @@ -428,6 +428,11 @@ FileSystem::Type luks::type() const return FileSystem::Luks; } +QString luks::suggestedMapperName(const QString& deviceNode) const +{ + return QStringLiteral("luks-") + readUUID(deviceNode); +} + QString luks::readLabel(const QString& deviceNode) const { if (m_isCryptOpen && m_innerFs) diff --git a/src/fs/luks.h b/src/fs/luks.h index 81308a4..07b2723 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -121,6 +121,8 @@ public: virtual FileSystem::Type type() const override; + QString suggestedMapperName(const QString& deviceNode) const; + static QString mapperName(const QString& deviceNode); static QString getCipherName(const QString& deviceNode); From 96ceadd3be96cd508d23f3b213cde2bd307e79f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 22 Apr 2016 16:24:30 +0100 Subject: [PATCH 23/57] Use open/close instead of luksOpen/luksClose. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 221b979..bc47db2 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -103,7 +103,7 @@ bool luks::create(Report& report, const QString& deviceNode) const commands.push_back(QStringLiteral("cryptsetup")); args.clear(); args.push_back({ m_passphrase }); - args.push_back({ QStringLiteral("luksOpen"), + args.push_back({ QStringLiteral("open"), deviceNode, suggestedMapperName(deviceNode) }); @@ -305,7 +305,7 @@ bool luks::cryptClose(const QString& deviceNode) } ExternalCommand cmd(QStringLiteral("cryptsetup"), - { QStringLiteral("luksClose"), mapperName(deviceNode) }); + { QStringLiteral("close"), mapperName(deviceNode) }); if (!(cmd.run(-1) && cmd.exitCode() == 0)) return false; From 12c03cfeff88b39ab2b8f79022b860a492413281 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sun, 24 Apr 2016 21:51:49 +0100 Subject: [PATCH 24/57] Clear LUKS label when closing crypt. --- src/fs/luks.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index bc47db2..0401244 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -133,7 +133,7 @@ bool luks::supportToolFound() const m_Create != cmdSupportNone && // m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && - m_Grow != cmdSupportNone && + m_Grow != cmdSupportNone && // m_Shrink != cmdSupportNone && m_Copy != cmdSupportNone && m_Move != cmdSupportNone && @@ -313,6 +313,7 @@ bool luks::cryptClose(const QString& deviceNode) m_innerFs = nullptr; m_passphrase.clear(); + setLabel({}); m_isCryptOpen = (m_innerFs != nullptr); From 7ff137233a0079773bec8d3c0eb2334121192e13 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 26 Apr 2016 11:50:44 +0200 Subject: [PATCH 25/57] Disallow partition delete operation if the FS is cryptOpen. --- src/ops/deleteoperation.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ops/deleteoperation.cpp b/src/ops/deleteoperation.cpp index 6f4fe34..8b8f996 100644 --- a/src/ops/deleteoperation.cpp +++ b/src/ops/deleteoperation.cpp @@ -21,6 +21,7 @@ #include "core/partition.h" #include "core/device.h" #include "core/partitiontable.h" +#include "fs/luks.h" #include "jobs/deletepartitionjob.h" #include "jobs/deletefilesystemjob.h" @@ -123,5 +124,16 @@ bool DeleteOperation::canDelete(const Partition* p) if (p->roles().has(PartitionRole::Extended)) return p->children().size() == 1 && p->children()[0]->roles().has(PartitionRole::Unallocated); + if (p->roles().has(PartitionRole::Luks)) + { + const FileSystem& fsRef = p->fileSystem(); + const FS::luks* luksFs = dynamic_cast(&fsRef); + if (!luksFs) + return false; + + if (luksFs->isCryptOpen() || luksFs->isMounted()) + return false; + } + return true; } From d5438ba00732c101ebda0a24297f94bb7e162a46 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Tue, 26 Apr 2016 13:36:07 +0200 Subject: [PATCH 26/57] Make LUKS grow/shrink support depend on open/closed state and inner FS. --- src/fs/luks.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.h b/src/fs/luks.h index 07b2723..fa802fa 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -56,10 +56,18 @@ public: return m_Create; } virtual CommandSupportType supportGrow() const { - return m_Grow; + if (!m_isCryptOpen) + return cmdSupportNone; + if (m_Grow && m_innerFs) + return m_innerFs->supportGrow(); + return cmdSupportNone; } virtual CommandSupportType supportShrink() const { - return m_Shrink; + if (!m_isCryptOpen) + return cmdSupportNone; + if (m_Shrink && m_innerFs) + return m_innerFs->supportShrink(); + return cmdSupportNone; } virtual CommandSupportType supportMove() const { return m_Move; From d87ac7dc20f679ad2fd56eea5070315730268f2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 26 Apr 2016 13:26:40 +0100 Subject: [PATCH 27/57] Add support for checking innerFS. --- src/fs/luks.cpp | 14 +++++++++++++- src/fs/luks.h | 7 ++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 0401244..dac2400 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -73,6 +73,7 @@ void luks::init() m_GetLabel = cmdSupportFileSystem; m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Grow = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; + m_Check = cmdSupportCore; m_Copy = cmdSupportCore; m_Move = cmdSupportCore; m_Backup = cmdSupportCore; @@ -131,7 +132,7 @@ bool luks::supportToolFound() const m_GetLabel != cmdSupportNone && m_SetLabel != cmdSupportNone && m_Create != cmdSupportNone && -// m_Check != cmdSupportNone && + m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && m_Grow != cmdSupportNone && // m_Shrink != cmdSupportNone && @@ -336,6 +337,17 @@ void luks::createInnerFileSystem(FileSystem::Type type) m_innerFs = FileSystemFactory::cloneWithNewType(type, *this); } +bool luks::check(Report& report, const QString& deviceNode) const +{ + Q_ASSERT(m_innerFs); + + QString mapperNode = mapperName(deviceNode); + if (mapperNode.isEmpty()) + return false; + + return m_innerFs->check(report, mapperNode); +} + bool luks::mount(const QString& deviceNode, const QString& mountPoint) { if (!m_isCryptOpen) diff --git a/src/fs/luks.h b/src/fs/luks.h index fa802fa..9786694 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -73,7 +73,11 @@ public: return m_Move; } virtual CommandSupportType supportCheck() const { - return m_Check; + if (!m_isCryptOpen) + return cmdSupportNone; + if (m_Check && m_innerFs) + return m_innerFs->supportShrink(); + return cmdSupportNone; } virtual CommandSupportType supportCopy() const { return m_Copy; @@ -91,6 +95,7 @@ public: return m_GetUUID; } + virtual bool check(Report& report, const QString& deviceNode) const override; virtual bool create(Report &report, const QString &deviceNode) const override; virtual qint64 minCapacity() const; virtual SupportTool supportToolName() const; From df33b21b0d10306aedeb0498443cfaa0d175bfd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 26 Apr 2016 13:46:02 +0100 Subject: [PATCH 28/57] Optimize QString->QStringLiteral. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index dac2400..9f6c103 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -314,7 +314,7 @@ bool luks::cryptClose(const QString& deviceNode) m_innerFs = nullptr; m_passphrase.clear(); - setLabel({}); + setLabel(QStringLiteral()); m_isCryptOpen = (m_innerFs != nullptr); @@ -519,7 +519,7 @@ QString luks::mapperName(const QString& deviceNode) if (rxDeviceName.indexIn(cmd.output()) > -1) return rxDeviceName.cap(1); } - return QString(); + return QStringLiteral(); } QString luks::getCipherName(const QString& deviceNode) From dff128264c248cde38e96464e8cb4a1e0d9559f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 26 Apr 2016 13:50:44 +0100 Subject: [PATCH 29/57] Revert "Optimize QString->QStringLiteral." This reverts commit df33b21b0d10306aedeb0498443cfaa0d175bfd6. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 9f6c103..dac2400 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -314,7 +314,7 @@ bool luks::cryptClose(const QString& deviceNode) m_innerFs = nullptr; m_passphrase.clear(); - setLabel(QStringLiteral()); + setLabel({}); m_isCryptOpen = (m_innerFs != nullptr); @@ -519,7 +519,7 @@ QString luks::mapperName(const QString& deviceNode) if (rxDeviceName.indexIn(cmd.output()) > -1) return rxDeviceName.cap(1); } - return QStringLiteral(); + return QString(); } QString luks::getCipherName(const QString& deviceNode) From 1ee315303c8536913ec24eb5d22c0dec9a7c2c0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Tue, 26 Apr 2016 13:53:25 +0100 Subject: [PATCH 30/57] Do not use QStringLiteral for empty strings. --- src/fs/luks.cpp | 2 +- src/plugins/libparted/libpartedbackend.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index dac2400..276815b 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -450,7 +450,7 @@ QString luks::readLabel(const QString& deviceNode) const { if (m_isCryptOpen && m_innerFs) return m_innerFs->readLabel(mapperName(deviceNode)); - return QStringLiteral(); + return QString(); } bool luks::writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 85d367e..f9fb3b0 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -214,7 +214,7 @@ static void readSectorsUsed(PedDisk* pedDisk, const Device& d, Partition& p, con const KDiskFreeSpaceInfo freeSpaceInfo = KDiskFreeSpaceInfo::freeSpaceInfo(mountPoint); - if (p.isMounted() && freeSpaceInfo.isValid() && mountPoint != QStringLiteral()) + if (p.isMounted() && freeSpaceInfo.isValid() && mountPoint != QString()) p.fileSystem().setSectorsUsed(freeSpaceInfo.used() / d.logicalSectorSize()); else if (p.fileSystem().supportGetUsed() == FileSystem::cmdSupportFileSystem) p.fileSystem().setSectorsUsed(p.fileSystem().readUsedCapacity(p.deviceNode()) / d.logicalSectorSize()); From 26047b35ef020a7a1837f6a3a1ed82674ce2c6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 00:10:28 +0100 Subject: [PATCH 31/57] Fix copy-paste typo. --- src/fs/luks.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fs/luks.h b/src/fs/luks.h index 9786694..68682e9 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -76,7 +76,7 @@ public: if (!m_isCryptOpen) return cmdSupportNone; if (m_Check && m_innerFs) - return m_innerFs->supportShrink(); + return m_innerFs->supportCheck(); return cmdSupportNone; } virtual CommandSupportType supportCopy() const { From 9c31d452291c101a52ad3387202395a8d87bb5c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 00:29:01 +0100 Subject: [PATCH 32/57] Slightly reorder functions in luks.cpp to match other filesystems. --- src/fs/luks.cpp | 56 ++++++++++++++++++++++++------------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 276815b..2863301 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -80,6 +80,34 @@ void luks::init() m_GetUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; } +bool luks::supportToolFound() const +{ + return +// m_GetUsed != cmdSupportNone && + m_GetLabel != cmdSupportNone && + m_SetLabel != cmdSupportNone && + m_Create != cmdSupportNone && + m_Check != cmdSupportNone && + m_UpdateUUID != cmdSupportNone && + m_Grow != cmdSupportNone && +// m_Shrink != cmdSupportNone && + m_Copy != cmdSupportNone && + m_Move != cmdSupportNone && + m_Backup != cmdSupportNone && + m_GetUUID != cmdSupportNone; +} + +FileSystem::SupportTool luks::supportToolName() const +{ + return SupportTool(QStringLiteral("cryptsetup"), + QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); +} + +qint64 luks::minCapacity() const +{ + return 3 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); +} + bool luks::create(Report& report, const QString& deviceNode) const { Q_ASSERT(m_innerFs); @@ -125,34 +153,6 @@ bool luks::create(Report& report, const QString& deviceNode) const return false; } -bool luks::supportToolFound() const -{ - return -// m_GetUsed != cmdSupportNone && - m_GetLabel != cmdSupportNone && - m_SetLabel != cmdSupportNone && - m_Create != cmdSupportNone && - m_Check != cmdSupportNone && - m_UpdateUUID != cmdSupportNone && - m_Grow != cmdSupportNone && -// m_Shrink != cmdSupportNone && - m_Copy != cmdSupportNone && - m_Move != cmdSupportNone && - m_Backup != cmdSupportNone && - m_GetUUID != cmdSupportNone; -} - -FileSystem::SupportTool luks::supportToolName() const -{ - return SupportTool(QStringLiteral("cryptsetup"), - QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); -} - -qint64 luks::minCapacity() const -{ - return 3 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); -} - QString luks::mountTitle() const { return i18nc("@title:menu", "Mount"); From e3bb8a335c8c60be12550b348b26a0264124c25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 00:50:51 +0100 Subject: [PATCH 33/57] Return error if creating innerFS fails. --- src/fs/luks.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 2863301..37bd8e3 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -144,7 +144,8 @@ bool luks::create(Report& report, const QString& deviceNode) const if (mapperNode.isEmpty()) return false; - m_innerFs->create(report, mapperNode); + if (!m_innerFs->create(report, mapperNode)) + return false; m_isCryptOpen = (m_innerFs != nullptr); From 6bcbe141695ce10c8259ec8bd51a6d085b3794b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 13:52:23 +0100 Subject: [PATCH 34/57] Add support for detecting support tools of innerFS. --- src/fs/luks.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 37bd8e3..b0c9c74 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -83,6 +83,7 @@ void luks::init() bool luks::supportToolFound() const { return + m_isCryptOpen && m_innerFs ? m_innerFs->supportToolFound() : true && // m_GetUsed != cmdSupportNone && m_GetLabel != cmdSupportNone && m_SetLabel != cmdSupportNone && @@ -99,6 +100,8 @@ bool luks::supportToolFound() const FileSystem::SupportTool luks::supportToolName() const { + if (m_isCryptOpen && m_innerFs) + return m_innerFs->supportToolName(); return SupportTool(QStringLiteral("cryptsetup"), QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); } From 51ef8013b10b85608831ec7419c6e027b1c6b025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 14:22:00 +0100 Subject: [PATCH 35/57] Fix luks supportToolFound logic. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index b0c9c74..eb84758 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -83,7 +83,6 @@ void luks::init() bool luks::supportToolFound() const { return - m_isCryptOpen && m_innerFs ? m_innerFs->supportToolFound() : true && // m_GetUsed != cmdSupportNone && m_GetLabel != cmdSupportNone && m_SetLabel != cmdSupportNone && @@ -95,7 +94,8 @@ bool luks::supportToolFound() const m_Copy != cmdSupportNone && m_Move != cmdSupportNone && m_Backup != cmdSupportNone && - m_GetUUID != cmdSupportNone; + m_GetUUID != cmdSupportNone && + ((m_isCryptOpen && m_innerFs) ? m_innerFs->supportToolFound() : true); } FileSystem::SupportTool luks::supportToolName() const From e96c13b2bb698287c6e9aabfba031fea73e467ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 14:29:48 +0100 Subject: [PATCH 36/57] Disable opening crypt if cryptsetup is not found. --- src/fs/luks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index eb84758..6718e23 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -210,7 +210,7 @@ void luks::setMounted(bool mounted) bool luks::canCryptOpen(const QString&) const { - return !m_isCryptOpen && !m_isMounted; + return supportToolFound() && !m_isCryptOpen && !m_isMounted; } bool luks::canCryptClose(const QString&) const From ea4b945ebbdab90b51d24d139b9ca4c560e1a716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 27 Apr 2016 21:54:02 +0100 Subject: [PATCH 37/57] Add override keyword to virtual functions. --- src/core/copysourcedevice.h | 14 +++--- src/core/copysourcefile.h | 14 +++--- src/core/copysourceshred.h | 14 +++--- src/core/copytargetdevice.h | 10 ++-- src/core/copytargetfile.h | 10 ++-- src/core/devicescanner.h | 2 +- src/core/partition.h | 12 ++--- src/core/partitiontable.h | 12 ++--- src/fs/btrfs.h | 46 ++++++++--------- src/fs/exfat.h | 44 ++++++++-------- src/fs/ext2.h | 44 ++++++++-------- src/fs/ext3.h | 4 +- src/fs/ext4.h | 4 +- src/fs/extended.h | 12 ++--- src/fs/f2fs.h | 48 +++++++++--------- src/fs/fat16.h | 44 ++++++++-------- src/fs/fat32.h | 8 +-- src/fs/hfs.h | 28 +++++------ src/fs/hfsplus.h | 22 ++++---- src/fs/hpfs.h | 28 +++++------ src/fs/jfs.h | 38 +++++++------- src/fs/linuxswap.h | 38 +++++++------- src/fs/luks.cpp | 2 +- src/fs/luks.h | 44 ++++++++-------- src/fs/lvm2_pv.h | 44 ++++++++-------- src/fs/nilfs2.h | 48 +++++++++--------- src/fs/ntfs.h | 50 +++++++++---------- src/fs/ocfs2.h | 44 ++++++++-------- src/fs/reiser4.h | 28 +++++------ src/fs/reiserfs.h | 46 ++++++++--------- src/fs/ufs.h | 8 +-- src/fs/unformatted.h | 6 +-- src/fs/unknown.h | 2 +- src/fs/xfs.h | 40 +++++++-------- src/fs/zfs.h | 36 ++++++------- src/jobs/backupfilesystemjob.h | 6 +-- src/jobs/checkfilesystemjob.h | 4 +- src/jobs/copyfilesystemjob.h | 6 +-- src/jobs/createfilesystemjob.h | 4 +- src/jobs/createpartitionjob.h | 4 +- src/jobs/createpartitiontablejob.h | 4 +- src/jobs/deletefilesystemjob.h | 4 +- src/jobs/deletepartitionjob.h | 4 +- src/jobs/movefilesystemjob.h | 6 +-- src/jobs/resizefilesystemjob.h | 6 +-- src/jobs/restorefilesystemjob.h | 6 +-- src/jobs/setfilesystemlabeljob.h | 4 +- src/jobs/setpartflagsjob.h | 6 +-- src/jobs/setpartgeometryjob.h | 4 +- src/jobs/shredfilesystemjob.h | 6 +-- src/ops/backupoperation.h | 12 ++--- src/ops/checkoperation.h | 12 ++--- src/ops/copyoperation.h | 14 +++--- src/ops/createfilesystemoperation.h | 14 +++--- src/ops/createpartitiontableoperation.h | 14 +++--- src/ops/deleteoperation.h | 12 ++--- src/ops/newoperation.h | 12 ++--- src/ops/resizeoperation.h | 14 +++--- src/ops/restoreoperation.h | 14 +++--- src/ops/setfilesystemlabeloperation.h | 12 ++--- src/ops/setpartflagsoperation.h | 12 ++--- src/plugins/dummy/dummybackend.h | 2 +- src/plugins/dummy/dummydevice.h | 14 +++--- src/plugins/dummy/dummypartition.h | 2 +- src/plugins/dummy/dummypartitiontable.h | 22 ++++---- src/plugins/libparted/libpartedbackend.h | 2 +- src/plugins/libparted/libparteddevice.h | 14 +++--- src/plugins/libparted/libpartedpartition.h | 2 +- .../libparted/libpartedpartitiontable.h | 22 ++++---- 69 files changed, 595 insertions(+), 595 deletions(-) diff --git a/src/core/copysourcedevice.h b/src/core/copysourcedevice.h index cccfbe2..eaf08e1 100644 --- a/src/core/copysourcedevice.h +++ b/src/core/copysourcedevice.h @@ -43,16 +43,16 @@ public: ~CopySourceDevice(); public: - virtual bool open(); - virtual qint32 sectorSize() const; - virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors); - virtual qint64 length() const; - virtual bool overlaps(const CopyTarget& target) const; + virtual bool open() override; + virtual qint32 sectorSize() const override; + virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors) override; + virtual qint64 length() const override; + virtual bool overlaps(const CopyTarget& target) const override; - virtual qint64 firstSector() const { + virtual qint64 firstSector() const override { return m_FirstSector; /**< @return first sector to copying */ } - virtual qint64 lastSector() const { + virtual qint64 lastSector() const override { return m_LastSector; /**< @return last sector to copy */ } diff --git a/src/core/copysourcefile.h b/src/core/copysourcefile.h index 6d21a18..66f3e39 100644 --- a/src/core/copysourcefile.h +++ b/src/core/copysourcefile.h @@ -39,20 +39,20 @@ public: CopySourceFile(const QString& filename, qint32 sectorsize); public: - virtual bool open(); - virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors); - virtual qint64 length() const; + virtual bool open() override; + virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors) override; + virtual qint64 length() const override; - virtual qint32 sectorSize() const { + virtual qint32 sectorSize() const override { return m_SectorSize; /**< @return the file's sector size */ } - virtual bool overlaps(const CopyTarget&) const { + virtual bool overlaps(const CopyTarget&) const override { return false; /**< @return false for file */ } - virtual qint64 firstSector() const { + virtual qint64 firstSector() const override { return 0; /**< @return 0 for file */ } - virtual qint64 lastSector() const { + virtual qint64 lastSector() const override { return length(); /**< @return equal to length for file. @see length() */ } diff --git a/src/core/copysourceshred.h b/src/core/copysourceshred.h index 8fa2e8b..79aa1e0 100644 --- a/src/core/copysourceshred.h +++ b/src/core/copysourceshred.h @@ -37,20 +37,20 @@ public: CopySourceShred(qint64 size, qint32 sectorsize, bool randomShred); public: - virtual bool open(); - virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors); - virtual qint64 length() const; + virtual bool open() override; + virtual bool readSectors(void* buffer, qint64 readOffset, qint64 numSectors) override; + virtual qint64 length() const override; - virtual qint32 sectorSize() const { + virtual qint32 sectorSize() const override { return m_SectorSize; /**< @return the file's sector size */ } - virtual bool overlaps(const CopyTarget&) const { + virtual bool overlaps(const CopyTarget&) const override { return false; /**< @return false for shred source */ } - virtual qint64 firstSector() const { + virtual qint64 firstSector() const override { return 0; /**< @return 0 for shred source */ } - virtual qint64 lastSector() const { + virtual qint64 lastSector() const override { return length(); /**< @return equal to length for shred source. @see length() */ } diff --git a/src/core/copytargetdevice.h b/src/core/copytargetdevice.h index 00eb155..5b63eef 100644 --- a/src/core/copytargetdevice.h +++ b/src/core/copytargetdevice.h @@ -45,13 +45,13 @@ public: ~CopyTargetDevice(); public: - virtual bool open(); - virtual qint32 sectorSize() const; - virtual bool writeSectors(void* buffer, qint64 writeOffset, qint64 numSectors); - virtual qint64 firstSector() const { + virtual bool open() override; + virtual qint32 sectorSize() const override; + virtual bool writeSectors(void* buffer, qint64 writeOffset, qint64 numSectors) override; + virtual qint64 firstSector() const override { return m_FirstSector; /**< @return the first sector to write to */ } - virtual qint64 lastSector() const { + virtual qint64 lastSector() const override { return m_LastSector; /**< @return the last sector to write to */ } diff --git a/src/core/copytargetfile.h b/src/core/copytargetfile.h index 5e2e9ba..7a2624f 100644 --- a/src/core/copytargetfile.h +++ b/src/core/copytargetfile.h @@ -39,16 +39,16 @@ public: CopyTargetFile(const QString& filename, qint32 sectorsize); public: - virtual bool open(); - virtual bool writeSectors(void* buffer, qint64 writeOffset, qint64 numSectors); + virtual bool open() override; + virtual bool writeSectors(void* buffer, qint64 writeOffset, qint64 numSectors) override; - virtual qint32 sectorSize() const { + virtual qint32 sectorSize() const override { return m_SectorSize; /**< @return the file's sector size */ } - virtual qint64 firstSector() const { + virtual qint64 firstSector() const override { return 0; /**< @return always 0 for a file */ } - virtual qint64 lastSector() const { + virtual qint64 lastSector() const override { return sectorsWritten(); /**< @return the number of sectors written so far */ } diff --git a/src/core/devicescanner.h b/src/core/devicescanner.h index 037eec6..24d78a0 100644 --- a/src/core/devicescanner.h +++ b/src/core/devicescanner.h @@ -46,7 +46,7 @@ Q_SIGNALS: void progress(const QString& device_node, int progress); protected: - virtual void run(); + virtual void run() override; OperationStack& operationStack() { return m_OperationStack; } diff --git a/src/core/partition.h b/src/core/partition.h index bbda5a3..9872392 100644 --- a/src/core/partition.h +++ b/src/core/partition.h @@ -124,21 +124,21 @@ public: return m_Number; /**< @return the Partition's device number, e.g. 7 for /dev/sdd7 */ } - bool isRoot() const { + bool isRoot() const override { return false; /**< @return always false for Partition */ } - PartitionNode* parent() { + PartitionNode* parent() override { return m_Parent; /**< @return the Partition's parent PartitionNode */ } - const PartitionNode* parent() const { + const PartitionNode* parent() const override { return m_Parent; /**< @return the Partition's parent PartitionNode */ } - Partitions& children() { + Partitions& children() override { return m_Children; /**< @return the Partition's children. empty for non-extended. */ } - const Partitions& children() const { + const Partitions& children() const override { return m_Children; /**< @return the Partition's children. empty for non-extended. */ } @@ -226,7 +226,7 @@ public: } protected: - void append(Partition* p) { + void append(Partition* p) override { m_Children.append(p); } void setDevicePath(const QString& s) { diff --git a/src/core/partitiontable.h b/src/core/partitiontable.h index 1531bc4..a67520f 100644 --- a/src/core/partitiontable.h +++ b/src/core/partitiontable.h @@ -97,30 +97,30 @@ public: ~PartitionTable(); public: - PartitionNode* parent() { + PartitionNode* parent() override { return nullptr; /**< @return always nullptr for PartitionTable */ } - const PartitionNode* parent() const { + const PartitionNode* parent() const override { return nullptr; /**< @return always nullptr for PartitionTable */ } - bool isRoot() const { + bool isRoot() const override { return true; /**< @return always true for PartitionTable */ } bool isReadOnly() const { return tableTypeIsReadOnly(type()); /**< @return true if the PartitionTable is read only */ } - Partitions& children() { + Partitions& children() override { return m_Children; /**< @return the children in this PartitionTable */ } - const Partitions& children() const { + const Partitions& children() const override { return m_Children; /**< @return the children in this PartitionTable */ } void setType(const Device& d, TableType t); - void append(Partition* partition); + void append(Partition* partition) override; qint64 freeSectorsBefore(const Partition& p) const; qint64 freeSectorsAfter(const Partition& p) const; diff --git a/src/fs/btrfs.h b/src/fs/btrfs.h index 45b5326..c94dfe3 100644 --- a/src/fs/btrfs.h +++ b/src/fs/btrfs.h @@ -43,55 +43,55 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/exfat.h b/src/fs/exfat.h index 16dd6e7..70ae9b2 100644 --- a/src/fs/exfat.h +++ b/src/fs/exfat.h @@ -42,55 +42,55 @@ public: public: static void init(); -// virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; -// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; +// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } // virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/ext2.h b/src/fs/ext2.h index 1c37b53..6f2426a 100644 --- a/src/fs/ext2.h +++ b/src/fs/ext2.h @@ -42,54 +42,54 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/ext3.h b/src/fs/ext3.h index 8a34b4f..3ebb02b 100644 --- a/src/fs/ext3.h +++ b/src/fs/ext3.h @@ -44,8 +44,8 @@ public: public: static void init() {} - virtual bool create(Report& report, const QString& deviceNode) const; - virtual qint64 maxCapacity() const; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual qint64 maxCapacity() const override; }; } diff --git a/src/fs/ext4.h b/src/fs/ext4.h index 7f971f0..3e12809 100644 --- a/src/fs/ext4.h +++ b/src/fs/ext4.h @@ -44,8 +44,8 @@ public: public: static void init() {} - virtual bool create(Report& report, const QString& deviceNode) const; - virtual qint64 maxCapacity() const; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual qint64 maxCapacity() const override; }; } diff --git a/src/fs/extended.h b/src/fs/extended.h index 571bc52..1a70340 100644 --- a/src/fs/extended.h +++ b/src/fs/extended.h @@ -45,22 +45,22 @@ public: public: static void init() {} - virtual bool create(Report&, const QString&) const; + virtual bool create(Report&, const QString&) const override; - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual bool supportToolFound() const { + virtual bool supportToolFound() const override { return true; } diff --git a/src/fs/f2fs.h b/src/fs/f2fs.h index 021a18e..8c2feb4 100644 --- a/src/fs/f2fs.h +++ b/src/fs/f2fs.h @@ -42,56 +42,56 @@ public: public: static void init(); -// virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; -// virtual qint64 readUsedCapacity(const QString& deviceNode) const; -// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; -// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); -// virtual bool updateUUID(Report& report, const QString& deviceNode) const; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const override; +// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; +// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; +// virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/fat16.h b/src/fs/fat16.h index 94bb093..cc7fbc5 100644 --- a/src/fs/fat16.h +++ b/src/fs/fat16.h @@ -42,54 +42,54 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool updateUUID(Report& report, const QString& deviceNode) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/fat32.h b/src/fs/fat32.h index 2999836..aac7b12 100644 --- a/src/fs/fat32.h +++ b/src/fs/fat32.h @@ -45,11 +45,11 @@ public: public: static void init() {} - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; }; } diff --git a/src/fs/hfs.h b/src/fs/hfs.h index fa28d2e..35a9a7c 100644 --- a/src/fs/hfs.h +++ b/src/fs/hfs.h @@ -42,38 +42,38 @@ public: public: static void init(); - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/hfsplus.h b/src/fs/hfsplus.h index 8166b0f..3c23fd6 100644 --- a/src/fs/hfsplus.h +++ b/src/fs/hfsplus.h @@ -42,31 +42,31 @@ public: public: static void init(); - virtual bool check(Report& report, const QString& deviceNode) const; + virtual bool check(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/hpfs.h b/src/fs/hpfs.h index 59f783b..0ed004f 100644 --- a/src/fs/hpfs.h +++ b/src/fs/hpfs.h @@ -42,45 +42,45 @@ public: public: static void init(); - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 maxCapacity() const; - virtual bool supportToolFound() const { + virtual qint64 maxCapacity() const override; + virtual bool supportToolFound() const override { return true; } diff --git a/src/fs/jfs.h b/src/fs/jfs.h index 6b338e8..024f1eb 100644 --- a/src/fs/jfs.h +++ b/src/fs/jfs.h @@ -42,45 +42,45 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/linuxswap.h b/src/fs/linuxswap.h index 545aae2..ed647e2 100644 --- a/src/fs/linuxswap.h +++ b/src/fs/linuxswap.h @@ -42,16 +42,16 @@ public: public: static void init(); - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const; - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual bool canMount(const QString&) const { + virtual bool canMount(const QString&) const override { return true; } - virtual bool canUnmount(const QString&) const { + virtual bool canUnmount(const QString&) const override { return true; } @@ -61,37 +61,37 @@ public: virtual QString mountTitle() const override; virtual QString unmountTitle() const override; - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_Create; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 6718e23..99441c3 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -210,7 +210,7 @@ void luks::setMounted(bool mounted) bool luks::canCryptOpen(const QString&) const { - return supportToolFound() && !m_isCryptOpen && !m_isMounted; + return !m_isCryptOpen && !m_isMounted && supportToolFound(); } bool luks::canCryptClose(const QString&) const diff --git a/src/fs/luks.h b/src/fs/luks.h index 68682e9..0aa2a95 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -46,65 +46,65 @@ public: public: static void init(); - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { if (!m_isCryptOpen) return cmdSupportNone; if (m_Grow && m_innerFs) return m_innerFs->supportGrow(); return cmdSupportNone; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { if (!m_isCryptOpen) return cmdSupportNone; if (m_Shrink && m_innerFs) return m_innerFs->supportShrink(); return cmdSupportNone; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { if (!m_isCryptOpen) return cmdSupportNone; if (m_Check && m_innerFs) return m_innerFs->supportCheck(); return cmdSupportNone; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } virtual bool check(Report& report, const QString& deviceNode) const override; virtual bool create(Report &report, const QString &deviceNode) const override; - virtual qint64 minCapacity() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; - virtual QString readUUID(const QString& deviceNode) const; - virtual bool updateUUID(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual QString readLabel(const QString& deviceNode) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual qint64 minCapacity() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; + virtual QString readUUID(const QString& deviceNode) const override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual QString readLabel(const QString& deviceNode) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; virtual QString mountTitle() const override; virtual QString unmountTitle() const override; @@ -113,8 +113,8 @@ public: void setPassphrase(const QString&); - virtual bool canMount(const QString&) const; - virtual bool canUnmount(const QString&) const; + virtual bool canMount(const QString&) const override; + virtual bool canUnmount(const QString&) const override; bool isMounted() const; void setMounted(bool mounted); diff --git a/src/fs/lvm2_pv.h b/src/fs/lvm2_pv.h index 700548d..4dcba37 100644 --- a/src/fs/lvm2_pv.h +++ b/src/fs/lvm2_pv.h @@ -43,54 +43,54 @@ public: public: static void init(); -// virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool remove(Report& report, const QString& deviceNode) const; -// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; -// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool remove(Report& report, const QString& deviceNode) const override; +// virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; +// virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 maxCapacity() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/nilfs2.h b/src/fs/nilfs2.h index 04e40a2..44eb6d1 100644 --- a/src/fs/nilfs2.h +++ b/src/fs/nilfs2.h @@ -43,56 +43,56 @@ public: public: static void init(); -// virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; +// virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/ntfs.h b/src/fs/ntfs.h index 6c6f8a0..b8089cb 100644 --- a/src/fs/ntfs.h +++ b/src/fs/ntfs.h @@ -42,57 +42,57 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; - virtual bool updateBootSector(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; + virtual bool updateBootSector(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/ocfs2.h b/src/fs/ocfs2.h index 4f477be..a9817b3 100644 --- a/src/fs/ocfs2.h +++ b/src/fs/ocfs2.h @@ -42,54 +42,54 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/reiser4.h b/src/fs/reiser4.h index f5edc14..6d85351 100644 --- a/src/fs/reiser4.h +++ b/src/fs/reiser4.h @@ -42,36 +42,36 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/reiserfs.h b/src/fs/reiserfs.h index aa5ed60..f1edefe 100644 --- a/src/fs/reiserfs.h +++ b/src/fs/reiserfs.h @@ -44,55 +44,55 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); - virtual bool updateUUID(Report& report, const QString& deviceNode) const; + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; + virtual bool updateUUID(Report& report, const QString& deviceNode) const override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/ufs.h b/src/fs/ufs.h index b07f0ed..dadee83 100644 --- a/src/fs/ufs.h +++ b/src/fs/ufs.h @@ -40,17 +40,17 @@ public: public: static void init() {} - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual bool supportToolFound() const { + virtual bool supportToolFound() const override { return true; } diff --git a/src/fs/unformatted.h b/src/fs/unformatted.h index d38283a..167e9b2 100644 --- a/src/fs/unformatted.h +++ b/src/fs/unformatted.h @@ -42,13 +42,13 @@ public: public: static void init() {} - virtual bool create(Report&, const QString&) const; + virtual bool create(Report&, const QString&) const override; - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual bool supportToolFound() const { + virtual bool supportToolFound() const override { return true; } diff --git a/src/fs/unknown.h b/src/fs/unknown.h index 6cc0cde..85a2b27 100644 --- a/src/fs/unknown.h +++ b/src/fs/unknown.h @@ -37,7 +37,7 @@ public: public: static void init() {} - virtual bool supportToolFound() const { + virtual bool supportToolFound() const override { return true; } }; diff --git a/src/fs/xfs.h b/src/fs/xfs.h index 520a33c..fe1f37e 100644 --- a/src/fs/xfs.h +++ b/src/fs/xfs.h @@ -42,46 +42,46 @@ public: public: static void init(); - virtual qint64 readUsedCapacity(const QString& deviceNode) const; - virtual bool check(Report& report, const QString& deviceNode) const; - virtual bool create(Report& report, const QString& deviceNode) const; - virtual bool copy(Report& report, const QString&, const QString&) const; - virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; + virtual bool check(Report& report, const QString& deviceNode) const override; + virtual bool create(Report& report, const QString& deviceNode) const override; + virtual bool copy(Report& report, const QString&, const QString&) const override; + virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual qint64 maxLabelLength() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual qint64 maxLabelLength() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/fs/zfs.h b/src/fs/zfs.h index b9d7845..5deb538 100644 --- a/src/fs/zfs.h +++ b/src/fs/zfs.h @@ -43,50 +43,50 @@ public: public: static void init(); - virtual bool remove(Report& report, const QString& deviceNode) const; - virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); + virtual bool remove(Report& report, const QString& deviceNode) const override; + virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) override; - virtual CommandSupportType supportGetUsed() const { + virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; } - virtual CommandSupportType supportGetLabel() const { + virtual CommandSupportType supportGetLabel() const override { return m_GetLabel; } - virtual CommandSupportType supportCreate() const { + virtual CommandSupportType supportCreate() const override { return m_Create; } - virtual CommandSupportType supportGrow() const { + virtual CommandSupportType supportGrow() const override { return m_Grow; } - virtual CommandSupportType supportShrink() const { + virtual CommandSupportType supportShrink() const override { return m_Shrink; } - virtual CommandSupportType supportMove() const { + virtual CommandSupportType supportMove() const override { return m_Move; } - virtual CommandSupportType supportCheck() const { + virtual CommandSupportType supportCheck() const override { return m_Check; } - virtual CommandSupportType supportCopy() const { + virtual CommandSupportType supportCopy() const override { return m_Copy; } - virtual CommandSupportType supportBackup() const { + virtual CommandSupportType supportBackup() const override { return m_Backup; } - virtual CommandSupportType supportSetLabel() const { + virtual CommandSupportType supportSetLabel() const override { return m_SetLabel; } - virtual CommandSupportType supportUpdateUUID() const { + virtual CommandSupportType supportUpdateUUID() const override { return m_UpdateUUID; } - virtual CommandSupportType supportGetUUID() const { + virtual CommandSupportType supportGetUUID() const override { return m_GetUUID; } - virtual qint64 minCapacity() const; - virtual qint64 maxCapacity() const; - virtual SupportTool supportToolName() const; - virtual bool supportToolFound() const; + virtual qint64 minCapacity() const override; + virtual qint64 maxCapacity() const override; + virtual SupportTool supportToolName() const override; + virtual bool supportToolFound() const override; public: static CommandSupportType m_GetUsed; diff --git a/src/jobs/backupfilesystemjob.h b/src/jobs/backupfilesystemjob.h index 3d8da48..3ab4e18 100644 --- a/src/jobs/backupfilesystemjob.h +++ b/src/jobs/backupfilesystemjob.h @@ -39,9 +39,9 @@ public: BackupFileSystemJob(Device& sourcedevice, Partition& sourcepartition, const QString& filename); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Partition& sourcePartition() { diff --git a/src/jobs/checkfilesystemjob.h b/src/jobs/checkfilesystemjob.h index 7e84743..2f82282 100644 --- a/src/jobs/checkfilesystemjob.h +++ b/src/jobs/checkfilesystemjob.h @@ -35,8 +35,8 @@ public: CheckFileSystemJob(Partition& p); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/copyfilesystemjob.h b/src/jobs/copyfilesystemjob.h index dd4b39f..18ecfd8 100644 --- a/src/jobs/copyfilesystemjob.h +++ b/src/jobs/copyfilesystemjob.h @@ -41,9 +41,9 @@ public: CopyFileSystemJob(Device& targetdevice, Partition& targetpartition, Device& sourcedevice, Partition& sourcepartition); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Partition& targetPartition() { diff --git a/src/jobs/createfilesystemjob.h b/src/jobs/createfilesystemjob.h index c9ced7c..b8573bb 100644 --- a/src/jobs/createfilesystemjob.h +++ b/src/jobs/createfilesystemjob.h @@ -36,8 +36,8 @@ public: CreateFileSystemJob(Device& d, Partition& p); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/createpartitionjob.h b/src/jobs/createpartitionjob.h index cf86f10..077a0bf 100644 --- a/src/jobs/createpartitionjob.h +++ b/src/jobs/createpartitionjob.h @@ -36,8 +36,8 @@ public: CreatePartitionJob(Device& d, Partition& p); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/createpartitiontablejob.h b/src/jobs/createpartitiontablejob.h index 7089ee4..67e1857 100644 --- a/src/jobs/createpartitiontablejob.h +++ b/src/jobs/createpartitiontablejob.h @@ -35,8 +35,8 @@ public: CreatePartitionTableJob(Device& d); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Device& device() { diff --git a/src/jobs/deletefilesystemjob.h b/src/jobs/deletefilesystemjob.h index 36e53ad..db305a4 100644 --- a/src/jobs/deletefilesystemjob.h +++ b/src/jobs/deletefilesystemjob.h @@ -39,8 +39,8 @@ public: DeleteFileSystemJob(Device& d, Partition& p); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/deletepartitionjob.h b/src/jobs/deletepartitionjob.h index 9bf642f..fa55ce4 100644 --- a/src/jobs/deletepartitionjob.h +++ b/src/jobs/deletepartitionjob.h @@ -36,8 +36,8 @@ public: DeletePartitionJob(Device& d, Partition& p); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/movefilesystemjob.h b/src/jobs/movefilesystemjob.h index be0c171..44b4b44 100644 --- a/src/jobs/movefilesystemjob.h +++ b/src/jobs/movefilesystemjob.h @@ -39,9 +39,9 @@ public: MoveFileSystemJob(Device& d, Partition& p, qint64 newstart); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/resizefilesystemjob.h b/src/jobs/resizefilesystemjob.h index 13129cf..56d6865 100644 --- a/src/jobs/resizefilesystemjob.h +++ b/src/jobs/resizefilesystemjob.h @@ -40,9 +40,9 @@ public: ResizeFileSystemJob(Device& d, Partition& p, qint64 newlength = -1); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: bool resizeFileSystemBackend(Report& report); diff --git a/src/jobs/restorefilesystemjob.h b/src/jobs/restorefilesystemjob.h index 1b36db4..fecca52 100644 --- a/src/jobs/restorefilesystemjob.h +++ b/src/jobs/restorefilesystemjob.h @@ -39,9 +39,9 @@ public: RestoreFileSystemJob(Device& targetdevice, Partition& targetpartition, const QString& filename); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Partition& targetPartition() { diff --git a/src/jobs/setfilesystemlabeljob.h b/src/jobs/setfilesystemlabeljob.h index a426d70..49573a4 100644 --- a/src/jobs/setfilesystemlabeljob.h +++ b/src/jobs/setfilesystemlabeljob.h @@ -38,8 +38,8 @@ public: SetFileSystemLabelJob(Partition& p, const QString& newlabel); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/setpartflagsjob.h b/src/jobs/setpartflagsjob.h index 4a1b87c..51ca4a4 100644 --- a/src/jobs/setpartflagsjob.h +++ b/src/jobs/setpartflagsjob.h @@ -41,9 +41,9 @@ public: SetPartFlagsJob(Device& d, Partition& p, PartitionTable::Flags flags); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Device& device() { diff --git a/src/jobs/setpartgeometryjob.h b/src/jobs/setpartgeometryjob.h index 08ec789..d413083 100644 --- a/src/jobs/setpartgeometryjob.h +++ b/src/jobs/setpartgeometryjob.h @@ -43,8 +43,8 @@ public: SetPartGeometryJob(Device& d, Partition& p, qint64 newstart, qint64 newlength); public: - virtual bool run(Report& parent); - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/jobs/shredfilesystemjob.h b/src/jobs/shredfilesystemjob.h index 0f28c13..785a416 100644 --- a/src/jobs/shredfilesystemjob.h +++ b/src/jobs/shredfilesystemjob.h @@ -39,9 +39,9 @@ public: ShredFileSystemJob(Device& d, Partition& p, bool randomShred); public: - virtual bool run(Report& parent); - virtual qint32 numSteps() const; - virtual QString description() const; + virtual bool run(Report& parent) override; + virtual qint32 numSteps() const override; + virtual QString description() const override; protected: Partition& partition() { diff --git a/src/ops/backupoperation.h b/src/ops/backupoperation.h index fc65758..0526463 100644 --- a/src/ops/backupoperation.h +++ b/src/ops/backupoperation.h @@ -42,17 +42,17 @@ public: BackupOperation(Device& targetDevice, Partition& backupPartition, const QString& filename); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("document-export"); } - QString description() const; - void preview() {} - void undo() {} + QString description() const override; + void preview() override {} + void undo() override {} - virtual bool targets(const Device&) const { + virtual bool targets(const Device&) const override { return false; } - virtual bool targets(const Partition&) const { + virtual bool targets(const Partition&) const override{ return false; } diff --git a/src/ops/checkoperation.h b/src/ops/checkoperation.h index d16d6e0..cb523c8 100644 --- a/src/ops/checkoperation.h +++ b/src/ops/checkoperation.h @@ -45,15 +45,15 @@ public: CheckOperation(Device& targetDevice, Partition& checkedPartition); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("flag"); } - QString description() const; - void preview() {} - void undo() {} + QString description() const override; + void preview() override {} + void undo() override {} - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canCheck(const Partition* p); diff --git a/src/ops/copyoperation.h b/src/ops/copyoperation.h index 9c9a501..a62f67f 100644 --- a/src/ops/copyoperation.h +++ b/src/ops/copyoperation.h @@ -55,19 +55,19 @@ public: ~CopyOperation(); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("edit-copy"); } - QString description() const { + QString description() const override { return m_Description; } - bool execute(Report& parent); - void preview(); - void undo(); + bool execute(Report& parent) override; + void preview() override; + void undo() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canCopy(const Partition* p); static bool canPaste(const Partition* p, const Partition* source); diff --git a/src/ops/createfilesystemoperation.h b/src/ops/createfilesystemoperation.h index bed0db8..53581bb 100644 --- a/src/ops/createfilesystemoperation.h +++ b/src/ops/createfilesystemoperation.h @@ -53,16 +53,16 @@ public: ~CreateFileSystemOperation(); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("draw-eraser"); } - QString description() const; - void preview(); - void undo(); - bool execute(Report& parent); + QString description() const override; + void preview() override; + void undo() override; + bool execute(Report& parent) override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; protected: Device& targetDevice() { diff --git a/src/ops/createpartitiontableoperation.h b/src/ops/createpartitiontableoperation.h index e4b12b0..153dcab 100644 --- a/src/ops/createpartitiontableoperation.h +++ b/src/ops/createpartitiontableoperation.h @@ -49,16 +49,16 @@ public: ~CreatePartitionTableOperation(); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("edit-clear"); } - QString description() const; - void preview(); - void undo(); - bool execute(Report& parent); + QString description() const override; + void preview() override; + void undo() override; + bool execute(Report& parent) override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition&) const { + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition&) const override{ return false; } diff --git a/src/ops/deleteoperation.h b/src/ops/deleteoperation.h index 73972dd..be0b2cd 100644 --- a/src/ops/deleteoperation.h +++ b/src/ops/deleteoperation.h @@ -54,20 +54,20 @@ public: ~DeleteOperation(); public: - QString iconName() const { + QString iconName() const override { return shredAction() == NoShred ? QStringLiteral("edit-delete") : QStringLiteral("edit-delete-shred"); } - QString description() const; - void preview(); - void undo(); + QString description() const override; + void preview() override; + void undo() override; ShredAction shredAction() const { return m_ShredAction; } - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canDelete(const Partition* p); diff --git a/src/ops/newoperation.h b/src/ops/newoperation.h index 080adc0..9abad30 100644 --- a/src/ops/newoperation.h +++ b/src/ops/newoperation.h @@ -53,15 +53,15 @@ public: ~NewOperation(); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("document-new"); } - QString description() const; - void preview(); - void undo(); + QString description() const override; + void preview() override; + void undo() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canCreateNew(const Partition* p); static Partition* createNew(const Partition& cloneFrom, FileSystem::Type type); diff --git a/src/ops/resizeoperation.h b/src/ops/resizeoperation.h index 4eed013..cffc2b1 100644 --- a/src/ops/resizeoperation.h +++ b/src/ops/resizeoperation.h @@ -75,16 +75,16 @@ public: ResizeOperation(Device& d, Partition& p, qint64 newfirst, qint64 newlast); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("arrow-right-double"); } - QString description() const; - bool execute(Report& parent); - void preview(); - void undo(); + QString description() const override; + bool execute(Report& parent) override; + void preview() override; + void undo() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canGrow(const Partition* p); static bool canShrink(const Partition* p); diff --git a/src/ops/restoreoperation.h b/src/ops/restoreoperation.h index c261241..c4e4de8 100644 --- a/src/ops/restoreoperation.h +++ b/src/ops/restoreoperation.h @@ -56,17 +56,17 @@ public: ~RestoreOperation(); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("document-import"); } - QString description() const; - bool execute(Report& parent); - void undo(); + QString description() const override; + bool execute(Report& parent) override; + void undo() override; - void preview(); + void preview() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; static bool canRestore(const Partition* p); static Partition* createRestorePartition(const Device& device, PartitionNode& parent, qint64 start, const QString& fileName); diff --git a/src/ops/setfilesystemlabeloperation.h b/src/ops/setfilesystemlabeloperation.h index 23fa189..666fbb3 100644 --- a/src/ops/setfilesystemlabeloperation.h +++ b/src/ops/setfilesystemlabeloperation.h @@ -48,15 +48,15 @@ public: SetFileSystemLabelOperation(Partition& p, const QString& newlabel); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("edit-rename"); } - QString description() const; - void preview(); - void undo(); + QString description() const override; + void preview() override; + void undo() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; protected: Partition& labeledPartition() { diff --git a/src/ops/setpartflagsoperation.h b/src/ops/setpartflagsoperation.h index 4732976..aeb0015 100644 --- a/src/ops/setpartflagsoperation.h +++ b/src/ops/setpartflagsoperation.h @@ -51,15 +51,15 @@ public: SetPartFlagsOperation(Device& d, Partition& p, const PartitionTable::Flags& flags); public: - QString iconName() const { + QString iconName() const override { return QStringLiteral("flag-blue"); } - QString description() const; - void preview(); - void undo(); + QString description() const override; + void preview() override; + void undo() override; - virtual bool targets(const Device& d) const; - virtual bool targets(const Partition& p) const; + virtual bool targets(const Device& d) const override; + virtual bool targets(const Partition& p) const override; protected: Partition& flagPartition() { diff --git a/src/plugins/dummy/dummybackend.h b/src/plugins/dummy/dummybackend.h index 47776a1..9fa5be7 100644 --- a/src/plugins/dummy/dummybackend.h +++ b/src/plugins/dummy/dummybackend.h @@ -42,7 +42,7 @@ private: DummyBackend(QObject* parent, const QList& args); public: - virtual void initFSSupport(); + virtual void initFSSupport() override; virtual QList scanDevices(bool excludeReadOnly = false) override; virtual CoreBackendDevice* openDevice(const QString& device_node) override; diff --git a/src/plugins/dummy/dummydevice.h b/src/plugins/dummy/dummydevice.h index f374a07..51a3d38 100644 --- a/src/plugins/dummy/dummydevice.h +++ b/src/plugins/dummy/dummydevice.h @@ -37,16 +37,16 @@ public: ~DummyDevice(); public: - virtual bool open(); - virtual bool openExclusive(); - virtual bool close(); + virtual bool open() override; + virtual bool openExclusive() override; + virtual bool close() override; - virtual CoreBackendPartitionTable* openPartitionTable(); + virtual CoreBackendPartitionTable* openPartitionTable() override; - virtual bool createPartitionTable(Report& report, const PartitionTable& ptable); + virtual bool createPartitionTable(Report& report, const PartitionTable& ptable) override; - virtual bool readSectors(void* buffer, qint64 offset, qint64 numSectors); - virtual bool writeSectors(void* buffer, qint64 offset, qint64 numSectors); + virtual bool readSectors(void* buffer, qint64 offset, qint64 numSectors) override; + virtual bool writeSectors(void* buffer, qint64 offset, qint64 numSectors) override; }; #endif diff --git a/src/plugins/dummy/dummypartition.h b/src/plugins/dummy/dummypartition.h index f8d0f50..4cbbb06 100644 --- a/src/plugins/dummy/dummypartition.h +++ b/src/plugins/dummy/dummypartition.h @@ -33,7 +33,7 @@ public: DummyPartition(); public: - virtual bool setFlag(Report& report, PartitionTable::Flag flag, bool state); + virtual bool setFlag(Report& report, PartitionTable::Flag flag, bool state) override; }; diff --git a/src/plugins/dummy/dummypartitiontable.h b/src/plugins/dummy/dummypartitiontable.h index 90a1179..7cb4a1e 100644 --- a/src/plugins/dummy/dummypartitiontable.h +++ b/src/plugins/dummy/dummypartitiontable.h @@ -36,20 +36,20 @@ public: ~DummyPartitionTable(); public: - virtual bool open(); + virtual bool open() override; - virtual bool commit(quint32 timeout = 10); + virtual bool commit(quint32 timeout = 10) override; - virtual CoreBackendPartition* getExtendedPartition(); - virtual CoreBackendPartition* getPartitionBySector(qint64 sector); + virtual CoreBackendPartition* getExtendedPartition() override; + virtual CoreBackendPartition* getPartitionBySector(qint64 sector) override; - virtual QString createPartition(Report& report, const Partition& partition); - virtual bool deletePartition(Report& report, const Partition& partition); - virtual bool updateGeometry(Report& report, const Partition& partition, qint64 sector_start, qint64 sector_end); - virtual bool clobberFileSystem(Report& report, const Partition& partition); - virtual bool resizeFileSystem(Report& report, const Partition& partition, qint64 newLength); - virtual FileSystem::Type detectFileSystemBySector(Report& report, const Device& device, qint64 sector); - virtual bool setPartitionSystemType(Report& report, const Partition& partition); + virtual QString createPartition(Report& report, const Partition& partition) override; + virtual bool deletePartition(Report& report, const Partition& partition) override; + virtual bool updateGeometry(Report& report, const Partition& partition, qint64 sector_start, qint64 sector_end) override; + virtual bool clobberFileSystem(Report& report, const Partition& partition) override; + virtual bool resizeFileSystem(Report& report, const Partition& partition, qint64 newLength) override; + virtual FileSystem::Type detectFileSystemBySector(Report& report, const Device& device, qint64 sector) override; + virtual bool setPartitionSystemType(Report& report, const Partition& partition) override; }; #endif diff --git a/src/plugins/libparted/libpartedbackend.h b/src/plugins/libparted/libpartedbackend.h index 2131e5c..976263e 100644 --- a/src/plugins/libparted/libpartedbackend.h +++ b/src/plugins/libparted/libpartedbackend.h @@ -59,7 +59,7 @@ private: LibPartedBackend(QObject* parent, const QList& args); public: - virtual void initFSSupport(); + virtual void initFSSupport() override; virtual CoreBackendDevice* openDevice(const QString& device_node) override; virtual CoreBackendDevice* openDeviceExclusive(const QString& device_node) override; diff --git a/src/plugins/libparted/libparteddevice.h b/src/plugins/libparted/libparteddevice.h index 2a5a10d..2a36315 100644 --- a/src/plugins/libparted/libparteddevice.h +++ b/src/plugins/libparted/libparteddevice.h @@ -39,16 +39,16 @@ public: ~LibPartedDevice(); public: - virtual bool open(); - virtual bool openExclusive(); - virtual bool close(); + virtual bool open() override; + virtual bool openExclusive() override; + virtual bool close() override; - virtual CoreBackendPartitionTable* openPartitionTable(); + virtual CoreBackendPartitionTable* openPartitionTable() override; - virtual bool createPartitionTable(Report& report, const PartitionTable& ptable); + virtual bool createPartitionTable(Report& report, const PartitionTable& ptable) override; - virtual bool readSectors(void* buffer, qint64 offset, qint64 numSectors); - virtual bool writeSectors(void* buffer, qint64 offset, qint64 numSectors); + virtual bool readSectors(void* buffer, qint64 offset, qint64 numSectors) override; + virtual bool writeSectors(void* buffer, qint64 offset, qint64 numSectors) override; protected: PedDevice* pedDevice() { diff --git a/src/plugins/libparted/libpartedpartition.h b/src/plugins/libparted/libpartedpartition.h index f626f39..4bfed4a 100644 --- a/src/plugins/libparted/libpartedpartition.h +++ b/src/plugins/libparted/libpartedpartition.h @@ -35,7 +35,7 @@ public: LibPartedPartition(PedPartition* ped_partition); public: - virtual bool setFlag(Report& report, PartitionTable::Flag flag, bool state); + virtual bool setFlag(Report& report, PartitionTable::Flag flag, bool state) override; private: PedPartition* pedPartition() { diff --git a/src/plugins/libparted/libpartedpartitiontable.h b/src/plugins/libparted/libpartedpartitiontable.h index c41e45e..c2ad610 100644 --- a/src/plugins/libparted/libpartedpartitiontable.h +++ b/src/plugins/libparted/libpartedpartitiontable.h @@ -38,21 +38,21 @@ public: ~LibPartedPartitionTable(); public: - virtual bool open(); + virtual bool open() override; - virtual bool commit(quint32 timeout = 10); + virtual bool commit(quint32 timeout = 10) override; static bool commit(PedDisk* pd, quint32 timeout = 10); - virtual CoreBackendPartition* getExtendedPartition(); - virtual CoreBackendPartition* getPartitionBySector(qint64 sector); + virtual CoreBackendPartition* getExtendedPartition() override; + virtual CoreBackendPartition* getPartitionBySector(qint64 sector) override; - virtual QString createPartition(Report& report, const Partition& partition); - virtual bool deletePartition(Report& report, const Partition& partition); - virtual bool updateGeometry(Report& report, const Partition& partition, qint64 sector_start, qint64 sector_end); - virtual bool clobberFileSystem(Report& report, const Partition& partition); - virtual bool resizeFileSystem(Report& report, const Partition& partition, qint64 newLength); - virtual FileSystem::Type detectFileSystemBySector(Report& report, const Device& device, qint64 sector); - virtual bool setPartitionSystemType(Report& report, const Partition& partition); + virtual QString createPartition(Report& report, const Partition& partition) override; + virtual bool deletePartition(Report& report, const Partition& partition) override; + virtual bool updateGeometry(Report& report, const Partition& partition, qint64 sector_start, qint64 sector_end) override; + virtual bool clobberFileSystem(Report& report, const Partition& partition) override; + virtual bool resizeFileSystem(Report& report, const Partition& partition, qint64 newLength) override; + virtual FileSystem::Type detectFileSystemBySector(Report& report, const Device& device, qint64 sector) override; + virtual bool setPartitionSystemType(Report& report, const Partition& partition) override; private: PedDevice* pedDevice() { From 25e28a0e168a7517ad68ce9ab1c387128584eab4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 28 Apr 2016 21:56:03 +0100 Subject: [PATCH 38/57] Only enable deactivation of LUKS volume if cryptsetup is found. --- src/fs/luks.cpp | 7 ++++--- src/fs/luks.h | 1 + 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 99441c3..cfef42d 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -82,7 +82,7 @@ void luks::init() bool luks::supportToolFound() const { - return + m_cryptsetupFound = // m_GetUsed != cmdSupportNone && m_GetLabel != cmdSupportNone && m_SetLabel != cmdSupportNone && @@ -94,7 +94,8 @@ bool luks::supportToolFound() const m_Copy != cmdSupportNone && m_Move != cmdSupportNone && m_Backup != cmdSupportNone && - m_GetUUID != cmdSupportNone && + m_GetUUID != cmdSupportNone; + return m_cryptsetupFound && ((m_isCryptOpen && m_innerFs) ? m_innerFs->supportToolFound() : true); } @@ -215,7 +216,7 @@ bool luks::canCryptOpen(const QString&) const bool luks::canCryptClose(const QString&) const { - return m_isCryptOpen && !m_isMounted; + return m_isCryptOpen && !m_isMounted && m_cryptsetupFound; } bool luks::isCryptOpen() const diff --git a/src/fs/luks.h b/src/fs/luks.h index 0aa2a95..078778f 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -163,6 +163,7 @@ private: mutable FileSystem* m_innerFs; mutable bool m_isCryptOpen; + mutable bool m_cryptsetupFound; QString m_passphrase; bool m_isMounted; }; From 6b772f33323db15610cfa39519465aa9b0e518f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 28 Apr 2016 22:38:38 +0100 Subject: [PATCH 39/57] Optimize luks::mapperName function. Now it uses lsblk to find out mapper node. It also makes opened luks volumes to be properly detected when no cryptsetup is found, e.g. crypt is opened in initramfs. --- src/fs/luks.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index cfef42d..9754a94 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -511,18 +511,16 @@ bool luks::updateUUID(Report& report, const QString& deviceNode) const QString luks::mapperName(const QString& deviceNode) { - ExternalCommand cmd(QStringLiteral("find"), - { QStringLiteral("/dev/mapper/"), - QStringLiteral("-exec"), - QStringLiteral("cryptsetup"), - QStringLiteral("status"), - QStringLiteral("{}"), - QStringLiteral(";") }); - if (cmd.run()) { - QRegExp rxDeviceName(QStringLiteral("(/dev/mapper/[A-Za-z0-9-/]+) is " - "active[A-Za-z0-9- \\.\n]+[A-Za-z0-9-: \n]+") + deviceNode); - if (rxDeviceName.indexIn(cmd.output()) > -1) - return rxDeviceName.cap(1); + ExternalCommand cmd(QStringLiteral("lsblk"), + { QStringLiteral("--raw"), + QStringLiteral("--noheadings"), + QStringLiteral("--output"), + QStringLiteral("name"), + deviceNode }); + if (cmd.run(-1) && cmd.exitCode() == 0) { + QStringList output=cmd.output().split(QStringLiteral("\n")); + output.removeFirst(); + return QStringLiteral("/dev/mapper/") + output.first(); } return QString(); } From aa02ae7b1ce1cdce6ccc7880afbfbfe095c8530b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 28 Apr 2016 22:47:58 +0100 Subject: [PATCH 40/57] When cryptsetup is missing complain about it, not support tools of innerFS. --- src/fs/luks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 9754a94..d496fe8 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -101,7 +101,7 @@ bool luks::supportToolFound() const FileSystem::SupportTool luks::supportToolName() const { - if (m_isCryptOpen && m_innerFs) + if (m_isCryptOpen && m_innerFs && m_cryptsetupFound) return m_innerFs->supportToolName(); return SupportTool(QStringLiteral("cryptsetup"), QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); From 4df97ec3e79b94060309415603730079a3395082 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 28 Apr 2016 23:25:01 +0100 Subject: [PATCH 41/57] Fix detection of closed luks volumes (broken by new mapperName function). --- src/fs/luks.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index d496fe8..6c25334 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -520,7 +520,8 @@ QString luks::mapperName(const QString& deviceNode) if (cmd.run(-1) && cmd.exitCode() == 0) { QStringList output=cmd.output().split(QStringLiteral("\n")); output.removeFirst(); - return QStringLiteral("/dev/mapper/") + output.first(); + if (!output.first().isEmpty()) + return QStringLiteral("/dev/mapper/") + output.first(); } return QString(); } From 85aca763a260c52ae1833efcdb7387d6243f7f4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 12:36:24 +0100 Subject: [PATCH 42/57] Pass a pointer to the parent widget to decrypt dialog. --- src/fs/luks.cpp | 4 ++-- src/fs/luks.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 6c25334..fc97a57 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -229,7 +229,7 @@ void luks::setCryptOpen(bool cryptOpen) m_isCryptOpen = cryptOpen; } -bool luks::cryptOpen(const QString& deviceNode) +bool luks::cryptOpen(QWidget* parent, const QString& deviceNode) { if (m_isCryptOpen) { @@ -250,7 +250,7 @@ bool luks::cryptOpen(const QString& deviceNode) } } - QPointer dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0 + QPointer dlg = new DecryptLuksDialog(parent, deviceNode); if (dlg->exec() != QDialog::Accepted) { diff --git a/src/fs/luks.h b/src/fs/luks.h index 078778f..26967e4 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -123,7 +123,7 @@ public: bool isCryptOpen() const; void setCryptOpen(bool cryptOpen); - bool cryptOpen(const QString& deviceNode); + bool cryptOpen(QWidget* parent, const QString& deviceNode); bool cryptClose(const QString& deviceNode); void loadInnerFileSystem(const QString& mapperNode); From e2f21360bb367a73d7022d0314442dbd41d9f2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 14:27:01 +0100 Subject: [PATCH 43/57] Add support for reading used capacity of innerFS. Also make sure labels, used capacity and UUID are properly updated when opening or closing luks volumes." --- src/fs/luks.cpp | 20 ++++++++++++++++++-- src/fs/luks.h | 6 ++++++ src/plugins/libparted/libpartedbackend.cpp | 2 ++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index fc97a57..64b305b 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -77,13 +77,13 @@ void luks::init() m_Copy = cmdSupportCore; m_Move = cmdSupportCore; m_Backup = cmdSupportCore; + m_GetUsed = cmdSupportNone; // libparted does not support LUKS, we do this as a special case m_GetUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; } bool luks::supportToolFound() const { m_cryptsetupFound = -// m_GetUsed != cmdSupportNone && m_GetLabel != cmdSupportNone && m_SetLabel != cmdSupportNone && m_Create != cmdSupportNone && @@ -264,7 +264,7 @@ bool luks::cryptOpen(QWidget* parent, const QString& deviceNode) commands.push_back(QStringLiteral("cryptsetup")); std::vector args; args.push_back({ passphrase }); - args.push_back({ QStringLiteral("luksOpen"), + args.push_back({ QStringLiteral("open"), deviceNode, suggestedMapperName(deviceNode) }); delete dlg; @@ -320,6 +320,8 @@ bool luks::cryptClose(const QString& deviceNode) m_passphrase.clear(); setLabel({}); + setUUID(readUUID(deviceNode)); + setSectorsUsed(-1); m_isCryptOpen = (m_innerFs != nullptr); @@ -334,6 +336,9 @@ void luks::loadInnerFileSystem(const QString& mapperNode) FileSystem::Type innerFsType = detectFileSystem(mapperNode); m_innerFs = FileSystemFactory::cloneWithNewType(innerFsType, *this); + setLabel(m_innerFs->readLabel(mapperNode)); + setUUID(m_innerFs->readUUID(mapperNode)); + setSectorsUsed(m_innerFs->readUsedCapacity(mapperNode)/m_logicalSectorSize); } void luks::createInnerFileSystem(FileSystem::Type type) @@ -353,6 +358,15 @@ bool luks::check(Report& report, const QString& deviceNode) const return m_innerFs->check(report, mapperNode); } +qint64 luks::readUsedCapacity(const QString& deviceNode) const +{ + if (!m_isCryptOpen) + return -1; + if (m_innerFs) + return m_innerFs->readUsedCapacity(deviceNode); + return -1; +} + bool luks::mount(const QString& deviceNode, const QString& mountPoint) { if (!m_isCryptOpen) @@ -488,6 +502,8 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64) const QString luks::readUUID(const QString& deviceNode) const { + if (m_isCryptOpen && m_innerFs) + return m_innerFs->readUUID(mapperName(deviceNode)); ExternalCommand cmd(QStringLiteral("cryptsetup"), { QStringLiteral("luksUUID"), deviceNode }); if (cmd.run()) { diff --git a/src/fs/luks.h b/src/fs/luks.h index 26967e4..62e7eb2 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -45,6 +45,7 @@ public: public: static void init(); + virtual qint64 readUsedCapacity(const QString& deviceNode) const override; virtual CommandSupportType supportGetUsed() const override { return m_GetUsed; @@ -95,6 +96,10 @@ public: return m_GetUUID; } + void setLogicalSectorSize(unsigned int logicalSectorSize) { + m_logicalSectorSize = logicalSectorSize; + } + virtual bool check(Report& report, const QString& deviceNode) const override; virtual bool create(Report &report, const QString &deviceNode) const override; virtual qint64 minCapacity() const override; @@ -166,6 +171,7 @@ private: mutable bool m_cryptsetupFound; QString m_passphrase; bool m_isMounted; + unsigned int m_logicalSectorSize; }; } diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index f9fb3b0..a287ce6 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -358,9 +358,11 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD QString mapperNode = FS::luks::mapperName(node); bool isCryptOpen = !mapperNode.isEmpty(); luksFs->setCryptOpen(isCryptOpen); + luksFs->setLogicalSectorSize(d.logicalSectorSize()); if (isCryptOpen) { luksFs->loadInnerFileSystem(mapperNode); + luksFs->setSectorsUsed(luksFs->readUsedCapacity(mapperNode) / d.logicalSectorSize()); mountPoint = mountPoints.findByDevice(mapperNode) ? mountPoints.findByDevice(mapperNode)->mountPoint() : From 47a15947052fd5dbbeb0389975ec82a8e14e6418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 15:33:26 +0100 Subject: [PATCH 44/57] Slightly improve setting used sectors. --- src/fs/luks.cpp | 3 ++- src/plugins/libparted/libpartedbackend.cpp | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 64b305b..6cfe951 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -338,7 +338,8 @@ void luks::loadInnerFileSystem(const QString& mapperNode) *this); setLabel(m_innerFs->readLabel(mapperNode)); setUUID(m_innerFs->readUUID(mapperNode)); - setSectorsUsed(m_innerFs->readUsedCapacity(mapperNode)/m_logicalSectorSize); + if (m_innerFs->supportGetUsed() == FileSystem::cmdSupportFileSystem) // FIXME:also implement checking space if partition is mounted + setSectorsUsed(m_innerFs->readUsedCapacity(mapperNode)/m_logicalSectorSize); } void luks::createInnerFileSystem(FileSystem::Type type) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index a287ce6..0e15f8b 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -362,7 +362,6 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD if (isCryptOpen) { luksFs->loadInnerFileSystem(mapperNode); - luksFs->setSectorsUsed(luksFs->readUsedCapacity(mapperNode) / d.logicalSectorSize()); mountPoint = mountPoints.findByDevice(mapperNode) ? mountPoints.findByDevice(mapperNode)->mountPoint() : From 91c36c3d20e9bb9d55e3f250524f04273c7d1cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 17:09:41 +0100 Subject: [PATCH 45/57] Adjust minCapacity for btrfs and luks. After all, it seems 40 MiB doesn't work. --- src/fs/btrfs.cpp | 2 +- src/fs/luks.cpp | 5 ----- src/fs/luks.h | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/fs/btrfs.cpp b/src/fs/btrfs.cpp index 00ed17f..cbf2de6 100644 --- a/src/fs/btrfs.cpp +++ b/src/fs/btrfs.cpp @@ -91,7 +91,7 @@ FileSystem::SupportTool btrfs::supportToolName() const qint64 btrfs::minCapacity() const { - return 40 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); + return 100 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); } qint64 btrfs::maxCapacity() const diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 6cfe951..5791962 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -107,11 +107,6 @@ FileSystem::SupportTool luks::supportToolName() const QUrl(QStringLiteral("https://code.google.com/p/cryptsetup/"))); } -qint64 luks::minCapacity() const -{ - return 3 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB); -} - bool luks::create(Report& report, const QString& deviceNode) const { Q_ASSERT(m_innerFs); diff --git a/src/fs/luks.h b/src/fs/luks.h index 62e7eb2..1fb1573 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -102,7 +102,6 @@ public: virtual bool check(Report& report, const QString& deviceNode) const override; virtual bool create(Report &report, const QString &deviceNode) const override; - virtual qint64 minCapacity() const override; virtual SupportTool supportToolName() const override; virtual bool supportToolFound() const override; virtual QString readUUID(const QString& deviceNode) const override; From 7cd1fd6eb743223cf84bfc9a293f83e8553393b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 17:55:55 +0100 Subject: [PATCH 46/57] Initial LUKS shrink support. --- src/fs/luks.cpp | 35 +++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 5791962..1146d7f 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -73,6 +73,7 @@ void luks::init() m_GetLabel = cmdSupportFileSystem; m_UpdateUUID = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; m_Grow = findExternal(QStringLiteral("cryptsetup")) ? cmdSupportFileSystem : cmdSupportNone; + m_Shrink = m_Grow; m_Check = cmdSupportCore; m_Copy = cmdSupportCore; m_Move = cmdSupportCore; @@ -90,7 +91,7 @@ bool luks::supportToolFound() const m_Check != cmdSupportNone && m_UpdateUUID != cmdSupportNone && m_Grow != cmdSupportNone && -// m_Shrink != cmdSupportNone && + m_Shrink != cmdSupportNone && m_Copy != cmdSupportNone && m_Move != cmdSupportNone && m_Backup != cmdSupportNone && @@ -474,7 +475,7 @@ bool luks::writeLabel(Report& report, const QString& deviceNode, const QString& return m_innerFs->writeLabel(report, mapperName(deviceNode), newLabel); } -bool luks::resize(Report& report, const QString& deviceNode, qint64) const +bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) const { Q_ASSERT(m_innerFs); @@ -482,18 +483,28 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64) const if (mapperNode.isEmpty()) return false; - ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("resize"), mapperNode }); - report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); - - bool rval = false; - if (cryptResizeCmd.run(-1)) + if ( newLength - length() > 0 ) { - rval = m_innerFs->resize(report, mapperNode, -1); - } - else - report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition %1 failed.", deviceNode); + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("resize"), mapperNode }); + report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); - return rval; + if (cryptResizeCmd.run(-1)) + { + return m_innerFs->resize(report, mapperNode, -1); + } + else + report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition %1 failed.", deviceNode); + } + else if (m_innerFs->resize(report, mapperNode, newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize)) + { + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("-b"), QString::number(newLength), QStringLiteral("resize"), mapperNode }); + report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); + if (cryptResizeCmd.run(-1)) + { + return true; + } + } + return false; } QString luks::readUUID(const QString& deviceNode) const From 4ff7ada40bd22f160a91e6931a0689923f22d93c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 18:12:34 +0100 Subject: [PATCH 47/57] Fix size vs sector number when resizing LUKS. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 1146d7f..c6e54b0 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -483,7 +483,7 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c if (mapperNode.isEmpty()) return false; - if ( newLength - length() > 0 ) + if ( newLength - length() * m_logicalSectorSize > 0 ) { ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); @@ -497,7 +497,7 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c } else if (m_innerFs->resize(report, mapperNode, newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize)) { - ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("-b"), QString::number(newLength), QStringLiteral("resize"), mapperNode }); + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("-b"), QString::number(newLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); if (cryptResizeCmd.run(-1)) { From 314742f40aa3c796e2c186b4fe17ec249d5dd010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 19:49:06 +0100 Subject: [PATCH 48/57] Use long options for cryptstup. --- src/fs/luks.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index c6e54b0..f808ac9 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -497,7 +497,7 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c } else if (m_innerFs->resize(report, mapperNode, newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize)) { - ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("-b"), QString::number(newLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("--size"), QString::number(newLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); if (cryptResizeCmd.run(-1)) { From a115961f048cd97b2f19cae17d2c6805809e34a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Apr 2016 20:25:14 +0100 Subject: [PATCH 49/57] Calculate the size of innerFS when growing LUKS volumes. --- src/fs/luks.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index f808ac9..e0cf675 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -488,9 +488,9 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); - if (cryptResizeCmd.run(-1)) + if (cryptResizeCmd.run(-1) && cryptResizeCmd.exitCode() == 0) { - return m_innerFs->resize(report, mapperNode, -1); + return m_innerFs->resize(report, mapperNode, newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize); } else report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition %1 failed.", deviceNode); @@ -499,7 +499,7 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c { ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("--size"), QString::number(newLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); - if (cryptResizeCmd.run(-1)) + if (cryptResizeCmd.run(-1) && cryptResizeCmd.exitCode() == 0) { return true; } From f1210d0aa7fa10eb667642b5c7cb0cd294134913 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 30 Apr 2016 13:48:06 +0100 Subject: [PATCH 50/57] Pass LUKS payload length to cryptsetup --size. Before we were passing the length of the whole LUKS partition. After shrinking LUKS partitions blkid would not recognize them. --- src/fs/luks.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index e0cf675..ab966a6 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -483,6 +483,7 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c if (mapperNode.isEmpty()) return false; + qint64 payloadLength = newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize; if ( newLength - length() * m_logicalSectorSize > 0 ) { ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("resize"), mapperNode }); @@ -495,9 +496,9 @@ bool luks::resize(Report& report, const QString& deviceNode, qint64 newLength) c else report.line() << xi18nc("@info/plain", "Resizing encrypted file system on partition %1 failed.", deviceNode); } - else if (m_innerFs->resize(report, mapperNode, newLength - getPayloadOffset(deviceNode).toInt() * m_logicalSectorSize)) + else if (m_innerFs->resize(report, mapperNode, payloadLength)) { - ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("--size"), QString::number(newLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); + ExternalCommand cryptResizeCmd(report, QStringLiteral("cryptsetup"), { QStringLiteral("--size"), QString::number(payloadLength / m_logicalSectorSize), QStringLiteral("resize"), mapperNode }); report.line() << xi18nc("@info/plain", "Resizing LUKS crypt on partition %1.", deviceNode); if (cryptResizeCmd.run(-1) && cryptResizeCmd.exitCode() == 0) { From a1026d20be79f563c2f9c920c5f3e34995b7aa0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sun, 1 May 2016 14:17:06 +0100 Subject: [PATCH 51/57] Use KPasswordDialog to open LUKS containers. --- CMakeLists.txt | 1 + src/CMakeLists.txt | 1 + src/fs/luks.cpp | 15 +++---- src/gui/CMakeLists.txt | 8 ---- src/gui/decryptluksdialog.cpp | 46 -------------------- src/gui/decryptluksdialog.h | 50 ---------------------- src/gui/decryptluksdialogwidget.cpp | 24 ----------- src/gui/decryptluksdialogwidget.h | 38 ----------------- src/gui/decryptluksdialogwidgetbase.ui | 58 -------------------------- 9 files changed, 7 insertions(+), 234 deletions(-) delete mode 100644 src/gui/decryptluksdialog.cpp delete mode 100644 src/gui/decryptluksdialog.h delete mode 100644 src/gui/decryptluksdialogwidget.cpp delete mode 100644 src/gui/decryptluksdialogwidget.h delete mode 100644 src/gui/decryptluksdialogwidgetbase.ui diff --git a/CMakeLists.txt b/CMakeLists.txt index 8dfc46f..f429f37 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,6 +57,7 @@ find_package(KF5 REQUIRED IconThemes KIO Service + WidgetsAddons ) # use sane compile flags diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 47fa648..40f4c7c 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -45,6 +45,7 @@ target_link_libraries( kpmcore KF5::IconThemes KF5::KIOCore KF5::Service + KF5::WidgetsAddons ) install(TARGETS kpmcore EXPORT KPMcoreTargets ${INSTALL_TARGETS_DEFAULT_ARGS}) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index ab966a6..0034a07 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -21,8 +21,6 @@ #include "fs/filesystemfactory.h" -#include "gui/decryptluksdialog.h" - #include "util/capacity.h" #include "util/externalcommand.h" #include "util/report.h" @@ -34,6 +32,7 @@ #include #include +#include namespace FS { @@ -246,15 +245,12 @@ bool luks::cryptOpen(QWidget* parent, const QString& deviceNode) } } - QPointer dlg = new DecryptLuksDialog(parent, deviceNode); - - if (dlg->exec() != QDialog::Accepted) - { - delete dlg; + KPasswordDialog dlg( parent ); + dlg.setPrompt(i18n("Enter passphrase for %1:", deviceNode)); + if( !dlg.exec() ) return false; - } - QString passphrase = dlg->luksPassphrase().text(); + QString passphrase = dlg.password(); std::vector commands; commands.push_back(QStringLiteral("echo")); commands.push_back(QStringLiteral("cryptsetup")); @@ -263,7 +259,6 @@ bool luks::cryptOpen(QWidget* parent, const QString& deviceNode) args.push_back({ QStringLiteral("open"), deviceNode, suggestedMapperName(deviceNode) }); - delete dlg; ExternalCommand cmd(commands, args); if (!(cmd.run(-1) && cmd.exitCode() == 0)) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index be2f27a..9852f78 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -1,19 +1,11 @@ set(GUI_SRC - gui/decryptluksdialog.cpp - gui/decryptluksdialogwidget.cpp gui/partresizerwidget.cpp gui/partwidget.cpp gui/partwidgetbase.cpp ) set(GUI_LIB_HDRS - gui/decryptluksdialog.h - gui/decryptluksdialogwidget.h gui/partresizerwidget.h gui/partwidget.h gui/partwidgetbase.h ) - -set(gui_UIFILES - gui/decryptluksdialogwidgetbase.ui -) diff --git a/src/gui/decryptluksdialog.cpp b/src/gui/decryptluksdialog.cpp deleted file mode 100644 index d5a0cec..0000000 --- a/src/gui/decryptluksdialog.cpp +++ /dev/null @@ -1,46 +0,0 @@ -/************************************************************************* - * Copyright (C) 2013 by Andrius Štikonas * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see .* - *************************************************************************/ - -#include "gui/decryptluksdialog.h" -#include "gui/decryptluksdialogwidget.h" - -#include "core/device.h" -#include "core/partitiontable.h" - -#include - -#include -#include - -DecryptLuksDialog::DecryptLuksDialog(QWidget* parent, const QString& deviceNode) : - QDialog(parent), - m_DialogWidget(new DecryptLuksDialogWidget(this)), - m_DeviceNode(deviceNode) -{ - QVBoxLayout *mainLayout = new QVBoxLayout(this); - setLayout(mainLayout); - mainLayout->addWidget(&widget()); - setWindowTitle(xi18nc("@title:window", "Decrypt LUKS partition on %1", this->deviceNode())); - - QDialogButtonBox* dialogButtonBox = new QDialogButtonBox; - QPushButton* decryptButton = new QPushButton; - decryptButton->setText(i18nc("@action:button", "&Decrypt")); - decryptButton->setIcon(QIcon::fromTheme(QStringLiteral("object-unlocked"))); - dialogButtonBox->addButton(decryptButton, QDialogButtonBox::AcceptRole); - mainLayout->addWidget(dialogButtonBox); - connect(dialogButtonBox, SIGNAL(accepted()), this, SLOT(accept())); -} diff --git a/src/gui/decryptluksdialog.h b/src/gui/decryptluksdialog.h deleted file mode 100644 index 07504d6..0000000 --- a/src/gui/decryptluksdialog.h +++ /dev/null @@ -1,50 +0,0 @@ -/************************************************************************* - * Copyright (C) 2013 by Andrius Štikonas * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see .* - *************************************************************************/ - -#if !defined(DECRYPTLUKSDIALOG__H) - -#define DECRYPTLUKSDIALOG__H - -#include "gui/decryptluksdialogwidget.h" - -#include - -class Device; - -class DecryptLuksDialog : public QDialog -{ - Q_OBJECT - - public: - DecryptLuksDialog(QWidget* parent, const QString& deviceNode); - - protected: - DecryptLuksDialogWidget& widget() { return *m_DialogWidget; } - const DecryptLuksDialogWidget& widget() const { return *m_DialogWidget; } - const QString& deviceNode() const { return m_DeviceNode; } - - private: - DecryptLuksDialogWidget* m_DialogWidget; - const QString& m_DeviceNode; - - public: - QLineEdit& luksPassphrase() { return widget().luksPassphrase(); } - const QLineEdit& luksPassphrase() const { return widget().luksPassphrase(); } -}; - - -#endif diff --git a/src/gui/decryptluksdialogwidget.cpp b/src/gui/decryptluksdialogwidget.cpp deleted file mode 100644 index bd80e30..0000000 --- a/src/gui/decryptluksdialogwidget.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/************************************************************************* - * Copyright (C) 2013 by Andrius Štikonas * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see .* - *************************************************************************/ - -#include "gui/decryptluksdialogwidget.h" - -DecryptLuksDialogWidget::DecryptLuksDialogWidget(QWidget* parent) : - QWidget(parent) -{ - setupUi(this); -} diff --git a/src/gui/decryptluksdialogwidget.h b/src/gui/decryptluksdialogwidget.h deleted file mode 100644 index da5acaa..0000000 --- a/src/gui/decryptluksdialogwidget.h +++ /dev/null @@ -1,38 +0,0 @@ -/************************************************************************* - * Copyright (C) 2013 by Andrius Štikonas * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License as * - * published by the Free Software Foundation; either version 3 of * - * the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program. If not, see .* - *************************************************************************/ - -#if !defined(DECRYPTLUKSDIALOGWIDGET__H) - -#define DECRYPTLUKSDIALOGWIDGET__H - -#include "ui_decryptluksdialogwidgetbase.h" - -#include -#include - -class DecryptLuksDialogWidget : public QWidget, public Ui::DecryptLuksDialogWidgetBase -{ - Q_OBJECT - - public: - DecryptLuksDialogWidget(QWidget* parent); - - QLineEdit& luksPassphrase() { return *m_LineEditPassphrase; } - const QLineEdit& luksPassphrase() const { return *m_LineEditPassphrase; } -}; - -#endif diff --git a/src/gui/decryptluksdialogwidgetbase.ui b/src/gui/decryptluksdialogwidgetbase.ui deleted file mode 100644 index 1bcc61f..0000000 --- a/src/gui/decryptluksdialogwidgetbase.ui +++ /dev/null @@ -1,58 +0,0 @@ - - - DecryptLuksDialogWidgetBase - - - - 0 - 0 - 377 - 122 - - - - - 10 - - - - - - - &Passphrase: - - - m_LineEditPassphrase - - - - - - - QLineEdit::Password - - - - - - - - - Qt::Vertical - - - QSizePolicy::MinimumExpanding - - - - 20 - 20 - - - - - - - - - From 1cb464c6b0832ad5eafc25352aac776b62fc8d7f Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 4 May 2016 18:27:59 +0200 Subject: [PATCH 52/57] Use the detected FS type directly. --- src/plugins/libparted/libpartedbackend.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/libparted/libpartedbackend.cpp b/src/plugins/libparted/libpartedbackend.cpp index 0e15f8b..b6e56f0 100644 --- a/src/plugins/libparted/libpartedbackend.cpp +++ b/src/plugins/libparted/libpartedbackend.cpp @@ -352,7 +352,7 @@ void LibPartedBackend::scanDevicePartitions(PedDevice*, Device& d, PedDisk* pedD // libparted does not handle LUKS partitions QString mountPoint; bool mounted = false; - if (fs->type() == FileSystem::Luks) { + if (type == FileSystem::Luks) { r |= PartitionRole::Luks; FS::luks* luksFs = dynamic_cast(fs); QString mapperNode = FS::luks::mapperName(node); From 27af037bb4f8f90e1d9b2039d21d046db0bc4121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Wed, 4 May 2016 21:50:05 +0100 Subject: [PATCH 53/57] Use lsblk to determine mounted status. --- src/util/CMakeLists.txt | 3 - src/util/helpers.cpp | 18 +- src/util/helpers.h | 4 +- src/util/ismounted.c | 400 ---------------------------------------- src/util/ismounted.h | 14 -- src/util/loopdev.h | 193 ------------------- src/util/pathnames.h | 212 --------------------- src/util/sysfs.h | 127 ------------- 8 files changed, 16 insertions(+), 955 deletions(-) delete mode 100644 src/util/ismounted.c delete mode 100644 src/util/ismounted.h delete mode 100644 src/util/loopdev.h delete mode 100644 src/util/pathnames.h delete mode 100644 src/util/sysfs.h diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 443afad..c8b2ea3 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -1,5 +1,3 @@ -set_source_files_properties( util/ismounted.c PROPERTIES LANGUAGE CXX ) - set(UTIL_SRC util/capacity.cpp util/externalcommand.cpp @@ -7,7 +5,6 @@ set(UTIL_SRC util/helpers.cpp util/htmlreport.cpp util/report.cpp - util/ismounted.c ) set(UTIL_LIB_HDRS diff --git a/src/util/helpers.cpp b/src/util/helpers.cpp index fd81e2e..336c8f3 100644 --- a/src/util/helpers.cpp +++ b/src/util/helpers.cpp @@ -17,10 +17,10 @@ *************************************************************************/ #include "util/helpers.h" -#include "../util/globallog.h" -#include "../util/ismounted.h" +#include "util/externalcommand.h" +#include "util/globallog.h" -#include "../ops/operation.h" +#include "ops/operation.h" #include #include @@ -71,5 +71,15 @@ void showColumnsContextMenu(const QPoint& p, QTreeWidget& tree) bool isMounted(const QString& deviceNode) { - return is_mounted(deviceNode.toLatin1().constData()); + ExternalCommand cmd(QStringLiteral("lsblk"), + { QStringLiteral("--noheadings"), + QStringLiteral("--nodeps"), + QStringLiteral("--output"), + QStringLiteral("mountpoint"), + deviceNode }); + + if (cmd.run(-1) && cmd.exitCode() == 0) { + return !cmd.output().simplified().isEmpty(); + } + return false; } diff --git a/src/util/helpers.h b/src/util/helpers.h index 9d549df..aad5f78 100644 --- a/src/util/helpers.h +++ b/src/util/helpers.h @@ -19,9 +19,9 @@ #define HELPERS__H -#include "../fs/filesystem.h" +#include "fs/filesystem.h" -#include "../util/libpartitionmanagerexport.h" +#include "util/libpartitionmanagerexport.h" class QString; class QPoint; diff --git a/src/util/ismounted.c b/src/util/ismounted.c deleted file mode 100644 index 20cc568..0000000 --- a/src/util/ismounted.c +++ /dev/null @@ -1,400 +0,0 @@ -/* - * ismounted.c --- Check to see if the filesystem was mounted - * - * Copyright (C) 1995,1996,1997,1998,1999,2000,2008 Theodore Ts'o. - * - * This file may be redistributed under the terms of the GNU Public - * License. - */ -#include -#include -#include -#include -#include -#ifdef HAVE_MNTENT_H -#include -#endif -#include -#include -#include -#include -#ifdef __APPLE__ -#include -#include -#endif - -#include "pathnames.h" -#include "ismounted.h" -#ifdef __linux__ -# include "loopdev.h" -#endif - - -/* - * Fallback defines for old versions of glibc - */ -#ifdef O_CLOEXEC -#define UL_CLOEXECSTR "e" -#else -#define UL_CLOEXECSTR "" -#endif - -#ifndef O_CLOEXEC -#define O_CLOEXEC 0 -#endif - - -#ifdef HAVE_MNTENT_H -/* - * Helper function which checks a file in /etc/mtab format to see if a - * filesystem is mounted. Returns an error if the file doesn't exist - * or can't be opened. - */ -static int check_mntent_file(const char *mtab_file, const char *file, - int *mount_flags, char *mtpt, int mtlen) -{ - struct mntent *mnt; - struct stat st_buf; - int retval = 0; - dev_t file_dev=0, file_rdev=0; - ino_t file_ino=0; - FILE *f; - int fd; - - *mount_flags = 0; - if ((f = setmntent (mtab_file, "r")) == NULL) - return errno; - - if (stat(file, &st_buf) == 0) { - if (S_ISBLK(st_buf.st_mode)) { -#ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */ - file_rdev = st_buf.st_rdev; -#endif /* __GNU__ */ - } else { - file_dev = st_buf.st_dev; - file_ino = st_buf.st_ino; - } - } - - while ((mnt = getmntent (f)) != NULL) { - if (mnt->mnt_fsname[0] != '/') - continue; - if (strcmp(file, mnt->mnt_fsname) == 0) - break; - if (stat(mnt->mnt_fsname, &st_buf) != 0) - continue; - - if (S_ISBLK(st_buf.st_mode)) { -#ifndef __GNU__ - if (file_rdev && file_rdev == st_buf.st_rdev) - break; -#ifdef __linux__ - /* maybe the file is loopdev backing file */ - if (file_dev - && major(st_buf.st_rdev) == LOOPDEV_MAJOR - && loopdev_is_used(mnt->mnt_fsname, file, 0, 0)) - break; -#endif /* __linux__ */ -#endif /* __GNU__ */ - } else { - if (file_dev && ((file_dev == st_buf.st_dev) && - (file_ino == st_buf.st_ino))) - break; - } - } - - if (mnt == NULL) { -#ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */ - /* - * Do an extra check to see if this is the root device. We - * can't trust /etc/mtab, and /proc/mounts will only list - * /dev/root for the root filesystem. Argh. Instead we - * check if the given device has the same major/minor number - * as the device that the root directory is on. - */ - if (file_rdev && stat("/", &st_buf) == 0 && - st_buf.st_dev == file_rdev) { - *mount_flags = MF_MOUNTED; - if (mtpt) - strncpy(mtpt, "/", mtlen); - goto is_root; - } -#endif /* __GNU__ */ - goto errout; - } -#ifndef __GNU__ /* The GNU hurd is deficient; what else is new? */ - /* Validate the entry in case /etc/mtab is out of date */ - /* - * We need to be paranoid, because some broken distributions - * (read: Slackware) don't initialize /etc/mtab before checking - * all of the non-root filesystems on the disk. - */ - if (stat(mnt->mnt_dir, &st_buf) < 0) { - retval = errno; - if (retval == ENOENT) { -#ifdef DEBUG - printf("Bogus entry in %s! (%s does not exist)\n", - mtab_file, mnt->mnt_dir); -#endif /* DEBUG */ - retval = 0; - } - goto errout; - } - if (file_rdev && (st_buf.st_dev != file_rdev)) { -#ifdef DEBUG - printf("Bogus entry in %s! (%s not mounted on %s)\n", - mtab_file, file, mnt->mnt_dir); -#endif /* DEBUG */ - goto errout; - } -#endif /* __GNU__ */ - *mount_flags = MF_MOUNTED; - -#ifdef MNTOPT_RO - /* Check to see if the ro option is set */ - if (hasmntopt(mnt, MNTOPT_RO)) - *mount_flags |= MF_READONLY; -#endif - - if (mtpt) - strncpy(mtpt, mnt->mnt_dir, mtlen); - /* - * Check to see if we're referring to the root filesystem. - * If so, do a manual check to see if we can open /etc/mtab - * read/write, since if the root is mounted read/only, the - * contents of /etc/mtab may not be accurate. - */ - if (!strcmp(mnt->mnt_dir, "/")) { -is_root: -#define TEST_FILE "/.ismount-test-file" - *mount_flags |= MF_ISROOT; - fd = open(TEST_FILE, O_RDWR|O_CREAT|O_CLOEXEC, 0600); - if (fd < 0) { - if (errno == EROFS) - *mount_flags |= MF_READONLY; - } else - close(fd); - (void) unlink(TEST_FILE); - } - retval = 0; -errout: - endmntent (f); - return retval; -} - -static int check_mntent(const char *file, int *mount_flags, - char *mtpt, int mtlen) -{ - int retval; - -#ifdef DEBUG - retval = check_mntent_file("/tmp/mtab", file, mount_flags, - mtpt, mtlen); - if (retval == 0) - return 0; -#endif /* DEBUG */ -#ifdef __linux__ - retval = check_mntent_file("/proc/mounts", file, mount_flags, - mtpt, mtlen); - if (retval == 0 && (*mount_flags != 0)) - return 0; - if (access("/proc/mounts", R_OK) == 0) { - *mount_flags = 0; - return retval; - } -#endif /* __linux__ */ -#if defined(MOUNTED) || defined(_PATH_MOUNTED) -#ifndef MOUNTED -#define MOUNTED _PATH_MOUNTED -#endif /* MOUNTED */ - retval = check_mntent_file(MOUNTED, file, mount_flags, mtpt, mtlen); - return retval; -#else - *mount_flags = 0; - return 0; -#endif /* defined(MOUNTED) || defined(_PATH_MOUNTED) */ -} - -#else -#if defined(HAVE_GETMNTINFO) - -static int check_getmntinfo(const char *file, int *mount_flags, - char *mtpt, int mtlen) -{ - struct statfs *mp; - int len, n; - const char *s1; - char *s2; - - n = getmntinfo(&mp, MNT_NOWAIT); - if (n == 0) - return errno; - - len = sizeof(_PATH_DEV) - 1; - s1 = file; - if (strncmp(_PATH_DEV, s1, len) == 0) - s1 += len; - - *mount_flags = 0; - while (--n >= 0) { - s2 = mp->f_mntfromname; - if (strncmp(_PATH_DEV, s2, len) == 0) { - s2 += len - 1; - *s2 = 'r'; - } - if (strcmp(s1, s2) == 0 || strcmp(s1, &s2[1]) == 0) { - *mount_flags = MF_MOUNTED; - break; - } - ++mp; - } - if (mtpt) - strncpy(mtpt, mp->f_mntonname, mtlen); - return 0; -} -#endif /* HAVE_GETMNTINFO */ -#endif /* HAVE_MNTENT_H */ - -/* - * Check to see if we're dealing with the swap device. - */ -static int is_swap_device(const char *file) -{ - FILE *f; - char buf[1024], *cp; - dev_t file_dev; - struct stat st_buf; - int ret = 0; - - file_dev = 0; -#ifndef __GNU__ /* The GNU hurd is broken with respect to stat devices */ - if ((stat(file, &st_buf) == 0) && - S_ISBLK(st_buf.st_mode)) - file_dev = st_buf.st_rdev; -#endif /* __GNU__ */ - - if (!(f = fopen("/proc/swaps", "r" UL_CLOEXECSTR))) - return 0; - /* Skip the first line */ - if (!fgets(buf, sizeof(buf), f)) - goto leave; - if (*buf && strncmp(buf, "Filename\t", 9)) - /* Linux <=2.6.19 contained a bug in the /proc/swaps - * code where the header would not be displayed - */ - goto valid_first_line; - - while (fgets(buf, sizeof(buf), f)) { -valid_first_line: - if ((cp = strchr(buf, ' ')) != NULL) - *cp = 0; - if ((cp = strchr(buf, '\t')) != NULL) - *cp = 0; - if (strcmp(buf, file) == 0) { - ret++; - break; - } -#ifndef __GNU__ - if (file_dev && (stat(buf, &st_buf) == 0) && - S_ISBLK(st_buf.st_mode) && - file_dev == st_buf.st_rdev) { - ret++; - break; - } -#endif /* __GNU__ */ - } - -leave: - fclose(f); - return ret; -} - - -/* - * check_mount_point() fills determines if the device is mounted or otherwise - * busy, and fills in mount_flags with one or more of the following flags: - * MF_MOUNTED, MF_ISROOT, MF_READONLY, MF_SWAP, and MF_BUSY. If mtpt is - * non-NULL, the directory where the device is mounted is copied to where mtpt - * is pointing, up to mtlen characters. - */ -#ifdef __TURBOC__ - #pragma argsused -#endif -int check_mount_point(const char *device, int *mount_flags, - char *mtpt, int mtlen) -{ - struct stat st_buf; - int retval = 0; - int fd; - - if (is_swap_device(device)) { - *mount_flags = MF_MOUNTED | MF_SWAP; - if (mtpt && mtlen) - strncpy(mtpt, "[SWAP]", mtlen); - } else { -#ifdef HAVE_MNTENT_H - retval = check_mntent(device, mount_flags, mtpt, mtlen); -#else -#ifdef HAVE_GETMNTINFO - retval = check_getmntinfo(device, mount_flags, mtpt, mtlen); -#else -#ifdef __GNUC__ - #warning "Can't use getmntent or getmntinfo to check for mounted filesystems!" -#endif - *mount_flags = 0; -#endif /* HAVE_GETMNTINFO */ -#endif /* HAVE_MNTENT_H */ - } - if (retval) - return retval; - -#ifdef __linux__ /* This only works on Linux 2.6+ systems */ - if ((stat(device, &st_buf) != 0) || - !S_ISBLK(st_buf.st_mode)) - return 0; - fd = open(device, O_RDONLY|O_EXCL|O_CLOEXEC); - if (fd < 0) { - if (errno == EBUSY) - *mount_flags |= MF_BUSY; - } else - close(fd); -#endif - - return 0; -} - -int is_mounted(const char *file) -{ - int retval; - int mount_flags = 0; - - retval = check_mount_point(file, &mount_flags, NULL, 0); - if (retval) - return 0; - return mount_flags & MF_MOUNTED; -} - -#ifdef TEST_PROGRAM -int main(int argc, char **argv) -{ - int flags = 0; - char devname[PATH_MAX]; - - if (argc < 2) { - fprintf(stderr, "Usage: %s device\n", argv[0]); - return EXIT_FAILURE; - } - - if (check_mount_point(argv[1], &flags, devname, sizeof(devname)) == 0 && - (flags & MF_MOUNTED)) { - if (flags & MF_SWAP) - printf("used swap device\n"); - else - printf("mounted on %s\n", devname); - return EXIT_SUCCESS; - } - - printf("not mounted\n"); - return EXIT_FAILURE; -} -#endif /* DEBUG */ diff --git a/src/util/ismounted.h b/src/util/ismounted.h deleted file mode 100644 index c3a0226..0000000 --- a/src/util/ismounted.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef IS_MOUNTED_H -#define IS_MOUNTED_H - -#define MF_MOUNTED 1 -#define MF_ISROOT 2 -#define MF_READONLY 4 -#define MF_SWAP 8 -#define MF_BUSY 16 - -extern int is_mounted(const char *file); -extern int check_mount_point(const char *device, int *mount_flags, - char *mtpt, int mtlen); - -#endif /* IS_MOUNTED_H */ diff --git a/src/util/loopdev.h b/src/util/loopdev.h deleted file mode 100644 index 573a569..0000000 --- a/src/util/loopdev.h +++ /dev/null @@ -1,193 +0,0 @@ -#ifndef UTIL_LINUX_LOOPDEV_H -#define UTIL_LINUX_LOOPDEV_H - -#include "sysfs.h" - -/* - * loop_info.lo_encrypt_type - */ -#define LO_CRYPT_NONE 0 -#define LO_CRYPT_XOR 1 -#define LO_CRYPT_DES 2 -#define LO_CRYPT_CRYPTOAPI 18 - -#define LOOP_SET_FD 0x4C00 -#define LOOP_CLR_FD 0x4C01 -/* - * Obsolete (kernel < 2.6) - * - * #define LOOP_SET_STATUS 0x4C02 - * #define LOOP_GET_STATUS 0x4C03 - */ -#define LOOP_SET_STATUS64 0x4C04 -#define LOOP_GET_STATUS64 0x4C05 -/* #define LOOP_CHANGE_FD 0x4C06 */ -#define LOOP_SET_CAPACITY 0x4C07 - -/* /dev/loop-control interface */ -#ifndef LOOP_CTL_ADD -# define LOOP_CTL_ADD 0x4C80 -# define LOOP_CTL_REMOVE 0x4C81 -# define LOOP_CTL_GET_FREE 0x4C82 -#endif - -/* - * loop_info.lo_flags - */ -enum { - LO_FLAGS_READ_ONLY = 1, - LO_FLAGS_USE_AOPS = 2, - LO_FLAGS_AUTOCLEAR = 4, /* kernel >= 2.6.25 */ - LO_FLAGS_PARTSCAN = 8, /* kernel >= 3.2 */ -}; - -#define LO_NAME_SIZE 64 -#define LO_KEY_SIZE 32 - -/* - * Linux LOOP_{SET,GET}_STATUS64 ioctl struct - */ -struct loop_info64 { - uint64_t lo_device; - uint64_t lo_inode; - uint64_t lo_rdevice; - uint64_t lo_offset; - uint64_t lo_sizelimit; /* bytes, 0 == max available */ - uint32_t lo_number; - uint32_t lo_encrypt_type; - uint32_t lo_encrypt_key_size; - uint32_t lo_flags; - uint8_t lo_file_name[LO_NAME_SIZE]; - uint8_t lo_crypt_name[LO_NAME_SIZE]; - uint8_t lo_encrypt_key[LO_KEY_SIZE]; - uint64_t lo_init[2]; -}; - -#define LOOPDEV_MAJOR 7 /* loop major number */ -#define LOOPDEV_DEFAULT_NNODES 8 /* default number of loop devices */ - -struct loopdev_iter { - FILE *proc; /* /proc/partitions */ - DIR *sysblock; /* /sys/block */ - int ncur; /* current position */ - int *minors; /* ary of minor numbers (when scan whole /dev) */ - int nminors; /* number of items in *minors */ - int ct_perm; /* count permission problems */ - int ct_succ; /* count number of detected devices */ - - unsigned int done:1; /* scanning done */ - unsigned int default_check:1;/* check first LOOPDEV_NLOOPS */ - int flags; /* LOOPITER_FL_* flags */ -}; - -enum { - LOOPITER_FL_FREE = (1 << 0), - LOOPITER_FL_USED = (1 << 1) -}; - -/* - * handler for work with loop devices - */ -struct loopdev_cxt { - char device[128]; /* device path (e.g. /dev/loop) */ - char *filename; /* backing file for loopcxt_set_... */ - int fd; /* open(/dev/looo) */ - int mode; /* fd mode O_{RDONLY,RDWR} */ - - int flags; /* LOOPDEV_FL_* flags */ - unsigned int has_info:1; /* .info contains data */ - unsigned int extra_check:1; /* unusual stuff for iterator */ - unsigned int info_failed:1; /* LOOP_GET_STATUS ioctl failed */ - unsigned int control_ok:1; /* /dev/loop-control success */ - - struct sysfs_cxt sysfs; /* pointer to /sys/dev/block// */ - struct loop_info64 info; /* for GET/SET ioctl */ - struct loopdev_iter iter; /* scans /sys or /dev for used/free devices */ -}; - -#define UL_LOOPDEVCXT_EMPTY { .fd = -1, .sysfs = UL_SYSFSCXT_EMPTY } - -/* - * loopdev_cxt.flags - */ -enum { - LOOPDEV_FL_RDONLY = (1 << 0), /* open(/dev/loop) mode; default */ - LOOPDEV_FL_RDWR = (1 << 1), /* necessary for loop setup only */ - LOOPDEV_FL_OFFSET = (1 << 4), - LOOPDEV_FL_NOSYSFS = (1 << 5), - LOOPDEV_FL_NOIOCTL = (1 << 6), - LOOPDEV_FL_DEVSUBDIR = (1 << 7), - LOOPDEV_FL_CONTROL = (1 << 8), /* system with /dev/loop-control */ - LOOPDEV_FL_SIZELIMIT = (1 << 9) -}; - -/* - * High-level - */ -extern int loopmod_supports_partscan(void); - -extern int is_loopdev(const char *device); -extern int loopdev_is_autoclear(const char *device); - -extern char *loopdev_get_backing_file(const char *device); -extern int loopdev_is_used(const char *device, const char *filename, - uint64_t offset, int flags); -extern char *loopdev_find_by_backing_file(const char *filename, - uint64_t offset, int flags); -extern int loopcxt_find_unused(struct loopdev_cxt *lc); -extern int loopdev_delete(const char *device); -extern int loopdev_count_by_backing_file(const char *filename, char **loopdev); - -/* - * Low-level - */ -extern int loopcxt_init(struct loopdev_cxt *lc, int flags) - __attribute__ ((warn_unused_result)); -extern void loopcxt_deinit(struct loopdev_cxt *lc); - -extern int loopcxt_set_device(struct loopdev_cxt *lc, const char *device) - __attribute__ ((warn_unused_result)); -extern int loopcxt_has_device(struct loopdev_cxt *lc); -extern int loopcxt_add_device(struct loopdev_cxt *lc); -extern char *loopcxt_strdup_device(struct loopdev_cxt *lc); -extern const char *loopcxt_get_device(struct loopdev_cxt *lc); -extern struct sysfs_cxt *loopcxt_get_sysfs(struct loopdev_cxt *lc); -extern struct loop_info64 *loopcxt_get_info(struct loopdev_cxt *lc); - -extern int loopcxt_get_fd(struct loopdev_cxt *lc); -extern int loopcxt_set_fd(struct loopdev_cxt *lc, int fd, int mode); - -extern int loopcxt_init_iterator(struct loopdev_cxt *lc, int flags); -extern int loopcxt_deinit_iterator(struct loopdev_cxt *lc); -extern int loopcxt_next(struct loopdev_cxt *lc); - -extern int loopcxt_setup_device(struct loopdev_cxt *lc); -extern int loopcxt_delete_device(struct loopdev_cxt *lc); -extern int loopcxt_set_capacity(struct loopdev_cxt *lc); - -int loopcxt_set_offset(struct loopdev_cxt *lc, uint64_t offset); -int loopcxt_set_sizelimit(struct loopdev_cxt *lc, uint64_t sizelimit); -int loopcxt_set_flags(struct loopdev_cxt *lc, uint32_t flags); -int loopcxt_set_backing_file(struct loopdev_cxt *lc, const char *filename); - -extern char *loopcxt_get_backing_file(struct loopdev_cxt *lc); -extern int loopcxt_get_backing_devno(struct loopdev_cxt *lc, dev_t *devno); -extern int loopcxt_get_backing_inode(struct loopdev_cxt *lc, ino_t *ino); -extern int loopcxt_get_offset(struct loopdev_cxt *lc, uint64_t *offset); -extern int loopcxt_get_sizelimit(struct loopdev_cxt *lc, uint64_t *size); -extern int loopcxt_get_encrypt_type(struct loopdev_cxt *lc, uint32_t *type); -extern const char *loopcxt_get_crypt_name(struct loopdev_cxt *lc); -extern int loopcxt_is_autoclear(struct loopdev_cxt *lc); -extern int loopcxt_is_readonly(struct loopdev_cxt *lc); -extern int loopcxt_is_partscan(struct loopdev_cxt *lc); -extern int loopcxt_find_by_backing_file(struct loopdev_cxt *lc, - const char *filename, - uint64_t offset, int flags); - -extern int loopcxt_is_used(struct loopdev_cxt *lc, - struct stat *st, - const char *backing_file, - uint64_t offset, - int flags); - -#endif /* UTIL_LINUX_LOOPDEV_H */ diff --git a/src/util/pathnames.h b/src/util/pathnames.h deleted file mode 100644 index e68ac7d..0000000 --- a/src/util/pathnames.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Vaguely based on - * @(#)pathnames.h 5.3 (Berkeley) 5/9/89 - * This code is in the public domain. - */ -#ifndef PATHNAMES_H -#define PATHNAMES_H - -#ifdef HAVE_PATHS_H -#include -#endif - -#ifndef __STDC__ -# error "we need an ANSI compiler" -#endif - -/* used by kernel in /proc (e.g. /proc/swaps) for deleted files */ -#define PATH_DELETED_SUFFIX "\\040(deleted)" -#define PATH_DELETED_SUFFIX_SZ (sizeof(PATH_DELETED_SUFFIX) - 1) - -/* DEFPATHs from don't include /usr/local */ -#undef _PATH_DEFPATH - -#ifdef USE_USRDIR_PATHS_ONLY -# define _PATH_DEFPATH "/usr/local/bin:/usr/bin" -#else -# define _PATH_DEFPATH "/usr/local/bin:/bin:/usr/bin" -#endif - -#undef _PATH_DEFPATH_ROOT - -#ifdef USE_USRDIR_PATHS_ONLY -# define _PATH_DEFPATH_ROOT "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin" -#else -# define _PATH_DEFPATH_ROOT "/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" -#endif - -#define _PATH_SECURETTY "/etc/securetty" -#define _PATH_WTMPLOCK "/etc/wtmplock" - -#define _PATH_HUSHLOGIN ".hushlogin" -#define _PATH_HUSHLOGINS "/etc/hushlogins" - -#define _PATH_NOLOGIN_TXT "/etc/nologin.txt" - -#ifndef _PATH_MAILDIR -#define _PATH_MAILDIR "/var/spool/mail" -#endif -#define _PATH_MOTDFILE "/etc/motd" -#define _PATH_NOLOGIN "/etc/nologin" -#define _PATH_VAR_NOLOGIN "/var/run/nologin" - -#define _PATH_LOGIN "/bin/login" -#define _PATH_INITTAB "/etc/inittab" -#define _PATH_RC "/etc/rc" -#define _PATH_REBOOT "/sbin/reboot" -#define _PATH_SHUTDOWN "/sbin/shutdown" -#define _PATH_SINGLE "/etc/singleboot" -#define _PATH_SHUTDOWN_CONF "/etc/shutdown.conf" - -#define _PATH_SECURE "/etc/securesingle" -#define _PATH_USERTTY "/etc/usertty" - -#define _PATH_TERMCOLORS_DIRNAME "terminal-colors.d" -#define _PATH_TERMCOLORS_DIR "/etc/" _PATH_TERMCOLORS_DIRNAME - -/* used in login-utils/shutdown.c */ - -/* used in login-utils/setpwnam.h and login-utils/islocal.c */ -#define _PATH_PASSWD "/etc/passwd" - -/* used in login-utils/newgrp and login-utils/setpwnam.h*/ -#define _PATH_GSHADOW "/etc/gshadow" - -/* used in login-utils/setpwnam.h */ -#define _PATH_GROUP "/etc/group" -#define _PATH_SHADOW_PASSWD "/etc/shadow" -#define _PATH_SHELLS "/etc/shells" - -/* used in term-utils/agetty.c */ -#define _PATH_ISSUE "/etc/issue" -#define _PATH_OS_RELEASE_ETC "/etc/os-release" -#define _PATH_OS_RELEASE_USR "/usr/lib/os-release" - -#define _PATH_NUMLOCK_ON _PATH_LOCALSTATEDIR "/numlock-on" - -#define _PATH_LOGINDEFS "/etc/login.defs" - -/* used in misc-utils/look.c */ -#define _PATH_WORDS "/usr/share/dict/words" -#define _PATH_WORDS_ALT "/usr/share/dict/web2" - -/* mount paths */ -#define _PATH_UMOUNT "/bin/umount" - -#define _PATH_FILESYSTEMS "/etc/filesystems" -#define _PATH_PROC_SWAPS "/proc/swaps" -#define _PATH_PROC_FILESYSTEMS "/proc/filesystems" -#define _PATH_PROC_MOUNTS "/proc/mounts" -#define _PATH_PROC_PARTITIONS "/proc/partitions" -#define _PATH_PROC_DEVICES "/proc/devices" -#define _PATH_PROC_MOUNTINFO "/proc/self/mountinfo" -#define _PATH_PROC_LOCKS "/proc/locks" -#define _PATH_PROC_CDROMINFO "/proc/sys/dev/cdrom/info" - -#define _PATH_PROC_UIDMAP "/proc/self/uid_map" -#define _PATH_PROC_GIDMAP "/proc/self/gid_map" -#define _PATH_PROC_SETGROUPS "/proc/self/setgroups" - -#define _PATH_PROC_ATTR_CURRENT "/proc/self/attr/current" -#define _PATH_PROC_ATTR_EXEC "/proc/self/attr/exec" -#define _PATH_PROC_CAPLASTCAP "/proc/sys/kernel/cap_last_cap" - - -#define _PATH_SYS_BLOCK "/sys/block" -#define _PATH_SYS_DEVBLOCK "/sys/dev/block" -#define _PATH_SYS_CLASS "/sys/class" -#define _PATH_SYS_SCSI "/sys/bus/scsi" - -#define _PATH_SYS_SELINUX "/sys/fs/selinux" -#define _PATH_SYS_APPARMOR "/sys/kernel/security/apparmor" - -#ifndef _PATH_MOUNTED -# ifdef MOUNTED /* deprecated */ -# define _PATH_MOUNTED MOUNTED -# else -# define _PATH_MOUNTED "/etc/mtab" -# endif -#endif - -#ifndef _PATH_MNTTAB -# ifdef MNTTAB /* deprecated */ -# define _PATH_MNTTAB MNTTAB -# else -# define _PATH_MNTTAB "/etc/fstab" -# endif -#endif - -#define _PATH_MNTTAB_DIR _PATH_MNTTAB ".d" - -#define _PATH_MOUNTED_LOCK _PATH_MOUNTED "~" -#define _PATH_MOUNTED_TMP _PATH_MOUNTED ".tmp" - -#ifndef _PATH_DEV - /* - * The tailing '/' in _PATH_DEV is there for compatibility with libc. - */ -# define _PATH_DEV "/dev/" -#endif - -#define _PATH_DEV_MEM "/dev/mem" - -#define _PATH_DEV_LOOP "/dev/loop" -#define _PATH_DEV_LOOPCTL "/dev/loop-control" -#define _PATH_DEV_TTY "/dev/tty" - - -/* udev paths */ -#define _PATH_DEV_BYLABEL "/dev/disk/by-label" -#define _PATH_DEV_BYUUID "/dev/disk/by-uuid" -#define _PATH_DEV_BYID "/dev/disk/by-id" -#define _PATH_DEV_BYPATH "/dev/disk/by-path" -#define _PATH_DEV_BYPARTLABEL "/dev/disk/by-partlabel" -#define _PATH_DEV_BYPARTUUID "/dev/disk/by-partuuid" - -/* hwclock paths */ -#ifdef CONFIG_ADJTIME_PATH -# define _PATH_ADJTIME CONFIG_ADJTIME_PATH -#else -# define _PATH_ADJTIME "/etc/adjtime" -#endif - -#define _PATH_LASTDATE "/var/lib/lastdate" -#ifdef __ia64__ -# define _PATH_RTC_DEV "/dev/efirtc" -#else -# define _PATH_RTC_DEV "/dev/rtc" -#endif - -#ifndef _PATH_BTMP -#define _PATH_BTMP "/var/log/btmp" -#endif - -/* raw paths*/ -#define _PATH_RAWDEVDIR "/dev/raw/" -#define _PATH_RAWDEVCTL _PATH_RAWDEVDIR "rawctl" -/* deprecated */ -#define _PATH_RAWDEVCTL_OLD "/dev/rawctl" - -/* wdctl path */ -#define _PATH_WATCHDOG_DEV "/dev/watchdog" - -/* ipc paths */ -#define _PATH_PROC_SYSV_MSG "/proc/sysvipc/msg" -#define _PATH_PROC_SYSV_SEM "/proc/sysvipc/sem" -#define _PATH_PROC_SYSV_SHM "/proc/sysvipc/shm" -#define _PATH_PROC_IPC_MSGMAX "/proc/sys/kernel/msgmax" -#define _PATH_PROC_IPC_MSGMNB "/proc/sys/kernel/msgmnb" -#define _PATH_PROC_IPC_MSGMNI "/proc/sys/kernel/msgmni" -#define _PATH_PROC_IPC_SEM "/proc/sys/kernel/sem" -#define _PATH_PROC_IPC_SHMALL "/proc/sys/kernel/shmall" -#define _PATH_PROC_IPC_SHMMAX "/proc/sys/kernel/shmmax" -#define _PATH_PROC_IPC_SHMMNI "/proc/sys/kernel/shmmni" - -/* kernel command line */ -#define _PATH_PROC_CMDLINE "/proc/cmdline" - -/* logger paths */ -#define _PATH_DEVLOG "/dev/log" - -#endif /* PATHNAMES_H */ - diff --git a/src/util/sysfs.h b/src/util/sysfs.h deleted file mode 100644 index 5521378..0000000 --- a/src/util/sysfs.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (C) 2011 Karel Zak - */ -#ifndef UTIL_LINUX_SYSFS_H -#define UTIL_LINUX_SYSFS_H - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct sysfs_cxt { - dev_t devno; - int dir_fd; /* /sys/block/ */ - char *dir_path; - struct sysfs_cxt *parent; - - unsigned int scsi_host, - scsi_channel, - scsi_target, - scsi_lun; - - unsigned int has_hctl : 1; -}; - -#define UL_SYSFSCXT_EMPTY { 0, -1, NULL, NULL, 0, 0, 0, 0, 0 } - -extern char *sysfs_devno_attribute_path(dev_t devno, char *buf, - size_t bufsiz, const char *attr); -extern int sysfs_devno_has_attribute(dev_t devno, const char *attr); -extern char *sysfs_devno_path(dev_t devno, char *buf, size_t bufsiz); -extern char *sysfs_devno_to_devpath(dev_t devno, char *buf, size_t bufsiz); -extern dev_t sysfs_devname_to_devno(const char *name, const char *parent); - -extern int sysfs_init(struct sysfs_cxt *cxt, dev_t devno, struct sysfs_cxt *parent) - __attribute__ ((warn_unused_result)); -extern void sysfs_deinit(struct sysfs_cxt *cxt); - -extern DIR *sysfs_opendir(struct sysfs_cxt *cxt, const char *attr); - -extern int sysfs_stat(struct sysfs_cxt *cxt, const char *attr, struct stat *st); -extern ssize_t sysfs_readlink(struct sysfs_cxt *cxt, const char *attr, - char *buf, size_t bufsiz); -extern int sysfs_has_attribute(struct sysfs_cxt *cxt, const char *attr); - -extern int sysfs_scanf(struct sysfs_cxt *cxt, const char *attr, - const char *fmt, ...) - __attribute__ ((format (scanf, 3, 4))); - -extern int sysfs_read_s64(struct sysfs_cxt *cxt, const char *attr, int64_t *res); -extern int sysfs_read_u64(struct sysfs_cxt *cxt, const char *attr, uint64_t *res); -extern int sysfs_read_int(struct sysfs_cxt *cxt, const char *attr, int *res); - -extern int sysfs_write_string(struct sysfs_cxt *cxt, const char *attr, const char *str); -extern int sysfs_write_u64(struct sysfs_cxt *cxt, const char *attr, uint64_t num); - -extern char *sysfs_get_devname(struct sysfs_cxt *cxt, char *buf, size_t bufsiz); - -extern char *sysfs_strdup(struct sysfs_cxt *cxt, const char *attr); - -extern int sysfs_count_dirents(struct sysfs_cxt *cxt, const char *attr); -extern int sysfs_count_partitions(struct sysfs_cxt *cxt, const char *devname); -extern dev_t sysfs_partno_to_devno(struct sysfs_cxt *cxt, int partno); -extern char *sysfs_get_slave(struct sysfs_cxt *cxt); - -extern char *sysfs_get_devchain(struct sysfs_cxt *cxt, char *buf, size_t bufsz); -extern int sysfs_next_subsystem(struct sysfs_cxt *cxt, char *devchain, char **subsys); -extern int sysfs_is_hotpluggable(struct sysfs_cxt *cxt); - -extern int sysfs_is_partition_dirent(DIR *dir, struct dirent *d, - const char *parent_name); - -extern int sysfs_devno_to_wholedisk(dev_t dev, char *diskname, - size_t len, dev_t *diskdevno); - -extern int sysfs_devno_is_lvm_private(dev_t devno); -extern int sysfs_devno_is_wholedisk(dev_t devno); - -extern int sysfs_scsi_get_hctl(struct sysfs_cxt *cxt, int *h, - int *c, int *t, int *l); -extern char *sysfs_scsi_host_strdup_attribute(struct sysfs_cxt *cxt, - const char *type, const char *attr); -extern int sysfs_scsi_host_is(struct sysfs_cxt *cxt, const char *type); -extern int sysfs_scsi_has_attribute(struct sysfs_cxt *cxt, const char *attr); -extern int sysfs_scsi_path_contains(struct sysfs_cxt *cxt, const char *pattern); - -/** - * sysfs_devname_sys_to_dev: - * @name: devname to be converted in place - * - * Linux kernel linux/drivers/base/core.c: device_get_devnode() - * defines a replacement of '!' in the /sys device name by '/' in the - * /dev device name. This helper replaces all ocurrences of '!' in - * @name by '/' to convert from /sys to /dev. - */ -static inline void sysfs_devname_sys_to_dev(char *name) -{ - char *c; - - if (name) - while ((c = strchr(name, '!'))) - c[0] = '/'; -} - -/** - * sysfs_devname_dev_to_sys: - * @name: devname to be converted in place - * - * See sysfs_devname_sys_to_dev(). - */ -static inline void sysfs_devname_dev_to_sys(char *name) -{ - char *c; - - if (name) - while ((c = strchr(name, '/'))) - c[0] = '!'; -} - -#endif /* UTIL_LINUX_SYSFS_H */ From 0bd44b94dc1ac764add98a81f479f633212a33d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Thu, 5 May 2016 12:46:27 +0100 Subject: [PATCH 54/57] Use trimmed() instead of simplified(). --- src/core/device.cpp | 2 +- src/fs/luks.cpp | 2 +- src/fs/ntfs.cpp | 10 ++-------- src/util/helpers.cpp | 2 +- 4 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/core/device.cpp b/src/core/device.cpp index fd99e12..46bdc86 100644 --- a/src/core/device.cpp +++ b/src/core/device.cpp @@ -66,7 +66,7 @@ static qint32 getPhysicalSectorSize(const QString& device_node) if (f.open(QIODevice::ReadOnly)) { QByteArray a = f.readLine(); - return a.simplified().toInt(); + return a.trimmed().toInt(); } return -1; diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 0034a07..3d51077 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -510,7 +510,7 @@ QString luks::readUUID(const QString& deviceNode) const ExternalCommand cmd(QStringLiteral("cryptsetup"), { QStringLiteral("luksUUID"), deviceNode }); if (cmd.run()) { - return cmd.output().simplified(); + return cmd.output().trimmed(); } return QStringLiteral("---"); } diff --git a/src/fs/ntfs.cpp b/src/fs/ntfs.cpp index 9ee775d..fd21c30 100644 --- a/src/fs/ntfs.cpp +++ b/src/fs/ntfs.cpp @@ -123,19 +123,13 @@ qint64 ntfs::readUsedCapacity(const QString& deviceNode) const bool ntfs::writeLabel(Report& report, const QString& deviceNode, const QString& newLabel) { - ExternalCommand writeCmd(report, QStringLiteral("ntfslabel"), { QStringLiteral("--force"), deviceNode, newLabel.simplified() }); + ExternalCommand writeCmd(report, QStringLiteral("ntfslabel"), { QStringLiteral("--force"), deviceNode, newLabel }); writeCmd.setProcessChannelMode(QProcess::SeparateChannels); if (!writeCmd.run(-1)) return false; - ExternalCommand testCmd(QStringLiteral("ntfslabel"), { QStringLiteral("--force"), deviceNode }); - testCmd.setProcessChannelMode(QProcess::SeparateChannels); - - if (!testCmd.run(-1)) - return false; - - return testCmd.output().simplified() == newLabel.simplified(); + return true; } bool ntfs::check(Report& report, const QString& deviceNode) const diff --git a/src/util/helpers.cpp b/src/util/helpers.cpp index 336c8f3..192fdcf 100644 --- a/src/util/helpers.cpp +++ b/src/util/helpers.cpp @@ -79,7 +79,7 @@ bool isMounted(const QString& deviceNode) deviceNode }); if (cmd.run(-1) && cmd.exitCode() == 0) { - return !cmd.output().simplified().isEmpty(); + return !cmd.output().trimmed().isEmpty(); } return false; } From 6013b5887cf8a82666ece5a68e4326f81d7d6dd4 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Thu, 5 May 2016 14:15:39 +0200 Subject: [PATCH 55/57] Always use outer UUID for mapper name. --- src/fs/luks.cpp | 7 ++++++- src/fs/luks.h | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 3d51077..9637eba 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -454,7 +454,7 @@ FileSystem::Type luks::type() const QString luks::suggestedMapperName(const QString& deviceNode) const { - return QStringLiteral("luks-") + readUUID(deviceNode); + return QStringLiteral("luks-") + readOuterUUID(deviceNode); } QString luks::readLabel(const QString& deviceNode) const @@ -507,6 +507,11 @@ QString luks::readUUID(const QString& deviceNode) const { if (m_isCryptOpen && m_innerFs) return m_innerFs->readUUID(mapperName(deviceNode)); + return readOuterUUID(deviceNode); +} + +QString luks::readOuterUUID(const QString &deviceNode) const +{ ExternalCommand cmd(QStringLiteral("cryptsetup"), { QStringLiteral("luksUUID"), deviceNode }); if (cmd.run()) { diff --git a/src/fs/luks.h b/src/fs/luks.h index 1fb1573..f6c13f8 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -149,6 +149,9 @@ public: static QString getPayloadOffset(const QString& deviceNode); static bool canEncryptType(FileSystem::Type type); +protected: + virtual QString readOuterUUID(const QString& deviceNode) const; + public: static CommandSupportType m_GetUsed; static CommandSupportType m_GetLabel; From 3ede1011676b3d0ef07f4a63291c9bc626b77302 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 6 May 2016 14:34:40 +0100 Subject: [PATCH 56/57] Fix a typo: mount->umount. --- src/fs/luks.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 9637eba..776c702 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -434,8 +434,8 @@ bool luks::unmount(const QString& deviceNode) } else { ExternalCommand unmountCmd( - QStringLiteral("mount"), - { QStringLiteral("-v"), QStringLiteral("-A"), mapperNode }); + QStringLiteral("umount"), + { QStringLiteral("--verbose"), mapperNode }); if (unmountCmd.run() && unmountCmd.exitCode() == 0) { m_isMounted = false; From d584c70696209f249b84a10ce5ba2784ee5041b5 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Fri, 6 May 2016 16:50:03 +0200 Subject: [PATCH 57/57] Passphrase accessor. --- src/fs/luks.cpp | 5 +++++ src/fs/luks.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/fs/luks.cpp b/src/fs/luks.cpp index 776c702..15b903b 100644 --- a/src/fs/luks.cpp +++ b/src/fs/luks.cpp @@ -178,6 +178,11 @@ void luks::setPassphrase(const QString& passphrase) m_passphrase = passphrase; } +QString luks::passphrase() const +{ + return m_passphrase; +} + bool luks::canMount(const QString& deviceNode) const { return m_isCryptOpen && diff --git a/src/fs/luks.h b/src/fs/luks.h index f6c13f8..fbafe70 100644 --- a/src/fs/luks.h +++ b/src/fs/luks.h @@ -116,6 +116,7 @@ public: QString cryptCloseTitle() const; void setPassphrase(const QString&); + QString passphrase() const; virtual bool canMount(const QString&) const override; virtual bool canUnmount(const QString&) const override;