]> the.earth.li Git - onak.git/blobdiff - onak-mail.pl.in
Improve memory clean-up on exit
[onak.git] / onak-mail.pl.in
index 263b7270cf8801c19ef1878267f2fe168bb17887..097404e67b6a9df44761bfbb5ff1d15748ecb712 100644 (file)
@@ -2,8 +2,7 @@
 #
 # onak-mail.pl - Mail processing interface for onak, an OpenPGP Keyserver.
 #
-# Written by Jonathan McDowell <noodles@earth.li>
-# Copyright 2002-2005 Project Purple
+# Copyright 2002-2005 Jonathan McDowell <noodles@earth.li>
 # Released under the GPL.
 #
 
@@ -38,8 +37,6 @@ sub readconfig {
                        $config{'mta'} = $1;
                } elsif (/^pks_bin_dir (.*)/) {
                        $config{'pks_bin_dir'} = $1;
-               } elsif (/^db_dir (.*)/) {
-                       $config{'db_dir'} = $1;
                } elsif (/^mail_dir (.*)/) {
                        $config{'mail_dir'} = $1;
                } elsif (/^syncsite (.*)/) {
@@ -88,7 +85,7 @@ sub processmail($$$$$) {
        # HELP, ADD, INCREMENTAL, VERBOSE INDEX <keyid>, INDEX <keyid>,
        # GET <keyid>, LAST <days>
        
-       if ($subject =~ /^INCREMENTAL$/i) {
+       if ($subject =~ /^(INCREMENTAL|ADD)$/i) {
                my $site;
                my $count;
                my $i;
@@ -110,6 +107,21 @@ sub processmail($$$$$) {
                        $time[2], $time[1], $time[0];
                print LOG "] onak-mail[$$]: Syncing with $count sites.\n";
                close LOG;
+
+               if ($subject =~ /ADD/i) {
+                       open(MAIL, "|$config{mta}");
+                       print MAIL "From: $config{adminemail}\n";
+                       print MAIL "To: $replyto\n";
+                       print MAIL "Subject: Reply to ADD\n";
+                       print MAIL "Precedence: list\n";
+                       print MAIL "MIME-Version: 1.0\n";
+                       print MAIL "Content-Type: text/plain\n";
+                       print MAIL "\n";
+                       print MAIL "Thank you for your recent key submission.",
+                               " It has been processed and synced\n",
+                               "with ", $count, " other keyservers.\n";
+                       close MAIL;
+               }
        
                if ((! defined($newupdate[0])) || $newupdate[0] eq '') {
                        open (LOG, ">>$config{'logfile'}");
@@ -198,17 +210,18 @@ my $tmpfile = sprintf "%s/%04d%02d%02d-%02d%02d%02d-%d.onak",
                        $time[1],
                        $time[0],
                        $$;
-open(MAILFILE, '>'.$tmpfile);
+open(MAILFILE, '>'.$tmpfile.'.tmp');
 while (<>) {
        print MAILFILE $_;
 }
 close(MAILFILE);
+rename $tmpfile.".tmp", $tmpfile;
 
 #
 # Lock here to ensure that only one copy of us is processing the incoming
 # mail queue at any point in time.
 #
-sysopen(LOCKFILE, $config{'db_dir'}.'/onak-mail.lck',
+sysopen(LOCKFILE, $config{'mail_dir'}.'/onak-mail.lck',
                O_WRONLY|O_CREAT|O_EXCL) or exit;
 print LOCKFILE "$$";
 close(LOCKFILE);
@@ -242,7 +255,7 @@ while ($file = readdir(MAILDIR)) {
                        push @body, $_;
                }
        }
-       if (! defined($replyto)) {
+       if ($replyto eq '') {
                $replyto = $from;
        }
        close(FILE);
@@ -251,4 +264,4 @@ while ($file = readdir(MAILDIR)) {
        processmail($subject, $from, $replyto, \%seenby, \@body);
 }
 closedir(MAILDIR);
-unlink $config{'db_dir'}.'/onak-mail.lck';
+unlink $config{'mail_dir'}.'/onak-mail.lck';