diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/ChangeLog | 4 | ||||
-rw-r--r-- | tools/Makefile.am | 2 | ||||
-rwxr-xr-x | tools/mail-signed-keys | 75 |
3 files changed, 80 insertions, 1 deletions
diff --git a/tools/ChangeLog b/tools/ChangeLog index e936bfcd9..dbd879b43 100644 --- a/tools/ChangeLog +++ b/tools/ChangeLog @@ -1,3 +1,7 @@ +Wed Jul 5 13:28:45 CEST 2000 Werner Koch <wk@> + + * mail-signed-keys: New. + Tue May 23 09:19:00 CEST 2000 Werner Koch <[email protected]> * ring-a-party: New. diff --git a/tools/Makefile.am b/tools/Makefile.am index b4050abf9..422a715a8 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -1,6 +1,6 @@ ## Process this file with automake to produce Makefile.in -EXTRA_DIST = lspgpot +EXTRA_DIST = lspgpot ring-a-party mail-signed-keys INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/intl needed_libs = ../cipher/libcipher.a \ ../mpi/libmpi.a ../util/libutil.a @INTLLIBS@ diff --git a/tools/mail-signed-keys b/tools/mail-signed-keys new file mode 100755 index 000000000..3f9f01831 --- /dev/null +++ b/tools/mail-signed-keys @@ -0,0 +1,75 @@ +#!/bin/sh + +if [ -z "$1" -o -z "$2" ]; then + echo "usage: mail-signed-keys keyring signedby" >&2 + exit 1 +fi + +if [ ! -f $1 ]; then + echo "mail-signed-keys: '$1': no such file" >&2 + exit 1 +fi + +[ -f '.#tdb.tmp' ] && rm '.#tdb.tmp' +ro="--trustdb-name=./.#tdb.tmp --dry-run --lock-never --no-default-keyring --keyring $1" + +signedby=`gpg $ro --fast-list-mode --list-keys --with-colons $2 \ + 2>/dev/null | awk -F: '$1=="pub" {print $5; exit 0}'` + +if [ -z "$signedby" ]; then + echo "mail-signed-keys: '$2': no such signator" >&2 + exit 1 +fi + +echo "About to send the the keys signed by $signedby" >&2 +echo -n "to their owners. Do you really want to do this? (y/N)" >&2 +read +[ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0 + + +gpg $ro --check-sigs --with-colons 2>/dev/null \ + | awk -F: -v signedby="$signedby" -v gpgopt="$ro" ' +BEGIN { sendmail="/usr/lib/sendmail -oi -t " } +$1 == "pub" { nextkid=$5; nextuid=$10 + if( uidcount > 0 ) { myflush() } + kid=nextkid; uid=nextuid; next + } +$1 == "uid" { uid=$10 ; next } +$1 == "sig" && $2 == "!" && $5 == signedby { uids[uidcount++] = uid; next } +END { if( uidcount > 0 ) { myflush() } } + +function myflush() +{ + if ( kid == signedby ) { uidcount=0; return } + print "sending key " substr(kid,9) " to" | "cat >&2" + for(i=0; i < uidcount; i++ ) { + print " " uids[i] | "cat >&2" + if( i == 0 ) { + printf "To: %s", uids[i] | sendmail + } + else { + printf ",\n %s", uids[i] | sendmail + } + } + printf "\n" | sendmail + print "Subject: I signed your key " substr(kid,9) | sendmail + print "" | sendmail + print "Hi," | sendmail + print "" | sendmail + print "Here you get back the signed key." | sendmail + print "" | sendmail + print "ciao," | sendmail + print " your Key Signator" | sendmail + print "" | sendmail + cmd = "gpg " gpgopt " --export -a " kid " 2>/dev/null" + while( (cmd | getline) > 0 ) { + print | sendmail + } + print "" | sendmail + close(cmd) + close( sendmail ) + uidcount=0 +} +' + + |