From: Thomas Hochstein Date: Mon, 16 Aug 2010 21:03:19 +0000 (+0200) Subject: Initial checkin of personal version. X-Git-Url: https://code.th-h.de/?p=usenet%2Fusevote.git;a=commitdiff_plain;h=a384e31e542e2520ebc1e2402a86fad5507b7da2 Initial checkin of personal version. Signed-off-by: Thomas Hochstein --- diff --git a/UVrules.pm b/UVrules.pm index 76e260f..4325867 100644 --- a/UVrules.pm +++ b/UVrules.pm @@ -149,10 +149,10 @@ sub read_rulefile { die $errortext . ": $_\n\n" if ($errortext); # check for correct characters in conditions - if ($if !~ /^[JjNnEeSsHhIi\.]+$/) { + if ($if !~ /^[JjNnEeSsIi\.]+$/) { die UVmessage::get ("RULES_INVCHARS", (NUM=>$num+1, TYPE=>"if")) . ": $if\n\n"; - } elsif ($then !~ /^[JjNnEeSsHhIi\.]+$/) { + } elsif ($then !~ /^[JjNnEeSsIi\.]+$/) { die UVmessage::get ("RULES_INVCHARS", (NUM=>$num+1, TYPE=>"if")) . ": $then\n\n"; } @@ -194,9 +194,8 @@ sub read_rulefile { sub make_regex_pos { my $pat = $_[0]; - $pat =~ s/[hijens]/./g; + $pat =~ s/[jens]/./g; $pat =~ s/S/[JN]/g; - $pat =~ s/H/[EJ]/g; $pat =~ s/I/[EN]/g; return $pat; @@ -217,19 +216,22 @@ sub make_regex_neg { # upper case characters are replaced with dots # (are covered by make_regex_pos) - $pat =~ s/[HIJENS]/./g; + $pat =~ s/[JENS]/./g; # reverse lower case characters $pat =~ s/j/[NE]/g; $pat =~ s/n/[JE]/g; $pat =~ s/e/[JN]/g; $pat =~ s/s/E/g; - $pat =~ s/h/N/g; $pat =~ s/i/J/g; - # If the string contained only upper case characters they are now all - # replaced with dots and the RegEx would match everything, i.e. declare - # every vote as invalid. In this case an empty pattern is returned. + # to be translated: + # Falls keine Kleinbuchstaben vorkamen (es sind nur Punkte uebrig): + # Wenn keine optionalen Forderungen vorhanden sind, wuerde der Regex + # immer matchen und somit die Stimme immer als nicht passend erkannt + # werden. Deswegen wird versucht auf den leeren String zu ueberpruefen, + # was durch die Negation dazu fuehrt, dass die Stimme als passend + # gewertet wird. $pat =~ s/^\.+$//; return $pat; @@ -303,10 +305,6 @@ sub rule_print { $fill = " $and "; $text1 = UVmessage::get ("RULES_IFCLAUSE", (VOTE=>"$yes $or $no", GROUP=>$groups[$i])); - } elsif ($rule[$i] eq 'H') { - $fill = " $and "; - $text1 = UVmessage::get ("RULES_IFCLAUSE", - (VOTE=>"$abst $or $yes", GROUP=>$groups[$i])); } elsif ($rule[$i] eq 'I') { $fill = " $and "; $text1 = UVmessage::get ("RULES_IFCLAUSE", @@ -324,10 +322,6 @@ sub rule_print { $fill = " $or "; $text1 = UVmessage::get ("RULES_IFCLAUSE", (VOTE=>"$yes $or $no", GROUP=>$groups[$i])); - } elsif ($rule[$i] eq 'h') { - $fill = " $or "; - $text1 = UVmessage::get ("RULES_IFCLAUSE", - (VOTE=>"$abst $or $yes", GROUP=>$groups[$i])); } elsif ($rule[$i] eq 'i') { $fill = " $or "; $text1 = UVmessage::get ("RULES_IFCLAUSE", @@ -363,10 +357,6 @@ sub rule_print { $fill = " $and "; $text1 = UVmessage::get ("RULES_THENCLAUSE", (VOTE=>"$yes $or $no", GROUP=>$groups[$i])); - } elsif ($rule[$i] eq 'H') { - $fill = " $and "; - $text1 = UVmessage::get ("RULES_THENCLAUSE", - (VOTE=>"$abst $or $yes", GROUP=>$groups[$i])); } elsif ($rule[$i] eq 'I') { $fill = " $and "; $text1 = UVmessage::get ("RULES_THENCLAUSE", @@ -384,10 +374,6 @@ sub rule_print { $fill = " $or "; $text1 = UVmessage::get ("RULES_THENCLAUSE", (VOTE=>"$yes $or $no", GROUP=>$groups[$i])); - } elsif ($rule[$i] eq 'h') { - $fill = " $or "; - $text1 = UVmessage::get ("RULES_THENCLAUSE", - (VOTE=>"$abst $or $yes", GROUP=>$groups[$i])); } elsif ($rule[$i] eq 'i') { $fill = " $or "; $text1 = UVmessage::get ("RULES_THENCLAUSE", diff --git a/messages.cfg b/messages.cfg index 6b1dd5d..1ea665e 100644 --- a/messages.cfg +++ b/messages.cfg @@ -154,7 +154,6 @@ CFV_SUBJECT = Wahlschein # COUNT_ERR_OPEN = Kann Ergebnisdatei ${FILE} nicht oeffnen! COUNT_ERR_RESULT = Fehler in ${FILE} Zeile ${LINE} -COUNT_ERR_GROUPCOUNT = Bei Stimme von <${ADDR}>: ${NUM1} statt ${NUM2} Stimmen gefunden (${RESULTFILE} kontrollieren!) COUNT_DELETED = ${NUM} Stimme(n) geloescht. # # uvvote.pl diff --git a/templates/result-multi b/templates/result-multi index cc3659b..9a065ac 100644 --- a/templates/result-multi +++ b/templates/result-multi @@ -11,12 +11,13 @@ group-more := value group | drop-words 40 | create-lines 40 Ergebnisse [$votename-first] [@votename-more| [$line]\n] -([$numvalid] gueltige Stimmen) + +Es wurden [$numvalid] gueltige Stimmen abgegeben. Ja Nein : 2/3? >=60? : ang.? : Gruppe ---- ---- : ---- ----- : ----- : --------------------------------------- [@count|[$yes] [$no] : [?cond1| Ja |Nein] [?cond2| Ja |Nein] : [?result| Ja |Nein] : [$group-first] -[@group-more| : : : [$line]\n]\n] +[@group-more| : : : [$line]|\n]\n] [?numabstain|[$numabstain-formatted] Enthaltungen] [?numinvalid|[$numinvalid] ungueltige Stimme(n)] diff --git a/templates/result-single b/templates/result-single index 1be10d2..355aa4a 100644 --- a/templates/result-single +++ b/templates/result-single @@ -14,8 +14,8 @@ Es gab [$yes] Ja-Stimmen und [$no] Nein-Stimmen[?numabstain| bei [$numabstain] E [?numinvalid|[$numinvalid] Stimme(n) wurden als ungueltig gewertet.] Es wurde [?cond1|die|keine] 2/3-Mehrheit erreicht und es gingen [?cond2|mehr|weniger] als -60 Ja-Stimmen ein. Damit ist die [$votename-text-first] -[@votename-text-more|[$line] |\n][?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt]. +60 Ja-Stimmen ein. Damit ist die [$votename-first] +[@votename-more|[$line]|\n] [?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt]. Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per diff --git a/tmp/ergebnis-1191790177 b/tmp/ergebnis-1191790177 deleted file mode 100644 index e69de29..0000000 diff --git a/tmp/stimmen-1191790177 b/tmp/stimmen-1191790177 deleted file mode 100644 index e69de29..0000000 diff --git a/usevote.global.cfg b/usevote.global.cfg new file mode 100644 index 0000000..210d21b --- /dev/null +++ b/usevote.global.cfg @@ -0,0 +1,165 @@ +######################################################################## +# Alles ab hier braucht i.d.R. nur einmal festgelegt werden. +# Es ist moeglich, diese Einstellungen in eine globale Konfigurations- +# datei auszulagern. Das Einbinden erfolgt mit der Zeile +# +# include /pfad/zur/globalen_datei +# +# Falls Einstellungen aus der globalen Konfigurationsdatei hier +# fuer einzelne Abstimmungen ueberschrieben werden sollen, muessen +# diese *hinter* dem Include-Befehl stehen! +# (der letzte Wert ueberschreibt vorhergehende Definitionen) +######################################################################## + +# SMTP benutzen? (falls nicht, wird der weiter unten einstellbare +# MTA direkt aufgerufen; unter Windows kann nur SMTP benutzt werden!) +smtp = 0 + +# SMTP-Server (falls smtp = 1) +smtpserver = localhost +smtpport = 25 + +# SMTP-Authentifizierung benutzen? (RFC 2554) +# Das entsprechende Perlmodul (Net::SMTP) kann derzeit nur AUTH PLAIN, +# funktioniert also moeglicherweise nicht mit jedem Server +#smtpauth = 0 +#smtpuser = +#smtppass = + +# Falls als HELO etwas anderes als der Hostname verwendet werden soll: +#smtphelo = greenmeadow.szaf.org + +# Falls ein anderer Fully Qualified Domain Name als der Hostname fuer +# die Message-ID verwendet werden soll: +fqdn = gvv.th-h.de + +# Verzeichnis fuer fertig verarbeitete Mails und Ergebnisse +archivedir = done + +# Temporaeres Verzeichnis +tmpdir = tmp + +# Pfad zu den Templates (kommaseparierte Liste mit Verzeichnissen) +templatedir = /home/gvv/usevote/templates + +# Konvertierungsfunktionen für die Templates +# (kommaseparierte Liste mit Funktions-Modulen) +formats = /home/gvv/usevote/UVformats.pm + +# Dateiname der Steuerungsdatei fuer den Mailversandt +controlfile = tmp/ack.control + +# Dateiname des Shellscripts zum Versenden der Bestaetigungsmails (falls smtp=0) +domailfile = tmp/domail + +# MTA-Aufruf zum Verschicken der Bestaetigungsmails +# nuetzlich ist die Sendmail-Option -f zum Setzen des Absenders +#mailcmd = sendmail -oi -oem -femail@adresse +mailcmd = /usr/sbin/sendmail -oi -oem -fvote-bounces@gvv.th-h.de + +# Weiteres Kommando, welches nach jeder Mail aufgerufen werden soll (falls smtp=0). +# Sinnvoll ist ein "sleep x", wobei x bei langsamen Systemen hoeher +# gewaehlt werden sollte, um die Belastung gering zu halten. +sleepcmd = sleep 1 + +# Shellbefehl zum Loeschen des Bildschirms +# Unix: i.d.R. "clear" +# Windows: "cls" +# Falls das Betriebssystem bzw. die Shell keinen solchen Befehl zur Verfuegung +# stellt, sollte ein Kommando verwendet werden, welches eine Trennlinie +# oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo" +clearcmd = clear + +# Shellbefehl zum seitenweisen Darstellen von Mails auf dem Bildschirm +# Empfohlene Einstellung: "less", da more Probleme mit der Umleitung von +# STDERR in eine Datei Probleme hat. Unter Windows ist "less" nicht +# vorinstallirt, kann man sich aber herunterladen und einfach in das +# Windows-Verzeichnis kopieren (URL siehe README-Datei) +pager = less + +# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei) +messagefile = /home/gvv/usevote/messages.cfg + +# Datei mit Wahlregeln +rulefile = /home/gvv/usevote/usevote.rul + +# Datei mit verdaechtigen Mailadressen +badaddrfile = /home/gvv/usevote/mailpatterns.cfg + +# Datei fuer Fehlermeldungen beim Programmlauf +errorfile = errors.log + +# Lockdatei (Verhinderung von mehrfachen Programmstarts) +lockfile = usevote.lock + +# Einleitungszeile fuer naechste Mail (RegExp) +mailstart = "^From " + +# Trennlinien vor und nach dem Wahlschein +begin_divider = Alles vor dieser Zeile bitte loeschen +end_divider = Alles nach dieser Zeile bitte loeschen + +# Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im +# Wahlschein genauso stehen! +nametext = Dein Realname, falls nicht im FROM-Header: + +# Text fuer Namens-Angabe in Bestaetigungsmails +nametext2 = Waehlername: + +# Text fuer die Adress-Angabe im Wahlschein +addresstext = Waehleradresse: + +# Text für die Angabe der Wahlscheinkennung (siehe Option "personal") +ballotidtext = Wahlscheinkennung: + +# Text fuer Datenschutzklausel (siehe Option "bdsg"), erscheint als Abstimmungspunkt +bdsgtext = Datenschutzklausel - Zustimmung: Ich bin mit der Verarbeitung meiner Daten wie oben beschrieben einverstanden + +# Datei mit Erklaerungstext fuer BDSG-Klausel +bdsgfile = /home/gvv/usevote/bdsgtext.cfg + +# Rechter Rand fuer einige Bildschirmausgaben (Terminalbreite) +rightmargin = 72 + +# Regular Expression fuer Erkennung eines gueltigen Realnamens +name_re = [-a-zA-ZäöüáàâéèêíìîóòôúùûÄÖÜÁÁÂÉÈÊÍÌÎÓÒÔÚÙÛß]{2,} +.*[a-zA-ZäöüáàâéèêíìîóòôúùûÄÖÜÁÁÂÉÈÊÍÌÎÓÒÔÚÙÛß]{2,} + +# RegExp fuer JA-Stimmen (case-insensitive) +# Standardmaessig wird J, JA, FUER und DAFUER erkannt +ja_stimme = (J\s*A|J|(D\s*A\s*)?F\s*U\s*E\s*R) + +# RegExp fuer NEIN-Stimmen (case-insensitive) +# Standardmaessig wird N, NEIN, GEGEN und DAGEGEN erkannt +nein_stimme = (N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N) + +# RegExp fuer ENTHALTUNG (case-insensitive) +enth_stimme = (E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G) + +# RegExp fuer ANNULLIERUNG (case-insensitive) +# Achtung, sollte auch in den Templates im Bestaetigungstext angepasst werden +ann_stimme = A\s*N\s*N\s*U\s*L\s*L\s*I\s*E\s*R\s*U\s*N\s*G + +# Template files (these files are in the template directory defined above) +tpl_mailheader = "mailheader" # generally used mail header +tpl_bouncelist = "bouncelist" # used by uvbounce.pl +tpl_result_multi = "result-multi" # used by uvcount.pl -r -m +tpl_result_single = "result-single" # used by uvcount.pl -r -o +tpl_result_prop = "result-proportional" # used by uvcount.pl -r (proportional = 1) +tpl_votes_multi = "votes-multi" # used by uvcount.pl -v (multiple groups) +tpl_votes_single = "votes-single" # used by uvcount.pl -v (single group only) +tpl_voterlist = "voterlist" # used by uvcount.pl -l (2nd CfV) +tpl_ballot = "ballot" # used by uvballot.pl (personal = 0) +tpl_ballot_request = "ballot-request" # used by uvballot.pl (personal = 1) +tpl_ballot_personal = "ballot-personal" # used by uvcfv.pl (personal = 1) +tpl_addr_reg = "address-not-registered" # used by uvvote.pl (personal = 1) +tpl_no_ballotid = "no-ballotid" # used by uvvote.pl (personal = 1) +tpl_wrong_ballotid = "wrong-ballotid" # used by uvvote.pl (personal = 1) +tpl_bdsg_error = "bdsg-error" # used by uvvote.pl (bdsg = 1) +tpl_ack_mail = "ack-mail" # used by uvvote.pl (voteack = 1) +tpl_cancelled = "cancelled" # used by uvvote.pl +tpl_invalid_account = "invalid-account" # used by uvvote.pl +tpl_invalid_name = "invalid-name" # used by uvvote.pl +tpl_multiple_votes = "multiple-votes" # used by uvvote.pl +tpl_no_ballot = "no-ballot" # used by uvvote.pl +tpl_no_votes = "no-votes" # used by uvvote.pl +tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul) diff --git a/usevote.rul b/usevote.rul index 4d9a6c6..e8f4501 100644 --- a/usevote.rul +++ b/usevote.rul @@ -30,14 +30,12 @@ # N eine NEIN-Stimme # E eine Enthaltung # S eine JA- oder NEIN-Stimme -# H eine Enthaltung oder JA-Stimme # I eine Enthaltung oder NEIN-Stimme # . egal (Ja, nein oder Enthaltung) # j eine oder mehrere der markierten Gruppen hat JA-Stimme # n "" "" "" "" "" "" "" NEIN-Stimme # e "" "" "" "" "" "" "" Enthaltung # s "" "" "" "" "" "" "" Ja- oder Nein-Stimme -# h "" "" "" "" "" "" "" Enthaltung oder Ja-Stimme # i "" "" "" "" "" "" "" Enthaltung oder Nein-Stimme # # Alles klar? Jede Stimme wird mit den Symbolen verglichen, und wenn alle diff --git a/usevote.tpl.cfg b/usevote.tpl.cfg new file mode 100644 index 0000000..40dcbbe --- /dev/null +++ b/usevote.tpl.cfg @@ -0,0 +1,76 @@ +include /home/gvv/usevote/usevote.global.cfg + +######################################################################## +# Diese Einstellungen muessen fuer jede Abstimmung angepasst werden +######################################################################## + +# Name der Abstimmung +votename = [INSERT_HERE] + +# Abstimmungsgegenstaende (beliebig viele groupX moeglich, +# von 1 an durchzunummerieren) +group1 = [INSERT_HERE] + +# Mailbox, in der die zu verarbeitenden Mails liegen (falls smtp=0) +votefile = votes + +# Bei den folgenden Fragen bedeutet jeweils: +# 0: nein +# 1: ja + +# Persoenliche Wahlscheine generieren und Scheinkennung erzwingen? +personal = 0 + +# Verhaeltniswahl durchfuehren? (z.B. fuer Moderationsnachwahlen) +proportional = 0 + +# Formel fuer die Berechnung des Verhaeltnisses. Kann z.B. +# $yes/$no oder $yes-$no sein, letzteres wird bei Moderationsnachwahlen +# verwendet. Als Variablen sind $yes und $no zulaessig, es kann +# beliebiger Perlcode angegeben werden, dessen Rueckgabewert im +# Result erscheinen soll. Ausserdem wird bei der Auswertung die +# Bedingung aus "condition1" weiter unten in dieser Datei ausgewertet. +prop_formula = $yes/$no + +# Vote-Account (diese Adresse muss unbedingt korrekt sein, wird +# in das Reply-To uebernommen) +voteaccount = [INSERT_HERE]@gvv.th-h.de + +# Absender fuer den From-Header der Bestaetigungsmails +mailfrom = Thomas Hochstein + +# Absender fuer den Envelope (Return-Path) der Bestaetigungsmails +# (bitte einfach nur die Adresse eintragen, ohne Klammern und Zusaetze) +envelopefrom = [INSERT_HERE]@gvv.th-h.de + +# Nur bei persoenlichen Wahlscheinen: Datei mit Anforderungsmails +# requestfile = anforderung + +# Datenschutzklausel generieren und auf deren Existenz pruefen? +# Konfiguration siehe unten (bdsgtext) +bdsg = 1 + +# Reply-To beachten? +# Nicht empfohlen, da jemand fuer andere Personen abstimmen und +# die Bestaetigungen zu sich umlenken koennte. +replyto = 0 + +# Stimmen einzeln bestaetigen? Empfohlen! +voteack = 1 + +# Bcc-Adresse fuer alle Mails (Backup fuer alle Faelle) +# +mailcc = gvv@greenmeadow.szaf.org + +# Bedingungen fuer einen Erfolg der Abstimmung (genau zwei erforderlich). +# Es muss sich jeweils um gueltigen Perl-Code handeln, Rueckgabewert +# wird boolesch ausgewertet (true/false). Als Variablen sind $yes +# und $no zugelassen. Falls oben "proportional = 1" gesetzt wurde, +# wird nur Bedingung 1 ausgewertet und kann z.B. auf "$yes>$no" gesetzt +# werden. +# condition1 = $yes>=2*$no +# condition2 = $yes>=60 +condition1 = $yes>=2*$no +condition2 = $yes>=60 + +mailcmd = /usr/sbin/sendmail -oi -oem -f[INSERT_HERE]@gvv.th-h.de diff --git a/uvballot.pl b/uvballot.pl index 4085a7f..b57bd02 100644 --- 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.07 Wahlscheingenerierung +# (c) 2001-2004 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 @@ -31,7 +31,7 @@ use UVtemplate; my %opt_ctl = (); -print STDERR "\n$usevote_version Wahlscheingenerierung - (c) 2001-2005 Marc Langer\n\n"; +print STDERR "\n$usevote_version Wahlscheingenerierung - (c) 2001-2004 Marc Langer\n\n"; # unknown parameters remain in @ARGV (for "help") Getopt::Long::Configure(qw(pass_through bundling)); diff --git a/uvbounce.pl b/uvbounce.pl index 1bf5139..b144c74 100644 --- 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.07 Bounce-Verarbeitung +# (c) 2001-2004 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 @@ -33,7 +33,7 @@ my %opt_ctl = (); my %bounces = (); my $pop3 = 0; -print STDERR "\n$usevote_version Bounce-Verarbeitung - (c) 2001-2005 Marc Langer\n\n"; +print STDERR "\n$usevote_version Bounce-Verarbeitung - (c) 2001-2004 Marc Langer\n\n"; # unknown parameters remain in @ARGV (for "help") Getopt::Long::Configure(qw(pass_through bundling)); diff --git a/uvcfv.pl b/uvcfv.pl index 74174c6..e5a9691 100644 --- 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.07 Personalisierte Wahlscheine +# (c) 2001-2004 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 @@ -35,7 +35,7 @@ use UVtemplate; my %opt_ctl = (); -print "\n$usevote_version Personalisierte Wahlscheine - (c) 2001-2005 Marc Langer\n\n"; +print "\n$usevote_version Personalisierte Wahlscheine - (c) 2001-2004 Marc Langer\n\n"; # unknown parameters remain in @ARGV (for "help") Getopt::Long::Configure(qw(pass_through bundling)); diff --git a/uvvote.pl b/uvvote.pl index a86ef43..5dd26ff 100644 --- 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.07 Wahldurchfuehrung +# (c) 2001-2004 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 @@ -37,7 +37,7 @@ use UVtemplate; my $clean = 0; my %opt_ctl = (); -print "\n$usevote_version Wahldurchfuehrung - (c) 2001-2005 Marc Langer\n\n"; +print "\n$usevote_version Wahldurchfuehrung - (c) 2001-2004 Marc Langer\n\n"; # unknown parameters remain in @ARGV (for "help") Getopt::Long::Configure(qw(pass_through bundling)); @@ -123,7 +123,7 @@ if ($clean) { my $ext = time; opendir (TMP, $config{tmpdir}); - my @tmpfiles = readdir (DIR); + my @tmpfiles = readdir (TMP); closedir (TMP); opendir (FERTIG, $config{archivedir}); my @fertigfiles = readdir (FERTIG); @@ -216,7 +216,7 @@ sub process_vote { my @header = split(/\n/, $entity->stringify_header); my $head = $entity->head; my $msgid = $head->get('Message-ID'); - chomp($msgid) if ($msgid); + chomp($msgid) if defined($msgid); my @votes = (); # the votes my @set; # interactively changed fields