[Pkg-cryptsetup-devel] Bug#290626: marked as done (cryptsetup: new options 'check' and 'retry')

Debian Bug Tracking System owner at bugs.debian.org
Fri Jan 27 23:48:16 UTC 2006


Your message dated Sat, 28 Jan 2006 00:41:00 +0100
with message-id <20060127234100.GC16437 at freesources.org>
and subject line fixed
has caused the attached Bug report to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what I am
talking about this indicates a serious mail system misconfiguration
somewhere.  Please contact me immediately.)

Debian bug tracking system administrator
(administrator, Debian Bugs database)

--------------------------------------
Received: (at submit) by bugs.debian.org; 15 Jan 2005 13:09:34 +0000
>From debdev at mennucci.sns.it Sat Jan 15 05:09:34 2005
Return-path: <debdev at mennucci.sns.it>
Received: from host21-164.pool8249.interbusiness.it (localhost) [82.49.164.21] 
	by spohr.debian.org with esmtp (Exim 3.35 1 (Debian))
	id 1CpngK-0007L9-00; Sat, 15 Jan 2005 05:09:33 -0800
Received: from debdev by localhost with local (Exim 4.34)
	id 1Cpnfm-0001Hd-8i; Sat, 15 Jan 2005 14:08:58 +0100
Date: Sat, 15 Jan 2005 14:08:58 +0100
From: A Mennucc <mennucc1 at debian.org>
To: Debian Bug Tracking System <submit at bugs.debian.org>
Subject: cryptsetup: new options 'check' and 'retry' (and corrected bug)
Message-ID: <20050115130857.GA30322 at mennucci.sns.it>
Reply-To: mennucc1 at debian.org
Mime-Version: 1.0
Content-Type: multipart/signed; micalg=pgp-sha1;
	protocol="application/pgp-signature"; boundary="WhfpMioaduB5tiZL"
Content-Disposition: inline
X-Reportbug-Version: 3.2
Mail-Followup-To: mennucc1 at debian.org
User-Agent: Mutt/1.5.6+20040907i
Delivered-To: submit at bugs.debian.org
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 
	(1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Status: No, hits=-3.0 required=4.0 tests=BAYES_00 autolearn=no 
	version=2.60-bugs.debian.org_2005_01_02
X-Spam-Level: 


--WhfpMioaduB5tiZL
Content-Type: multipart/mixed; boundary="gBBFr7Ir9EOA20Yy"
Content-Disposition: inline


--gBBFr7Ir9EOA20Yy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

Package: cryptsetup
Version: 20050111-3
Severity: wishlist
Tags: patch

Hi=20

I have prepared some patches to introduce two new option for /etc/crypttab
and /etc/init.d/cryptdisks; this is the explanation from the man page

       check     check the content of the device by suitable program;  if  =
the
                 check  fails  the  device  is removed; if the retry option=
 is
                 given, the creation is repeated.  If a program is provided=
 as
                 argument,  it  is  run,  using  the decrypted volume as fi=
rst
                 argument.  The default program  is  /sbin/e2label,  which =
 is
                 suitable  to  check  that  a  EXT2  or  EXT3  is a accessi=
ble
                 throught the device.

       retry     If the device creation fails, or if the check program  fai=
ls,
                 remove  the  device,  and  try  again to create it: if key=
 is
                 "none" this will ask  for  the  password  again.  The  opt=
ion
                 specifies how many times to repeat.


I find the check option very useful: I mount /home from an encrypted device;
when occasionally I typed the wrong password, /etc/rcS.d/S26cryptdisk=20
would mount an unusable device, and fsck in /etc/rcS.d/S30checkfs.sh
would stop the boot claiming that the device is damaged
(which is somewhat misleading).

For that reason I used to use the 'verify' option, but I dont find convenie=
nt
to type the pass twice: it is very long. Moreover, why should I
verify the password, when a program can verify it?

The retry,check option may be useful also for people who keep the password
in a file, but that access the device from some device which may be tempora=
rily
unavailable (as an externally powered disk): in this case,
cryptdisks would retry until  it can access the disk.

In testing my patches, I found and corrected a bug in the parsing of the
options in crypttab (in version 20050111-2):
 if an option does not have a value, the variable VALUE should be empty,
but it is not.

a.


-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (650, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.9eta-k7
Locale: LANG=3DC, LC_CTYPE=3DC (charmap=3DANSI_X3.4-1968)

Versions of packages cryptsetup depends on:
ii  dmsetup                     2:1.00.19-2  The Linux Kernel Device Mapper=
 use
ii  libc6                       2.3.2.ds1-20 GNU C Library: Shared librarie=
s an
ii  libdevmapper1.00            2:1.00.19-2  The Linux Kernel Device Mapper=
 use
ii  libgcrypt11                 1.2.0-4      LGPL Crypto library - runtime =
libr
ii  libgpg-error0               1.0-1        library for common error value=
s an
ii  libpopt0                    1.7-5        lib for parsing cmdline parame=
ters

-- no debconf information

--=20
Andrea Mennucc
 "E' un mondo difficile. Che vita intensa!" (Tonino Carotone)

--gBBFr7Ir9EOA20Yy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="cryptsetup_20050111-3.dsc"
Content-Transfer-Encoding: quoted-printable

Format: 1.0
Source: cryptsetup
Version: 20050111-3
Binary: cryptsetup
Maintainer: Wesley W. Terpstra (Debian) <terpstra at debian.org>
Architecture: any
Standards-Version: 3.6.1.0
Build-Depends: debhelper (>=3D 4.0.0), libgcrypt11-dev, libdevmapper-dev, l=
ibpopt-dev, docbook-to-man, gettext, libtool, autoconf, automake1.8, cvs
Files:=20
 956bd7f7d0572341f83c0d8f68bbb095 16690 cryptsetup_20050111.orig.tar.gz
 bb7e23d9e43c6826646f82537258cf52 22606 cryptsetup_20050111-3.diff.gz

--gBBFr7Ir9EOA20Yy
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="cryptsetup_20050111-3.diff.gz"
Content-Transfer-Encoding: base64

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

--gBBFr7Ir9EOA20Yy
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="2005..2_to_2005..3.diff"
Content-Transfer-Encoding: quoted-printable

diff -ur cryptsetup-20050111/debian/changelog cryptsetup-20050111-3/debian/=
changelog
--- cryptsetup-20050111/debian/changelog	2005-01-15 13:06:12.000000000 +0100
+++ cryptsetup-20050111-3/debian/changelog	2005-01-15 12:26:13.000000000 +0=
100
@@ -1,3 +1,10 @@
+cryptsetup (20050111-3) unstable; urgency=3Dlow
+
+  * new options check, retry, in crypytab
+  * corrected error in cryptdisks when parsing options w/o values
+
+ -- A Mennucc <mennucc1 at debian.org>  Sat, 15 Jan 2005 12:26:13 +0100
+
 cryptsetup (20050111-2) unstable; urgency=3Dlow
=20
   * autogen.sh calls autopoint (gettext), which needs cvs
diff -ur cryptsetup-20050111/debian/cryptdisks cryptsetup-20050111-3/debian=
/cryptdisks
--- cryptsetup-20050111/debian/cryptdisks	2005-01-15 13:06:12.000000000 +01=
00
+++ cryptsetup-20050111-3/debian/cryptdisks	2005-01-15 12:12:49.000000000 +=
0100
@@ -57,54 +57,86 @@
 			PARAMS=3D""
 			MAKESWAP=3D""
 			SKIP=3D""
+			RETRY=3Dno
+			CHECK=3D""
=20
 			# Parse the options field, convert to cryptsetup parameters
                         # and contruct the command line
 			while test "x$opt" !=3D "x" ; do
-				ARG=3D`echo $opt | sed "s/,.*//"`
+				ARG=3D${opt/,*}
 				opt=3D${opt##$ARG}
 				opt=3D${opt##,}
-				PARAM=3D`echo $ARG | sed "s/=3D.*//"`
-				VALUE=3D${ARG##$PARAM=3D}
-			=09
-				case "$PARAM" in=20
+				case $ARG in=20
+				    *=3D*)=20
+					OPTION=3D${ARG/=3D*}
+					VALUE=3D${ARG##$OPTION=3D}
+					;;
+				    *)
+					OPTION=3D$ARG
+					VALUE=3D""
+				esac
+				# test: echo OPTION $OPTION  VALUE $VALUE
+				case "$OPTION" in=20
 					readonly)
-						PARAM=3D-r
-						VALUE=3D""
+					        PARAMS=3D"$PARAMS -r"
 						;;
 					cipher)
-						PARAM=3D-c
+						PARAMS=3D"$PARAMS -c $VALUE"
 						if test "x$VALUE" =3D "x" ; then
 							echo " - no value for cipher option, skipping" >&2
 							SKIP=3D"yes"
 						fi
 						;;
 					size)
-						PARAM=3D-s
+						PARAMS=3D"$PARAMS -s $VALUE"
 						if test "x$VALUE" =3D "x" ; then
 							echo " - no value for size option, skipping" >&2
 							SKIP=3D"yes"
 						fi
 						;;
 					hash)
-						PARAM=3D-h
+						PARAMS=3D"$PARAMS -h $VALUE"
 						if test "x$VALUE" =3D "x" ; then
 							echo " - no value for hash option, skipping" >&2
 							SKIP=3Dyes
 						fi
 						;;
 					verify)
-						PARAM=3D-y
-						VALUE=3D""
+						PARAMS=3D"$PARAMS -y"
+						;;
+					check)
+						if test "x$VALUE" =3D "x" ; then
+						    CHECK=3D"$CRYPTDISKS_CHECK"
+						else
+						    CHECK=3D"$VALUE"
+						fi
+						;;
+					retry)
+						if test "x$VALUE" =3D "x" ; then
+						    RETRY=3D"$CRYPTDISKS_RETRY"
+						else
+						    RETRY=3D"$VALUE"
+						fi
 						;;
 					swap)
 						MAKESWAP=3Dyes
-						PARAM=3D""
-						VALUE=3D""
+						;;
+				          *)
+					echo " - option '$OPTION' unknown, skipping $dst -" >&2
+					SKIP=3Dyes
 				esac
-				PARAMS=3D"$PARAMS $PARAM $VALUE"
 			done
=20
+			if [ "$RETRY" !=3D "no" ] ; then
+			    case "$RETRY" in=20
+				[0-9]*) ;;
+				*)
+				    echo " - option RETRY is wrongly set to $RETRY - forced to 'no' " =
>&2
+				    RETRY=3Dno
+				    ;;
+			    esac
+			fi
+
 			# Set up loopback devices
 			if test -f "$src" ; then
 				test -d /sys/block/loop0 || modprobe loop || SKIP=3Dyes
@@ -127,12 +159,29 @@
 				continue
 			fi
=20
-			if test "x$INTERACTIVE" =3D "xyes" ; then
+			while [ "x$RETRY" =3D xno ]  || [ "$RETRY" -gt 0 ] ; do
+		          if test "x$INTERACTIVE" =3D "xyes" ; then
 				$CRYPTCMD $PARAMS create $dst $src <&1
-			else
+				RESULT=3D$?
+			  else
 				$CRYPTCMD $PARAMS -d $key create $dst $src
-			fi
-
+				RESULT=3D$?
+			  fi
+			  # test : echo RESULT $RESULT
+			  if [ $RESULT =3D 0 ] ; then
+			      [ "$CHECK" =3D ""  ] && break =20
+			      if  $CHECK $MAPPER/$dst ; then
+				  break
+			      else
+				  $CRYPTCMD  remove $dst
+				  echo " - '$CHECK $MAPPER/$dst' failed - the device $dst is removed. =
" >&2
+				  sleep 1
+			      fi
+			  fi
+			  test "x$RETRY" =3D xno && break
+			  RETRY=3D`expr $RETRY - 1`
+			  [ $RETRY -gt 0 ] && echo " - retrying for $dst - "
+			done
 			if test "x$MAKESWAP" =3D "xyes" && test -b $MAPPER/$dst; then
 				mkswap $MAPPER/$dst 2>/dev/null >/dev/null
 			fi
diff -ur cryptsetup-20050111/debian/cryptdisks.default cryptsetup-20050111-=
3/debian/cryptdisks.default
--- cryptsetup-20050111/debian/cryptdisks.default	2005-01-15 13:06:12.00000=
0000 +0100
+++ cryptsetup-20050111-3/debian/cryptdisks.default	2005-01-14 14:18:43.000=
000000 +0100
@@ -1,2 +1,6 @@
 # Run cryptdisks at startup ?
 CRYPTDISKS_ENABLE=3DYes
