Preliminary LUKS create support.

This commit is contained in:
Teo Mrnjavac 2016-04-12 11:26:07 +02:00
parent 1aff54c047
commit 1b79099760
2 changed files with 69 additions and 3 deletions

View File

@ -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 &&

View File

@ -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;
};
}