summaryrefslogtreecommitdiffstats
path: root/bin/ez-pine-gpg-helper-sender
blob: 25f3586d78270e9eacecb90feb207abb7573f4e0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#!/bin/sh

########################################################
## ez-pine-gpg-helper-sender                          ##
## part of ez-pine-gpg v0.4h // gpg filters for pine  ##
## http://Business-PHP.com/opensource/ez-pine-gpg/    ##
## (c) 13 Feb 2004, Atom Emet                         ##
## (c) 16 Dec 2004, Atom Emet                         ##
## Atom {at} Business-PHP.com                         ##
## Distributed under the GNU General Public License   ##
## http://www.gnu.org/copyleft/gpl.html               ##
##                                                    ##
##  ################################################  ##
##                                                    ##
## This program is free software; you can             ##
## redistribute it and/or modify it under the terms   ##
## of the GNU General Public License as published by  ##
## the Free Software Foundation; either version 2 of  ##
## the License, or (at your option) any later         ##
## version.                                           ##
##                                                    ##
## This program is distributed in the hope that it    ##
## will be useful, but WITHOUT ANY WARRANTY; without  ##
## even the implied warranty of MERCHANTABILITY or    ##
## FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     ##
## General Public License for more details.           ##
##                                                    ##
## You should have received a copy of the GNU         ##
## General Public License along with this program;    ##
## if not, write to the                               ##
## Free Software Foundation, Inc.,                    ##
## 59 Temple Place - Suite 330,                       ##
## Boston, MA  02111-1307, USA.                       ##
########################################################

#########################################
## PATH is configured during installation
PATH=/bin:/usr/bin:/home/bnewbold/bin

##########################################################################
## make sure the role being used to send has a valid key in the keyring ##
##########################################################################

#####################################################
## the var "msg" is the full headers and message body
##
msg="`cat`"

######################################################################################
## if there is an "OpenPGP" find the "id" field <http://josefsson.org/openpgp-header/>
## use that key for signing:
##                                  OpenPGP: id=0x12345678
##
if which 822fields >& - 2>& -
then
    key_id=`echo "${msg}" | 822fields OpenPGP | sed 's!([^)]*)!!g' | tr ' ;' '\n'  | egrep ^id | cut -d= -f2`
    if [ "${key_id}" ]
    then
	echo "Signing with \"OpenPGP\" UID: ${key_id}" 1>&2
	echo "${key_id}"
	key_id= ; msg=
	exit 0
    fi
fi

###############################################################
## if there is a header "X-OpenPGP-KeyID" or "X-OpenPGP-Key-ID"
## use that key for signing:
##                                  X-OpenPGP-KeyID: 0x12345678
##
key_id=`echo "${msg}" | tr -d '\r' | egrep -i '^X-OpenPGP-Key(-)?ID: ' | tr ' ' '\n' | egrep '0x' | head -n 1`
if [ "${key_id}" ]
then
    echo "${key_id}"
    key_id= ; msg=
    exit 0
fi

###############################################
## the last token on the "From" line is used as
## gpg's "--local-user" option
## angle brackets (<>) are stripped off
##
from=`echo "${msg}" | egrep '^From: ' | head -n 1 | tr -d '[\n\r]' | sed 's/^.* // ; s/[<>]//g'`

#######################################
## make sure we've found a valid sender
##
if ! gpg --list-secret-keys ${from} 2>&- 1>&- && [ "`echo ${from} | egrep '.*-.*@'`" ]
then
    echo '/////////////////////////////////////////////////////////////////////////' 1>&2
    echo "// No secret key found for <${from}>"                                      1>&2
    from=`echo ${from} | sed 's/-.*@/@/'`
    echo "// Should I try signing with a key for <${from}>? [Y/n]: " | tr -d '\n'    1>&2
    read answer 0< /dev/tty
    if [ `echo "${answer}" | egrep -i n` ]
    then
	msg= ; from=
	exit 2
    fi
    echo 1>&2
fi

#########################################################
## echo the sending address that we have a secret key for
## this returns the address to the calling process
echo "${from}"

########################################
## unset variables we don't need anymore
##
msg= ; from=

#############
## we're done
##
exit 0