tcommented and finished _dig - gtomb - tomb gtk frontend in zenity HTML git clone git://parazyd.org/gtomb.git DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit ec063ed4c349e80c2fc323e6044fcec25605da3f DIR parent b4342de039fb39c7f89d7118991222c75357e28d HTML Author: parazyd <parazyd@dyne.org> Date: Sun, 13 Dec 2015 22:11:39 +0100 commented and finished _dig Diffstat: M README.md | 4 ++-- M gtomb | 89 +++++++++++++++++++++++++------ 2 files changed, 74 insertions(+), 19 deletions(-) --- DIR diff --git a/README.md b/README.md t@@ -5,12 +5,12 @@ A GUI for Tomb (https://www.dyne.org/software/tomb/) It is imagined to make usage of Tomb even easier for end-users. ## Usage -![gtomb UI](https://github.com/parazyd/gtomb/raw/master/screenshot.png "gtomb UI") +![gtomb UI](https://github.com/parazyd/gtomb/raw/master/screenshot.png "gtomb UI") The UI consists of all commands included in Tomb. You can choose a command you wish to run via the list and the script will run it for you. Easy-peasy. ## Dependencies -* tomb (also get tomb's dependencies) +* [tomb](https://github.com/dyne/Tomb) (also get tomb's dependencies) * zenity ## TODO DIR diff --git a/gtomb b/gtomb t@@ -10,10 +10,11 @@ # intended and should be used with caution. # -ver="0.5.1" +ver="0.5.2" TOMBPATH="/usr/local/bin/tomb" # Set this to your tomb executable's path function _ { + # I like cleaning. _clean } t@@ -180,11 +181,15 @@ function _failure die() { # {{{ _clean - Clean function, removes sensitive stuff from memory function _clean { - local rr="$RANDOM" - while [[ ${#rr} -lt 500 ]]; do + + echo "Cleaning..." # For debugging. + unset $? + local rr="$RANDOM" + while [[ ${#rr} -lt 500 ]]; do rr+="$RANDOM" done + # Overwrite and unset vars. command="$rr"; unset command tombname="$rr"; unset tombname tombsize="$rr"; unset tombsize t@@ -235,6 +240,7 @@ function _main { # {{{ dig - Dig a new tomb function _dig { + # Get new tomb's name and path. tombname=`zenity \ --title="Choose where to dig your tomb" \ --window-icon="monmort.png" \ t@@ -242,6 +248,9 @@ function _dig { --filename="secret.tomb" \ --save` + res=$? + + # Check for existing tomb. if [[ -f $tombname ]]; then zenity \ --title="Error!" \ t@@ -249,10 +258,19 @@ function _dig { --error \ --text="This tomb already exists. I'm not digging here." exec _main + # Check for empty path. + elif [[ $tombname == "" ]]; then + zenity \ + --title="Warning!" \ + --window-icon="monmort.png" \ + --warning \ + --text="Try again." + exec _main fi - case $? in + case $res in 0) + # Get tomb's size. tombsize=`zenity \ --title="Tomb digging" \ --window-icon="monmort.png" \ t@@ -260,8 +278,29 @@ function _dig { --text="Enter the size of your tomb in MiB (min. 10 MiB):" \ --entry-text=10` - case $? in + res=$? + + # See if it's an actual integer. + re='^[0-9]+$' + if ! [[ $tombsize =~ $re ]]; then + zenity \ + --title="Error!" \ + --window-icon="monmort.png" \ + --error \ + --text="Please choose a valid number." + elif [[ $tombsize == "" ]]; then + zenity \ + --title="Warning" \ + --window-icon="monmort.png" \ + --error \ + --text="Try again." + + exec _main + fi + + case $res in 0) + # Dig teh tomb. $TOMBPATH dig -s $tombsize $tombname | \ zenity \ --title="Digging new tomb" \ t@@ -271,22 +310,20 @@ function _dig { --auto-close \ --pulsate & + # Control Zenity and dd's PIDs to catch cancelling. 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}') - #PID_DD=$(ps -C dd h -o pid,command | grep " of=" | awk '{print $1}') # ^ unsafe for other dds # doesn't work when using # a var like $tombname # sometimes - sleep 2 # test out + sleep 1 # Test different values here. done if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then - kill -9 $PID_DD zenity \ t@@ -295,7 +332,7 @@ function _dig { --text="Tomb digging canceled." \ --warning - rm -f $tombname # try srm/wipe + rm -f $tombname # Try srm/wipe here, but not actually necessary. exec _main fi t@@ -339,6 +376,15 @@ function _forge { --filename="secret.tomb.key" \ --save` + if [[ -f $keyfile ]]; then + zenity \ + --title="Error!" \ + --window-icon="monmort.png" \ + --error \ + --text="This key already exists. I'm not overwriting." + exec _main + fi + case $? in 0) $TOMBPATH forge $keyfile | \ t@@ -349,11 +395,22 @@ function _forge { You can move your mouse around and use your computer to speed up the process." \ --progress \ --auto-close \ - --pulsate + --pulsate & + + PID_ZEN=$(ps -C zenity h -o pid,command | grep "Forging key" | awk '{print $1}') - if [[ $? == 1 ]]; then - killall dd # possibly unsafe + 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}') + # ^ also unsafe + # find out how to catch + # correct one + sleep 2 + done + if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then + + kill -9 $PID_DD zenity \ --title="Canceled!" \ --window-icon="monmort.png" \ t@@ -372,12 +429,10 @@ function _forge { --info \ --text="Your key is now forged." - _main - eval "_$command" + exec _main ;; 1) - _main - eval "_$command" + exec _main ;; esac }