diff --git a/CHANGES b/CHANGES index 2d0d6d2..e26eb94 100644 --- a/CHANGES +++ b/CHANGES @@ -1,21 +1,48 @@ -UseVoteGer Versionshistorie (aktuelle Version: 4.09, released 07.10.2007) +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 + geprueft) +- Typo in bdsgtext.cfg behoben +- doppelten Identifier "VOTE_NO_VOTES" in messages.cfg/uvvote.pl umbenannt +- templates/ack-mail: Votetaker (Unterschrift) linksbuendig statt + wie vorher rechtsbuendig einfuegen; Anleitung fuer Annullierungen + verbessert; Hinweis darauf, dass Stimmaenderungen an den + Voteaccount geschickt werden muessen und nicht einfach als Antwort + auf die Ack-Mail geschickt werden koennen) +- Fehler in Annullierungsbearbeitung behoben (wurde nur bei erstem + oder letztem Abstimmungspunkt ausgewertet) +- Abstimmungsname wird nun auf Korrektheit geprueft (Wahlschein gehört + zur richtigen Abstimmung) +- neue Konfigurations-Option "ballotintro" und neues Template + tpl_wrong_voting +- usenet@ und news@ werden nicht mehr als ungueltige Mailadressen + angesehen. Vor allem usenet@ wird von vielen Waehlern verwendet. +- Aenderung der Wahlregeln: statt 60 nur noch 50 JA-Stimmen benoetigt +- kleinere Template-Aenderungen (verbesserte Texte/Formatierungen) 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 e2a7e66..3746e04 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -UseVoteGer 4.09 (c) 2001-2007 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.09 - Usenet-Abstimmungssoftware +UseVoteGer 4.11 - Usenet-Abstimmungssoftware =========================================== von Marc Langer @@ -89,9 +89,6 @@ I. Einmalig bei der Usevote-Erstinstallation sehr einfach mit "perl -MCPAN -e shell", ActivePerl fuer Windows hat einen eigenen Paketmanager) - Achtung: Bei meinem ActivePerl 5.6.1 war eine alte Libnet-Version - enthalten, die noch keine SMTP-Authentication unterstuetzte. - Bei Benutzung dieses Features muss evtl. erst upgedated werden. II. Fuer jedes Voting (1) usevote.cfg auf das durchzufuehrende Voting anpassen @@ -961,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 c93f135..a12aa56 100644 --- a/UVconfig.pm +++ b/UVconfig.pm @@ -18,7 +18,7 @@ require Exporter; $VERSION = "0.18"; # Usevote version -$usevote_version = "UseVoteGer 4.09"; +$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/mailpatterns.cfg b/mailpatterns.cfg index 0fbbd31..3add0f8 100644 --- a/mailpatterns.cfg +++ b/mailpatterns.cfg @@ -25,7 +25,6 @@ hostmaster@ install@ mailer.*@ maint.*@ -news@ newsmaster@ nobody@ operator@ @@ -38,5 +37,4 @@ sysop@ system@ test@ tutor@ -usenet@ uucp@ diff --git a/templates/ack-mail b/templates/ack-mail index 9b76f7f..4d69cef 100644 --- a/templates/ack-mail +++ b/templates/ack-mail @@ -26,9 +26,6 @@ Diese Wahl ist oeffentlich, und die Adressen aller Waehlerinnen und Waehler werden am Ende bekanntgegeben. Wenn du deine Adresse & Stimme loeschen willst, kannst du erneut abstimmen und dabei 'ANNULLIERUNG' anstelle von 'JA' oder 'NEIN' angeben. \[Doppel-N, Doppel-L :-)\] -Bei mehreren Abstimmungspunkten muss 'ANNULLIERUNG' bereits beim -Abstimmungspunkt #1 angegeben werden, damit der erhoffte Erfolg -eintritt. ;) [?personal|Da diese Abstimmung mit personalisierten Wahlscheinen durchgefuehrt wird, sind auch saemtliche Aenderungen nur mit Angabe der folgenden @@ -39,7 +36,7 @@ Wahlscheinkennung gueltig! [$name-line] (Real-Namen sind fuer diese Abstimmung vorgeschrieben. Wenn hier nicht Dein wirklicher Name steht, dann korrigiere die Zeile - bitte und sende die Nachricht erneut an die Abstimmadresse; + bitte und sende die Nachricht erneut an die Abstimmadresse, sonst kann die Stimme spaeter als ungueltig gewertet werden.) diff --git a/templates/wrong-voting b/templates/wrong-voting index 1d12e31..f233b7d 100644 --- a/templates/wrong-voting +++ b/templates/wrong-voting @@ -18,4 +18,4 @@ Hier die Mail, die ich erhalten habe: [$votetaker] -\[mit [$usevote_version]\] \ No newline at end of file +\[mit [$usevote_version]\] diff --git a/usevote.cfg b/usevote.cfg index aee1fc1..c472b45 100644 --- a/usevote.cfg +++ b/usevote.cfg @@ -90,6 +90,8 @@ 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 4085a7f..6933233 100755 --- a/uvballot.pl +++ b/uvballot.pl @@ -1,8 +1,8 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.09 Wahlscheingenerierung -# (c) 2001-2005 Marc Langer +# UseVoteGer 4.11 Wahlscheingenerierung +# (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by the diff --git a/uvbounce.pl b/uvbounce.pl index 1bf5139..03f1e1d 100755 --- a/uvbounce.pl +++ b/uvbounce.pl @@ -1,8 +1,8 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.09 Bounce-Verarbeitung -# (c) 2001-2005 Marc Langer +# UseVoteGer 4.11 Bounce-Verarbeitung +# (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by the diff --git a/uvcfv.pl b/uvcfv.pl index 6179915..a053e77 100755 --- a/uvcfv.pl +++ b/uvcfv.pl @@ -1,8 +1,8 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.09 Personalisierte Wahlscheine -# (c) 2001-2005 Marc Langer +# UseVoteGer 4.11 Personalisierte Wahlscheine +# (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by the diff --git a/uvcount.pl b/uvcount.pl index 014494e..11af9c1 100755 --- a/uvcount.pl +++ b/uvcount.pl @@ -1,8 +1,8 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.09 Stimmauswertung -# (c) 2001-2005 Marc Langer +# UseVoteGer 4.11 Stimmauswertung +# (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by the diff --git a/uvvote.pl b/uvvote.pl index 2af270e..8e8fb68 100755 --- a/uvvote.pl +++ b/uvvote.pl @@ -1,8 +1,8 @@ #!/usr/bin/perl -w ############################################################################### -# UseVoteGer 4.09 Wahldurchfuehrung -# (c) 2001-2005 Marc Langer +# UseVoteGer 4.11 Wahldurchfuehrung +# (c) 2001-2012 Marc Langer # # This script package is free software; you can redistribute it and/or # modify it under the terms of the GNU Public License as published by the @@ -122,9 +122,9 @@ if ($clean) { # normally unixtime is sufficient, if it is not unique append our PID my $ext = time; - opendir (DIR, $config{tmpdir}); - my @tmpfiles = readdir (DIR); - closedir (DIR); + opendir (TMP, $config{tmpdir}); + my @tmpfiles = readdir (TMP); + closedir (TMP); opendir (FERTIG, $config{archivedir}); my @fertigfiles = readdir (FERTIG); closedir (FERTIG); @@ -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"; @@ -283,7 +273,7 @@ sub process_vote { # this matches on a single appearance: if ($$body =~ /#$votenum\W*?\[(.+)\]/) { # one or more vote strings were found - $onevote = 1; + $onevote ||= 1; # set $onevote to 1 if it was 0 my $votestring = $1; if ($votestring =~ /^\W*$config{ja_stimme}\W*$/i) { $vote = "J";