URI: 
       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 "