Support LUKS mounting.

This commit is contained in:
Teo Mrnjavac 2015-08-04 17:04:30 +02:00
parent 17eb5e51e5
commit cdf57075f9
2 changed files with 43 additions and 3 deletions

View File

@ -18,9 +18,12 @@
#include "fs/luks.h"
#include "gui/decryptluksdialog.h"
#include "util/capacity.h"
#include "util/externalcommand.h"
#include <QDialog>
#include <QPointer>
#include <QString>
#include <QUuid>
@ -83,11 +86,37 @@ qint64 luks::minCapacity() const
return 3 * Capacity::unitFactor(Capacity::Byte, Capacity::MiB);
}
QString luks::mountTitle() const
{
return i18nc("@title:menu", "Decrypt");
}
QString luks::unmountTitle() const
{
return i18nc("@title:menu", "Deactivate");
}
bool luks::mount(const QString& deviceNode)
{
QPointer<DecryptLuksDialog> dlg = new DecryptLuksDialog(0, deviceNode); //TODO: parent widget instead of 0
if (dlg->exec() == QDialog::Accepted)
{
std::vector<QString> commands;
commands.push_back(QStringLiteral("echo"));
commands.push_back(QStringLiteral("cryptsetup"));
std::vector<QStringList> 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;
}
delete dlg;
return false;
}
bool luks::unmount(const QString& deviceNode)
{
ExternalCommand cmd(QStringLiteral("cryptsetup"), QStringList() << QStringLiteral("luksClose") << mapperName(deviceNode));
@ -111,6 +140,16 @@ 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(";"));

View File

@ -85,11 +85,12 @@ public:
virtual QString readUUID(const QString& deviceNode) const;
virtual bool updateUUID(Report& report, const QString& deviceNode) const;
virtual bool canUnmount(const QString&) const {
return true;
};
virtual bool canMount(const QString&) const;
virtual bool canUnmount(const QString&) const;
virtual bool mount(const QString& deviceNode);
virtual bool unmount(const QString& deviceNode);
virtual QString mountTitle() const;
virtual QString unmountTitle() const;
static QString mapperName(const QString& deviceNode);