]> the.earth.li Git - onak.git/blobdiff - onak-mail.pl.in
Bump debhelper compat level to 13
[onak.git] / onak-mail.pl.in
index 77a3d3677de9174f42587601bf8bb802be8894bf..2083042e86d716ba7bc19fb7c93b599489c4d787 100644 (file)
@@ -14,14 +14,14 @@ use IPC::Open3;
 my %config;
 
 #
-# readconfig
+# readoldconfig
 #
-# Reads in our config file. Ignores any command it doesn't understand rather
-# than having to list all the ones that are of no interest to us.
+# Read an old pksd-style config file. Currently if both old and new style
+# files are present the old style will be preferred in order to ensure smooth
+# upgrades.
 #
-sub readconfig {
-
-       open(CONFIG, "@CONFIG@") or
+sub readoldconfig {
+       open(CONFIG, "@CMAKE_INSTALL_FULL_SYSCONFDIR@/onak.conf") or
                die "Can't read config file: $!";
        
        while (<CONFIG>) {
@@ -37,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 (.*)/) {
@@ -51,6 +49,54 @@ sub readconfig {
        return;
 }
 
+#
+# readconfig
+#
+# Reads in our config file. Ignores any command it doesn't understand rather
+# than having to list all the ones that are of no interest to us.
+#
+sub readconfig {
+       # Prefer the old style config if it exists.
+       if (-e "@CMAKE_INSTALL_FULL_SYSCONFDIR@/onak.conf") {
+               &readoldconfig;
+               return;
+       }
+
+       open(CONFIG, "@CMAKE_INSTALL_FULL_SYSCONFDIR@/onak.ini") or
+               die "Can't read config file: $!";
+
+       my $section = "";
+       while (<CONFIG>) {
+               if (/^#/ or /^$/) {
+                       # Ignore; comment line.
+               } elsif (/^\[(\w+)\]/) {
+                       $section = $1;
+               } elsif ($section eq "main") {
+                       if (/^logfile\s*=\s*(.*)/) {
+                               $config{'logfile'} = $1;
+                       }
+               } elsif ($section eq "mail") {
+                       if (/^this_site\s*=\s*(.*)/) {
+                               $config{'thissite'} = $1;
+                       } elsif (/^maintainer_email\s*=\s*(.*)/) {
+                               $config{'adminemail'} = $1;
+                       } elsif (/^mta\s*=\s*(.*)/) {
+                               $config{'mta'} = $1;
+                       } elsif (/^bin_dir\s*=\s*(.*)/) {
+                               $config{'pks_bin_dir'} = $1;
+                       } elsif (/^mail_dir\s*=\s*(.*)/) {
+                               $config{'mail_dir'} = $1;
+                       } elsif (/^syncsite\s*=\s*(.*)/) {
+                               push @{$config{'syncsites'}}, $1;
+                       }
+               }
+       }
+
+       close(CONFIG);
+
+       return;
+}
+
 #
 # submitupdate
 #
@@ -212,17 +258,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);
@@ -265,4 +312,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';