From b4b5dcd80463d48d90dd13d8e9be981691678478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Fri, 29 Dec 2017 20:05:42 +0000 Subject: [PATCH] Add a passphrase request dialog for LUKS2 resizing. --- src/gui/resizedialog.cpp | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/gui/resizedialog.cpp b/src/gui/resizedialog.cpp index 1112285..886e614 100644 --- a/src/gui/resizedialog.cpp +++ b/src/gui/resizedialog.cpp @@ -24,6 +24,7 @@ #include #include +#include #include @@ -31,6 +32,7 @@ #include #include +#include #include /** Creates a new ResizeDialog @@ -55,7 +57,6 @@ ResizeDialog::ResizeDialog(QWidget* parent, Device& d, Partition& p, qint64 minF dialogWidget().textLVName().hide(); dialogWidget().lvName().hide(); - setupDialog(); setupConstraints(); setupConnections(); @@ -87,6 +88,32 @@ void ResizeDialog::rollback() void ResizeDialog::accept() { + if (partition().roles().has(PartitionRole::Luks)) { + FS::luks2* luksFs = dynamic_cast(&partition().fileSystem()); + if (luksFs) { + if (luksFs->keyLocation() == FS::luks::keyring) { + bool validPassphrase = false; + QString errorMessage; + QString passphrase; + + while(!validPassphrase) { + KPasswordDialog dlg( this ); + dlg.setPrompt(i18nc("%2 is either empty or says Invalid passphrase.", "%2Enter passphrase for %1:", partition().deviceNode(), errorMessage)); + if( !dlg.exec() ) { + reject(); + return; + } + + passphrase = dlg.password(); + validPassphrase = luksFs->testPassphrase(partition().deviceNode(), passphrase); + if(!validPassphrase) + errorMessage = i18nc("Part of %2Enter passphrase for %1:", "Invalid passphrase. "); + } + luksFs->setPassphrase(passphrase); + } + } + } + setResizedFirstSector(partition().firstSector()); setResizedLastSector(partition().lastSector());