diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-10-10 14:03:03 +0800 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2020-10-10 14:03:03 +0800 |
commit | fe08361f7e4227def5699ee7c911a61b84f5a77b (patch) | |
tree | 56db7658cb70e17e532a55412bc7a93ca51165a2 /tdecore/tdehw/disksHelper.cpp | |
parent | 014394575603f2c6afe85b17d8f80e1184062951 (diff) | |
download | tdelibs-fe08361f7e4227def5699ee7c911a61b84f5a77b.tar.gz tdelibs-fe08361f7e4227def5699ee7c911a61b84f5a77b.zip |
Added udisks2 support for unlocking/locking of encrypted disks.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'tdecore/tdehw/disksHelper.cpp')
-rw-r--r-- | tdecore/tdehw/disksHelper.cpp | 115 |
1 files changed, 105 insertions, 10 deletions
diff --git a/tdecore/tdehw/disksHelper.cpp b/tdecore/tdehw/disksHelper.cpp index 2589e5053..4eb3709ca 100644 --- a/tdecore/tdehw/disksHelper.cpp +++ b/tdecore/tdehw/disksHelper.cpp @@ -17,10 +17,6 @@ Boston, MA 02110-1301, USA. */ -#include "disksHelper.h" -#include "tdelocale.h" -#include "tdestoragedevice.h" - #if defined(WITH_UDISKS) || defined(WITH_UDISKS2) #include <tqdbusdata.h> #include <tqdbusmessage.h> @@ -31,6 +27,11 @@ #include <tqdbusdatamap.h> #include <tqdbusobjectpath.h> #include "tqdbusdatalist.h" + #include "tqstring.h" + + #include "tdelocale.h" + #include "tdestoragedevice.h" + #include "disksHelper.h" #endif @@ -38,7 +39,7 @@ //------------------------------- // UDisks //------------------------------- -TQStringVariantMap UDisksEjectDrive(TDEStorageDevice *sdevice) { +TQStringVariantMap udisksEjectDrive(TDEStorageDevice *sdevice) { TQStringVariantMap result; result["result"] = false; @@ -71,7 +72,7 @@ TQStringVariantMap UDisksEjectDrive(TDEStorageDevice *sdevice) { return result; } -TQStringVariantMap UDisksMountDrive(TQString deviceNode, TQString fileSystemType, TQStringList mountOptions) { +TQStringVariantMap udisksMountDrive(const TQString &deviceNode, const TQString &fileSystemType, TQStringList mountOptions) { TQStringVariantMap result; result["result"] = false; result["retcode"] = -2; @@ -113,7 +114,7 @@ TQStringVariantMap UDisksMountDrive(TQString deviceNode, TQString fileSystemType return result; } -TQStringVariantMap UDisksUnmountDrive(TQString deviceNode, TQStringList unmountOptions) { +TQStringVariantMap udisksUnmountDrive(const TQString &deviceNode, TQStringList unmountOptions) { TQStringVariantMap result; result["result"] = false; result["retcode"] = -2; @@ -160,7 +161,7 @@ TQStringVariantMap UDisksUnmountDrive(TQString deviceNode, TQStringList unmountO //------------------------------- // UDisks2 //------------------------------- -TQStringVariantMap UDisks2EjectDrive(TDEStorageDevice *sdevice) { +TQStringVariantMap udisks2EjectDrive(TDEStorageDevice *sdevice) { TQStringVariantMap result; result["result"] = false; @@ -230,7 +231,7 @@ TQStringVariantMap UDisks2EjectDrive(TDEStorageDevice *sdevice) { return result; } -TQStringVariantMap UDisks2MountDrive(TQString deviceNode, TQString fileSystemType, TQString mountOptions) { +TQStringVariantMap udisks2MountDrive(const TQString &deviceNode, const TQString &fileSystemType, const TQString &mountOptions) { TQStringVariantMap result; result["result"] = false; result["retcode"] = -2; @@ -276,7 +277,7 @@ TQStringVariantMap UDisks2MountDrive(TQString deviceNode, TQString fileSystemTyp return result; } -TQStringVariantMap UDisks2UnmountDrive(TQString deviceNode, TQString unmountOptions) { +TQStringVariantMap udisks2UnmountDrive(const TQString &deviceNode, const TQString &unmountOptions) { TQStringVariantMap result; result["result"] = false; result["retcode"] = -2; @@ -318,4 +319,98 @@ TQStringVariantMap UDisks2UnmountDrive(TQString deviceNode, TQString unmountOpti } return result; } + +TQStringVariantMap udisks2UnlockDrive(const TQString &deviceNode, const TQString &passphrase) { + TQStringVariantMap result; + result["result"] = false; + result["retcode"] = -2; + + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; + + // Unlock/decrypt the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Encrypted", dbusConn); + if (driveControl.canSend()) { + TQValueList<TQT_DBusData> params; + params << TQT_DBusData::fromString(passphrase); + TQMap<TQString, TQT_DBusVariant> optionsMap; + params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(optionsMap)); + TQT_DBusMessage reply = driveControl.sendWithReply("Unlock", params, &error); + if (!error.isValid()) { + if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { + TQT_DBusObjectPath deviceObjectPath = reply[0].toObjectPath(); + if (deviceObjectPath.isValid()) { + // Success + result["unlockedDevice"] = deviceObjectPath; + result["retcode"] = 0; + result["result"] = true; + return result; + } + } + result["errStr"] = i18n("Unknown error during unlocking operation."); + result["retcode"] = -1; + return result; + } + else { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + return result; // Service not installed or unavailable + } + else { + result["errStr"] = error.name() + ": " + error.message(); + result["retcode"] = -1; + return result; + } + } + } + } + return result; +} + +TQStringVariantMap udisks2LockDrive(const TQString &deviceNode) { + TQStringVariantMap result; + result["result"] = false; + result["retcode"] = -2; + + TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); + if (dbusConn.isConnected()) { + TQString blockDeviceString = deviceNode; + blockDeviceString.replace("/dev/", ""); + blockDeviceString.replace("-", "_2d"); + blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; + + // Lock/encrypt the drive! + TQT_DBusError error; + TQT_DBusProxy driveControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.UDisks2.Encrypted", dbusConn); + if (driveControl.canSend()) { + TQValueList<TQT_DBusData> params; + TQMap<TQString, TQT_DBusVariant> optionsMap; + params << TQT_DBusData::fromStringKeyMap(TQT_DBusDataMap<TQString>(optionsMap)); + TQT_DBusMessage reply = driveControl.sendWithReply("Lock", params, &error); + if (!error.isValid()) { + // Success + result["retcode"] = 0; + result["result"] = true; + return result; + } + else { + // Error! + if (error.name() == "org.freedesktop.DBus.Error.ServiceUnknown") { + return result; // Service not installed or unavailable + } + else { + result["errStr"] = error.name() + ": " + error.message(); + result["retcode"] = -1; + return result; + } + } + } + } + return result; +} #endif |