* gpgkeys_ldap.c: Replacement prototypes for setenv and unsetenv.
[gnupg.git] / keyserver / gpgkeys_mailto.in
index d2bde09..0691e4c 100755 (executable)
@@ -38,11 +38,13 @@ if(@ARGV)
 
 ($login,$name)=(getpwuid($<))[0,6];
 
+$from="$name <$login>";
+
 while(<STDIN>)
 {
     last if($_ eq "\n");
 
-    if(/^COMMAND (\w+)/)
+    if(/^COMMAND (\S+)/)
     {
        $command=$1;
     }
@@ -57,7 +59,7 @@ while(<STDIN>)
        $program=$1;
     }
 
-    if(/^OPTION (\w+)/)
+    if(/^OPTION (\S+)/)
     {
        if($1=~/^verbose$/i)
        {
@@ -78,6 +80,29 @@ if(!defined($address))
     exit(1);
 }
 
+# decode $address
+
+($address,$args)=split(/\?/,$address);
+
+if(defined($args))
+{
+    @pairs = split(/&/, $args);
+    foreach $pair (@pairs)
+    {
+       ($hdr, $val) = split(/=/, $pair);
+       $hdr =~ tr/+/ /;
+       $hdr =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+       $val =~ tr/+/ /;
+       $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
+# we only handle "from" right now
+       if($hdr=~/^from$/i)
+       {
+           $from=$val;
+           last;
+       }
+    }
+}
+
 while(<STDIN>)
 {
     last if($_ eq "\n");
@@ -89,7 +114,7 @@ while(<STDIN>)
 
 # Send response
 
-print "VERSION 0\n";
+print "VERSION 1\n";
 print "OPTION OUTOFBAND\n\n";
 
 # Email keyservers get and search the same way
@@ -104,7 +129,7 @@ if($command=~/get/i || $command=~/search/i)
     foreach $key (@keys)
     {
        open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n";
-       print MAIL "From: $name <$login>\n";
+       print MAIL "From: $from\n";
        print MAIL "To: $address\n";
        if($command=~/get/i)
        {
@@ -150,7 +175,7 @@ if($command=~/send/i)
 
        while(<STDIN>)
        {
-           if(/^KEY (\w+) BEGIN$/)
+           if(/^KEY (\S+) BEGIN$/)
            {
                $key=$1;
                last;
@@ -159,7 +184,7 @@ if($command=~/send/i)
 
        while(<STDIN>)
        {
-           if(/^KEY \w+ END$/)
+           if(/^KEY \S+ END$/)
            {
                last;
            }