tomb

the crypto undertaker
git clone git://parazyd.org/tomb.git
Log | Files | Refs | README | LICENSE

commit 31ab169e2fc1ec77ad95264612aa24216d1d1b95
parent 7bd21e441997c126e3027c4e138a404fe4b684a6
Author: Jaromil <jaromil@dyne.org>
Date:   Sun, 17 Aug 2014 21:10:18 +0200

Merge pull request #122 from gdrooid/master

Substitute /dev/null redirection with closing stdin/err. Cleanup some obsolete functions.
Diffstat:
Mtomb | 102+++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 50 insertions(+), 52 deletions(-)

diff --git a/tomb b/tomb @@ -151,18 +151,18 @@ safe_filename() { check_swap() { # Return 0 if NO swap is used, 1 if swap is used # Return 2 if swap(s) is(are) used, but ALL encrypted - local swaps="$(awk '/^\// { print $1 }' /proc/swaps 2>/dev/null)" + local swaps="$(awk '/^\// { print $1 }' /proc/swaps 2>-)" [[ -z "$swaps" ]] && return 0 # No swap partition is active # Check whether all swaps are encrypted, and return 2 # If any of the swaps is not encrypted, we bail out and return 1. ret=1 for s in $=swaps; do bone=`sudo file $s` - if `echo "$bone" | grep 'swap file' &>/dev/null`; then + if `echo "$bone" | grep 'swap file' &>-`; then # It's a regular (unencrypted) swap file ret=1 break - elif `echo "$bone" | grep 'symbolic link' &>/dev/null`; then + elif `echo "$bone" | grep 'symbolic link' &>-`; then # Might link to a block ret=1 if [ "/dev/mapper" = "${s%/*}" ]; then @@ -173,7 +173,7 @@ check_swap() { else break fi - elif `echo "$bone" | grep 'block special' &>/dev/null`; then + elif `echo "$bone" | grep 'block special' &>-`; then # Is a block ret=1 is_crypt=`sudo dmsetup status "$s" | awk '/crypt/ {print $3}'` @@ -229,7 +229,7 @@ ask_password() { title="Insert tomb password." if [ $2 ]; then title="$2"; fi - output=`cat <<EOF | GTK2_RC_FILES=${GTK2_RC} pinentry 2>/dev/null | tail -n +7 + output=`cat <<EOF | GTK2_RC_FILES=${GTK2_RC} pinentry 2>- | tail -n +7 OPTION ttyname=$TTY OPTION lc-ctype=$LANG SETTITLE $title @@ -266,7 +266,7 @@ check_priv() { if ! option_is_set --sudo-pwd; then if [ $? != 0 ]; then # if not then ask a password - cat <<EOF | pinentry 2>/dev/null | awk '/^D / { sub(/^D /, ""); print }' | sudo -S -v + cat <<EOF | pinentry 2>- | awk '/^D / { sub(/^D /, ""); print }' | sudo -S -v OPTION ttyname=$TTY OPTION lc-ctype=$LANG SETTITLE Super user privileges required @@ -284,7 +284,7 @@ EOF fi # are we root already # check if we have support for loop mounting - losetup -f > /dev/null + losetup -f >- { test "$?" = "0" } || { _warning "Loop mount of volumes is not supported on this machine, this error" _warning "often occurs on VPS and kernels that don't provide the loop module." @@ -293,8 +293,8 @@ EOF } # make sure necessary kernel modules are loaded - modprobe dm_mod 2>/dev/null - modprobe dm_crypt 2>/dev/null + modprobe dm_mod 2>- + modprobe dm_crypt 2>- return 0 } @@ -311,13 +311,13 @@ is_valid_tomb() { { test -f "$1" } || { _warning "Tomb file is not a regular file: $1"; return 1 } # check file type (if its a Luks fs) - file "$1" | grep -i 'luks encrypted file' >/dev/null + file "$1" | grep -i 'luks encrypted file' >- { test $? = 0 } || { _warning "File is not a valid tomb: $1"; return 1 } # check if its already open tombfile=`basename $1` tombname=${tombfile%%\.*} - mount -l | grep "${tombfile}.*\[$tombname\]$" > /dev/null + mount -l | grep "${tombfile}.*\[$tombname\]$" >- { test $? = 0 } && { _warning "Tomb is currently in use: $tombname"; return 1 } _message "Valid tomb file found: $1" @@ -519,35 +519,35 @@ progress() { check_bin() { # check for required programs for req in cryptsetup pinentry sudo gpg; do - command -v $req >/dev/null || _failure "Cannot find $req. It's a requirement to use Tomb, please install it." 1 + command -v $req >- || _failure "Cannot find $req. It's a requirement to use Tomb, please install it." 1 done export PATH=/sbin:/usr/sbin:$PATH # which dd command to use - command -v dcfldd > /dev/null + command -v dcfldd >- { test $? = 0 } && { DD="dcfldd statusinterval=1" } # which wipe command to use - command -v wipe > /dev/null && WIPE="wipe -f -s" || WIPE="rm -f" + command -v wipe >- && WIPE="wipe -f -s" || WIPE="rm -f" # check for filesystem creation progs - command -v mkfs.ext4 > /dev/null && \ + command -v mkfs.ext4 >- && \ MKFS="mkfs.ext4 -q -F -j -L" || \ MKFS="mkfs.ext3 -q -F -j -L" # check for mktemp - command -v mktemp > /dev/null || MKTEMP=0 + command -v mktemp >- || MKTEMP=0 # check for steghide - command -v steghide > /dev/null || STEGHIDE=0 + command -v steghide >- || STEGHIDE=0 # check for resize - command -v e2fsck resize2fs > /dev/null || RESIZER=0 + command -v e2fsck resize2fs >- || RESIZER=0 # check for KDF auxiliary tools - command -v tomb-kdb-pbkdf2 > /dev/null || KDF=0 + command -v tomb-kdb-pbkdf2 >- || KDF=0 # check for Swish-E file content indexer - command -v swish-e > /dev/null || SWISH=0 + command -v swish-e >- || SWISH=0 # check for QREncode for paper backups of keys - command -v qrencode > /dev/null || QRENCODE=0 + command -v qrencode >- || QRENCODE=0 } # }}} - Commandline interaction @@ -643,7 +643,7 @@ gpg_decrypt() { --no-secmem-warning -d "${keyfile}" 2> $res` unset lukspass - grep 'DECRYPTION_OKAY' $res > /dev/null + grep 'DECRYPTION_OKAY' $res >- ret=$?; rm -f $res fi @@ -670,7 +670,7 @@ get_lukskey() { case `cut -d_ -f 3 <<<$firstline` in pbkdf2sha1) pbkdf2_param=`cut -d_ -f 4- <<<$firstline | tr '_' ' '` - lukspass=$(tomb-kdb-pbkdf2 ${=pbkdf2_param} 2> /dev/null <<<$lukspass) + lukspass=$(tomb-kdb-pbkdf2 ${=pbkdf2_param} 2>- <<<$lukspass) ;; *) _failure "No suitable program for KDF `cut -f 3 <<<$firstline`." @@ -765,9 +765,9 @@ change_passwd() { if option_is_set --tomb-old-pwd; then tomb_old_pwd="`option_value --tomb-old-pwd`" _verbose "--tomb-old-pwd = $tomb_old_pwd" - ask_key_password "$keyfile" "$tomb_old_pwd" > /dev/null + ask_key_password "$keyfile" "$tomb_old_pwd" >- else - ask_key_password "$keyfile" > /dev/null + ask_key_password "$keyfile" >- fi { test $? = 0 } || { @@ -943,7 +943,7 @@ gen_key() { # prints an array of ciphers available in gnupg (to encrypt keys) list_gnupg_ciphers() { # prints an error if GnuPG is not found - which gpg > /dev/null || _failure "gpg (GnuPG) is not found, Tomb cannot function without it." + which gpg >- || _failure "gpg (GnuPG) is not found, Tomb cannot function without it." ciphers=(`gpg --version | awk ' BEGIN { ciphers=0 } @@ -964,7 +964,7 @@ bury_key() { imagefile=$1 - file $imagefile | grep -i JPEG > /dev/null + file $imagefile | grep -i JPEG >- if [ $? != 0 ]; then _warning "Encode failed: $imagefile is not a jpeg image." return 1 @@ -1339,9 +1339,9 @@ lock_tomb_with_key() { if option_is_set --tomb-pwd; then tomb_pwd="`option_value --tomb-pwd`" _verbose "--tomb-pwd = $tomb_pwd" - ask_key_password "$tombkey" "$tomb_pwd" > /dev/null + ask_key_password "$tombkey" "$tomb_pwd" >- else - ask_key_password "$tombkey" > /dev/null + ask_key_password "$tombkey" >- fi { test $? = 0 } || { losetup -d ${nstloop} @@ -1430,9 +1430,9 @@ change_tomb_key() { if option_is_set --tomb-pwd; then tomb_new_pwd="`option_value --tomb-pwd`" _verbose "--tomb-pwd = $tomb_new_pwd" - ask_key_password "$newkey" "$tomb_new_pwd" > /dev/null + ask_key_password "$newkey" "$tomb_new_pwd" >- else - ask_key_password "$newkey" > /dev/null + ask_key_password "$newkey" >- fi { test $? = 0 } || { _failure "No valid password supplied for the new key." } @@ -1444,9 +1444,9 @@ change_tomb_key() { if option_is_set --tomb-old-pwd; then tomb_old_pwd="`option_value --tomb-old-pwd`" _verbose "--tomb-old-pwd = $tomb_old_pwd" - ask_key_password "$oldkey" "$tomb_old_pwd" > /dev/null + ask_key_password "$oldkey" "$tomb_old_pwd" >- else - ask_key_password "$oldkey" > /dev/null + ask_key_password "$oldkey" >- fi { test $? = 0 } || { _failure "No valid password supplied for the old key." } @@ -1521,7 +1521,7 @@ create_tomb() { mount_tomb() { _message "Commanded to open tomb $1" if [ "$1" = "" ]; then - _warning "No tomb name specified for creation." + _warning "No tomb name specified for opening." return 1 fi @@ -1538,7 +1538,7 @@ mount_tomb() { tombfile=`basename ${1}` tombdir=`dirname ${1}` # check file type (if its a Luks fs) - file ${tombdir}/${tombfile} | grep -i 'luks encrypted file' 2>&1 >/dev/null + file ${tombdir}/${tombfile} | grep -i 'luks encrypted file' 2>&1 >- if [ $? != 0 ]; then _warning "$1 is not a valid tomb file, operation aborted." return 1 @@ -1559,7 +1559,7 @@ mount_tomb() { fi # check if its already open - mount -l | grep "${tombfile}.*\[$tombname\]$" 2>&1 > /dev/null + mount -l | grep "${tombfile}.*\[$tombname\]$" 2>&1 >- if [ $? = 0 ]; then _warning "$tombname is already open." _message "Here below its status is reported:" @@ -1614,9 +1614,9 @@ mount_tomb() { if option_is_set --tomb-pwd; then tomb_pwd="`option_value --tomb-pwd`" _verbose "--tomb-pwd = $tomb_pwd" - ask_key_password "$tombkey" "$tomb_pwd" > /dev/null + ask_key_password "$tombkey" "$tomb_pwd" >- else - ask_key_password "$tombkey" > /dev/null + ask_key_password "$tombkey" >- fi { test $? = 0 } || { losetup -d ${nstloop} @@ -1644,7 +1644,7 @@ mount_tomb() { _message "Checking filesystem via $tombstat[3]" fsck -p -C0 /dev/mapper/${mapper} _verbose "Tomb engraved as $tombname" - tune2fs -L ${tombname} /dev/mapper/${mapper} > /dev/null + tune2fs -L ${tombname} /dev/mapper/${mapper} >- # we need root from here on mkdir -p $tombmount @@ -1697,7 +1697,7 @@ exec_safe_bind_hooks() { fi local MOUNTPOINT="${1}" local ME=${SUDO_USER:-$(whoami)} - local HOME=$(awk -v a="$ME" -F ':' '{if ($1 == a) print $6}' /etc/passwd 2>/dev/null) + local HOME=$(awk -v a="$ME" -F ':' '{if ($1 == a) print $6}' /etc/passwd 2>-) if [ $? -ne 0 ]; then _warning "How pitiful! A tomb, and no HOME." return 1 @@ -1923,7 +1923,7 @@ BEGIN { main="" } # index files in all tombs for search # $1 is optional, to specify a tomb index_tombs() { - { command -v updatedb > /dev/null } || { + { command -v updatedb >- } || { _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." } updatedbver=`updatedb --version | grep '^updatedb'` @@ -1945,8 +1945,8 @@ index_tombs() { _success "Creating and updating search indexes." # start the LibreOffice document converter if installed - { command -v unoconv >/dev/null } && { - unoconv -l 2>/dev/null & + { command -v unoconv >- } && { + unoconv -l 2>- & _verbose "unoconv listener launched." sleep 1 } @@ -2040,7 +2040,7 @@ EOF done } search_tombs() { - { command -v locate > /dev/null } || { + { command -v locate >- } || { _failure "Cannot index tombs on this system: updatedb (mlocate) not installed." } updatedbver=`updatedb --version | grep '^updatedb'` @@ -2112,7 +2112,7 @@ resize_tomb() { { test -r "$tombkey" } || { _failure "Aborting operations: key not found, use -k" } - local oldtombsize=$(( `stat -c %s "$1" 2>/dev/null` / 1048576 )) + local oldtombsize=$(( `stat -c %s "$1" 2>-` / 1048576 )) local mounted_tomb=`mount -l | awk -vtomb="[$tombname]" '/^\/dev\/mapper\/tomb/ { if($7==tomb) print $1 }'` @@ -2141,9 +2141,9 @@ resize_tomb() { if option_is_set --tomb-pwd; then tomb_pwd="`option_value --tomb-pwd`" _verbose "--tomb-pwd = $tomb_pwd" - ask_key_password "$tombkey" "$tomb_pwd" > /dev/null + ask_key_password "$tombkey" "$tomb_pwd" >- else - ask_key_password "$tombkey" > /dev/null + ask_key_password "$tombkey" >- fi { test $? = 0 } || { _failure "No valid password supplied." } @@ -2302,20 +2302,20 @@ umount_tomb() { # Kill all processes using the tomb slam_tomb() { # $1 = tomb mount point - if [[ -z `fuser -m "$1" 2> /dev/null` ]]; then + if [[ -z `fuser -m "$1" 2>-` ]]; then return 0 fi #Note: shells are NOT killed by INT or TERM, but they are killed by HUP for s in TERM HUP KILL; do _verbose "Sending $s to processes inside the tomb:" if option_is_set -D; then - ps -fp `fuser -m /media/a.tomb 2> /dev/null`| + ps -fp `fuser -m /media/a.tomb 2>-`| while read line; do _verbose $line done fi fuser -s -m "$1" -k -M -$s - if [[ -z `fuser -m "$1" 2> /dev/null` ]]; then + if [[ -z `fuser -m "$1" 2>-` ]]; then return 0 fi if ! option_is_set -f; then @@ -2549,10 +2549,8 @@ main() { # internal commands useful to developers 'source') return 0 ;; - install) check_priv ; install_tomb ;; askpass) ask_password $PARAM[1] $PARAM[2] ;; mktemp) safe_dir $PARAM[1] ;; - translate) generate_translatable_strings ;; __default) cat <<EOF