#!/bin/bash if [[ $UID != 0 ]] then echo "*** Hey `whoami`.. You are not user root. please rerun this script when you are root ***" exit 0; fi #MAIN Config File CONFIG="/etc/crypto/crypto.conf" Nr_of_disks=`grep -v "#" $CONFIG |wc -l` dm=/sbin/dmsetup cr=/sbin/cryptsetup function start() { ### try to feel the input... function USBCHECK() { sp="-\|/-\|/" x=0 while (i=0) do echo -en "\b${sp:x++%${#sp}:1}" sleep 1 ; if [[ "$x" = "5" ]] ## how long shall we wait? then echo -e "\n * you better find that usbstick.." ; exit 0 else if [[ $(lsusb |grep -c "${usb_vendor}") = "1" ]] then sleep 7 & break fi fi done if [[ `df |grep -c ${usbdev}` = "0" ]] & [[ `lsusb |grep -c "${usb_vendor}"` = "1" ]] then sleep 2.3 mount -t "${usbfs}" "${usbdev}" "${usbmountpoint}" sleep 1.3 elif [[ `df |grep -c ${usbdev}` = "1" ]] & [[ `lsusb |grep -c "${usb_vendor}"` = "1" ]] then echo "usb ok" fi } function FSCHECK() { fsck -t $fsocd -T -C -y "$mapperdev" if [[ "$?" == "0" ]] then echo -e " ### File System on $mapperdev seams to be OK ###\n" elif [[ "$?" == "1" ]] then echo " ### Errors on $mapperdev are corrected ###" elif [[ "$?" == "4" ]] then echo " *** Warning:: File system on $mapperdev has errors left uncorrected ***" exit 1; elif [[ "$?" == "128" ]] then echo " *** Shared library error ***" echo " check --> your mount install" echo " check --> your lib.. /lib/" echo " ldd /bin/mount to see.. might help" sleep 2 exit 1; fi } for (( i=1 ; i<="$Nr_of_disks" ; i++ )) do ## the variables from the configfile cryptohd=`awk '{print $1}' $CONFIG | sed -n ""$i"p"` fsocd=`awk '{print $2}' $CONFIG | sed -n ""$i"p"` mappername=`awk '{print $3}' $CONFIG | sed -n ""$i"p"` mapperdev=`awk '{print $4}' $CONFIG |sed -n ""$i"p"` mountpoint=`awk '{print $5}' $CONFIG | sed -n ""$i"p"` keyfile="`awk '{print $6}' $CONFIG | sed -n ""$i"p"`" usb_vendor=`awk '{print $7}' $CONFIG | sed -n ""$i"p"` usbmountpoint=`awk '{print $8}' $CONFIG | sed -n ""$i"p"` chiper=`awk '{print $9}' $CONFIG | sed -n ""$i"p"` usbfs="ext2" ## dont edit this unless you got a verry static device ## might changed in newer kernels.. i donno ;\ usbnumber=`egrep "(sda1|sdb1|sdc1|sdd1)" /proc/partitions | awk '{print $4}'` usbdev="/dev/$usbnumber" ## if no mapper or mount for the devices if [[ ! -e ${mapperdev} ]] && [[ `df | grep -c "${mapperdev}"` == "0" ]] then ## All clear to continue USBCHECK sleep 1 $cr -c $chiper -d $usbmountpoint/$keyfile create $mappername $cryptohd FSCHECK mount -t ${fsocd} ${mapperdev} ${mountpoint} ## If no mapper but mounted ; bad stuff can happen elif [[ ! -e ${mapperdev} ]] && [[ `df |grep -c "${mapperdev}"` == "1" ]] then umount -l -r -f ${mountpoint} || echo "crap.. try lsof ${mountpoint} and kill all thouse pid's" & exit 1; USBCHECK sleep 1 $cr -c $chiper -d $usbmountpoint/$keyfile create $mappername $cryptohd FSCHECK mount -t ${fsocd} ${mapperdev} ${mountpoint} ## If mapper exsits but its not mounted.. remove it and make a new.. elif [[ -e "${mapperdev}" ]] && [[ `df |grep -c "${mapperdev}"` == "0" ]] then ${dm} remove "${mappername}" USBCHECK sleep 1 $cr -c $chiper -d $usbmountpoint/$keyfile create $mappername $cryptohd FSCHECK mount -t ${fsocd} ${mapperdev} ${mountpoint} ## if mounted and all well just exit,, elif [[ -e "${mapperdev}" ]] && [[ `df |grep -c "${mapperdev}"` == "1" ]] then #exit 0; echo " *** DEVICE $mapperdev Is already mounted" fi done } function stop() { for (( i=1 ; i<="$Nr_of_disks" ; i++ )) do mappername=`awk '{print $3}' $CONFIG | sed -n ""$i"p"` mapperdev=`awk '{print $4}' $CONFIG |sed -n ""$i"p"` umount -l -r -f "${mapperdev}" &> /dev/null ${dm} remove "${mappername}" &> /dev/null done } case "$1" in start) start ;; stop) stop ;; *) echo "use $0 start or $0 stop" exit 0; ;; esac