coffin

secure lan file storage on a device
git clone git://parazyd.org/coffin.git
Log | Files | Refs | Submodules | README | LICENSE

commit e65bdd247750cddf2e3adc4ac796e74865995215
parent f512d6c5537da9637e00dc3c8840a6a9819fef0c
Author: parazyd <parazyd@dyne.org>
Date:   Thu, 25 Feb 2016 17:28:26 +0100

restructure, add support for hooks

Diffstat:
Mbin/sacrist | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------
1 file changed, 61 insertions(+), 26 deletions(-)

diff --git a/bin/sacrist b/bin/sacrist @@ -9,14 +9,18 @@ happenz=$2 keyuuid=$(blkid $device | awk -F\" '{print $2}') # Vars -tmptombs="/tmp/tombs" # Info about opened tombs, holds keyuuid, keyhash and tombid -tmptombs2="/tmp/tombs2" # Temp tempfile, for updating $tmptombs graveyard="/home/graveyard" # Our graveyard, with all the tombs +tombs="$graveyard/tombs" # Info about opened tombs, holds keyuuid, keyhash and tombid +tmptombs="$graveyard/tmptombs" # Temp tempfile, for updating $tombs keymount="/media/tombkey" # Directory where keys get mounted coffindot="$keymount/.coffin" # .coffin directory on the usb key ttab="$coffindot/ttab" # Our ttab -createme="$coffindot/create.me" # New tomb creation trigger +hooks="$coffindot/hook" tomb="/usr/local/bin/tomb" +tombpasswd="$graveyard/passwd" + +# Hook syntax +# create:username:tombname:tombsize:passphrase # Debugs echo "Arg1: $1" @@ -34,38 +38,43 @@ _ttabmagic() { # Loop entire ttab and do stuff for tombs that want to be opened _msg info "Doing ttab magic..." line=0 + for entry in $(cat $ttab); do let line=$line+1 _msg info "Found line $line..." - if [[ $(echo $entry | awk -F: '{print $4}') == "true" ]]; then + + if [[ $(echo $entry | awk -F: '{print $3}') == "true" ]]; then _msg info "Working on tomb from line $line..." undertaker=$(echo $entry | awk -F: '{print $1}') echo "Username: $undertaker" tombid=$(echo $entry | awk -F: '{print $2}') - echo "Tomb name: $tombid" + echo "Tomb name: $tombid.tomb" _comparekey + if [[ $happenz == "close" ]]; then _msg warn "Comparekey true" sudo -u $undertaker $tomb slam $tombid - cp $tmptombs $tmptombs2 - grep -v $keyhash $tmptombs2 > $tmptombs; chmod 600 $tmptombs; _msg info "Updated $tmptombs" - rm $tmptombs2 + cp $tombs $tmptombs + grep -v $keyhash $tmptombs > $tombs && chmod 600 $tombs && _msg info "Updated $tombs" + rm $tmptombs continue fi + _msg warn "Comparekey false" - keypass=$(echo $entry | awk -F: '{print $3}') + keypass=$(cat $tombpasswd | grep $keyhash | awk -F: '{print $2}') echo "Tomb passphrase: $keypass" sudo -u $undertaker $tomb open $graveyard/$tombid.tomb -k $coffindot/$tombid.key \ - --unsafe --tomb-pwd $keypass # Deal with this shit somehow! + --unsafe --tomb-pwd "$keypass" # Deal with this shit somehow! if [[ -d "/media/$tombid" ]]; then - echo "$undertaker:$keyhash:$keyuuid" >> $tmptombs; chmod 600 $tmptombs; _msg info "Added info to $tmptombs" + echo "$undertaker:$keyhash:$keyuuid" >> $tombs && chmod 600 $tombs && _msg info "Added info to $tombs" else - _msg warn "Nothing added to $tmptombs" + _msg warn "Nothing added to $tombs" fi fi + done - umount $keymount; rmdir $keymount; _msg info "Unmounted and deleted $keymount" + umount $keymount && rmdir $keymount && _msg info "Unmounted and deleted $keymount" } _hashkey() { @@ -74,19 +83,38 @@ _hashkey() { _comparekey() { keyhash=$(_hashkey) - if [[ ( $(cat $tmptombs | grep $keyhash | grep $keyuuid) ) ]]; then + if [[ ( $(cat $tombs | grep $keyhash | grep $keyuuid) ) ]]; then happenz=close else happenz=open fi } +_hooks() { + for entry in $(cat $hooks); do + let hook=$hook+1 + _msg info "Found hook $hook..." + + # Check what's hook supposed to do + if [[ $(echo $entry | awk -F: '{print $1}') == "create" ]]; then + _create_new_tomb + elif [[ $(echo $entry | awk -F: '{print $1}') == "delete" ]]; then + #DELETE TOMB + elif [[ $(echo $entry | awk -F: '{print $1}') == "foo" ]]; then + # do foo + else + _msg error "No valid hook syntax on hook $hook" + fi + rm $hooks && _msg info "Removed $hooks" + done +} + _create_new_tomb() { _msg info "Creating new tomb!" - undertaker=$(cat $createme | awk -F: '{print $1}') - tombid=$(cat $createme | awk -F: '{print $2}') - keypass=$(cat $createme | awk -F: '{print $3}') - tombsize=$(cat $createme | awk -F: '{print $4}') + undertaker=$(echo $entry | awk -F: '{print $2}') + tombid=$(echo $entry | awk -F: '{print $3}') + tombsize=$(echo $entry| awk -F: '{print $4}') + keypass=$(echo $entry | awk -F: '{print $5}') if ! [[ ( $(id $undertaker) ) ]]; then _msg warn "No user called $undertaker found. Creating..." @@ -98,11 +126,14 @@ _create_new_tomb() { sudo -u $undertaker $tomb forge $graveyard/$tombid.key --unsafe --tomb-pwd "$keypass" sudo -u $undertaker $tomb lock $graveyard/$tombid.tomb -k $graveyard/$tombid.key \ --unsafe --tomb-pwd "$keypass" + mv $graveyard/$tombid.key $coffindot/ && chown $undertaker:$undertaker $coffindot/$tombid.key && \ _msg info "Moved and chowned keyfile" - echo "$undertaker:$tombid:$keypass:true" >> $ttab - _msg info "Wrote to $ttab" - rm $createme && _msg info "Removed $createme" + echo "$undertaker:${tombid}:true" >> $ttab + keyhash=$(_hashkey) + echo "${keyhash}:${keypass}" >> $tombpasswd + _msg info "Wrote to $ttab and $tombpasswd" + # rm $createme && _msg info "Removed $createme" } _endgame() { @@ -120,25 +151,29 @@ _msg() { } # }}} -# Main +#--------------------------------------------------------------------------------------------------- +#------------------------------------------------------ Main --------------------------------------- +#--------------------------------------------------------------------------------------------------- if [[ $happenz == "CREATE" ]]; then _mountkey if [[ -d "$coffindot" ]]; then _msg info "$coffindot found..." - if [[ -f "$createme" ]]; then - _create_new_tomb + if [[ -f "$hooks" ]]; then + _hooks + else + _msg warn "No hooks detected" fi if ! [[ -f "$ttab" ]]; then _msg error "No ttab!" - umount $keymount; rmdir $keymount; _msg info "Unmounted and removed $keymount" + umount $keymount && rmdir $keymount && _msg info "Unmounted and removed $keymount" else _ttabmagic fi else _msg error "No valid .coffin directory! Exiting..." - umount $keymount; rmdir $keymount; _msg info "Umounted and removed $keymount" + umount $keymount && rmdir $keymount && _msg info "Umounted and removed $keymount" fi fi