You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
176 lines
5.7 KiB
176 lines
5.7 KiB
13 years ago
|
Index: kioslave/media/mediamanager/halbackend.cpp
|
||
|
===================================================================
|
||
|
--- kioslave/media/mediamanager/halbackend.cpp.orig 2011-05-31 13:41:55.000000000 +0200
|
||
|
+++ kioslave/media/mediamanager/halbackend.cpp 2011-05-31 13:42:48.317334543 +0200
|
||
|
@@ -1379,4 +1379,54 @@ QString HALBackend::unmount(const QStrin
|
||
|
return QString();
|
||
|
}
|
||
|
|
||
|
+bool HALBackend::teardown(const QString &_udi)
|
||
|
+{
|
||
|
+ const char* dm_udi = _udi.latin1();
|
||
|
+ const QString blockudi = libhal_device_get_property_QString(m_halContext, dm_udi, "volume.crypto_luks.clear.backing_volume");
|
||
|
+ if (!blockudi.isEmpty()) {
|
||
|
+ const char* udi = blockudi.latin1();
|
||
|
+ DBusMessage *dmesg, *reply;
|
||
|
+ DBusError error;
|
||
|
+ const char *options[2];
|
||
|
+
|
||
|
+ kdDebug() << "tearDown " << udi << "..." << endl;
|
||
|
+
|
||
|
+ dbus_error_init(&error);
|
||
|
+ DBusConnection *dbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error);
|
||
|
+ if (dbus_error_is_set(&error))
|
||
|
+ {
|
||
|
+ dbus_error_free(&error);
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
+ if (!(dmesg = dbus_message_new_method_call ("org.freedesktop.Hal", udi,
|
||
|
+ "org.freedesktop.Hal.Device.Volume.Crypto",
|
||
|
+ "Teardown"))) {
|
||
|
+ kdDebug() << "teardown failed for " << udi << ": could not create dbus message\n";
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
+ dbus_error_init (&error);
|
||
|
+ if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection, dmesg, -1, &error)))
|
||
|
+ {
|
||
|
+ QString qerror;
|
||
|
+
|
||
|
+ kdDebug() << "teardown failed for " << udi << ": " << error.name << " " << error.message << endl;
|
||
|
+ qerror = QString("teardown failed for %1 because: %2").arg(udi).arg(error.name);
|
||
|
+ dbus_message_unref (dmesg);
|
||
|
+ dbus_error_free (&error);
|
||
|
+ return false;
|
||
|
+ }
|
||
|
+
|
||
|
+ kdDebug() << "teardown queued for " << udi << endl;
|
||
|
+
|
||
|
+ dbus_message_unref (dmesg);
|
||
|
+ dbus_message_unref (reply);
|
||
|
+ return true;
|
||
|
+ }
|
||
|
+
|
||
|
+ return false;
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
#include "halbackend.moc"
|
||
|
Index: kioslave/media/mediamanager/halbackend.h
|
||
|
===================================================================
|
||
|
--- kioslave/media/mediamanager/halbackend.h.orig 2011-05-31 13:39:05.000000000 +0200
|
||
|
+++ kioslave/media/mediamanager/halbackend.h 2011-05-31 13:42:48.317334543 +0200
|
||
|
@@ -85,6 +85,7 @@ public:
|
||
|
QString mount(const QString &id);
|
||
|
QString mount(const Medium *medium);
|
||
|
QString unmount(const QString &id);
|
||
|
+ bool teardown(const QString &_udi);
|
||
|
|
||
|
static bool isHotplug( const QString & id );
|
||
|
|
||
|
Index: kioslave/media/mediamanager/mediamanager.cpp
|
||
|
===================================================================
|
||
|
--- kioslave/media/mediamanager/mediamanager.cpp.orig 2011-05-31 13:39:05.000000000 +0200
|
||
|
+++ kioslave/media/mediamanager/mediamanager.cpp 2011-05-31 13:43:07.916484054 +0200
|
||
|
@@ -232,6 +232,17 @@ QString MediaManager::unmount(const QStr
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
+bool MediaManager::teardown(const QString &name)
|
||
|
+{
|
||
|
+#ifdef COMPILE_HALBACKEND
|
||
|
+ if (!m_halbackend)
|
||
|
+ return false;
|
||
|
+ return m_halbackend->teardown(name);
|
||
|
+#else
|
||
|
+ return false;
|
||
|
+#endif
|
||
|
+}
|
||
|
+
|
||
|
QString MediaManager::nameForLabel(const QString &label)
|
||
|
{
|
||
|
const QPtrList<Medium> media = m_mediaList.list();
|
||
|
Index: kioslave/media/mediamanager/mediamanager.h
|
||
|
===================================================================
|
||
|
--- kioslave/media/mediamanager/mediamanager.h.orig 2011-05-31 13:39:05.000000000 +0200
|
||
|
+++ kioslave/media/mediamanager/mediamanager.h 2011-05-31 13:42:48.318334448 +0200
|
||
|
@@ -47,6 +47,7 @@ k_dcop:
|
||
|
|
||
|
QString mount(const QString &uid);
|
||
|
QString unmount(const QString &uid);
|
||
|
+ bool teardown(const QString &uid);
|
||
|
|
||
|
QString nameForLabel(const QString &label);
|
||
|
ASYNC setUserLabel(const QString &name, const QString &label);
|
||
|
Index: kioslave/media/mounthelper/kio_media_mounthelper.h
|
||
|
===================================================================
|
||
|
--- kioslave/media/mounthelper/kio_media_mounthelper.h.orig 2007-01-15 12:31:31.000000000 +0100
|
||
|
+++ kioslave/media/mounthelper/kio_media_mounthelper.h 2011-05-31 13:42:48.318334448 +0200
|
||
|
@@ -40,6 +40,8 @@ private:
|
||
|
QString m_errorStr;
|
||
|
QString m_device;
|
||
|
bool m_isCdrom;
|
||
|
+ bool isCryptMedia(QString);
|
||
|
+ bool teardown(QString);
|
||
|
|
||
|
private slots:
|
||
|
void ejectFinished(KProcess* proc);
|
||
|
Index: kioslave/media/mounthelper/kio_media_mounthelper.cpp
|
||
|
===================================================================
|
||
|
--- kioslave/media/mounthelper/kio_media_mounthelper.cpp.orig 2007-05-14 09:55:40.000000000 +0200
|
||
|
+++ kioslave/media/mounthelper/kio_media_mounthelper.cpp 2011-05-31 13:42:48.319334353 +0200
|
||
|
@@ -27,6 +27,7 @@
|
||
|
#include <dcopclient.h>
|
||
|
#include <dcopref.h>
|
||
|
#include <qtimer.h>
|
||
|
+#include <qregexp.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <kdebug.h>
|
||
|
#include <kglobal.h>
|
||
|
@@ -117,14 +118,17 @@ MountHelper::MountHelper() : KApplicatio
|
||
|
DCOPRef mediamanager("kded", "mediamanager");
|
||
|
DCOPReply reply = mediamanager.call( "unmount", medium.id());
|
||
|
if (reply.isValid())
|
||
|
- reply.get(m_errorStr);
|
||
|
- if (m_errorStr.isNull())
|
||
|
- invokeEject(device, true);
|
||
|
- else
|
||
|
- error();
|
||
|
+ reply.get(m_errorStr);
|
||
|
+ if (m_errorStr.isNull()) {
|
||
|
+ if (!teardown(medium.id()))
|
||
|
+ invokeEject(device, true);
|
||
|
+ } else
|
||
|
+ error();
|
||
|
m_device = device;
|
||
|
- } else
|
||
|
- invokeEject(device, true);
|
||
|
+ } else {
|
||
|
+ if (!teardown(medium.id()))
|
||
|
+ invokeEject(device, true);
|
||
|
+ }
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
@@ -139,6 +143,19 @@ MountHelper::MountHelper() : KApplicatio
|
||
|
}
|
||
|
}
|
||
|
|
||
|
+bool MountHelper::teardown(QString id)
|
||
|
+{
|
||
|
+ DCOPRef mediamanager("kded", "mediamanager");
|
||
|
+ DCOPReply reply = mediamanager.call( "teardown", id);
|
||
|
+ if (reply.isValid()) {
|
||
|
+ bool rep;
|
||
|
+ reply.get(rep);
|
||
|
+ kdDebug() << "reply from teardown: " << rep << endl;
|
||
|
+ return rep;
|
||
|
+ }
|
||
|
+ return false;
|
||
|
+}
|
||
|
+
|
||
|
void MountHelper::invokeEject(const QString &device, bool quiet)
|
||
|
{
|
||
|
KProcess *proc = new KProcess(this);
|