#!/bin/sh

# Part of passwordless cryptofs setup in Debian Etch.
# See: http://wejn.org/how-to-make-passwordless-cryptsetup.html
# Author: Wejn <wejn at box dot cz>
#
# Updated by Rodolfo Garcia (kix) <kix at kix dot com>
# For multiple partitions
# http://www.kix.es/

# USB Disk partition type (ext2 or vfat)
PARTTYPE=ext2
# Key file in the USB disk
KEYFILE=.key

# # # # # CODE # # # # #
MD=/tmp-usb-mount

if [ "x$1" = "x" -o "x$1" = "xnone" ]; then
    KEYF=$KEYFILE
else
    KEYF=$1
fi

USBLOAD=0
FSLOAD=0
cat /proc/modules | busybox grep usb_storage >/dev/null 2>&1
USBLOAD=$?
cat /proc/modules | busybox grep $PARTTYPE >/dev/null 2>&1
FSLOAD=$?

if [ $USBLOAD -gt 0 ] || [ $FSLOAD -gt 0 ]; then
    modprobe usb_storage >/dev/null 2>&1
    modprobe $PARTTYPE >/dev/null 2>&1
    sleep 7
fi

OPENED=0

ls -d /sys/block/sd* >/dev/null 2>&1
SDS=$?

if [ $SDS -eq 0 ]; then
    echo "Trying to get the key from USB keychain ..." >&2
    mkdir -p $MD

    for SFS in /sys/block/sd*; do
        DEV=`busybox basename $SFS`
        F=$SFS/${DEV}1/dev
        if [ 0`cat $SFS/removable` -eq 1 -a -f $F ]; then
            echo "> Trying device: $DEV ..." >&2
            mount /dev/${DEV}1 $MD -t ext2 -o ro 2>/dev/null
            if [ -f $MD/$KEYF ]; then
                cat $MD/$KEYF
                umount $MD 2>/dev/null
                OPENED=1
                break
            fi
            umount $MD 2>/dev/null
        fi
    done
fi

if [ $OPENED -eq 0 ]; then
    echo "FAILED to find suitable USB keychain ..." >&2
    echo -n "Try to enter your password: " >&2
    read -s -r A </dev/console
    echo -n "$A"
else
    echo "Success loading keyfile from the keychain!" >&2
fi