tclean up mount code and list output ( fix #32 ) - tomb - the crypto undertaker HTML git clone git://parazyd.org/tomb.git DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit a3f0c7c86b538e729cf849edab36046daffa45e3 DIR parent 70e4a5d19faccb9ddaeb3eb530d79d1157c74914 HTML Author: Jaromil <jaromil@dyne.org> Date: Mon, 26 Sep 2011 11:33:07 +0200 clean up mount code and list output ( fix #32 ) Diffstat: M src/tomb | 127 ++++++++++--------------------- 1 file changed, 42 insertions(+), 85 deletions(-) --- DIR diff --git a/src/tomb b/src/tomb t@@ -201,53 +201,6 @@ EOF return 0 } -get_arg_tomb() { -# set up variables to be used by caller: -# tombfile - filename without path -# tombdir - directory where the tomb is -# tombname - name of the tomb (filename without extension) -# the full path is made with $tombdir/$tombfile - if [ -z $1 ]; then - error "internal: get_arg_tomb called without argument" - return 1 - fi - - arg=${1} - if ! [ -r ${arg} ]; then - error "file not found: $arg" - return 1 - fi - - tombfile=`basename $arg` - tombdir=`dirname $arg` - - file ${tombdir}/${tombfile} | grep -i 'luks encrypted file' 2>&1 >/dev/null - if [ $? != 0 ]; then - error "$arg is not a valid tomb file, operation aborted" - return 1 - fi - - tombname=${tombfile%%\.*} - func "tomb found: ${tombdir}/${tombfile}" - # now check if the key is kept beside or in args - # we use the extension .key - - # the problem with .tomb.gpg is that decoding by hand using gpg it - # can override the tomb contents if the key is in the same - # directory than the tomb - if [ $KEY ]; then - tombkey=$KEY # commandline -k flag - act "tomb key specified manually: $tombkey" - elif [ -r ${tombdir}/${tombname}.tomb.key ]; then - tombkey=${tombdir}/${tombname}.tomb.key - act "key found for tomb '${tombname}': ${tombkey}" - else - error "key not found for tomb '${tombname}'" - return 1 - fi - return 0 -} - usage() { cat <<EOF Tomb $VERSION - a strong and gentle undertaker for your secrets t@@ -269,7 +222,7 @@ EOF if [ "$STEGHIDE" = 1 ]; then cat <<EOF bury hide a tomb key FILE inside a jpeg PLACE - exhume extract a tomb key FILE from a jpeg PL + exhume extract a tomb key FILE from a jpeg PLACE EOF fi cat <<EOF t@@ -527,10 +480,23 @@ mount_tomb() { return 1 fi - # TODO: eliminate this function - get_arg_tomb $CMD2 - + # set up variables to be used + # the full path is made with $tombdir/$tombfile local tombkey + local tombfile + local tombdir + local tombname + tombfile=`basename ${CMD2}` + tombdir=`dirname ${CMD2}` + # check file type (if its a Luks fs) + file ${tombdir}/${tombfile} | grep -i 'luks encrypted file' 2>&1 >/dev/null + if [ $? != 0 ]; then + error "$CMD2 is not a valid tomb file, operation aborted" + return 1 + fi + tombname=${tombfile%%\.*} + func "tomb found: ${tombdir}/${tombfile}" + if option_is_set -k ; then if [[ "`option_value -k`" == "-" ]]; then # take key from stdin t@@ -544,12 +510,12 @@ mount_tomb() { fi else # guess key as lying besides the tomb - tombkey="${PARAM[1]}.key" + tombkey=${tombdir}/${tombfile}.key fi - echo the key used is $tombkey - if [ $? != 0 ]; then - error "operation aborted." - return 1 + if ! [ -r ${tombkey} ]; then + error "key file not found: ${tombkey}" + error "operation aborted." + return 1 fi if ! [ $CMD3 ]; then t@@ -557,33 +523,22 @@ mount_tomb() { act "mountpoint not specified, using default: $tombmount" elif ! [ -x $CMD3 ]; then error "mountpoint $CMD3 doesn't exist, operation aborted." - if [ -n "$usbkey_mount" ]; then - umount $usbkey_mount - rmdir $usbkey_mount - unset usbkey_mount - fi return 1 else - tombmount=$CMD3 + tombmount=${CMD3} fi - + # check if its already open - mount -l | grep "${tombname}.tomb.*\[$tombname\]$" 2>&1 > /dev/null + mount -l | grep "${tombfile}.*\[$tombname\]$" 2>&1 > /dev/null if [ $? = 0 ]; then - error "$tombname is already mounted on $tombmount" - act "tomb list - show all tombs currently open" - if [ -n "$usbkey_mount" ]; then - umount $usbkey_mount - rmdir $usbkey_mount - unset usbkey_mount - fi - error "operation aborted." - return 1 + error "$tombname is already open on $tombmount" + act "here below its status is reported:" + list_tombs ${tombname} + return 1 fi - + notice "mounting $tombfile on mountpoint $tombmount" - # we need root from here on mkdir -p $tombmount t@@ -641,7 +596,7 @@ mount_tomb() { act "encrypted storage filesystem check" fsck -p -C0 /dev/mapper/${mapper} - act "tomb engraved as $tombname" + func "tomb engraved as $tombname" tune2fs -L ${tombname} /dev/mapper/${mapper} > /dev/null mount -o $MOUNTOPTS /dev/mapper/${mapper} ${tombmount} t@@ -1067,7 +1022,7 @@ list_tombs() { tombused=${ts[(ws:;:)2]} tombavail=${ts[(ws:;:)3]} tombpercent=${ts[(ws:;:)4]} - tombp=${tombpercent%%%} + tombp=${tombpercent%%%} tombsince=`date --date=@${mapper[(ws:.:)3]} +%c` # breaking up such strings is good for translation t@@ -1078,29 +1033,31 @@ list_tombs() { print "$fg_bold[white]$tombfs $tombfsopts" print -n "$fg_no_bold[green]$tombname" + print -n "$fg_no_bold[white] open since " + print "$fg_bold[white]$tombsince$fg_no_bold[white]" + + print -n "$fg_no_bold[green]$tombname" print -n "$fg[white] size " print -n "$fg_bold[white]$tombtot" print -n "$fg_no_bold[white] of which " print -n "$fg_bold[white]$tombused" - print -n "$fg_no_bold[white] used " + print -n "$fg_no_bold[white] used: " print -n "$fg_bold[white]$tombavail" print -n "$fg_no_bold[white] free (" print -n "$fg_bold[white]$tombpercent" print "$fg_no_bold[white] full)" - if [[ ${tombp} -ge 90 ]]; then - error "Your tomb is almost full!" - fi + if [[ ${tombp} -ge 90 ]]; then + print -n "$fg_no_bold[green]$tombname" + print "$fg_bold[red] Your tomb is almost full!" + fi - print -n "$fg_no_bold[green]$tombname" - print -n "$fg_no_bold[white] open since " - print "$fg_bold[white]$tombsince$fg_no_bold[white]" # now check hooks mtomb=`sed 's:\/:\\\/:g' <<< $tombmount` mounted_hooks=`mount | awk "/^$mtomb/"' {print $1 ";" $3}'` for h in ${(f)mounted_hooks}; do - print -n "$fg[green]$tombname" + print -n "$fg_no_bold[green]$tombname" print -n "$fg_no_bold[white] hooks " print -n "$fg_bold[white]`basename ${h[(ws:;:)1]}`" print -n "$fg_no_bold[white] on "