hi you sent message [EMAIL PROTECTED] on March 8th to bug 290626 but not to me .... sorry for the late reply :-)
I am including a new patch, for cryptsetup--3 issues from Martin Steigerwald <[EMAIL PROTECTED]> >1) It should be possible to abort the retry cycle in the password query. >Currently it is not. When you have 1000 retries and forgot your password, you >will need some time until you can boot into your Debian system without >mounting that crypted partition. The simplest implementation would be ... ctrl-c But this needs a big change: /sbin/cryptsetup ignores ctrl-c Anyway the default is 3 retries, not 1000 retries. >2) The texts should be a little bit more meaningful. Currently it says "<some >command> failed - the device $dst is removed.". It should probably say "<some >command> failed - Filesystem was not detected. Probably the password is >wrong." And "- retrying for $dst -" should probably become "- retrying for >>$dst - Please enter your passphrase again". Well its always a bit about the >target audience. For the technical user the current comments are enough, but >some desktop user without in-depth knowledge about all of this might be >scared by "device is removed". done also: >Also, include some default commands for the common filesystem types seems >a good idea. ie: Check if it is ext3, xfs, reiserfs, and vfat automatically >before falling back on a user-supplied CRYPTDISKS_CHECK. now I have checks for ext2 (and ext3) and xfs a. -- Andrea Mennucc "E' un mondo difficile. Che vita intensa!" (Tonino Carotone)
diff -Nur cryptsetup-20050111-3/debian/checks/ext2
cryptsetup-20050111-3-mine/debian/checks/ext2
--- cryptsetup-20050111-3/debian/checks/ext2 1970-01-01 01:00:00.000000000
+0100
+++ cryptsetup-20050111-3-mine/debian/checks/ext2 2005-04-12
23:17:24.224057064 +0200
@@ -0,0 +1,8 @@
+#!/bin/sh
+if /sbin/e2label $1 2> /dev/null 1>&2 ; then
+ #echo ok the device $1 is accessible : boot will continue
+ exit 0
+else
+ echo The device $1 does not contain a valid EXT2 or EXT3 filesystem.
+ exit 1
+fi
diff -Nur cryptsetup-20050111-3/debian/checks/xfs
cryptsetup-20050111-3-mine/debian/checks/xfs
--- cryptsetup-20050111-3/debian/checks/xfs 1970-01-01 01:00:00.000000000
+0100
+++ cryptsetup-20050111-3-mine/debian/checks/xfs 2005-04-12
22:56:52.000000000 +0200
@@ -0,0 +1,9 @@
+#!/bin/sh
+#thanks Martin Steigerwald <[EMAIL PROTECTED]>
+ulimit -c 0
+if /usr/sbin/xfs_admin -l $1 &>/dev/null ; then
+ exit 0
+else
+ echo The device $1 does not contain a valid XFS filesystem
+ exit 1
+fi
diff -Nur cryptsetup-20050111-3/debian/cryptdisks
cryptsetup-20050111-3-mine/debian/cryptdisks
--- cryptsetup-20050111-3/debian/cryptdisks 2005-04-12 22:49:55.000000000
+0200
+++ cryptsetup-20050111-3-mine/debian/cryptdisks 2005-04-12
22:55:01.000000000 +0200
@@ -58,59 +58,92 @@
MAKESWAP=""
MAKETMP=""
SKIP=""
+ RETRY=no
+ CHECK=""
# Parse the options field, convert to cryptsetup
parameters
# and contruct the command line
while test "x$opt" != "x" ; do
- ARG=`echo $opt | sed "s/,.*//"`
+ ARG=${opt/,*}
opt=${opt##$ARG}
opt=${opt##,}
- PARAM=`echo $ARG | sed "s/=.*//"`
- VALUE=${ARG##$PARAM=}
-
+ case $ARG in
+ *=*)
+ PARAM=${ARG/=*}
+ VALUE=${ARG##$PARAM=}
+ ;;
+ *)
+ PARAM=$ARG
+ VALUE=""
+ esac
+ # test: echo PARAM $PARAM VALUE $VALUE
case "$PARAM" in
readonly)
- PARAM=-r
- VALUE=""
+ PARAMS="$PARAMS -r"
;;
cipher)
- PARAM=-c
+ PARAMS="$PARAMS -c $VALUE"
if test "x$VALUE" = "x" ; then
echo " - no value for
cipher option, skipping" >&2
SKIP="yes"
fi
;;
size)
- PARAM=-s
+ PARAMS="$PARAMS -s $VALUE"
if test "x$VALUE" = "x" ; then
echo " - no value for
size option, skipping" >&2
SKIP="yes"
fi
;;
hash)
- PARAM=-h
+ PARAMS="$PARAMS -h $VALUE"
if test "x$VALUE" = "x" ; then
echo " - no value for
hash option, skipping" >&2
SKIP=yes
fi
;;
verify)
- PARAM=-y
- VALUE=""
+ PARAMS="$PARAMS -y"
+ ;;
+ check)
+ if test "x$VALUE" = "x" ; then
+ CHECK="$CRYPTDISKS_CHECK"
+ else
+ CHECK="$VALUE"
+ fi
+ ;;
+ retry)
+ if test "x$VALUE" = "x" ; then
+ RETRY="$CRYPTDISKS_RETRY"
+ else
+ RETRY="$VALUE"
+ fi
;;
swap)
MAKESWAP=yes
- PARAM=""
- VALUE=""
;;
tmp)
MAKETMP=yes
- PARAM=""
- VALUE=""
+ ;;
+ *)
+ echo " - option '$PARAM' unknown,
skipping $dst -" >&2
+ SKIP=yes
esac
- PARAMS="$PARAMS $PARAM $VALUE"
done
+ if [ "$RETRY" != "no" ] ; then
+ case "$RETRY" in
+ [0-9]*) ;;
+ *)
+ echo " - option RETRY is wrongly set to
$RETRY - forced to 'no' " >&2
+ RETRY=no
+ ;;
+ esac
+ fi
+ if [ "$CHECK" -a -x
/usr/share/cryptsetup/checks/"$CHECK" ] ; then
+ CHECK="/usr/share/cryptsetup/checks/$CHECK"
+ fi
+
# Set up loopback devices
if test -f "$src" ; then
test -d /sys/block/loop0 || modprobe loop ||
SKIP=yes
@@ -133,12 +166,29 @@
continue
fi
- if test "x$INTERACTIVE" = "xyes" ; then
+ while [ "x$RETRY" = xno ] || [ "$RETRY" -gt 0 ] ; do
+ if test "x$INTERACTIVE" = "xyes" ; then
$CRYPTCMD $PARAMS create $dst $src <&1
- else
+ RESULT=$?
+ else
$CRYPTCMD $PARAMS -d $key create $dst $src
- fi
-
+ RESULT=$?
+ fi
+ # test : echo RESULT $RESULT
+ if [ $RESULT = 0 ] ; then
+ if [ "$CHECK" = "" ] || $CHECK $MAPPER/$dst ;
then
+ break
+ else
+ echo " - the check for '$MAPPER/$dst' failed
- maybe the password is wrong -" >&2
+ echo " - removing the crypto device $dst - "
>&2
+ $CRYPTCMD remove $dst
+ sleep 1
+ fi
+ fi
+ test "x$RETRY" = xno && break
+ RETRY=`expr $RETRY - 1`
+ [ $RETRY -gt 0 ] && echo " - retrying for $dst - "
+ done
if test "x$MAKESWAP" = "xyes" && test -b $MAPPER/$dst;
then
mkswap $MAPPER/$dst 2>/dev/null >/dev/null
fi
diff -Nur cryptsetup-20050111-3/debian/cryptdisks.default
cryptsetup-20050111-3-mine/debian/cryptdisks.default
--- cryptsetup-20050111-3/debian/cryptdisks.default 2005-04-12
22:49:55.000000000 +0200
+++ cryptsetup-20050111-3-mine/debian/cryptdisks.default 2005-04-12
23:03:48.000000000 +0200
@@ -1,2 +1,6 @@
# Run cryptdisks at startup ?
CRYPTDISKS_ENABLE=Yes
+# Default check program ; look in /usr/share/cryptsetup/checks
+CRYPTDISKS_CHECK=ext2
+# How many times to ask for the password if the check fails
+CRYPTDISKS_RETRY=3
diff -Nur cryptsetup-20050111-3/debian/crypttab.sgml
cryptsetup-20050111-3-mine/debian/crypttab.sgml
--- cryptsetup-20050111-3/debian/crypttab.sgml 2005-04-12 22:49:55.000000000
+0200
+++ cryptsetup-20050111-3-mine/debian/crypttab.sgml 2005-04-12
23:09:38.000000000 +0200
@@ -84,7 +84,8 @@
If the <replaceable>key file</replaceable> is empty or the string
<literal>none</literal>, the key data (ie. a password) will be read
-interactively from the console.
+interactively from the console. In this case, the options
+<literal>check</literal> and <literal>retry</literal> may be quite useful.
</para>
<para>The fourth field <replaceable>options</replaceable>
@@ -115,10 +116,33 @@
<varlistentry>
<term><literal>verify</literal></term>
<listitem>
- <para>Verify pasword. See <command>cryptsetup -y</command>.</para>
+ <para>Verify password. Uses <command>cryptsetup -y</command>.</para>
</listitem>
</varlistentry>
<varlistentry>
+ <term><literal>check</literal></term>
+ <listitem>
+ <para>check the content of the device by suitable program;
+ if the check fails the device is removed; if the
+ <literal>retry</literal> option is given, the
+ creation is repeated.
+ If a program is provided as argument, it is run,
+ using the decrypted volume as first argument. Some programs are
+ provided in /usr/share/cryptsetup/checks, namely
<literal>ext2</literal>
+ and <literal>xfs</literal>; so, providing <literal>ext2</literal>
+ as argument will run the check for to ensure that a EXT2 or EXT3
+ filesystem is a accessible thru the device.
+ </para>
+ </listitem>
+ <varlistentry>
+ <term><literal>retry</literal></term>
+ If the device creation fails, or if the check program fails,
+ remove the device, and try again to
+ create it: if <literal>key</literal> is "none"
+ this will ask for the password again. The
+ option specifies how many times to repeat.
+ </varlistentry>
+ <varlistentry>
<term><literal>readonly</literal></term>
<listitem>
<para>The backing device is read-only (eg: a dvd).</para>
diff -Nur cryptsetup-20050111-3/debian/rules
cryptsetup-20050111-3-mine/debian/rules
--- cryptsetup-20050111-3/debian/rules 2005-04-12 22:49:55.000000000 +0200
+++ cryptsetup-20050111-3-mine/debian/rules 2005-04-12 22:58:21.000000000
+0200
@@ -80,6 +80,8 @@
install -m 0644 debian/cryptdisks.default
$(CURDIR)/debian/cryptsetup/etc/default/cryptdisks
install -m 0644 debian/cryptsetup.8
$(CURDIR)/debian/cryptsetup/usr/share/man/man8
install -m 0644 debian/crypttab.5
$(CURDIR)/debian/cryptsetup/usr/share/man/man5
+ install -d $(CURDIR)/debian/cryptsetup/usr/share/cryptsetup/checks
+ install debian/checks/*
$(CURDIR)/debian/cryptsetup/usr/share/cryptsetup/checks
binary-indep: build install
# We have nothing to do by default.
signature.asc
Description: Digital signature

