Preliminary LUKS create support.
This commit is contained in:
parent
1aff54c047
commit
1b79099760
|
@ -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<DecryptLuksDialog> dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0
|
||||
|
||||
if (dlg->exec() != QDialog::Accepted)
|
||||
{
|
||||
delete dlg;
|
||||
return false;
|
||||
}
|
||||
|
||||
std::vector<QString> commands;
|
||||
commands.push_back(QStringLiteral("echo"));
|
||||
commands.push_back(QStringLiteral("cryptsetup"));
|
||||
std::vector<QStringList> 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 &&
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue