[Pkg-cryptsetup-devel] Bug#447159: cryptsetup: supply a script to start a particular entry from crypttab on-demand

Jon Dowland jon at alcopop.org
Thu Oct 18 14:20:11 UTC 2007


Package: cryptsetup
Version: 2:1.0.5-2
Severity: wishlist

Hi: it would be nice if there was a tool in cryptsetup to start a
mapping from the crypttab on demand (like how mount parses
/etc/crypttab). Here's my first stab at this (attached).

If you like the idea I can develop it a bit (different name, manpage,
etc.) and submit upstream.


-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (990, 'stable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.16.29-xen
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
-------------- next part --------------
#! /bin/sh /usr/share/dpatch/dpatch-run

## 06_add_cryptsetup_start.dpatch
## by Jon Dowland <jon at alcopop.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: add "cryptsetup_start"; parses /etc/cryptsetup and starts one entry
## DP: cryptdisks.functions: generalize the cryptsetup line-parsing code

@DPATCH@

--- cryptsetup-1.0.5.orig/cryptsetup_start
+++ cryptsetup-1.0.5/cryptsetup_start
@@ -0,0 +1,20 @@
+#!/bin/sh
+# set -u - cryptdisks.functions doesn't handle this
+set -e
+
+if [ $# -lt 1 ]; then
+	echo "usage: $0 crypt_name <name>" >&2
+	echo >&2
+	echo "reads /etc/crypttab and starts the mapping corresponding to <name>" >&2
+	exit 1
+fi
+
+. /lib/cryptsetup/cryptdisks.functions
+
+egrep -v "^[[:space:]]*(#|$)" "$TABFILE" | while read dst src key opts; do
+
+	if [ "$1" == "$dst" ]; then
+		handle_crypttab_line "$dst" "$src" "$key" "$opts"
+		exit
+	fi
+done
--- cryptsetup-1.0.5/debian/cryptdisks.functions	2007-10-18 14:33:51.000000000 +0100
+++ /lib/cryptsetup/cryptdisks.functions	2007-10-18 14:34:50.000000000 +0100
@@ -391,17 +391,12 @@
 	return $?
 }
 
-# Sets up all entries in crypttab
-do_start () {
-	local dst src key opts result
-
-	modprobe -qb dm-mod || true
-	modprobe -qb dm-crypt || true
-	dmsetup mknodes > /dev/null 2>&1 || true
-	log_action_begin_msg "Starting $INITSTATE crypto disks"
-	mount_fs
-
-	egrep -v "^[[:space:]]*(#|$)" "$TABFILE" | while read dst src key opts; do
+# setup a line from the crypttab
+handle_crypttab_line() {
+		dst=$1
+		src=$2
+		key=$3
+		opts=$4
 
 		# Make sure that all fields are present
 		if [ -z "$dst" ]; then
@@ -453,6 +448,20 @@
 			do_tmp
 			log_progress_msg "$dst (started)"
 		fi
+}
+
+# Sets up all entries in crypttab
+do_start () {
+	local dst src key opts result
+
+	modprobe -qb dm-mod || true
+	modprobe -qb dm-crypt || true
+	dmsetup mknodes > /dev/null 2>&1 || true
+	log_action_begin_msg "Starting $INITSTATE crypto disks"
+	mount_fs
+
+	egrep -v "^[[:space:]]*(#|$)" "$TABFILE" | while read dst src key opts; do
+		handle_crypttab_line "$dst" "$src" "$key" "$opts"
 	done
 
 	umount_fs
--- cryptsetup-1.0.5/debian/rules 	2007-10-18 14:44:10.000000000 +0100
+++ cryptsetup-1.0.5/debian/rules	2007-10-18 14:44:27.000000000 +0100
@@ -100,6 +100,7 @@
 
 	$(MAKE) DESTDIR=$(CURDIR)/debian/cryptsetup install
 	cp src/cryptsetup.static $(CURDIR)/debian/cryptsetup/sbin/cryptsetup
+	cp cryptsetup_start $(CURDIR)/debian/cryptsetup/sbin/cryptsetup_start
 
 	install -m 0644 debian/cryptdisks.functions $(CURDIR)/debian/cryptsetup/lib/cryptsetup/
 	install -m 0755 debian/checks/* $(CURDIR)/debian/cryptsetup/lib/cryptsetup/checks/


More information about the Pkg-cryptsetup-devel mailing list