Bug#290708: initrd-tools: dm-crypt devices initialized with wrong arguments for cryptsetup
On Sat, Apr 23, 2005 at 22:32:24 +0200, Tino Keitel wrote:
> Hi,
>
> here is a patch for mkinitrd to parse the cryptsetup options from
> /etc/cryptdisks, as it is already done by the initscript from the
> cryptsetup package.
>
> Regards,
> Tino
...and here is the patch. :-)
diff -ur initrd-tools-0.1.78.orig/mkinitrd initrd-tools-0.1.78/mkinitrd
--- initrd-tools-0.1.78.orig/mkinitrd 2005-04-10 16:06:44.000000000 +0200
+++ initrd-tools-0.1.78/mkinitrd 2005-04-23 22:30:03.000000000 +0200
@@ -322,6 +322,66 @@
fi
}
+dmcrypt_parse_crypttab() {
+ TABFILE=/etc/crypttab
+
+ egrep "^$dmname" $TABFILE | while read dst src key opt ; do
+ if [ "x$key" != "x" ] && [ "x$key" != "xnone" ]; then
+ INTERACTIVE="no"
+ else
+ INTERACTIVE="yes"
+ fi
+
+ PARAMS=""
+
+ # Parse the options field, convert to cryptsetup parameters
+ # and contruct the command line
+ while test "x$opt" != "x" ; do
+ ARG=`echo $opt | sed "s/,.*//"`
+ opt=${opt##$ARG}
+ opt=${opt##,}
+ PARAM=`echo $ARG | sed "s/=.*//"`
+ VALUE=${ARG##$PARAM=}
+
+ case "$PARAM" in
+ cipher)
+ PARAM=-c
+ if test "x$VALUE" = "x" ; then
+ echo "No value for cipher option." >&2
+ exit 1
+ fi
+ ;;
+ size)
+ PARAM=-s
+ if test "x$VALUE" = "x" ; then
+ echo "No value for size option." >&2
+ exit 1
+ fi
+ ;;
+ hash)
+ PARAM=-h
+ if test "x$VALUE" = "x" ; then
+ echo "No value for hash option." >&2
+ exit 1
+ fi
+ ;;
+ verify)
+ PARAM=-y
+ VALUE=""
+ ;;
+ esac
+
+ PARAMS="$PARAMS $PARAM $VALUE"
+ done
+
+ if test "x$INTERACTIVE" = "xyes" ; then
+ echo "$PARAMS"
+ else
+ echo "$PARAMS -d $key"
+ fi
+ done
+}
+
dmcrypt() {
local cipher_mode devname submajor subminor
@@ -340,6 +400,8 @@
exit 1
fi
+ export dmname
+ cryptcmd=`dmcrypt_parse_crypttab`
eval "$(stat -c 'submajor=$((0x%t)); subminor=$((0x%T))' $(readlink -f "$devname"))"
if [ $submajor != $(dmsetup deps $dmname | sed 's/^.*(\([0-9]*\), \([0-9]*\))$/\1/') \
@@ -349,7 +411,6 @@
fi
getroot $devname
-
cat <<EOF >&5
mount_tmpfs dev2
@@ -364,6 +425,7 @@
export device
export dmname="$dmname"
export cipher_mode="$cipher_mode"
+export cryptcmd="$cryptcmd"
for i in /keyscripts/*; do
[ -f "\$i" ] || continue
case "\$i" in
@@ -376,7 +438,7 @@
esac
done
[ -b /dev/mapper/\$dmname ] || \\
- /sbin/cryptsetup -c \$cipher_mode create \$dmname \$device
+ /sbin/cryptsetup \$cryptcmd create \$dmname \$device
umount -n dev2
EOF
Only in initrd-tools-0.1.78: mkinitrd~
Reply to: