c31048360d019b94ad7721866db8d5df6f096f5d
[gnupg.git] / keyserver / gpgkeys_mailto.in
1 #!@PERL@ -w
2
3 # gpgkeys_mailto - talk to a email keyserver
4 # Copyright (C) 2001, 2002 Free Software Foundation, Inc.
5 #
6 # This file is part of GnuPG.
7 #
8 # GnuPG is free software; you can redistribute it and/or modify
9 # it under the terms of the GNU General Public License as published by
10 # the Free Software Foundation; either version 2 of the License, or
11 # (at your option) any later version.
12 #
13 # GnuPG is distributed in the hope that it will be useful,
14 # but WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 # GNU General Public License for more details.
17 #
18 # You should have received a copy of the GNU General Public License
19 # along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
21
22 use Getopt::Std;
23 $sendmail="@SENDMAIL@ -t";
24
25 ###
26
27 getopts('o:');
28
29 if(defined($opt_o))
30 {
31     open(STDOUT,">$opt_o") || die "Can't open output file $opt_o\n";
32 }
33
34 if(@ARGV)
35 {
36     open(STDIN,$ARGV[0]) || die "Can't open input file $ARGV[0]\n";
37 }
38
39 ($login,$name)=(getpwuid($<))[0,6];
40
41 while(<STDIN>)
42 {
43     last if($_ eq "\n");
44
45     if(/^COMMAND (\w+)/)
46     {
47         $command=$1;
48     }
49
50     if(/^HOST (\S+)/)
51     {
52         $host=$1;
53     }
54
55     if(/^OPTION (\w+)/)
56     {
57         if($1=~/^verbose$/i)
58         {
59             $verbose++;
60         }
61         elsif($1=~/^no-verbose$/i)
62         {
63             $verbose--;
64         }
65     }
66 }
67
68 while(<STDIN>)
69 {
70     last if($_ eq "\n");
71
72     chomp;
73
74     push(@keys,$_);
75 }
76
77 # Send response
78
79 print "VERSION 0\n";
80 print "OPTION OUTOFBAND\n\n";
81
82 # Email keyservers get and search the same way
83
84 if($command=~/get/i || $command=~/search/i)
85 {
86     if($command=~/search/i)
87     {
88         print "COUNT 0\n";
89     }
90
91     foreach $key (@keys)
92     {
93         open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n";
94         print MAIL "From: $name <$login>\n";
95         print MAIL "To: $host\n";
96         if($command=~/get/i)
97         {
98             # mail keyservers don't like long-form keyids
99
100             if(substr($key,0,2) eq "0x")
101             {
102                 $key=substr($key,2);
103             }
104
105             if(length($key)>8)
106             {
107                 $key=substr($key,-8);
108             }
109
110             print MAIL "Subject: GET 0x$key\n\n";
111         }
112         else
113         {
114             print MAIL "Subject: GET $key\n\n";
115         }
116         print MAIL "GnuPG keyserver request\n";
117         close(MAIL);
118
119         # Tell GnuPG not to expect a key
120         print "KEY $key OUTOFBAND\n";
121
122         if($verbose)
123         {
124             print STDERR "gpgkeys: key $key requested from $host\n";
125         }
126     }
127 }
128
129 if($command=~/send/i)
130 {
131     while(!eof(STDIN))
132     {
133         open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n";
134         print MAIL "From: $name <$login>\n";
135         print MAIL "To: $host\n";
136         print MAIL "Subject: ADD\n\n";
137
138         while(<STDIN>)
139         {
140             if(/^KEY (\w+) BEGIN$/)
141             {
142                 $key=$1;
143                 last;
144             }
145         }
146
147         while(<STDIN>)
148         {
149             if(/^KEY \w+ END$/)
150             {
151                 last;
152             }
153
154             print MAIL;
155         }
156
157         close(MAIL);
158
159         if($verbose)
160         {
161             print STDERR "gpgkeys: key $key sent to $host\n";
162         }
163     }
164 }