#!/bin/sh

# $Id: ppf_mime,v 1.9 2007/11/22 10:04:22 dougb Exp $

# Please see detailed Copyright below

PATH=/bin:/usr/bin:/usr/local/bin ; export PATH
umask 077

: ${TMPDIR:=/tmp}
TDIR=`mktemp -d ${TMPDIR}/ppf_mime.XXXXXXXX` ||
    {	echo '' >&2
	echo "$0: mktemp failed, exiting" >&2
	echo '' >&2
	exit 1;}

trap "rm -f ${TDIR}/* ; rmdir ${TDIR} ; exit" 0 1 2 15

pgp_failed () {
	echo "$0: Your pgp command failed" >&2
	echo '' >&2
	cat ${TDIR}/stderr >&2
	exit 1
}

csplit -s -k -f ${TDIR}/f - '/^Content-Type: /' {7} 2>/dev/null

# Reliably find the message body and signature
sigfile=`grep -l '^-----BEGIN PGP SIGNATURE-----$' ${TDIR}/f*`
case "$sigfile" in
'')		echo 'No PGP signature found' > ${TDIR}/stderr
		pgp_failed
		;;
${TDIR}/f03)	msgfile=f02 ;;
${TDIR}/f04)	msgfile=f03 ;;
${TDIR}/f05)	msgfile=f04 ;;
${TDIR}/f06)	msgfile=f05 ;;
esac

# The last two lines of the file are added by MIME encoding,
# so they must be stripped in order for the signature to verify.
# The second sed invocation canonicalizes the EOL characters,
# per RFC 3156.
sed -n -e :a -e '1,3!{P;N;D;}' -e 'N;ba' ${TDIR}/$msgfile | \
    sed -e 's,
$,,g' -e 's,$,
,g' >${TDIR}/message

/usr/local/bin/gpg --verify $sigfile ${TDIR}/message 2>${TDIR}/stderr || pgp_failed

# Output will be 19 characters total so adjust status message length accordingly
date=`date +"%Y-%m-%d %H:%M:%S"`

egrep -hi '^(From|Resent-From|To|Reply-To|Resent-To|Cc|Resent-cc|Bcc|Newsgroups|Followup-To|Date|Resent-Date|Organi[sz]ation|X-Mailer|User-Agent|Subject|Resent-Subject):' ${TDIR}/f0[01]
echo ''
echo '---------------------------- PGP Command Output ----------------------------'
grep -v '^$' ${TDIR}/stderr
echo "----------- Begin PGP Signed Message Verified $date ----------"
echo ''

# Remove the MIME headers from the message, and display it as a side effect
sed -e '1,3d' -e '4s/^Content-.*//' \
    -e 's,=20
, 
,' -e 's,=3D,=,g' ${TDIR}/message

echo ''
echo "------------ End PGP Signed Message Verified $date -----------"

exit 0

#  Copyright (c) 2003-2007 Douglas Barton
#  All rights reserved.
#
#  Redistribution and use in source and binary forms, with or without
#  modification, are permitted provided that the following conditions
#  are met:
#  1. Redistributions of source code must retain the above copyright
#     notice, this list of conditions and the following disclaimer.
#  2. Redistributions in binary form must reproduce the above copyright
#     notice, this list of conditions and the following disclaimer in the
#     documentation and/or other materials provided with the distribution.
#
#  THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
#  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
#  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
#  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
#  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
#  OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
#  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
#  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
#  OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
#  SUCH DAMAGE.

