summaryrefslogtreecommitdiffstats
path: root/tdecore/tdehw/disksHelper.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2020-10-10 14:03:03 +0800
committerMichele Calgaro <michele.calgaro@yahoo.it>2020-10-10 14:03:03 +0800
commitfe08361f7e4227def5699ee7c911a61b84f5a77b (patch)
tree56db7658cb70e17e532a55412bc7a93ca51165a2 /tdecore/tdehw/disksHelper.cpp
parent014394575603f2c6afe85b17d8f80e1184062951 (diff)
downloadtdelibs-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.cpp115
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