ithelper GUI script for creating hooks - coffin - secure lan file storage on a device Err parazyd.org 70 hgit clone git://parazyd.org/coffin.git URL:git://parazyd.org/coffin.git parazyd.org 70 1Log /git/coffin/log.gph parazyd.org 70 1Files /git/coffin/files.gph parazyd.org 70 1Refs /git/coffin/refs.gph parazyd.org 70 1Submodules /git/coffin/file/.gitmodules.gph parazyd.org 70 1README /git/coffin/file/README.md.gph parazyd.org 70 1LICENSE /git/coffin/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit 7689b3271deae39655d3114d5264c47adb23bf1a /git/coffin/commit/7689b3271deae39655d3114d5264c47adb23bf1a.gph parazyd.org 70 1parent e65bdd247750cddf2e3adc4ac796e74865995215 /git/coffin/commit/e65bdd247750cddf2e3adc4ac796e74865995215.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Wed, 2 Mar 2016 15:10:47 +0100 Err parazyd.org 70 i Err parazyd.org 70 ihelper GUI script for creating hooks Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i A makehook.sh | 335 +++++++++++++++++++++++++++++++ Err parazyd.org 70 i Err parazyd.org 70 i1 file changed, 335 insertions(+), 0 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/makehook.sh b/makehook.sh /git/coffin/file/makehook.sh.gph parazyd.org 70 it@@ -0,0 +1,335 @@ Err parazyd.org 70 i+#!/usr/bin/env zsh Err parazyd.org 70 i+# Err parazyd.org 70 i+# Zenity helper script to make tombox hooks more user-friendly Err parazyd.org 70 i+# Err parazyd.org 70 i+# ~ parazyd Err parazyd.org 70 i+ Err parazyd.org 70 i+typeset -H UNDERTAKER Err parazyd.org 70 i+typeset -H TOMBPASS Err parazyd.org 70 i+typeset -H TOMBSIZE Err parazyd.org 70 i+typeset -H TOMBNAME Err parazyd.org 70 i+typeset -H sudoassword Err parazyd.org 70 i+ Err parazyd.org 70 i+keymount="/media/tombkey" Err parazyd.org 70 i+coffindot="$keymount/.coffin" Err parazyd.org 70 i+hooks="$coffindot/hook" Err parazyd.org 70 i+ Err parazyd.org 70 i+lsblk -npl | awk -F" " '{print $1}' | grep ^/dev/sd.. > ./.devs Err parazyd.org 70 i+ Err parazyd.org 70 i+# Hook syntax Err parazyd.org 70 i+# create:username:tombname:tombsize:passphrase Err parazyd.org 70 i+ Err parazyd.org 70 i+# {{{ monmort icon Err parazyd.org 70 i+MONMORT="/tmp/monmort.png" Err parazyd.org 70 i+ICONB64="iVBORw0KGgoAAAANSUhEUgAAACAAAAAgEAQAAACJ4248AAAAAmJLR0T//xSrMc0AAAAJcEhZcwAA\n Err parazyd.org 70 i+AEgAAABIAEbJaz4AAAAJdnBBZwAAACAAAAAgAIf6nJ0AAADrSURBVFjD5ZZBEsMgCEU/TO/l2XMx\n Err parazyd.org 70 i+04VjQ1K1CDYswkwWJnH+E/EL4RP7jluDCACoim/bvfIpFQiKEJcQHCN9xEtLCgDMQM7f33sZrPNG\n Err parazyd.org 70 i+/05loCXujfAtCAVgNgLwIuycjQAra8G9Fm823ADabPRA1QDelfZAVUZktWrNvL8ew5YTnsStx3Am\n Err parazyd.org 70 i+AyOInJVbYF1prZuU+tsR1g9UMDqGuo5oFWhtSEQNEGmeVrqv73Tj0pIZirANMYqRhyw5Bb9MauSW\n Err parazyd.org 70 i+SwA8l9OzG5LnAsiiDQGQRRvaEwInK54J390hndAIYIeQ4k6AAjE/h06ab0SjP08MA1xDAAAAJXRF\n Err parazyd.org 70 i+WHRkYXRlOmNyZWF0ZQAyMDExLTAxLTEyVDA5OjM0OjI0KzAxOjAwo//d7wAAACV0RVh0ZGF0ZTpt\n Err parazyd.org 70 i+b2RpZnkAMjAxMS0wMS0xMlQwOTozNDoyNCswMTowMNKiZVMAAAAASUVORK5CYII=" Err parazyd.org 70 i+echo -e "$ICONB64" | base64 --decode > $MONMORT Err parazyd.org 70 i+# }}} Err parazyd.org 70 i+# {{{ sudo functions Err parazyd.org 70 i+function _sudo { Err parazyd.org 70 i+ sudoassword=$(ask_password "Insert sudo password for user $USER") Err parazyd.org 70 i+ echo -e "$sudoassword\n" | sudo -S -v Err parazyd.org 70 i+ _sudowrong Err parazyd.org 70 i+} Err parazyd.org 70 i+function _sudowrong { Err parazyd.org 70 i+ if [[ $? == 1 ]]; then Err parazyd.org 70 i+ sudoassword=$(ask_password "Wrong password. Insert sudo password for user $USER") Err parazyd.org 70 i+ echo -e "$sudoassword\n" | sudo -S -v Err parazyd.org 70 i+ _sudowrong Err parazyd.org 70 i+ fi Err parazyd.org 70 i+} Err parazyd.org 70 i+# }}} Err parazyd.org 70 i+ Err parazyd.org 70 i+# {{{ Some pinentry code shamelessly stolen from tomb Err parazyd.org 70 i+# Ask user for a password Err parazyd.org 70 i+# Wraps around the pinentry command, from the GnuPG project, as it Err parazyd.org 70 i+# provides better security and conveniently use the right toolkit. Err parazyd.org 70 i+ask_password() { Err parazyd.org 70 i+ local description="$1" Err parazyd.org 70 i+ local title="${2:-Enter tomb password.}" Err parazyd.org 70 i+ local output Err parazyd.org 70 i+ local password Err parazyd.org 70 i+ local gtkrc Err parazyd.org 70 i+ local theme Err parazyd.org 70 i+ Err parazyd.org 70 i+ # Distributions have broken wrappers for pinentry: they do Err parazyd.org 70 i+ # implement fallback, but they disrupt the output somehow. We are Err parazyd.org 70 i+ # better off relying on less intermediaries, so we implement our Err parazyd.org 70 i+ # own fallback mechanisms. Pinentry supported: curses, gtk-2, qt4 Err parazyd.org 70 i+ # and x11. Err parazyd.org 70 i+ Err parazyd.org 70 i+ # make sure LANG is set, default to C Err parazyd.org 70 i+ LANG=${LANG:-C} Err parazyd.org 70 i+ Err parazyd.org 70 i+ Err parazyd.org 70 i+ if [[ "$DISPLAY" = "" ]]; then Err parazyd.org 70 i+ Err parazyd.org 70 i+ if _is_found "pinentry-curses"; then Err parazyd.org 70 i+ output=`cat </dev/null 2>/dev/null Err parazyd.org 70 i+ return $? Err parazyd.org 70 i+} Err parazyd.org 70 i+# }}} Err parazyd.org 70 i+ Err parazyd.org 70 i+# {{{ _clean - Clean function, removes sensitive stuff from memory Err parazyd.org 70 i+function _clean { Err parazyd.org 70 i+ sudo umount $keymount && sudo rmdir $keymount Err parazyd.org 70 i+ unset $? Err parazyd.org 70 i+ local rr="$RANDOM" Err parazyd.org 70 i+ while [[ ${#rr} -lt 500 ]]; do Err parazyd.org 70 i+ rr+="$RANDOM" Err parazyd.org 70 i+ done Err parazyd.org 70 i+ Err parazyd.org 70 i+ command="$rr"; unset command Err parazyd.org 70 i+ UNDERTAKER="$rr"; unset UNDERTAKER Err parazyd.org 70 i+ TOMBPASS="$rr"; unset TOMBPASS Err parazyd.org 70 i+ TOMBSIZE="$rr"; unset TOMBSIZE Err parazyd.org 70 i+ sudoassword="$rr"; unset sudoassword Err parazyd.org 70 i+ tombtmp="$rr"; unset tombtmp Err parazyd.org 70 i+ TOMBNAME="$rr"; unset TOMBNAME Err parazyd.org 70 i+} Err parazyd.org 70 i+# }}} Err parazyd.org 70 i+ Err parazyd.org 70 i+function _mountkey { Err parazyd.org 70 i+ if ! [[ -d $keymount ]]; then Err parazyd.org 70 i+ sudo mkdir -p $keymount Err parazyd.org 70 i+ fi Err parazyd.org 70 i+ Err parazyd.org 70 i+ sudo mount $USBKEY $keymount Err parazyd.org 70 i+ Err parazyd.org 70 i+ if ! [[ -d $coffindot ]]; then Err parazyd.org 70 i+ sudo mkdir $coffindot Err parazyd.org 70 i+ fi Err parazyd.org 70 i+ Err parazyd.org 70 i+} Err parazyd.org 70 i+ Err parazyd.org 70 i+# {{{ zenity dialogs Err parazyd.org 70 i+function _zenques { Err parazyd.org 70 i+ zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --question \ Err parazyd.org 70 i+ --text="$1" Err parazyd.org 70 i+} Err parazyd.org 70 i+function _zenwarn { Err parazyd.org 70 i+ zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --warning \ Err parazyd.org 70 i+ --title="$1" \ Err parazyd.org 70 i+ --text="$2" Err parazyd.org 70 i+} Err parazyd.org 70 i+function _zeninfo { Err parazyd.org 70 i+ zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --info \ Err parazyd.org 70 i+ --title="$1" \ Err parazyd.org 70 i+ --text="$2" Err parazyd.org 70 i+} Err parazyd.org 70 i+function _zenerr { Err parazyd.org 70 i+ zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --error \ Err parazyd.org 70 i+ --title="$1" \ Err parazyd.org 70 i+ --text="$2" Err parazyd.org 70 i+} Err parazyd.org 70 i+function _zenentry { Err parazyd.org 70 i+ zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --entry \ Err parazyd.org 70 i+ --title="$1" \ Err parazyd.org 70 i+ --text="$2" \ Err parazyd.org 70 i+ --entry-text="$3" Err parazyd.org 70 i+} Err parazyd.org 70 i+# }}} Err parazyd.org 70 i+ Err parazyd.org 70 i+function _main { Err parazyd.org 70 i+ _clean Err parazyd.org 70 i+ command=$(zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --title="tombox hook helper" \ Err parazyd.org 70 i+ --list \ Err parazyd.org 70 i+ --hide-header \ Err parazyd.org 70 i+ --text="tombox hook helper" \ Err parazyd.org 70 i+ --separator=" & " \ Err parazyd.org 70 i+ --column=Function \ Err parazyd.org 70 i+ --column=Description \ Err parazyd.org 70 i+ "create" "a new tomb on the tombox" \ Err parazyd.org 70 i+ "delete" "a tomb from the tombox" \ Err parazyd.org 70 i+ "backup" "a tomb from the tombox" \ Err parazyd.org 70 i+ "foobar" "on the tombox") Err parazyd.org 70 i+ eval "_$command" Err parazyd.org 70 i+} Err parazyd.org 70 i+ Err parazyd.org 70 i+function _create { Err parazyd.org 70 i+ UNDERTAKER=$(_zenentry "Choose username" "Choose a username for your tombox" "foobar") Err parazyd.org 70 i+ res=$? Err parazyd.org 70 i+ Err parazyd.org 70 i+ case $res in Err parazyd.org 70 i+ 0) Err parazyd.org 70 i+ TOMBNAME=$(_zenentry "Choose tomb name" "Choose a name for your new tomb" "foobar") Err parazyd.org 70 i+ res=$? Err parazyd.org 70 i+ Err parazyd.org 70 i+ case $res in Err parazyd.org 70 i+ 0) Err parazyd.org 70 i+ TOMBPASS=$(_zenentry "Choose password" "Choose a password for your tomb's keyfile" "9898yvc0982yh08H@*Y@(Y*C") Err parazyd.org 70 i+ res=$? Err parazyd.org 70 i+ Err parazyd.org 70 i+ case $res in Err parazyd.org 70 i+ 0) Err parazyd.org 70 i+ TOMBSIZE=$(_zenentry "Choose tomb size" "Choose the size of your tomb in MiB" "100") Err parazyd.org 70 i+ res=$? Err parazyd.org 70 i+ Err parazyd.org 70 i+ case $res in Err parazyd.org 70 i+ 0) Err parazyd.org 70 i+ USBKEY=$(zenity \ Err parazyd.org 70 i+ --window-icon="$MONMORT" \ Err parazyd.org 70 i+ --title="Choose USB key" \ Err parazyd.org 70 i+ --list \ Err parazyd.org 70 i+ --hide-header \ Err parazyd.org 70 i+ --text="Choose your USB key to use" \ Err parazyd.org 70 i+ --column=Device \ Err parazyd.org 70 i+ $(cat ./.devs) Err parazyd.org 70 i+ ) Err parazyd.org 70 i+ _sudo Err parazyd.org 70 i+ _mountkey Err parazyd.org 70 i+ if [[ -f $hooks ]]; then Err parazyd.org 70 i+ _zenques "Warning! There is already an existing hook. Do you want to overwrite?" Err parazyd.org 70 i+ res=$? Err parazyd.org 70 i+ case $res in Err parazyd.org 70 i+ 0) Err parazyd.org 70 i+ print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${TOMBPASS}" | sudo tee $hooks Err parazyd.org 70 i+ _zeninfo "Success" "$hooks written successfully!" Err parazyd.org 70 i+ _clean Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ 1) Err parazyd.org 70 i+ _zeninfo "Info" "Postponing..." Err parazyd.org 70 i+ _clean Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ esac Err parazyd.org 70 i+ else Err parazyd.org 70 i+ print "create:${UNDERTAKER}:${TOMBNAME}:${TOMBSIZE}:${TOMBPASS}" | sudo tee $hooks Err parazyd.org 70 i+ _zeninfo "Success" "$hooks written successfully!" Err parazyd.org 70 i+ _clean Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ fi Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ 1) Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ esac Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ 1) Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ esac Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ 1) Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ esac Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ 1) Err parazyd.org 70 i+ _main Err parazyd.org 70 i+ ;; Err parazyd.org 70 i+ esac Err parazyd.org 70 i+} Err parazyd.org 70 i+ Err parazyd.org 70 i+_main Err parazyd.org 70 .