tcomments caused bugs with ps - 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 e7bb890a5cc5252064ef39df8b6741ac5ac74abe DIR parent 5b697692f7d45173bb2a02b98ae3a7d2c072a3ef HTML Author: parazyd <parazyd@dyne.org> Date: Sun, 13 Dec 2015 23:19:30 +0100 comments caused bugs with ps Diffstat: M README.md | 1 + M gtomb | 90 ++++++++++++++++++------------- 2 files changed, 53 insertions(+), 38 deletions(-) --- DIR diff --git a/README.md b/README.md t@@ -15,6 +15,7 @@ list and the script will run it for you. Easy-peasy. ## TODO * Error checking! +* Fix crashing on failing the sudo password * and more stuff ## What you need to do DIR diff --git a/gtomb b/gtomb t@@ -18,6 +18,16 @@ function _ { _clean } + +function _sudo { + sudoassword=$(ask_password "Insert sudo password for user $USER") + echo -e "$sudoassword\n" | sudo -S touch /tmp/sudochk + if ![ -f /tmp/sudochk ]; then + _sudo + else + sudo -v + fi +} # {{{ Some pinentry code shamelessly stolen from tomb # Ask user for a password # Wraps around the pinentry command, from the GnuPG project, as it t@@ -189,7 +199,6 @@ function _clean { rr+="$RANDOM" done - # Overwrite and unset vars. command="$rr"; unset command tombname="$rr"; unset tombname tombsize="$rr"; unset tombsize t@@ -199,7 +208,7 @@ function _clean { if [ -f $tombtmp ] then dd if=/dev/urandom of=$tombtmp bs=800 count=1 - rm -f $tombtmp # See for srm/wipe/etc. + rm -f $tombtmp fi tombtmp="$rr"; unset tombtmp newkey="$rr"; unset newkey t@@ -240,7 +249,9 @@ function _main { # {{{ dig - Dig a new tomb function _dig { - # Get new tomb's name and path. + +# Choose a tomb name, then type in the tomb's size in MiB and finally, dig the tomb. + tombname=`zenity \ --title="Choose where to dig your tomb" \ --window-icon="monmort.png" \ t@@ -250,7 +261,6 @@ function _dig { res=$? - # Check for existing tomb. if [[ -f $tombname ]]; then zenity \ --title="Error" \ t@@ -258,7 +268,7 @@ function _dig { --error \ --text="This tomb already exists. I'm not digging here." exec _main - # Check for empty path. + d elif [[ $tombname == "" ]]; then zenity \ --title="Warning" \ t@@ -270,17 +280,14 @@ function _dig { case $res in 0) - # Get tomb's size. tombsize=`zenity \ --title="Tomb digging" \ --window-icon="monmort.png" \ --entry \ - --text="Enter the size of your tomb in MiB (min. 10 MiB):" \ - --entry-text=10` + --text="Enter the size of your tomb in MiB (min. 10 MiB):"` res=$? - # See if it's an actual integer. re='^[0-9]+$' if ! [[ $tombsize =~ $re ]]; then zenity \ t@@ -288,19 +295,18 @@ function _dig { --window-icon="monmort.png" \ --error \ --text="Please choose a valid number." + exec _main 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@@ -310,17 +316,11 @@ 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 1 # Test different values here. + sleep 1 done if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then t@@ -332,11 +332,11 @@ function _dig { --text="Tomb digging canceled." \ --warning - rm -f $tombname # Try srm/wipe here, but not actually necessary. + rm -f $tombname exec _main fi - _clean # Clean sensitive stuff from memory + _clean zenity \ --title="Done digging" \ t@@ -368,8 +368,9 @@ function _dig { # }}} # {{{ forge - Forge a new key + +# Select new key's path, forge the key and create its passphrase. function _forge { - # Get keyfile's name and path. keyfile=`zenity \ --title="Choose where to forge your key" \ --window-icon="monmort.png" \ t@@ -379,7 +380,6 @@ function _forge { res=$? - # Check if keyfile exists. if [[ -f $keyfile ]]; then zenity \ --title="Error" \ t@@ -398,7 +398,6 @@ function _forge { case $res in 0) - # Forge the keyfile. $TOMBPATH forge $keyfile | \ zenity \ --title="Forging key" \ t@@ -409,16 +408,12 @@ function _forge { --auto-close \ --pulsate & - # Track PIDs and catch cancellation. 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}') - # ^ also unsafe - # find out how to catch - # correct one - sleep 1 # Test different values. + sleep 1 done if [[ "$PID_DD" != "" && "$PID_ZEN" == "" ]]; then t@@ -434,7 +429,7 @@ function _forge { exec _main fi - _clean # Clean sensitive stuff from memory + _clean zenity \ --title="Done forging" \ t@@ -457,15 +452,37 @@ function _lock { --title="Select tomb to lock" \ --window-icon="monmort.png" \ --file-selection` + + res=$? - case $? in + if [[ $tombname == "" ]]; then + zenity \ + --title="Warning" \ + --window-icon="monmort.png" \ + --warning \ + --text="Try again." + exec _main + fi + + case $res in 0) keyfile=`zenity \ --title="Choose the key for your tomb" \ --window-icon="monmort.png" \ --file-selection` - case $? in + res=$? + + if [[ $keyfile == "" ]]; then + zenity \ + --title="Warning" \ + --window-icon="monmort.png" \ + --warning \ + --text="Try again." + exec _main + fi + + case $res in 0) sudoassword=$(ask_password "Insert sudo password for user $USER") echo -e "$sudoassword\n" | sudo -S $TOMBPATH lock $tombname -k $keyfile | \ t@@ -485,18 +502,15 @@ function _lock { --info \ --text="Your tomb is now locked." - _main - eval "_$command" + exec _main ;; 1) - _main - eval "_$command" + exec _main ;; esac ;; 1) - _main - eval "_$command" + exec _main ;; esac } t@@ -807,7 +821,7 @@ function setkey { } # }}} -# {{{ engrave - generate QR code of a key FIX +# {{{ engrave - generate QR code of a key function _engrave { keyfile=`zenity \ --title="Choose keyfile to engrave" \