+# Default check program
+CRYPTDISKS_CHECK=3D/sbin/e2label
+# How many times to ask for the password if the check fails
+CRYPTDISKS_RETRY=3D3
diff -ur cryptsetup-20050111/debian/crypttab.sgml cryptsetup-20050111-3/deb=
ian/crypttab.sgml
--- cryptsetup-20050111/debian/crypttab.sgml	2005-01-15 13:06:12.000000000 =
+0100
+++ cryptsetup-20050111-3/debian/crypttab.sgml	2005-01-15 12:43:54.00000000=
0 +0100
@@ -84,7 +84,8 @@
=20
 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=20
+<literal>check</literal> and <literal>retry</literal> may be quite useful.
     </para>
=20
     <para>The fourth field <replaceable>options</replaceable>
@@ -119,6 +120,31 @@
         </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=20
+	  creation is repeated.
+          If a program is provided as argument, it is run,=20
+	  using the decrypted volume as first argument.
+	  The default program is /sbin/e2label,
+	  which is suitable to check that a EXT2 or EXT3 is a accessible
+	  throught the device.
+	  </para>
+        </listitem>
+	</varlistentry>
+      <varlistentry>
+        <term><literal>retry</literal></term>
+	<listitem><para>
+	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=20
+	option specifies how many times to repeat.</para>
+        </listitem>
+      </varlistentry>
+      <varlistentry>
         <term><literal>readonly</literal></term>
         <listitem>
           <para>The backing device is read-only (eg: a dvd).</para>
Only in cryptsetup-20050111-3/lib: .deps
Only in cryptsetup-20050111-3: manifest
Only in cryptsetup-20050111-3/po: cryptsetup.pot
Only in cryptsetup-20050111-3/po: stamp-po
Only in cryptsetup-20050111-3/src: .deps

--gBBFr7Ir9EOA20Yy--

--WhfpMioaduB5tiZL
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: Digital signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (GNU/Linux)

iD8DBQFB6RXp9B/tjjP8QKQRAlNNAJ9cNKJcTzHsseo6u1+8TQ90Da1xmwCfVlY0
NrOlFHaWJ7+YyPiTstGTrJE=
=W9v5
-----END PGP SIGNATURE-----

--WhfpMioaduB5tiZL--

---------------------------------------
Received: (at 290626-done) by bugs.debian.org; 27 Jan 2006 23:40:58 +0000
>From jonas at freesources.org Fri Jan 27 15:40:58 2006
Return-path: <jonas at freesources.org>
Received: from [62.75.133.58] (helo=diana50.kidns.de)
	by spohr.debian.org with esmtp (Exim 4.50)
	id 1F2dD7-0001Cw-Un
	for 290626-done at bugs.debian.org; Fri, 27 Jan 2006 15:40:58 -0800
Received: from dslb-084-058-128-193.pools.arcor-ip.net ([84.58.128.193] helo=resivo.wgnet.de)
	by diana50.kidns.de with esmtpsa (TLS-1.0:RSA_AES_256_CBC_SHA:32)
	(Exim 4.50)
	id 1F2dCu-0002b3-VS
	for 290626-done at bugs.debian.org; Sat, 28 Jan 2006 00:40:45 +0100
Received: from jonas by resivo.wgnet.de with local (Exim 4.60)
	(envelope-from <jonas at freesources.org>)
	id 1F2dDA-0004rw-FR
	for 290626-done at bugs.debian.org; Sat, 28 Jan 2006 00:41:00 +0100
Date: Sat, 28 Jan 2006 00:41:00 +0100
From: Jonas Meurer <jonas at freesources.org>
To: 290626-done at bugs.debian.org
Message-ID: <20060127234100.GC16437 at freesources.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
User-Agent: Mutt/1.5.11
X-SA-Exim-Connect-IP: 84.58.128.193
X-SA-Exim-Mail-From: jonas at freesources.org
Subject: fixed
X-SA-Exim-Version: 4.2 (built Thu, 03 Mar 2005 10:44:12 +0100)
X-SA-Exim-Scanned: Yes (on diana50.kidns.de)
X-Spam-Checker-Version: SpamAssassin 2.60-bugs.debian.org_2005_01_02 
	(1.212-2003-09-23-exp) on spohr.debian.org
X-Spam-Level: 
X-Spam-Status: No, hits=-2.0 required=4.0 tests=BAYES_00,ONEWORD autolearn=no 
	version=2.60-bugs.debian.org_2005_01_02

hello,

this bug has been closed in 2:1.0.1-12.

...
 jonas



More information about the Pkg-cryptsetup-devel mailing list