tupdated extras/gtomb to latest by parazyd - tomb - the crypto undertaker
 (HTM) git clone git://parazyd.org/tomb.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 88f5a926f041b648339083c62d7f5c477edbf35d
 (DIR) parent 7b72f07f96265e04656f27d83a2e20102b5ae6d9
 (HTM) Author: Jaromil <jaromil@dyne.org>
       Date:   Thu, 29 Dec 2016 17:29:15 +0100
       
       updated extras/gtomb to latest by parazyd
       
       Diffstat:
         M extras/gtomb/LICENSE                |       3 ++-
         M extras/gtomb/README.md              |       4 ++--
         M extras/gtomb/gtomb                  |     832 ++++++++++++-------------------
       
       3 files changed, 330 insertions(+), 509 deletions(-)
       ---
 (DIR) diff --git a/extras/gtomb/LICENSE b/extras/gtomb/LICENSE
       t@@ -1,11 +1,12 @@
        gtomb - A GUI wrapper for Tomb, the crypto undertaker
       -Copyright (C) 2015 Parazyd <parazyd AT dyne DOT org>
       +Copyright (C) 2015-2016 Parazyd <parazyd@dyne.org>
        
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.
        
       +
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 (DIR) diff --git a/extras/gtomb/README.md b/extras/gtomb/README.md
       t@@ -11,7 +11,7 @@ list and the script will run it for you. Easy-peasy.
        
        ### Random notes
        * If you type in your sudo password once correctly, in the next 5 (or whatever your sudoers timeout is) minutes, you can type in the wrong password as well.
       -* The function for catching cancellation sometimes fails because of bad ps syntax. No idea why yet.
       +* The function for catching cancellation sometimes fails because of bad ps syntax. (Possibly fixed, needs more testing)
        
        ## Dependencies
        * [tomb](https://github.com/dyne/Tomb) (also get tomb's dependencies)
       t@@ -19,8 +19,8 @@ list and the script will run it for you. Easy-peasy.
        
        ## TODO
        * Complete error checking
       -* Figure out why ps fails sometimes
        * and more stuff 
        
        ## What you need to do
        * Be patient or help with coding :)
       +* Request features
 (DIR) diff --git a/extras/gtomb/gtomb b/extras/gtomb/gtomb
       t@@ -1,43 +1,32 @@
        #!/usr/bin/env zsh
        #
       -# gtomb - a GUI wrapper for Tomb 
       -# 
       -# Maintained and written by parazyd <parazyd AT dyne DOT org>
       -# https://github.com/parazyd/gtomb
       -# https://github.com/dyne/Tomb
       +# Copyright (c) 2015-2016 parazyd
       +# gtomb is written and maintained by parazyd <parazyd@dyne.org>
        #
       -# gtomb is experimental software. It still does not work completely as 
       -# intended and should be used with caution.
       +# This file is part of gtomb
        #
       -# {{{ License
       -# gtomb - A GUI wrapper for Tomb, the crypto undertaker
       -# Copyright (C) 2015 Parazyd <parazyd AT dyne DOT org>
       -#
       -# This program is free software: you can redistribute it and/or modify
       +# This source code is free software: you can redistribute it and/or modify
        # it under the terms of the GNU General Public License as published by
        # the Free Software Foundation, either version 3 of the License, or
        # (at your option) any later version.
        #
       -# This program is distributed in the hope that it will be useful,
       +# This software is distributed in the hope that it will be useful,
        # but WITHOUT ANY WARRANTY; without even the implied warranty of
       -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
       +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        # GNU General Public License for more details.
        #
        # You should have received a copy of the GNU General Public License
       -# along with this program. If not, see http://www.gnu.org/licenses/
       -#
       -# }}}
       +# along with this source code. If not, see <http://www.gnu.org/licenses/>.
        
       -#set -x
       -#set -v
       -ver="0.6.2"
       -TOMBPATH="/usr/bin/tomb" # Set this to your tomb executable's path
       -KDFPATH="/usr/bin/" # Set this to the path of your KDF binaries (if you're using them)
       +ver="0.8"
       +TOMBPATH="/usr/local/bin/tomb" # Set this to your tomb executable's path
       +KDFPATH="/usr/local/bin/" # Set this to the path of your KDF binaries (if you're using them)
        # The ones below should not need changing
        HEXENC="$KDFPATH/tomb-kdb-hexencode"
        GENSALT="$KDFPATH/tomb-kdb-pbkdf2-gensalt"
        GETITER="$KDFPATH/tomb-kdb-pbkdf2-getiter"
        PBKDF="$KDFPATH/tomb-kdb-pbkdf2"
       +_DD=/bin/dd
        
        # {{{ monmort icon
        MONMORT="/tmp/monmort.png"
       t@@ -52,15 +41,19 @@ b2RpZnkAMjAxMS0wMS0xMlQwOTozNDoyNCswMTowMNKiZVMAAAAASUVORK5CYII="
        echo -e "$ICONB64" | base64 --decode > $MONMORT
        # }}}
        
       -function _ { _clean } # I like cleaning :)
       +# {{{ sudo functions
       +function _sudo {
       +    sudoassword=$(ask_password "Insert sudo password for user $USER")
       +    echo -e "$sudoassword\n" | sudo -S -v
       +    _sudowrong
       +}
        
       -# {{{ sudo function
        function _sudowrong {
       -    if [[ $? == 1 ]]; then
       +    [[ $? = 0 ]] || {
                sudoassword=$(ask_password "Wrong password. Insert sudo password for user $USER")
                echo -e "$sudoassword\n" | sudo -S -v
                _sudowrong
       -    fi
       +    }
        }
        # }}}
        
       t@@ -71,7 +64,6 @@ function _zenques {
                --question \
                --text="$1"
        }
       -
        function _fsel {
            zenity \
                --window-icon="$MONMORT" \
       t@@ -93,6 +85,21 @@ function _zenwarn {
                --title="$1" \
                --text="$2"
        }
       +function _info {
       +    which notify-send > /dev/null
       +    if [[ $? == "0" ]]; then
       +        _zenotif $*
       +    else
       +        _zeninfo $*
       +    fi
       +}
       +function _zenotif {
       +    zenity \
       +        --window-icon="$MONMORT" \
       +        --notification \
       +        --title="$1" \
       +        --text="$2"
       +}
        function _zeninfo {
            zenity \
                --window-icon="$MONMORT" \
       t@@ -141,7 +148,6 @@ function _zenentry {
        # Wraps around the pinentry command, from the GnuPG project, as it
        # provides better security and conveniently use the right toolkit.
        ask_password() {
       -
            local description="$1"
            local title="${2:-Enter tomb password.}"
            local output
       t@@ -299,22 +305,19 @@ function _failure die() {
        
        # {{{ _clean - Clean function, removes sensitive stuff from memory
        function _clean {
       -    
       -    echo "Cleaning..." # For debugging.
            unset $?
            local rr="$RANDOM"
            while [[ ${#rr} -lt 500 ]]; do
                rr+="$RANDOM"
            done
        
       -    command="$rr";      unset command
       +    cmnd="$rr";         unset cmnd
            tombname="$rr";     unset tombname
            tombsize="$rr";     unset tombsize
            keyfile="$rr";      unset keyfile
            sudoassword="$rr";  unset sudoassword
       -    tombtmp=/tmp/tombtmp
       -    if [ -f $tombtmp ]
       -    then
       +    tombtmp="/tmp/tombtmp"
       +    if [ -f $tombtmp ]; then
                dd if=/dev/urandom of=$tombtmp bs=800 count=1
                rm -f $tombtmp
            fi
       t@@ -327,7 +330,7 @@ function _clean {
        # {{{ _main - Main window
        function _main {
            _clean
       -    command=`zenity \
       +    cmnd=`zenity \
                --window-icon="$MONMORT" \
                --title="gtomb" \
                --width=640 \
       t@@ -353,222 +356,157 @@ function _main {
                "engrave" "Generates a QR code of a key to be saved on paper" \
                "bury" "Hide a key inside a JPEG image" \
                "exhume" "Extract a key from a JPEG image"`
       -
       -    eval "_$command"
       +    eval "_$cmnd"
        }
        # }}}
        
        # {{{ dig - Dig a new tomb
        function _dig {
       -
            tombname=`_fsave "Choose where to dig your tomb" "secret.tomb"`
       -
            res=$?
        
       -    if [[ -f $tombname ]]; then
       +    if [[ -f "$tombname" ]]; then
                _zenerr "Error" "This tomb already exists. I am not digging here."
                exec _main
       -    elif [[ $tombname == "" ]]; then
       -        _zenwarn "Warning" "Try again."
       +    elif [[ -z "$tombname" ]]; then
       +        _info "gtomb" "Cancelled"
                exec _main
            fi
        
       -    case $res in
       -        0)
       -            tombsize=`_zenentry "Tomb digging" "Enter the size of your tomb in MiB (min. 10 MiB)" "10"`
       +        [[ $res = 0 ]] || exec _main
        
       -            res=$?
       +        tombsize=`_zenentry "Tomb digging" "Enter the size of your tomb in MiB (min. 10 MiB)" "10"`
       +        res=$?
        
       -            re='^[0-9]+$'
       -            if ! [[ $tombsize =~ $re ]]; then
       -                _zenerr "Error" "Please choose a valid number."
       -                exec _main
       -            elif [[ $tombsize == "" ]]; then
       -                _zenwarn "Warning" "Try again."
       -                exec _main
       -            fi
       +        re='^[0-9]+$'
       +        if ! [[ $tombsize =~ $re ]]; then
       +                _zenerr "Error" "Please choose a valid number."
       +                exec _main
       +        elif [[ -z $tombsize ]]; then
       +                _info "gtomb" "Cancelled"
       +                exec _main
       +        fi
        
       -            case $res in
       -                0)
       -                    $TOMBPATH dig -s $tombsize $tombname | \
       -                        _zenprog "Digging new tomb" "Please wait while your tomb is being dug..." &
       -
       -                    PID_ZEN=$(ps -C zenity h -o pid,command | grep "Digging new tomb" | awk '{print $1}')
       -
       -                    while [ "$PID_ZEN" != "" ]; do
       -                        PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
       -                        PID_DD=$(ps -C dd h -o pid,command | grep "$tombname" | awk '{print $1}')
       -                        sleep 1
       -                    done
       -
       -                    if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then
       -                        kill -9 $PID_DD
       -                        _zenwarn "Warning" "Tomb digging canceled."
       -                        rm -f $tombname
       -                        exec _main
       -                    fi
       -
       -                    _clean
       -                    _zeninfo "Success" "Your tomb has been dug."
       -                    exec _main
       -                    ;;
       -                1)
       -                    _zenwarn "Warning" "Tomb digging canceled."
       -                    exec _main
       -                    ;;
       -            1)
       -                exec _main
       -                ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        [[ $res = 0 ]] || { _zenwarn "Warning" "Tomb digging canceled." ; exec _main }
       +
       +        "$TOMBPATH" dig -s "$tombsize" "$tombname" | \
       +                _zenprog "Digging new tomb" "Please wait while your tomb is being dug..." &
       +
       +        PID_ZEN=$(ps -C zenity h -o pid,command | awk '/Digging new tomb/ {print $1}')
       +        while [ -n "$PID_ZEN" ]; do
       +                PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
       +                PID_DD=$(ps -C $_DD h -o pid,command | awk -v tombtmp="$tombname" '$0~tombtmp{print $1}')
       +                sleep 1
       +        done
       +
       +        [[ -n "$PID_DD" && -z "$PID_ZEN" ]] && {
       +                kill -9 $PID_DD
       +                _zenwarn "Warning" "Tomb digging cancelled."
       +                rm -f "$tombname"
       +                exec _main
       +        }
       +
       +        _info "Success" "Your tomb has been dug in $tombname"
       +        exec _main
        }
        # }}}
        
        # {{{ forge - Forge a new key
        function _forge {
            keyfile=`_fsave "Choose where to forge your key" "secret.tomb.key"`
       -    
            res=$?
        
            if [[ -f $keyfile ]]; then
                _zenerr "Error" "This key already exists. I am not overwriting."
                exec _main
       -    elif [[ $keyfile == "" ]]; then
       -        _zenwarn "Warning" "Try again."
       +    elif [[ -z $keyfile ]]; then
       +        _info "gtomb" "Canceled"
                exec _main
            fi
        
       -    if [[ -f $HEXENC ]] && [[ -f $GENSALT ]] && [[ -f $GETITER ]] && [[ -f $PBKDF ]]; then
       -        kdf=""
       -        kdfiter=""
       -        _zenques "Do you want to use KDF? (Generates passwords armored against dictionary attacks)" 
       -        if [[ $? == "0" ]]; then
       +    kdf=""
       +    kdfiter=""
       +    if [[ -x $HEXENC ]] && [[ -x $GENSALT ]] && [[ -x $GETITER ]] && [[ -x $PBKDF ]]; then
       +        _zenques "Do you want to use KDF? (Generates passwords armored against dictionary attacks)"
       +        [[ $? == "0" ]] && {
                    kdf="--kdf"
       -            kdfiter=`_zenentry "Iterations" "Enter the delay (itertime) in seconds for each time this key is used:" "2"`
       -        fi
       -    fi
       +            kdfiter=`_zenentry "Iterations" "Enter the delay (itertime) in seconds for each time \n\
       +this key is used:" "2"`
        
       -    case $res in
       -        0)
       -            $TOMBPATH forge $keyfile $kdf $kdfiter | \
       -                _zenprog "Forging key" "Please wait while your key is being forged...\n\
       -You can move your mouse around and use your computer to speed up the process." &
       -
       -            PID_ZEN=$(ps -C zenity h -o pid,command | grep "Forging key" | awk '{print $1}')
       -
       -            while [ "$PID_ZEN" != "" ]; do
       -                PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
       -                PID_DD=$(ps -C dd h -o pid,command | grep " if=" | awk '{print $1}')
       -                sleep 1
       -            done
       -
       -            if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then
       -                kill -9 $PID_DD
       -                _zenwarn "Warning" "Forging canceled."
       -                rm -f $keyfile
       +            re='^[0-9]+$'
       +            if ! [[ $kdfiter =~ $re ]]; then
       +                _zenerr "Error" "Please choose a valid number."
       +                exec _main
       +            elif [[ -z $kdfiter ]]; then
       +                _info "gtomb" "Canceled"
                        exec _main
                    fi
       +        }
       +    else
       +        _zenotif "gtomb" "KDF binaries not found."
       +    fi
       +
       +        [[ $? = 0 ]] || exec _main
       +
       +        "$TOMBPATH" forge "$keyfile" "$kdf" "$kdfiter" | \
       +                _zenprog "Forging key" "Please wait while your key is being forged...\n\
       +You can move your mouse around and use your computer to speed up the process." &
        
       -            _clean
       -            _zeninfo "Success" "Your key is now forged."
       -            exec _main
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        PID_ZEN=$(ps -C zenity h -o pid,command | awk '/Forging key/ {print $1}')
       +        while [ -n "$PID_ZEN" ]; do
       +                PID_ZEN=$(ps h -o pid -p ${PID_ZEN})
       +                PID_DD=$(ps -C $_DD h -o pid,command | awk '/ if/ {print $1}')
       +                sleep 1
       +        done
       +        [[ -n "$PID_DD"  && -z "$PID_ZEN" ]] && {
       +                kill -9 $PID_DD
       +                _zenwarn "Warning" "Forging cancelled."
       +                rm -f $keyfile
       +                exec _main
       +        }
       +
       +        _info "Success" "Your key is now forged in $keyfile"
       +        exec _main
        }
        # }}}
        
        # {{{ lock - Lock a non-locked tomb
        function _lock {
            tombname=`_fsel "Select a tomb to lock"`
       +    [[ -n $tombname ]] || { _zenotif "gtomb" "Cancelled" ; exec _main }
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    
       -    if [[ $tombname == "" ]]; then
       -        _zenwarn "Warning" "Try again."
       -        exec _main
       -    fi
       -    
       -    case $res in
       -        0)
       -            keyfile=`_fsel "Choose the key for your tomb"`
       +        keyfile=`_fsel "Choose the key for your tomb"`
       +        [[ -n $keyfile ]] || { _zenotif "gtomb" "Cancelled" ; exec _main }
       +        [[ $? = 0 ]] || exec _main
        
       -            res=$?
       -
       -            if [[ $keyfile == "" ]]; then
       -                _zenwarn "Warning" "Try again."
       -                exec _main
       -            fi
       -
       -            case $res in
       -                0)  
       -                    sudoassword=$(ask_password "Insert sudo password for user $USER")
       -                    echo -e "$sudoassword\n" | sudo -S -v
       -                    _sudowrong
       -
       -                    $TOMBPATH lock $tombname -k $keyfile | \
       -                        _zenprognc "Locking your tomb" "Please wait while your tomb is being locked..."
       -                    
       -                    _clean # Clean sensitive stuff from memory
       -                    _zeninfo "Success" "Your tomb is now locked."
       -                    exec _main
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        _sudo
       +        "$TOMBPATH" lock "$tombname" -k "$keyfile" | \
       +                _zenprognc "Locking your tomb" "Please wait while your tomb is being locked..."
       +        _info "Success" "Your tomb is now locked."
       +        exec _main
        }
        # }}}
        
        # {{{ open - Open an existing tomb
        function _open {
            tombname=`_fsel "Choose a tomb to open"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            keyfile=`_fsel "Choose the key for your tomb"`
       -
       -            res=$?
       -            case $res in
       -                0)
       -                    sudoassword=$(ask_password "Insert sudo password for user $USER")
       -                    echo -e "$sudoassword\n" | sudo -S -v
       -                    _sudowrong
       -
       -                    $TOMBPATH open $tombname -k $keyfile
       -
       -                    _clean # Clean sensitive stuff from memory
       -                    _zeninfo "Success" "Your tomb is now open."
       -                    exec _main
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        keyfile=`_fsel "Choose the key for your tomb"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        _sudo
       +        "$TOMBPATH" open "$tombname" -k "$keyfile"
       +        _info "Success" "Your tomb is now open."
       +        exec _main
        }
        # }}}
        
        # {{{ list - list all open tombs, along with their mountpoint
        function _list {
            tombtmp="/tmp/tombtmp"
       -    $TOMBPATH list --get-mountpoint > $tombtmp
       +    "$TOMBPATH" list --get-mountpoint > $tombtmp
            tombname=`cat $tombtmp | \
                sed 's/.*\/\([^\/]*\)$/\1\n &/' | \
                zenity \
       t@@ -580,98 +518,85 @@ function _list {
                    --column=Tomb \
                    --column=Path `
        
       -    res=$?
       -    case $res in
       -        0)
       -            listchoice=`zenity \
       -                --title="Choose action" \
       -                --window-icon="$MONMORT" \
       -                --width=640 --height=400 --list \
       -                --separator=" & " \
       -                --text="What do you want to do with this tomb?" \
       -                --column=Command \
       -                --column=Description \
       -                "disindex" "Disable indexing of this tomb." \
       -                "enindex" "Enable indexing of this tomb."   \
       -                "close" "Close the selected tomb." \
       -                "slam" "Slam the selected tomb." \
       -                "binds" "Edit current bind-hooks." \
       -                "posts" "Edit current post-hooks."`
       -
       -            if [[ $? == 1 ]]; then
       -                exec _main
       -            fi
       -
       -            case $listchoice in
       -                close)
       -                    sudoassword=$(ask_password "Insert sudo password for user $USER") 
       -                    echo -e "$sudoassword\n" | sudo -S -v
       -                    _sudowrong
       -
       -                    $TOMBPATH close $tombname
       -                    _zeninfo "Success" "Tomb closed successfully!"
       -                    exec _main
       -                    ;;
       -                slam)
       -                    sudoassword=$(ask_password "Insert sudo password for user $USER") 
       -                    echo -e "$sudoassword\n" | sudo -S -v
       -                    _sudowrong
       -
       -                    $TOMBPATH slam $tombname
       -                    _zeninfo "Success" "Tomb slammed successfully!"
       -                    exec _main
       -                    ;;
       -                disindex)
       -                    tombloc=`$TOMBPATH list $tombname --get-mountpoint`
       -                    touch "$tombloc/.noindex"
       -                    _zeninfo "Success" "Indexing disabled for this tomb."
       -                    exec _main
       -                    ;;
       -                enindex)
       -                    tombloc=`$TOMBPATH list $tombname --get-mountpoint`
       -                    rm "$tombloc/.noindex"
       -                    _zeninfo "Success" "Indexing of this tomb is enabled."
       -                    exec _main
       -                    ;;
       -                binds)
       -                    tombloc=`$TOMBPATH list $tombname --get-mountpoint` 
       -                    bindhooks=`zenity \
       -                        --text-info \
       -                        --filename="$tombloc/bind-hooks" \
       -                        --editable`
       -                    if [[ $? == "0" ]]; then
       -                        echo "$bindhooks" > "$tombloc/bind-hooks"
       -                    fi
       -                    exec _main
       -                    ;;
       -                posts)
       -                    tombloc=`$TOMBPATH list $tombname --get-mountpoint`
       -                    
       -                    posthooks=`zenity \
       -                        --text-info \
       -                        --filename="$tombloc/post-hooks" \
       -                        --editable`
       -                    if [[ $? == "0" ]]; then
       -                        echo "$posthooks" > "$tombloc/post-hooks"
       -                        chmod +x $tombloc/post-hooks
       -                    fi
       -                    exec _main
       -                    ;;
       -  
       -                # See what else to add
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +    tombname=`echo "$tombname" | cut -c1-16`
       +
       +        [[ $? = 0 ]] || exec _main
       +
       +        listchoice=`zenity \
       +                --title="Choose action" \
       +                --window-icon="$MONMORT" \
       +                --width=640 --height=400 --list \
       +                --separator=" & " \
       +                --text="What do you want to do with this tomb?" \
       +                --column=Command \
       +                --column=Description \
       +                "disindex" "Disable indexing of this tomb." \
       +                "enindex" "Enable indexing of this tomb."   \
       +                "close" "Close the selected tomb." \
       +                "slam" "Slam the selected tomb." \
       +                "binds" "Edit current bind-hooks." \
       +                "posts" "Edit current post-hooks."`
       +
       +        [[ $? = 0 ]] || exec _main
       +
       +        case $listchoice in
       +                close)
       +                        _sudo
       +                        "$TOMBPATH" close "$tombname"
       +                        _zeninfo "Success" "Tomb closed successfully!"
       +                        exec _main
       +                        ;;
       +                slam)
       +                        _sudo
       +                        "$TOMBPATH" slam "$tombname"
       +                        _info "Success" "$tombname slammed successfully!"
       +                        exec _main
       +                        ;;
       +                disindex)
       +                        tombloc=`"$TOMBPATH" list "$tombname" --get-mountpoint`
       +                        touch "$tombloc/.noindex"
       +                        _info "Success" "Indexing disabled for this tomb."
       +                        exec _main
       +                        ;;
       +                enindex)
       +                        tombloc=`"$TOMBPATH" list "$tombname" --get-mountpoint`
       +                        rm -f "$tombloc/.noindex"
       +                        _info "Success" "Indexing of this tomb is now enabled."
       +                        exec _main
       +                        ;;
       +                binds)
       +                        tombloc=`"$TOMBPATH" list "$tombname" --get-mountpoint`
       +                        bindhooks=`zenity \
       +                                --text-info \
       +                                --filename="$tombloc/bind-hooks" \
       +                                --editable`
       +                        [[ $? = 0 ]] && {
       +                                echo "$bindhooks" > "$tombloc/bind-hooks"
       +                                _info "gtomb" "bind-hooks saved"
       +                        }
       +                        exec _main
       +                        ;;
       +                posts)
       +                        tombloc=`"$TOMBPATH" list "$tombname" --get-mountpoint`
       +                        posthooks=`zenity \
       +                                --text-info \
       +                                --filename="$tombloc/post-hooks" \
       +                                --editable`
       +                        [[ $? = 0 ]] && {
       +                                echo "$posthooks" > "$tombloc/post-hooks"
       +                                chmod +x "$tombloc/post-hooks"
       +                                _info "gtomb" "post-hooks saved"
       +                        }
       +                        exec _main
       +                        ;;
       +        esac
        }
        # }}}
        
        # {{{ close - Close open tomb(s)
        function _close {
            tombtmp="/tmp/tombtmp"
       -    $TOMBPATH list --get-mountpoint > $tombtmp
       +    "$TOMBPATH" list --get-mountpoint > $tombtmp
            echo "/all" >> $tombtmp
            tombname=`cat $tombtmp | \
                sed 's/.*\/\([^\/]*\)$/\1\n &/' | \
       t@@ -683,30 +608,20 @@ function _close {
                    --column=Tomb \
                    --column=Path `
        
       -        res=$?
       -        case $res in
       -            0)
       -                sudoassword=$(ask_password "Insert sudo password for user $USER")
       -                echo -e "$sudoassword\n" | sudo -S -v
       -                _sudowrong
       +        [[ $? = 0 ]] || exec _main
        
       -                $TOMBPATH close $tombname
       -
       -                _clean # Clean sensitive stuff from memory
       -                _zeninfo "Success" "Tomb(s) closed successfully!"
       -                exec _main
       -                ;;
       -            1)
       -                exec _main
       -                ;;
       -        esac
       +        _sudo
       +        tombname=`echo "$tombname" | cut -c1-16`
       +        "$TOMBPATH" close "$tombname"
       +        _info "Success" "Closed successfully!"
       +        exec _main
        }
        # }}}
        
        # {{{ slam - Slam open tombs
        function _slam {
            tombtmp="/tmp/tombtmp"
       -    $TOMBPATH list --get-mountpoint > $tombtmp
       +    "$TOMBPATH" list --get-mountpoint > $tombtmp
            echo "/all" >> $tombtmp
            tombname=`cat $tombtmp | \
                sed 's/.*\/\([^\/]*\)$/\1\n &/' | \
       t@@ -717,238 +632,137 @@ function _slam {
                    --separator=" & " \
                    --column=Tomb \
                    --column=Path `
       -            
       -    res=$?
       -    case $res in
       -        0)
       -            sudoassword=$(ask_password "Insert sudo password for user $USER")
       -            echo -e "$sudoassword\n" | sudo -S -v
       -            _sudowrong
       -
       -            $TOMBPATH slam $tombname
       -
       -            _clean # Clean sensitive stuff from memory
       -            _zeninfo "Success" "Tomb(s) slammed successfully!"
       -            exec _main
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +
       +        [[ $? = 0 ]] || exec _main
       +
       +        _sudo
       +        tombname=`echo "$tombname" | cut -c1-16`
       +        "$TOMBPATH" slam "$tombname"
       +        _info "Success" "Slammed successfully!"
       +        exec _main
        }
        # }}}
        
        # {{{ resize - Resize an existing *closed* tomb
        function _resize {
            tombname=`_fsel "Choose a tomb to resize"`
       -
            res=$?
       -    case $res in
       -        0)
       -            tombsize=`_zenentry "New tomb size" "Enter the new size of your tomb in MiB. Must be higher than the current size." "100"`
       -
       -            res=$?
       -            case $res in
       -                0)
       -                    keyfile=`_fsel "Choose according keyfile"`
       -
       -                    res=$?
       -                    case $res in
       -                        0)
       -                            sudoassword=$(ask_password "Insert sudo password for user $USER")
       -                            echo -e "$sudoassword\n" | sudo -S -v
       -                            _sudowrong
       -
       -                            $TOMBPATH resize $tombname -s $tombsize -k $keyfile | \
       -                                _zenprognc "Resizing tomb." "Please wait while your tomb is being resized..."
       -
       -                            _clean # Clean sensitive stuff from memory
       -                            _zeninfo "Success" "Tomb resized successfully!"
       -                            exec _main
       -                            ;;
       -                        1)
       -                            exec _main
       -                            ;;
       -                    esac
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +    _zenques "Is your tomb closed?"
       +
       +        [[ $? = 0 ]] || { _zenwarn "gtomb" "Please close the tomb before resizing." ; exec _main }
       +
       +        [[ $res = 0 ]] || exec _main
       +
       +        tombsize=`_zenentry "New tomb size" "Enter the new size of your tomb in MiB. Must be higher than the current size." "100"`
       +        [[ -n $tombsize ]] || _zenotif "gtomb" "Cancelled"
       +
       +        re='^[0-9]+$'
       +        if ! [[ $tombsize =~ $re ]]; then
       +                _zenerr "Error" "Please choose a valid number."
       +                exec _main
       +        elif [[ -z $tombsize ]]; then
       +                _info "gtomb" "Cancelled"
       +                exec _main
       +        fi
       +
       +        [[ $? = 0 ]] || exec _main
       +
       +        keyfile=`_fsel "Choose according keyfile"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        _sudo
       +        "$TOMBPATH" resize "$tombname" -s "$tombsize" -k "$keyfile" | \
       +                _zenprognc "Resizing tomb." "Please wait while your tomb is being resized..."
       +        _info "Success" "Tomb resized successfully!"
       +        exec _main
        }
        # }}}
        
        # {{{ passwd - Change existing key's passphrase
        function _passwd {
            keyfile=`_fsel "Choose a keyfile"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            $TOMBPATH passwd -k $keyfile | \
       -                _zenprognc "Changing passphrase" "Please wait while your key's passphrase is being changed..."
       -            
       -            _clean # Clean sensitive stuff from memory
       -            _zeninfo "Success" "Passphrase changed successfully!"
       -            exec _main
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        "$TOMBPATH" passwd -k "$keyfile" | \
       +                _zenprognc "Changing passphrase" "Please wait while your key's passphrase is being changed..."
       +
       +        _info "Success" "$keyfile passphrase changed successfully!"
       +        exec _main
        }
        # }}}
        
        # {{{ setkey - Change a tomb's keyfile
        function _setkey {
            tombname=`_fsel "Choose a tomb to change its keyfile"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            keyfile=`_fsel "Chosse your tomb's old keyfile"`
       -
       -            res=$?
       -            case $res in
       -                0)
       -                    newkey=`_fsel "Choose your tomb's new keyfile"`
       -
       -                    res=$?
       -                    case $res in
       -                        0)
       -                            sudoassword=$(ask_password "Insert sudo password for $USER")
       -                            echo -e "$sudoassword\n" | sudo -S -v
       -                            _sudowrong
       -
       -                            $TOMBPATH setkey -k $newkey $keyfile $tombname | \
       -                                _zenprognc "Changing key" "Please wait while your tomb's key is being changed..."
       -
       -                            _clean
       -                            _zeninfo "Success" "Tomb's keyfile successfully changed!"
       -                            exec _main
       -                            ;;
       -                        1)
       -                            exec _main
       -                            ;;
       -                    esac
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        keyfile=`_fsel "Chosse your tomb's old keyfile"`
       +         [[ $? = 0 ]] || exec _main
       +
       +        newkey=`_fsel "Choose your tomb's new keyfile"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        _sudo
       +    "$TOMBPATH" setkey -k "$newkey" "$keyfile" "$tombname" | \
       +                _zenprognc "Changing key" "Please wait while your tomb's key is being changed..."
       +
       +        _info "Success" "$tombname keyfile successfully changed! Now using $newkey"
       +    exec _main
        }
        # }}}
        
        # {{{ engrave - generate QR code of a key
        function _engrave {
       -    which qrencode || _zenwarn "Warning" "qrencode is not installed. Install it and try again" && exec _main
       +    which qrencode || _zenwarn "Warning" "qrencode is not installed. Install it and try again"
            keyfile=`_fsel "Choose a keyfile to engrave"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            jpegfile=`_fsave "Choose where to save your keyfile (PNG format)"`
       -            
       -            res=$?
       -            case $res in
       -                0)
       -                    awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $keyfile \
       -                        | qrencode --size 4 --level H --casesensitive -o $jpegfile
       -                    
       -                    _zeninfo "Success" "QR code generated in $jpegfile"
       -                    exec _main
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        jpegfile=`_fsave "Choose where to save your keyfile (PNG format)"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        awk '/^-----/ {next}; /^Version/ {next}; {print $0}' $keyfile \
       +                | qrencode --size 4 --level H --casesensitive -o $jpegfile
       +
       +        _info "Success" "QR code generated in $jpegfile"
       +        exec _main
        }
        # }}}
        
        # {{{ bury - hide a keyfile in a JPEG image
        function _bury {
       -    which steghide || _zenwarn "Warning" "steghide is not installed. Install it and try again" && exec _main
       +    which steghide || _zenwarn "Warning" "steghide is not installed. Install it and try again"
            keyfile=`_fsel "Choose keyfile"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            jpegfile=`_fsel "Choose JPEG file"`
       -
       -            res=$?
       -            case $res in
       -                0)
       -                    $TOMBPATH bury -k $keyfile $jpegfile
       -
       -                    _zeninfo "Success" "Your key is now hidden in $jpegfile"
       -                    _clean # Clean sensitive stuff from memory
       -                    exec _main
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        jpegfile=`_fsel "Choose JPEG file"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        "$TOMBPATH" bury -k "$keyfile" "$jpegfile"
       +        _info "Success" "Your key is now hidden in $jpegfile"
       +        exec _main
        }
        # }}}
        
        # {{{ exhume - extract keyfile from JPEG
        function _exhume {
       -    which steghide || _zenwarn "Warning" "steghide is not installed. Install it and try again" && exec _main
       +    which steghide || _zenwarn "Warning" "steghide is not installed. Install it and try again"
            jpegfile=`_fsel "Choose JPEG file"`
       +        [[ $? = 0 ]] || exec _main
        
       -    res=$?
       -    case $res in
       -        0)
       -            keyfile=`_fsave "Choose where to extract your key"`
       -
       -            res=$?
       -            case $res in
       -                0)
       -                    $TOMBPATH exhume -k $keyfile $jpegfile
       -
       -                    _zeninfo "Success" "Your keyfile is extracted to $keyfile"
       -                    _clean # Clean sensitive stuff from memory
       -                    exec _main
       -                    ;;
       -                1)
       -                    exec _main
       -                    ;;
       -            esac
       -            ;;
       -        1)
       -            exec _main
       -            ;;
       -    esac
       +        keyfile=`_fsave "Choose where to extract your key"`
       +        [[ $? = 0 ]] || exec _main
       +
       +        "$TOMBPATH" exhume -k "$keyfile" "$jpegfile"
       +        _info "Success" "Your keyfile is extracted to $keyfile"
       +        exec _main
        }
        # }}}
        
        # {{{ index - index the contents of open tombs
        function _index {
       -    which mlocate || _zenwarn "Warning" "mlocate is not installed. Install it and try again" && exec _main
       -
       -    $TOMBPATH index | _zenprognc "Indexing" "Please wait while the open tombs are being indexed..."
       -    _zeninfo "Success" "Tombs indexed!"
       -    
       +    which locate || _zenwarn "Warning" "mlocate is not installed. Install it and try again"
       +    "$TOMBPATH" index | _zenprognc "Indexing" "Please wait while the open tombs are being indexed..."
       +    _info "Success" "Tombs indexed!"
            exec _main
        }
        # }}}
       t@@ -956,30 +770,36 @@ function _index {
        # {{{ search - searches the contents of indexed tombs
        function _search {
            strings=""
       -
       -    function _searchstring {
       -        srchstring=`_zenentry "Search" "Enter an argument to search. Cancel to finish."`
       -        res=$?
       -        strings="$strings $srchstring"
       -        
       -        if [[ $res == "1" ]]; then
       -            tombtmp="/tmp/tombtmp"
       -            $TOMBPATH search $strings > $tombtmp
       -            #cat $tombtmp | \
       -                zenity \
       -                    --text-info \
       -                    --title="Search results" \
       -                    --filename=$tombtmp
       -        else
       -            _searchstring
       -        fi
       -    }
            _searchstring
       +    exec _main
       +}
       +
       +function _searchstring {
       +        srchstring=`_zenentry "Search" "Enter an argument to search. Cancel to finish."`
       +        res=$?
       +        strings="$strings $srchstring"
       +
       +        if [[ $res = 1 ]]; then
       +                tombtmp="/tmp/tombtmp"
       +                _info "Success" "Search complete!"
       +                "$TOMBPATH" search "$strings" > $tombtmp
       +                        zenity \
       +                                --text-info \
       +                                --width=800 --height=640 \
       +                                --title="Search results" \
       +                                --filename=$tombtmp
       +        else
       +                _searchstring
       +        fi
        }
       +
       +
        # }}}
        
       -if [ ! -f $TOMBPATH ]; then
       -    _zenwarn "Warning" "Tomb binary is nonexistent in the current path. Install it or edit the script to point to the correct path."
       -else
       -    _main
       -fi
       +function _ { _clean } # I like cleaning :)
       +
       +[[ -x $TOMBPATH ]] || {
       +    _zenwarn "Warning" "Tomb binary is not executable or doesn't exist in the current path. Install it or edit the script to point to the correct path."
       +        exit 1 }
       +
       +_main