#!/bin/bash # # $Id$ export ORIGINAL=$1 shift export GPGOPTS="--use-agent" if [ -z "$ORIGINAL" ] ; then echo "FATAL: No file specified to edit." exit 1 fi if [ ! -f "$ORIGINAL" ] ; then echo "FATAL: No such file: $ORIGINAL" exit 2 fi export RECIPIENTS="$*" if [ -z "$RECIPIENTS" ] ; then echo "FATAL: No recipients specified as $2 ..." exit 3 fi if ! /etc/init.d/siredit-fs status >/dev/null 2>/dev/null ; then echo "FATAL: siredit-fs not running, please sudo /etc/init.d/siredit-fs start" exit 4 fi export ORINAME=$(basename "$ORIGINAL") #echo "DEBUG: ORINAME=$ORINAME" export ORIDIR=$(dirname "$ORIGINAL") if [ -z "$ORIDIR" ] ; then ORIDIR=$(pwd) fi #echo "DEBUG: ORINAME=$ORINAME" export RAMDIR="/tmp/siredit.ramfs/$$" export RAMDIR="/tmp/siredit.ramfs/$$" #echo "DEBUG: RAMDIR=$RAMDIR" if [ ! -d /tmp/siredit.ramfs ] ; then echo "FATAL: No ramdir $RAMDIR" exit 11 fi mkdir -pv $RAMDIR if [ ! "$?" = "0" ] ; then echo "FATAL: Unable to create $RAMDIR" exit 12 fi chmod go-rwx $RAMDIR export RAMFILE="$RAMDIR/$ORINAME" #echo "DEBUG: RAMFILE=$RAMFILE" cp -uva $ORIGINAL $RAMFILE if [ ! "$?" = "0" ] ; then echo "FATAL: Unable to copy $ORIGINAL to $RAMFILE" exit 13 fi export EDITNAME=$ORINAME #echo "DEBUG: EDITNAME=$EDITNAME" export GPGNAME=$(echo "$ORINAME" |egrep "\.gpg$" 2>/dev/null) if [ -n "$GPGNAME" ] ; then EDITNAME=$(echo "$ORINAME" |sed -e 's/\.gpg$//') #echo "DEBUG: gpg'd EDITNAME=$EDITNAME" echo gpg $GPGOPTS --decrypt --output $RAMDIR/$EDITNAME $RAMDIR/$ORINAME gpg $GPGOPTS --decrypt --output $RAMDIR/$EDITNAME $RAMDIR/$ORINAME if [ ! "$?" = "0" ] ; then echo "FATAL: Unable to decrypt $RAMDIR/$ORINAME" rm -rfv $RAMDIR exit 14 fi else GPGNAME="${ORINAME}.gpg" fi if [ -n "$GPGNAME" ] ; then # http://www.gnupg.org/faq/GnuPG-FAQ.html#how-can-i-get-list-of-key-ids-used-to-encrypt-a-message #export KEYLIST=$(gpg --decrypt --list-only --status-fd 1 2>/dev/null $RAMDIR/$ORINAME |awk '/^\[GNUPG:\] ENC_TO / { print $3 }') export ROPTS="" export DEFAULTKEY="" if [ -f ~/.gnupg/gpg.conf ] ; then DEFAULTKEY=$(cat ~/.gnupg/gpg.conf |egrep "^default-key " |cut -f2 -d ' ') if [ -n "$DEFAULTKEY" ] ; then ROPTS="$ROPTS -r $DEFAULTKEY" #echo "DEBUG: after adding own key, ROPTS=$ROPTS" else echo "WARNING: Unable to re-encryt for Yourself (no default-key line)." echo "Please fill ~/.gnupg/gpg.conf with a default-key line." fi else echo "WARNING: Unable to re-encryt for Yourself (no ~/.gnupg/gpg.conf)." echo "Please fill ~/.gnupg/gpg.conf with a default-key line." fi ENCTOLIST=$(gpg --decrypt --list-only --status-fd 1 2>/dev/null $ORIGINAL |grep ENC_TO |awk '{print $3}') #RECIPIENTS=$(gpg --list-keys $ENCTOLIST |egrep "<.*@.*>" |cut -f2 -d '<' |cut -f1 -d '>') #echo "DEBUG: after adding eventual own key, ROPTS=$ROPTS" for RECEPIENT in $RECIPIENTS do ROPTS="$ROPTS -r $RECEPIENT" #echo "DEBUG: growing ROPTS=$ROPTS" done #echo "DEBUG: final ROPTS=$ROPTS" cp -av $RAMDIR/$ORINAME $RAMDIR/$ORINAME.orig rm -fv $RAMDIR/$GPGNAME echo gpg $GPGOPTS $ROPTS --output $RAMDIR/$GPGNAME --encrypt $RAMDIR/$EDITNAME gpg $GPGOPTS $ROPTS --output $RAMDIR/$GPGNAME --encrypt $RAMDIR/$EDITNAME if [ ! "$?" = "0" ] ; then echo "FATAL: Unable to re-encrypt $RAMDIR/$EDITNAME" #echo rm -rfv $RAMDIR rm -rfv $RAMDIR exit 31 fi fi echo cp -uva $RAMDIR/$GPGNAME $ORIDIR/$GPGNAME cp -uva $RAMDIR/$GPGNAME $ORIDIR/$GPGNAME if [ ! "$?" = "0" ] ; then echo "FATAL: Unable to copy $RAMDIR/$GPGNAME to $ORIDIR/$GPGNAME" #echo rm -rfv $RAMDIR rm -rfv $RAMDIR exit 32 fi if [ ! "$GPGNAME" = "$ORINAME" ] ; then #echo rm -fv $ORIDIR/$ORINAME rm -fv $ORIDIR/$ORINAME fi rm -rfv $RAMDIR