Package: pmount
Version: 0.9.4-1
Severity: normal
Tags: experimental patch

Hi,

I have a problem with pmount and an encrypted dvd.  It is a "feature" of
cryptsetup that cryptsetup luksOpen does not work with read-only devices
without the --readonly option.
The attached patch workarounds this problem by calling cryptsetup with
--readonly if pmount is called with -r.

Thanks for adding luks support to pmount.  I hope it will make it to
unstable soon.


-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (1, 'experimental')
Architecture: i386 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.13
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages pmount depends on:
ii  libc6                         2.3.5-5    GNU C Library: Shared
libraries an
ii  libdbus-1-1                   0.36.1-1   simple interprocess
messaging syst
ii  libhal1                       0.5.4-1    Hardware Abstraction Layer
- share
ii  libsysfs1                     1.3.0-2    interface library to sysfs

pmount recommends no packages.

-- debconf-show failed
diff -Nur pmount-0.9.4/luks.c pmount-0.9.4-patch/luks.c
--- pmount-0.9.4/luks.c	2005-07-29 13:08:34.000000000 +0200
+++ pmount-0.9.4-patch/luks.c	2005-09-02 10:28:38.000000000 +0200
@@ -17,12 +17,13 @@
 
 enum decrypt_status
 luks_decrypt( const char* device, char* decrypted, int decrypted_size, 
-        const char* password_file )
+        const char* password_file, int readonly )
 {
     int status;
     char* label;
     enum decrypt_status result;
     struct stat st;
+    char* readonly_param;
 
     /* check if encrypted */
     status = spawn( SPAWN_EROOT|SPAWN_NO_STDOUT|SPAWN_NO_STDERR, 
@@ -42,13 +43,15 @@
         return DECRYPT_EXISTS;
 
     /* open LUKS device */
+    readonly_param = readonly == 1 ? "--readonly" : "";
     if( password_file )
         status = spawn( SPAWN_EROOT|SPAWN_NO_STDOUT|SPAWN_NO_STDERR, 
                 CRYPTSETUP, CRYPTSETUP, "luksOpen", "--key-file",
-                password_file, device, label, NULL );
+                password_file, readonly_param, device, label, NULL );
     else
         status = spawn( SPAWN_EROOT|SPAWN_NO_STDOUT|SPAWN_NO_STDERR, 
-                CRYPTSETUP, CRYPTSETUP, "luksOpen", device, label, NULL );
+                CRYPTSETUP, CRYPTSETUP, readonly_param, "luksOpen",
+                device, label, NULL );
 
     if( status == 0 )
         /* yes, we have a LUKS device */
diff -Nur pmount-0.9.4/luks.h pmount-0.9.4-patch/luks.h
--- pmount-0.9.4/luks.h	2005-07-29 13:08:34.000000000 +0200
+++ pmount-0.9.4-patch/luks.h	2005-09-02 10:32:35.000000000 +0200
@@ -24,9 +24,10 @@
  *        this will be set to device
  * @param decrypted_size size of the "decrypted" buffer
  * @param password_file file to read the password from (NULL means prompt)
+ * @param readonly 1 if device is read-only
  */
 enum decrypt_status luks_decrypt( const char* device, char* decrypted, 
-        int decrypted_size, const char* password_file );
+        int decrypted_size, const char* password_file, int readonly );
 
 /**
  * Check whether device is mapped through cryptsetup, and release it if so.
diff -Nur pmount-0.9.4/pmount.c pmount-0.9.4-patch/pmount.c
--- pmount-0.9.4/pmount.c	2005-07-29 13:08:34.000000000 +0200
+++ pmount-0.9.4-patch/pmount.c	2005-09-02 10:30:13.000000000 +0200
@@ -644,7 +644,8 @@
 
             /* check for encrypted device */
             enum decrypt_status decrypt = luks_decrypt( device,
-                    decrypted_device, sizeof( decrypted_device ), passphrase ); 
+                    decrypted_device, sizeof( decrypted_device ), passphrase,
+                    force_write == 0 ? 1 : 0 ); 
 
             switch (decrypt) {
                 case DECRYPT_FAILED:

Reply via email to