--- dm-crypt-start.sh 2007-08-23 07:59:53.000000000 +0100 +++ dm-crypt-start.sh-NEW 2007-08-23 07:57:52.000000000 +0100 @@ -54,24 +54,77 @@ case "$mode" in gpg|reg) # handle key on removable device - if [ -n "$remdev" ]; then - # temp directory to mount removable device - local mntrem=/mnt/remdev - local c=0 ans - for (( i = 0 ; i < 10 ; i++ )) - do - [ ! -d "$mntrem" ] && mkdir -p ${mntrem} 2>/dev/null >/dev/null + local mntrem=/mnt/remdev c=0 ans i devices + [ ! -d "$mntrem" ] && mkdir -p ${mntrem} 2>/dev/null >/dev/null + for (( i = 0 ; i < 10 ; i++ )); do + if [ -f "${key}" ]; then + break; + elif [ -z "$remdev" ]; then + ebegin " Guessing the key device" + # usb keychain/storage + devices="/dev/sd*" + # ide + devices="${devices} /dev/hd*" + # usb using the 'usb block driver' + devices="${devices} /dev/ubd* /dev/ubd/*" + # cdrom's + devices="${devices} /dev/cdroms/* /dev/ide/cd/* /dev/sr*" + for x in ${devices}; do + if [ -b "${x}" ]; then + mount -r -t auto ${x} ${mntrem} >/dev/null 2>&1 + if [ "$?" = '0' ]; then + if [ -f "${mntrem}/${key}" ]; then + key="${mntrem}/${key}" + break 2; + fi + else + umount ${mntrem} >/dev/null 2>&1 + fi + fi + done + einfo "Removable device for ${target} not present." + echo -n -e " ${green}*${off} Auto search (${green}a${off}), quit (${red}q${off}) or input device name:" >/dev/console + read -t 25 ans /dev/console + case ${ans} in + a) + remdev=''; i=$((i-1)); sleep 8; continue + ;; + q) + return + ;; + '') + i=$((i-1)); sleep 8; continue + ;; + *) + remdev=${ans}; i=0; sleep 8 + ;; + esac + else if mount -n -o ro ${remdev} ${mntrem} 2>/dev/null >/dev/null ; then sleep 2 # keyfile exists? - if [ ! -e "${mntrem}${key}" ]; then + if [ ! -e "${mntrem}/${key}" ]; then umount -n ${mntrem} 2>/dev/null >/dev/null rmdir ${mntrem} 2>/dev/null >/dev/null - einfo "Cannot find ${key} on removable media." - echo -n -e " ${green}*${off} Abort?(${red}yes${off}/${green}no${off})" >/dev/console - read ans /dev/console + read -t 25 ans /dev/console - [ "$ans" != "yes" ] && { i=0; c=0; } || return + case "${ans}" in + a) + remdev=''; i=$((i-2)); c=0; sleep 8; continue + ;; + q) + return + ;; + '') + i=0; c=0; sleep 8 + ;; + *) + remdev=${ans}; i=0; c=0; + ;; + esac else key="${mntrem}${key}" break @@ -83,20 +136,33 @@ # let user abort if [ "$i" -eq 9 ]; then rmdir ${mntrem} 2>/dev/null >/dev/null - einfo "Removable device for ${target} not present." - echo -n -e " ${green}*${off} Abort?(${red}yes${off}/${green}no${off})" >/dev/console - read ans /dev/console - [ "$ans" != "yes" ] && { i=0; c=0; } || return + einfo "Removable device ${remdev} for ${target} not present." + echo -n -e " ${green}*${off} Auto search (${green}a${off}), quit (${red}q${off}) or input device name:" >/dev/console + read -t 25 ans /dev/console + case ${ans} in + a) + remdev=''; i=$((i-2)); c=0; sleep 8; continue + ;; + q) + return + ;; + '') + i=0; c=0; sleep 8 + ;; + *) + remdev=${ans}; i=0; c=0; sleep 8 + ;; + esac fi fi - done - else # keyfile ! on removable device - if [ ! -e "$key" ]; then - ewarn "${source} will not be decrypted ..." - einfo "Reason: keyfile ${key} does not exist." - return fi + done + # keyfile ! on removable device + if [ ! -e "$key" ]; then + ewarn "${source} will not be decrypted ..." + einfo "Reason: keyfile ${key} does not exist." + return fi ;; *)