commit f39b6e5cf7f0796a14f953e73cf8cb42b4772e84
parent cd9b16667bc72d4666e3b44b3ea0f25aed89f87d
Author: Jaromil <jaromil@dyne.org>
Date: Mon, 10 Jan 2011 20:41:28 +0100
new key on usb
usb key detection tested on ubuntu 10.04
Diffstat:
M | src/tomb | | | 66 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- |
1 file changed, 62 insertions(+), 4 deletions(-)
diff --git a/src/tomb b/src/tomb
@@ -47,6 +47,60 @@ else
DD=dd
fi
+# usb auto detect
+# tested on ubuntu 10.04 - please test and patch on other systems if you can
+ask_usbkey() {
+ echo "looking for key $1 on usb"
+ echo -n "please insert your usb key "
+
+ plugged=false
+ while [ "$plugged" != "true" ]; do
+ dmesg | tail -n 12 | grep -q 'new.*USB device'
+ if [ $? = 0 ]; then plugged=true; fi
+ echo -n "."
+ sleep .5
+ done
+
+ echo
+ echo -n "usb key inserted, attaching "
+
+ attached=false
+ while [ "$attached" != "true" ]; do
+ dmesg | tail -n 3| grep -q 'Attached.*removable disk'
+ if [ $? = 0 ]; then attached=true; fi
+ echo -n "."
+ sleep .5
+ done
+
+ # get the first partition
+ usbpart=`dmesg |tail -n 4 |awk '/ sd.:/ { print $3 }'`
+
+ echo
+ echo -n "usb key attached, mounting "
+ # what that it is mounted
+ mounted=false
+ while [ "$mounted" != "true" ]; do
+ cat /proc/mounts | tail -n2 | grep -q "^/dev/$usbpart"
+ if [ $? = 0 ]; then mounted=true; fi
+ echo -n "."
+ sleep .5
+ done
+
+ # check where it is mounted
+ usbmount=`cat /proc/mounts | awk -v p=$usbpart '{ if( $1 == "/dev/" p) print $2 }'`
+ echo
+ echo "usb key mounted on $usbmount"
+ # check if the key is there
+ if [ -r ${usbmount}/$1 ]; then
+ echo "key found!"
+ export enc_key="${usbmount}/${1}"
+ return 0
+ else
+ echo "key not found on usb"
+ fi
+ return 1
+}
+
# user interface (just to ask the password)
ask_password() {
@@ -270,11 +324,15 @@ mount_tomb() {
# check if key file is present
if ! [ -r "${enc_key}" ]; then
- error "encryption key ${enc_key} not found"
+ error "encryption key ${enc_key} not found on disk"
error "use -k option to specify which key to use"
- losetup -d ${nstloop}
- sleep 5
- return
+ error "or provide a usb key, or press ctrl-c to abort"
+ ask_usbkey ".tomb/$enc_key"
+ if ! [ -r "${enc_key}" ]; then
+ losetup -d ${nstloop}
+ sleep 5
+ return
+ fi
fi
modprobe dm-crypt