+++ /dev/null
-diff -urN exo-0.3.4/configure.in exo-0.3.4.new/configure.in
---- exo-0.3.4/configure.in 2007-12-02 13:37:06.000000000 +0100
-+++ exo-0.3.4.new/configure.in 2007-12-05 21:00:53.000000000 +0100
-@@ -147,7 +147,7 @@
- dnl ******************************
- dnl *** Check for i18n support ***
- dnl ******************************
--XDT_I18N([ar be ca cs cy de dz el en_GB es et eu fi fr gl he hu it ja ka lt lv mk nb_NO nl pa pl pt_BR pt_PT ro ru sq sv ur zh_TW], [libexo-libexo_version_major().libexo_version_minor()])
-+XDT_I18N([ar be ca cs cy de dz el en_GB es et eu fi fr gl he hu it ja ka lt lv mk nb nl pa pl pt_BR pt ro ru sq sv ur zh_TW], [libexo-libexo_version_major().libexo_version_minor()])
-
- dnl ***********************************
- dnl *** Check for required packages ***
-diff -urN exo-0.3.4/po/LINGUAS exo-0.3.4.new/po/LINGUAS
---- exo-0.3.4/po/LINGUAS 2007-12-02 13:33:45.000000000 +0100
-+++ exo-0.3.4.new/po/LINGUAS 2007-12-05 21:00:31.000000000 +0100
-@@ -1,2 +1,2 @@
- # set of available languages (in alphabetic order)
--ar be ca cs cy de dz el en_GB es et eu fi fr gl he hu it ja ka lt lv mk nb_NO nl pa pl pt_BR pt_PT ro ru sq sv ur zh_TW
-+ar be ca cs cy de dz el en_GB es et eu fi fr gl he hu it ja ka lt lv mk nb nl pa pl pt_BR pt ro ru sq sv ur zh_TW
+++ /dev/null
-Index: exo-mount/exo-mount-hal.c
-===================================================================
---- exo-mount/exo-mount-hal.c (revision 27040)
-+++ exo-mount/exo-mount-hal.c (working copy)
-@@ -547,10 +547,20 @@
- DBusMessage *message;
- DBusMessage *result;
- DBusError derror;
-+ const gchar *backing_udi = NULL;
-
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-+ /* see if the udi is a crypto fs, in which case we'll have to tear down the crypto layer. */
-+ backing_udi = libhal_volume_crypto_get_backing_volume_udi(device->volume);
-+
-+ if (backing_udi)
-+ {
-+ /* never eject a LUKS-encrypted device */
-+ return exo_mount_hal_device_unmount(device, error);
-+ }
-+
- /* allocate the D-Bus message for the "Eject" method */
- message = dbus_message_new_method_call ("org.freedesktop.Hal", device->udi, "org.freedesktop.Hal.Device.Volume", "Eject");
- if (G_UNLIKELY (message == NULL))
-@@ -873,8 +883,73 @@
- }
-
-
-+static gboolean
-+exo_mount_teardown_crypto_volume(const gchar *udi, GError **error)
-+{
-+ DBusMessage *message = NULL;
-+ DBusMessage *result = NULL;
-+ DBusError derror;
-
-+ message = dbus_message_new_method_call ("org.freedesktop.Hal", udi,
-+ "org.freedesktop.Hal.Device.Volume.Crypto",
-+ "Teardown");
-
-+ if (G_UNLIKELY (message == NULL))
-+ {
-+ /* out of memory */
-+oom: g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_NOMEM, g_strerror (ENOMEM));
-+ return FALSE;
-+ }
-+
-+ if (!dbus_message_append_args (message,
-+ DBUS_TYPE_INVALID)) {
-+ dbus_message_unref (message);
-+ goto oom;
-+ }
-+
-+ dbus_error_init (&derror);
-+
-+ result = dbus_connection_send_with_reply_and_block (dbus_connection, message, -1, &derror);
-+ if (G_LIKELY (result != NULL))
-+ {
-+ /* check if an error was returned */
-+ if (dbus_message_get_type (result) == DBUS_MESSAGE_TYPE_ERROR)
-+ dbus_set_error_from_message (&derror, result);
-+
-+ /* release the result */
-+ dbus_message_unref (result);
-+ }
-+
-+ /* release the message */
-+ dbus_message_unref (message);
-+
-+ if (G_UNLIKELY (dbus_error_is_set (&derror)))
-+ {
-+ /* try to translate the error appropriately */
-+ if (strcmp (derror.name, "org.freedesktop.Hal.Device.Volume.PermissionDenied") == 0)
-+ {
-+ /* TRANSLATORS: The user tried to eject a device although he's not privileged to do so. */
-+ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("You are not privileged to teardown the crypto layer"));
-+ }
-+ else if (strcmp (derror.name, "org.freedesktop.Hal.Device.Volume.Busy") == 0)
-+ {
-+ /* TRANSLATORS: An application is blocking a mounted volume from being ejected. */
-+ g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("An application is preventing the crypto layer from being torn down"));
-+ }
-+ else
-+ {
-+ /* no precise error message, use the HAL one */
-+ exo_mount_hal_propagate_error (error, &derror);
-+ }
-+
-+ /* release the DBus error */
-+ dbus_error_free (&derror);
-+ return FALSE;
-+ }
-+ return TRUE;
-+}
-+
-+
- /**
- * exo_mount_hal_device_unmount:
- * @device : an #ExoMountHalDevice.
-@@ -894,10 +969,14 @@
- DBusMessage *message;
- DBusMessage *result;
- DBusError derror;
-+ const gchar *backing_udi = NULL;
-
- g_return_val_if_fail (device != NULL, FALSE);
- g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
-
-+ /* see if the udi is a crypto fs, in which case we'll have to teardown the crypto layer. */
-+ backing_udi = libhal_volume_crypto_get_backing_volume_udi(device->volume);
-+
- /* allocate the D-Bus message for the "Unmount" method */
- message = dbus_message_new_method_call ("org.freedesktop.Hal", device->udi, "org.freedesktop.Hal.Device.Volume", "Unmount");
- if (G_UNLIKELY (message == NULL))
-@@ -955,7 +1034,7 @@
- {
- /* Ups, volume not mounted, we succeed! */
- dbus_error_free (&derror);
-- return TRUE;
-+ goto finish;
- }
- else
- {
-@@ -968,6 +1047,11 @@
- return FALSE;
- }
-
-+finish:
-+ if (G_UNLIKELY(backing_udi != NULL))
-+ {
-+ return exo_mount_teardown_crypto_volume(backing_udi, error);
-+ }
- return TRUE;
- }
-