trinity-devel@lists.pearsoncomputing.net

Message: previous - next
Month: July 2011

[PATCH master 1/1] media-teardown_crypto.diff

From: Patches at Lincom <rxu_patch@...>
Date: Wed, 20 Jul 2011 19:17:27 -0400
Hi! This is rxu_patches@.... I'm writing this email to send 
a new patch to the list. The Reply-To for this email address is: robxu9 
<AT> gmail <DOT> com. Mailing lists may change this depending on 
configured settings. The preferred method is to reply to the list.
Thanks! Patches At Lincom.

Patch is included below:

Need clarification on this patch and if we need this...


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);