From c9497882fb70672ae59fd5c5b955dc4fb4dab614 Mon Sep 17 00:00:00 2001 From: Thomas Hochstein Date: Wed, 26 Sep 2012 21:26:54 +0200 Subject: [PATCH] Release of upstream version 4.11. Signed-off-by: Thomas Hochstein --- CHANGES | 14 +++++++---- README | 5 ++-- UVconfig.pm | 3 ++- UVreadmail.pm | 64 ++++++++++++++++++++++++++++++++------------------- usevote.cfg | 3 +++ uvballot.pl | 2 +- uvbounce.pl | 2 +- uvcfv.pl | 2 +- uvcount.pl | 2 +- uvvote.pl | 14 ++--------- 10 files changed, 64 insertions(+), 47 deletions(-) diff --git a/CHANGES b/CHANGES index 281a395..e26eb94 100644 --- a/CHANGES +++ b/CHANGES @@ -1,15 +1,21 @@ -UseVoteGer Versionshistorie (aktuelle Version: 4.10, released 17.09.2012) +UseVoteGer Versionshistorie (aktuelle Version: 4.11, released 25.09.2012) ========================================================================= TODO: - aussortieren von Bounces aus Stimmenliste -- Unterstuetzung von Maildir - [Zugschlus] ich fänd es klasse, wenn man eine Kopie des Wahlscheines ins Abstimmungsverzeichnis legt und Usevote einem dann auf Abruf ein diff oder wdiff zwischen Sollwahlschein und wirklich eingreichtem Wahlschein macht. Auf diese Weise erwischt man auch kleine Änderungen am Datenschutzhinweis (da bin ich eben in eine Falle von th-h getappt). +Version 4.11 (25.09.2012): +- Regular Expression fuer Pruefung des Abstimmungsnamens verbessert. + Es kam zu vielen False Positives +- Einlesen der Mailbox auf Perlmodule Mail::Box umgestellt, damit + auch Maildir moeglich (neue Option "mailboxtype" in usevote.cfg). + Archivierung erfolgt aber vorerst weiterhin immer als mbox + Version 4.10 (17.09.2012): - Fehler in uvvote.pl, Zeile 126 behoben (Verarbeitung von temporaeren Dateien - es wurde nicht korrekt auf vorhandene Temp-Dateien @@ -23,7 +29,7 @@ Version 4.10 (17.09.2012): auf die Ack-Mail geschickt werden koennen) - Fehler in Annullierungsbearbeitung behoben (wurde nur bei erstem oder letztem Abstimmungspunkt ausgewertet) -- Abstimmungsname wird nun auf Korrektheit geprüft (Wahlschein gehört +- Abstimmungsname wird nun auf Korrektheit geprueft (Wahlschein gehört zur richtigen Abstimmung) - neue Konfigurations-Option "ballotintro" und neues Template tpl_wrong_voting @@ -36,7 +42,7 @@ Version 4.09 (14.09.2007): - "votefile"-Option in usevote.cfg an passendere Stelle verschoben und den Kommentar korrigiert (natuerlich gilt pop3=0 als Bedingung, nicht etwa wie vorher angegeben smtp=0) -- Fehler in Template für Ergebnisausgabe korrigiert (fehlendes Newline +- Fehler in Template fuer Ergebnisausgabe korrigiert (fehlendes Newline nach umgebrochenen Abstimmungspunkten) - Fehler in Doku der Kommandozeilenoptionen von uvcount.pl behoben (--voters statt --votes) diff --git a/README b/README index 158e3b6..3746e04 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -UseVoteGer 4.10 (c) 2001-2012 Marc Langer +UseVoteGer 4.11 (c) 2001-2012 Marc Langer UseVoteGer is a voting software for usenet votes. @@ -18,7 +18,7 @@ written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented! ------------------------------------------------------------------------------- -UseVoteGer 4.10 - Usenet-Abstimmungssoftware +UseVoteGer 4.11 - Usenet-Abstimmungssoftware =========================================== von Marc Langer @@ -958,6 +958,7 @@ votename Name der Abstimmung group1 Erster Abstimmungsgegenstand group2 Zweiter (und so weiter durchnummerieren) votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet) +mailboxtype Typ der Mailbox (mbox, maildir) personal Personalisierte Wahlscheine verwenden? [BOOL] (siehe gesonderten Abschnitt weiter oben) voteaccount Mailadresse, unter der abgestimmt werden kann diff --git a/UVconfig.pm b/UVconfig.pm index ee7f21e..a12aa56 100644 --- a/UVconfig.pm +++ b/UVconfig.pm @@ -18,7 +18,7 @@ require Exporter; $VERSION = "0.18"; # Usevote version -$usevote_version = "UseVoteGer 4.10"; +$usevote_version = "UseVoteGer 4.11"; sub read_config { @@ -45,6 +45,7 @@ sub read_config { voteaccount => "<> (unkonfiguriertes Usevote)", mailfrom => "<> (unkonfiguriertes Usevote)", envelopefrom => "<>", + mailboxtype => "mbox", mailstart => "^From ", archivedir => "fertig", tmpdir => "tmp", diff --git a/UVreadmail.pm b/UVreadmail.pm index e1e599c..01d062f 100644 --- a/UVreadmail.pm +++ b/UVreadmail.pm @@ -9,6 +9,7 @@ use UVmessage; use MIME::QuotedPrint; use MIME::Base64; use MIME::Parser; +use Mail::Box::Manager; use POSIX qw(strftime); use vars qw($VERSION); @@ -118,37 +119,52 @@ sub process { close (UIDLCACHE) or print STDERR UVmessage::get("READMAIL_UIDL_CLOSE") . "\n"; } - # make archive of all mails - my $fileproblem = 0; - open (VOTES, ">$filename") or $fileproblem = 1; - if ($fileproblem) { - print STDERR UVmessage::get("READMAIL_ARCHIVE_PROBLEM", - (FILE => $filename)) . "\n"; - } else { - print VOTES join ("\n", @mails); - close (VOTES) - or print STDERR UVmessage::get("READMAIL_ARCHIVE_CLOSE", - (FILE => $filename)) . "\n"; - } - $pop->quit(); + # Mailbox / Maildir } else { - # open mail file - open(VOTES, "<$filename") - or die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $filename)) . "\n\n"; - # read all mails - my $i = 0; - while () { - if (/$config{mailstart}/) { - $i++; + my $mgr = Mail::Box::Manager->new; + my $folder; + + eval{ + $folder = $mgr->open( folder => $config{votefile}, + create => 0, + access => 'rw', + type => $config{mailboxtype}, + expand => 'LAZY', + ); + }; + die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $config{votefile})) . "\n\n" if $@; + + # Iterate over the messages. + foreach (@$folder) { + my $mail = $_->string; + $_->delete(); + my $fromline = 'From '; + if ($mail =~ /From: .*?<(.+?)>/) { + $fromline .= $1; + } elsif ($mail =~ /From:\s+?(\S+?\@\S+?)\s/) { + $fromline .= $1; + } else { + $fromline .= 'foo@bar.invalid'; } - $mails[$i] = ($mails[$i] || "") . $_; + $fromline .= ' ' . localtime() . "\n"; #strftime ('%a %b %d %H:%M:%S %Y', localtime) . "\n"; + push (@mails, $fromline . $mail); } + } - # close mail file - close(VOTES); + # make archive of all mails + my $fileproblem = 0; + open (VOTES, ">$filename") or $fileproblem = 1; + if ($fileproblem) { + print STDERR UVmessage::get("READMAIL_ARCHIVE_PROBLEM", + (FILE => $filename)) . "\n"; + } else { + print VOTES join ("\n", @mails); + close (VOTES) + or print STDERR UVmessage::get("READMAIL_ARCHIVE_CLOSE", + (FILE => $filename)) . "\n"; } foreach my $mail (@mails) { diff --git a/usevote.cfg b/usevote.cfg index d6a6b33..20f4bc9 100644 --- a/usevote.cfg +++ b/usevote.cfg @@ -90,6 +90,9 @@ pop3 = 1 # Mailbox, in der die zu verarbeitenden Mails liegen (falls pop3=0) votefile = votes +# Typ der Mailbox (mbox, maildir) +mailboxtype = mbox + # POP3-Einstellungen fuer Abruf der eingehenden Wahlscheine: # Server, Port, Benutzername, Passwort pop3server = 127.0.0.1 diff --git a/uvballot.pl b/uvballot.pl index 7081744..6933233 100644 --- a/uvballot.pl +++ b/uvballot.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.10 Wahlscheingenerierung +# UseVoteGer 4.11 Wahlscheingenerierung # (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or diff --git a/uvbounce.pl b/uvbounce.pl index eb95143..03f1e1d 100644 --- a/uvbounce.pl +++ b/uvbounce.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.10 Bounce-Verarbeitung +# UseVoteGer 4.11 Bounce-Verarbeitung # (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or diff --git a/uvcfv.pl b/uvcfv.pl index f2a81b0..a053e77 100644 --- a/uvcfv.pl +++ b/uvcfv.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.10 Personalisierte Wahlscheine +# UseVoteGer 4.11 Personalisierte Wahlscheine # (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or diff --git a/uvcount.pl b/uvcount.pl index 5c4ba2f..11af9c1 100644 --- a/uvcount.pl +++ b/uvcount.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.10 Stimmauswertung +# UseVoteGer 4.11 Stimmauswertung # (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or diff --git a/uvvote.pl b/uvvote.pl index 4affb4c..4b3b2b1 100644 --- a/uvvote.pl +++ b/uvvote.pl @@ -1,7 +1,7 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.10 Wahldurchfuehrung +# UseVoteGer 4.11 Wahldurchfuehrung # (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or @@ -135,16 +135,6 @@ if ($clean) { my $thisresult = "ergebnis-" . $ext; my $thisvotes = "stimmen-" . $ext; - # POP3 not activated: rename votes file - unless ($config{pop3}) { - print UVmessage::get("VOTE_RENAMING_MAILBOX"), "\n"; - rename ($config{votefile}, "$config{tmpdir}/$thisvotes") - or die UVmessage::get("ERR_RENAME_MAILFILE") . "$!\n\n"; - - # wait, so that current mail deliveries can finalize - sleep 2; - } - # open results file open (RESULT, ">>$config{tmpdir}/$thisresult") or die UVmessage::get("VOTE_WRITE_RESULTS", (FILE=>$thisresult)) . "\n\n"; @@ -241,7 +231,7 @@ sub process_vote { } # correct voting? - if ($$body =~ /\Q$config{ballotintro}\E\s+(.+?)\s*\n(.*?[\t ]+(\S+.+)\s*$)?/m) { + if ($$body =~ /\Q$config{ballotintro}\E\s+(.+?)[^\S\n]*\n([>:|]*?[\t ]+(\S+.+)\s*$)?/m) { $voting = $1; $voting .= " $3" if defined($3); push (@errors, 'WrongVoting') if ($config{votename} !~ /^\s*\Q$voting\E\s*$/);