Compare commits

...

26 commits

Author SHA1 Message Date
Thomas Hochstein 290f1a1631 Usevote 4.0.13
Signed-off-by: Thomas Hochstein <thh@thh.name>
2022-01-27 18:07:13 +01:00
Thomas Hochstein 68b0879787 Merge branch 'upstream-tmp' into upstream
* upstream-tmp:
  Update documentation.
  Change quorum (50 -> 15 votes)
  Global config: change diff command to "diff -u".
  Global config: add " --" to mail command.
  Adapt bdsgtext.cfg to DSGVO.
  Add executive bits to scripts.
2022-01-27 18:04:30 +01:00
Thomas Hochstein 150c91add6 Update documentation.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:23:25 +01:00
Thomas Hochstein 68d2e7d047 Change quorum (50 -> 15 votes)
Change in config and templates:
- result-single
- result-multi

Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:23:16 +01:00
Thomas Hochstein a5ab9d2620 Global config: change diff command to "diff -u".
Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:17:55 +01:00
Thomas Hochstein 3c2b60126f Global config: add " --" to mail command.
Otherwise mail addresses beginning with a
dash ("-mymail-@provider.example") will
lead to Exim erroring out.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:17:12 +01:00
Thomas Hochstein b7e3bdd951 Adapt bdsgtext.cfg to DSGVO.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:15:52 +01:00
Thomas Hochstein a94e81c653 Add executive bits to scripts.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2021-12-19 15:08:49 +01:00
Thomas Hochstein adf1f9a735 Merge branch 'upstream-tmp' into upstream
* upstream-tmp:
  Update CHANGES for release.
  Fix typo in README.
  Change quorum default value to 50 "JA" votes.
  Correctly find $votename.
  Enforce strict response for data protection clause.
  Add votename to Menu.
2014-03-19 21:51:29 +01:00
Thomas Hochstein f9a99fd83a Update CHANGES for release.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:48:48 +01:00
Thomas Hochstein 6f88a29957 Fix typo in README.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:48:25 +01:00
Thomas Hochstein 923dc1773e Change quorum default value to 50 "JA" votes.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:48:02 +01:00
Thomas Hochstein 3ab56bde53 Correctly find $votename.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:46:32 +01:00
Thomas Hochstein f5828d9fad Enforce strict response for data protection clause.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:45:08 +01:00
Thomas Hochstein 3aca529725 Add votename to Menu.
Display the current voting's description.
Also purge some dead code.

Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-03-19 21:43:48 +01:00
Thomas Hochstein c1cc3954b4 Merge branch 'upstream-tmp' into upstream
* upstream-tmp:
  Update documentation to 4.12.
  Add correct timestamp to mbox when processing.
  Don't remove empty mailbox files/maildirs.
  Fix UVreadmail.pm
  Add option to compare ballot to sample ballot.
  Documentation: Add votename to UVmenu.
  Add "bdsg_confirm" to UVconf.pm
2014-02-16 14:09:31 +01:00
Thomas Hochstein 62d56462b4 Update documentation to 4.12.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:47:22 +01:00
Thomas Hochstein 7ae85f86e3 Add correct timestamp to mbox when processing.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:47:15 +01:00
Thomas Hochstein c50a97a62c Don't remove empty mailbox files/maildirs.
Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:47:09 +01:00
Thomas Hochstein 7450382ef3 Fix UVreadmail.pm
Use filename from function call.

Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:47:06 +01:00
Thomas Hochstein e91a2b7fa5 Add option to compare ballot to sample ballot.
It may be desriable to compare a ballot to
a sample ballot when checking votes.

* Add options "diff" and "sampleballotfile" to
  usevote.cfg an UVconfig.pm
* Add menu option to UVmenu.pm

Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:46:57 +01:00
Thomas Hochstein 300f47d616 Documentation: Add votename to UVmenu.
Those new options to check the votename had not
been added to the README file.

Also fix a typo.

Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:45:22 +01:00
Thomas Hochstein 6f31c0dc7a Add "bdsg_confirm" to UVconf.pm
Set default for "bdsg_confirm".

Picked from upstream.

Signed-off-by: Thomas Hochstein <thh@inter.net>
2014-02-16 13:24:42 +01:00
Thomas Hochstein c9497882fb Release of upstream version 4.11.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2012-09-26 21:26:54 +02:00
Thomas Hochstein bb61da3743 Release of upstream version 4.10.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2012-09-19 22:12:44 +02:00
Thomas Hochstein b0edfe72dd Pre-release of upstream version 4.10.
Signed-off-by: Thomas Hochstein <thh@inter.net>
2010-11-21 23:06:22 +01:00
21 changed files with 300 additions and 97 deletions

71
CHANGES
View file

@ -1,21 +1,76 @@
UseVoteGer Versionshistorie (aktuelle Version: 4.09, released 07.10.2007) UseVoteGer Versionshistorie (aktuelle Version: 4.13, released 27.01.2022)
========================================================================= =========================================================================
TODO: TODO:
- aussortieren von Bounces aus Stimmenliste - 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.13 (27.01.2022):
- BDSG-Klausel an die DSGVO angepasst
- "mailcmd" muss mit "--" enden, damit Mailadressen, die mit "-"
beginnen, richtig erkannt werden.
- "diff -u" ist ein besserer Default fuer das Diff-Programm
- Standardwert fuer Mindest-JA-Stimmenzahl von 50 auf 15 verringert
Version 4.12 (28.02.2014):
- uvbounce.pl und uvballot.pl benutzen jetzt wieder den uebergebenen
Dateinamen statt irrtuemlich das Mailboxfile aus usevote.cfg
(Bugfix in UVreadmail.pm)
- UVreadmail.pm setzt beim Schreiben eines Mailarchivs nun einen
Timestamp in der mbox-Fromline, der aus der Mail stammt
(timestamp()-Funktion von Mail::Box) statt dem aktuellen Datum
- UVreadmail.pm laesst nun Mailboxdateien bzw. -ordner bestehen,
auch wenn sie leer sind, um Kompatibiliaetsprobleme mit anderen
Programmen zu vermeiden
- neue Config-Optionen "diff" und "sampleballotfile"
- im Fehlermenue bei der Wahlscheinverarbeitung ist es nun moeglich,
mit der Option "0" einen Dateivergleich (diff) zwischen dem gemailten
Wahlschein und einem Musterwahlschein (wie im CfV geposted) zu starten.
Dazu muss die Config-Option "sampleballotfile" gesetzt und die Datei
vorhanden sein (Standard-Dateiname: ballot.sample)
- im Fehlermenue wird nun der Name der Abstimmung als Ueberschrift
angezeigt. Ausserdem wurde in UVmenu.pm ein redundanter Code-Abschnitt
entfernt
- BDSG-Klausel muss nun standardmaessig zwingend mit JA beantwortet
werden, DAFUER wird nicht mehr akzeptiert. Dies kann in usevote.cfg
konfiguriert werden
- Regular Expression fuer Pruefung des Abstimmungsnamens weiter
verbessert
- Standardwert fuer Mindest-JA-Stimmenzahl von 60 auf 50 verringert
Version 4.11 (25.09.2012):
- Regular Expression fuer Pruefung des Abstimmungsnamens verbessert.
Es kam zu vielen False Positives
- Einlesen der Mailbox auf Perlmodul 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): Version 4.09 (14.09.2007):
- "votefile"-Option in usevote.cfg an passendere Stelle verschoben und - "votefile"-Option in usevote.cfg an passendere Stelle verschoben und
den Kommentar korrigiert (natuerlich gilt pop3=0 als Bedingung, nicht den Kommentar korrigiert (natuerlich gilt pop3=0 als Bedingung, nicht
etwa wie vorher angegeben smtp=0) 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) nach umgebrochenen Abstimmungspunkten)
- Fehler in Doku der Kommandozeilenoptionen von uvcount.pl behoben - Fehler in Doku der Kommandozeilenoptionen von uvcount.pl behoben
(--voters statt --votes) (--voters statt --votes)

36
README
View file

@ -1,4 +1,4 @@
UseVoteGer 4.09 (c) 2001-2007 Marc Langer UseVoteGer 4.13 (c) 2001-2022 Marc Langer
UseVoteGer is a voting software for usenet votes. UseVoteGer is a voting software for usenet votes.
@ -12,13 +12,14 @@ Many thanks to:
- Wolfgang Behrens (UseVoteGer 3.1, based on Frederik's translation, 1998/99) - Wolfgang Behrens (UseVoteGer 3.1, based on Frederik's translation, 1998/99)
- Cornell Binder for some good advice and code fragments - Cornell Binder for some good advice and code fragments
(e.g. UVtemplate.pm, UVformats.pm) (e.g. UVtemplate.pm, UVformats.pm)
- Thomas Hochstein for some patches
This is a complete rewrite of UseVoteGer 3.1 in Perl (former versions were This is a complete rewrite of UseVoteGer 3.1 in Perl (former versions were
written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented! written in C). Not all functions of Usevote/UseVoteGer 3.x are implemented!
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
UseVoteGer 4.09 - Usenet-Abstimmungssoftware UseVoteGer 4.13 - Usenet-Abstimmungssoftware
=========================================== ===========================================
von Marc Langer <uv@marclanger.de> von Marc Langer <uv@marclanger.de>
@ -89,9 +90,6 @@ I. Einmalig bei der Usevote-Erstinstallation
sehr einfach mit "perl -MCPAN -e shell", ActivePerl fuer sehr einfach mit "perl -MCPAN -e shell", ActivePerl fuer
Windows hat einen eigenen Paketmanager) 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 II. Fuer jedes Voting
(1) usevote.cfg auf das durchzufuehrende Voting anpassen (1) usevote.cfg auf das durchzufuehrende Voting anpassen
@ -190,8 +188,8 @@ UVrules.pm Routinen zur Regelverarbeitung (usevote.rul)
UVsendmail.pm Routinen zum Erzeugen von Mails UVsendmail.pm Routinen zum Erzeugen von Mails
UVtemplate.pm Routinen zur Verarbeitung von Vorlagen (Templates) UVtemplate.pm Routinen zur Verarbeitung von Vorlagen (Templates)
bdsgtext.cfg Spezieller Text fuer den Wahlschein (Hinweis auf bdsgtext.cfg Spezieller Text fuer den Wahlschein (Hinweis auf
Datenschutzgesetz), muss ausserhalb Deutschlands ggfls. DSGVO), muss ausserhalb der EU ggfls. angepasst werden
angepasst oder kann ignoriert werden (bdsg=0 in usevote.cfg) oder kann dort ignoriert werden (bdsg=0 in usevote.cfg)
mailpatterns.cfg Wildcards fuer verdaechtige Mailadressen mailpatterns.cfg Wildcards fuer verdaechtige Mailadressen
messages.cfg Programm-Meldungen (Ressourcen-Datei) messages.cfg Programm-Meldungen (Ressourcen-Datei)
scheinkennungen Speicherung der Scheinkennungen bei personalisierten scheinkennungen Speicherung der Scheinkennungen bei personalisierten
@ -327,6 +325,7 @@ ohne die .pl und .pm Dateien jedesmal mitzukopieren. Folgende Dateien
sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
usevote.cfg, darin können alle anderen Pfade angepasst werden): usevote.cfg, darin können alle anderen Pfade angepasst werden):
ballot.sample
bdsgtext.cfg bdsgtext.cfg
mailpatterns.cfg mailpatterns.cfg
messages.cfg messages.cfg
@ -407,6 +406,7 @@ mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
Meistens gibt es folgende Moeglichkeiten, die durch die Meistens gibt es folgende Moeglichkeiten, die durch die
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen: eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
(0) Wahlschein mit Original vergleichen (diff)
(1) Anzeigen der Wahlmail (1) Anzeigen der Wahlmail
Bestaetigen oder Aendern von Wahlschein-Eigenschaften: Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
@ -415,6 +415,7 @@ Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
(4) Stimmen (4) Stimmen
(5) Scheinkennung (5) Scheinkennung
(6) Datenschutzklausel (6) Datenschutzklausel
(7) Abstimmung
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen) (i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
(w) Weiter (w) Weiter
@ -429,8 +430,11 @@ Teilweise gibt es Unteroptionen:
Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
oder ungueltig ist bzw. welche Maengel tatsaechlich zutreffen. oder ungueltig ist bzw. welche Maengel tatsaechlich zutreffen.
Mit (0) kannst Du einen Dateivergleich zu einem vorher hinterlegten
Musterwahlschein ausfuehren ("diff"), um Aenderungen/Fehler schneller
zu sehen.
Mit den Optionen (2) bis (6) kannst Du einzelne Eigenschaften Mit den Optionen (2) bis (7) kannst Du einzelne Eigenschaften
des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder
eine Stimme nicht korrekt erkannt hat) oder auch einfach die eine Stimme nicht korrekt erkannt hat) oder auch einfach die
Korrektheit bestaetigen. Korrektheit bestaetigen.
@ -521,7 +525,7 @@ Das Endergebnis kannst Du mit "uvcount.pl -r" ausgeben lassen.
Bei Verfahren mit mehreren Abstimmungspunkten wird automatusch Bei Verfahren mit mehreren Abstimmungspunkten wird automatusch
das folgende tabellarische Format verwendet: das folgende tabellarische Format verwendet:
Ja Nein : 2/3? >=60? : ang.? : Gruppe Ja Nein : 2/3? >=15? : ang.? : Gruppe
==== ==== : ==== ===== : ===== : ======================================= ==== ==== : ==== ===== : ===== : =======================================
100 70 : Nein Ja : Nein : Einrichtung von xyz 100 70 : Nein Ja : Nein : Einrichtung von xyz
@ -688,6 +692,10 @@ uvbounce.pl
eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde, eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
werden die uebergebenen Dateinamen ignoriert. werden die uebergebenen Dateinamen ignoriert.
Die Mails werden aus den uebergebenen Mailboxdateien geloescht
und statt dessen in einer neuen Datei mit der Erweiterung ".processed"
gespeichert.
Die Vorlage fuer die ausgegebene Liste ist im templates- Die Vorlage fuer die ausgegebene Liste ist im templates-
Unterverzeichnis konfigurierbar (Datei "bouncelist"). Unterverzeichnis konfigurierbar (Datei "bouncelist").
@ -960,7 +968,9 @@ Hier eine Auflistung der immer anzupassenden Optionen
votename Name der Abstimmung votename Name der Abstimmung
group1 Erster Abstimmungsgegenstand group1 Erster Abstimmungsgegenstand
group2 Zweiter (und so weiter durchnummerieren) group2 Zweiter (und so weiter durchnummerieren)
sampleballotfile Datei mit Musterwahlschein aus dem CfV fuer Dateivergleich (diff)
votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet) votefile Mailbox mit eingehenden Stimmen (falls POP3 ausgeschaltet)
mailboxtype Typ der Mailbox (mbox, maildir)
personal Personalisierte Wahlscheine verwenden? [BOOL] personal Personalisierte Wahlscheine verwenden? [BOOL]
(siehe gesonderten Abschnitt weiter oben) (siehe gesonderten Abschnitt weiter oben)
voteaccount Mailadresse, unter der abgestimmt werden kann voteaccount Mailadresse, unter der abgestimmt werden kann
@ -980,7 +990,7 @@ onestep Mails direkt verschicken und Ergebnisse speichern? [BOOL]
multigroup Fuer das Ergebnis auch bei Eingruppenabstimmung des multigroup Fuer das Ergebnis auch bei Eingruppenabstimmung des
Mehrgruppenformat waehlen? [BOOL] Mehrgruppenformat waehlen? [BOOL]
condition1 Bedingungen fuer einen Erfolg der Abstimmung in Perl-Syntax condition1 Bedingungen fuer einen Erfolg der Abstimmung in Perl-Syntax
condition2 (normalerweise "$yes>=2*$no" und "$yes>=60" condition2 (normalerweise "$yes>=2*$no" und "$yes>=15"
resultfile Datei fuer Gesamtergebnis (normalerweise ergebnis.alle) resultfile Datei fuer Gesamtergebnis (normalerweise ergebnis.alle)
idfile Datei mit Scheinkennungen (bei "personal=1") idfile Datei mit Scheinkennungen (bei "personal=1")
pop3 POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen) pop3 POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen)
@ -1018,7 +1028,7 @@ domailfile Name des Shellscripts zum Versenden der Bestaetigungsmails
(falls smtp=0, normalerweise tmp/domail) (falls smtp=0, normalerweise tmp/domail)
mailcmd Aufruf des Mail Transfer Agents (MTA) zum Verschicken der mailcmd Aufruf des Mail Transfer Agents (MTA) zum Verschicken der
Bestaetigungsmails (falls smtp=0), z.B. Bestaetigungsmails (falls smtp=0), z.B.
"sendmail -oi -oem -femail@adresse" "sendmail -oi -oem -femail@adresse --"
sleepcmd Weiteres Kommando, welches nach jeder Mail aufgerufen werden sleepcmd Weiteres Kommando, welches nach jeder Mail aufgerufen werden
soll (falls smtp=0). Sinnvoll ist ein "sleep x", wobei x bei soll (falls smtp=0). Sinnvoll ist ein "sleep x", wobei x bei
langsamen Systemen hoeher gewaehlt werden sollte. langsamen Systemen hoeher gewaehlt werden sollte.
@ -1027,6 +1037,10 @@ clearcmd Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
oder Betriebssystem keinen solchen Befehl bereitstellen, oder Betriebssystem keinen solchen Befehl bereitstellen,
sollte ein Kommando verwendet werden, welches eine Trennlinie sollte ein Kommando verwendet werden, welches eine Trennlinie
oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo" oder aehnliches auf dem Bildschirm ausgibt, z.B. mit "echo"
diff Shellbefehl zum Dateivergleich (diff); es koennen auch
Parameter angegeben werden, z.B. "diff -u". Das verwendete
Programm muss das Lesen einer Datei von STDIN erlauben
("-" statt Dateinamen fuer Einlesen von Standardeingabekanal)
pager Shellbefehl zum seitenweisen Darstellen von Mails auf dem pager Shellbefehl zum seitenweisen Darstellen von Mails auf dem
Bildschirm (normalerweise "less"). Unter Windows muss "more" Bildschirm (normalerweise "less"). Unter Windows muss "more"
benutzt werden, unter Unix hingegen gibt es moeglicherweise benutzt werden, unter Unix hingegen gibt es moeglicherweise

View file

@ -18,7 +18,7 @@ require Exporter;
$VERSION = "0.18"; $VERSION = "0.18";
# Usevote version # Usevote version
$usevote_version = "UseVoteGer 4.09"; $usevote_version = "UseVoteGer 4.13";
sub read_config { sub read_config {
@ -27,6 +27,7 @@ sub read_config {
# Default configuration options (overwritten in usevote.cfg) # Default configuration options (overwritten in usevote.cfg)
%config = (votefile => "votes", %config = (votefile => "votes",
votename => "unkonfiguriertes Usevote", votename => "unkonfiguriertes Usevote",
sampleballotfile => "ballot.sample",
resultfile => "ergebnis.alle", resultfile => "ergebnis.alle",
rulefile => "usevote.rul", rulefile => "usevote.rul",
badaddrfile => "mailpatterns.cfg", badaddrfile => "mailpatterns.cfg",
@ -45,6 +46,7 @@ sub read_config {
voteaccount => "<> (unkonfiguriertes Usevote)", voteaccount => "<> (unkonfiguriertes Usevote)",
mailfrom => "<> (unkonfiguriertes Usevote)", mailfrom => "<> (unkonfiguriertes Usevote)",
envelopefrom => "<>", envelopefrom => "<>",
mailboxtype => "mbox",
mailstart => "^From ", mailstart => "^From ",
archivedir => "fertig", archivedir => "fertig",
tmpdir => "tmp", tmpdir => "tmp",
@ -56,6 +58,7 @@ sub read_config {
mailcc => "", mailcc => "",
sleepcmd => "sleep 1", sleepcmd => "sleep 1",
clearcmd => "clear", clearcmd => "clear",
diff => "diff",
pager => "less", pager => "less",
pop3 => 0, pop3 => 0,
pop3server => "localhost", pop3server => "localhost",
@ -89,8 +92,9 @@ sub read_config {
nein_stimme => '(N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N)', nein_stimme => '(N\s*E\s*I\s*N|N|(D\s*A\s*)?G\s*E\s*G\s*E\s*N)',
enth_stimme => '(E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)', enth_stimme => '(E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)',
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', 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',
bdsg_confirm => 'JA',
condition1 => '$yes>=2*$no', # twice as many yes as no condition1 => '$yes>=2*$no', # twice as many yes as no
condition2 => '$yes>=60', # min 60 yes votes condition2 => '$yes>=15', # min 60 yes votes
prop_formula => '$yes/$no', prop_formula => '$yes/$no',
tpl_ack_mail => 'ack-mail', tpl_ack_mail => 'ack-mail',
tpl_bouncelist => 'bouncelist', tpl_bouncelist => 'bouncelist',
@ -117,6 +121,7 @@ sub read_config {
tpl_rule_violated => 'rule-violated', tpl_rule_violated => 'rule-violated',
begin_divider => 'Alles vor dieser Zeile bitte loeschen', begin_divider => 'Alles vor dieser Zeile bitte loeschen',
end_divider => 'Alles nach dieser Zeile bitte loeschen', end_divider => 'Alles nach dieser Zeile bitte loeschen',
ballotintro => 'WAHLSCHEIN fuer',
nametext => 'Dein Realname, falls nicht im FROM-Header:', nametext => 'Dein Realname, falls nicht im FROM-Header:',
nametext2 => 'Waehlername:', nametext2 => 'Waehlername:',
addresstext => 'Waehleradresse:', addresstext => 'Waehleradresse:',

View file

@ -17,7 +17,8 @@ $VERSION = "0.4";
############################################################################## ##############################################################################
# Menu for interaction with the votetaker # # Menu for interaction with the votetaker #
# Parameters: votes list and header (references to arrays) # # Parameters: votes list and header (references to arrays) #
# Body, Mailadress, Name, Ballot ID (references to strings) # # Body, Mailadress, Name, Ballot ID, #
# Voting (references to strings) #
# List of newly set fields (reference to array) # # List of newly set fields (reference to array) #
# List of errors to correct (Array-Ref) # # List of errors to correct (Array-Ref) #
# Return Values: 'w': proceed # # Return Values: 'w': proceed #
@ -25,7 +26,7 @@ $VERSION = "0.4";
############################################################################## ##############################################################################
sub menu { sub menu {
my ($votes, $header, $body, $addr, $name, $ballot_id, $set, $errors) = @_; my ($votes, $header, $body, $addr, $name, $ballot_id, $voting, $set, $errors) = @_;
my $input = ""; my $input = "";
my $voter_addr = $$addr || ''; my $voter_addr = $$addr || '';
my $voter_name = $$name || ''; my $voter_name = $$name || '';
@ -59,6 +60,7 @@ sub menu {
while (1) { while (1) {
system($config{clearcmd}); system($config{clearcmd});
print "-> $config{votename} <-\n";
print UVmessage::get("MENU_PROBLEMS") . "\n"; print UVmessage::get("MENU_PROBLEMS") . "\n";
foreach my $error (keys %errors) { foreach my $error (keys %errors) {
@ -68,6 +70,12 @@ sub menu {
my $menucaption = UVmessage::get("MENU_CAPTION"); my $menucaption = UVmessage::get("MENU_CAPTION");
print "\n\n$menucaption\n"; print "\n\n$menucaption\n";
print "=" x length($menucaption), "\n\n"; print "=" x length($menucaption), "\n\n";
# don't print this option if called from uvcfv.pl
unless ($mailonly) {
print "(0) ", UVmessage::get("MENU_DIFF_BALLOT"), "\n";
}
print "(1) ", UVmessage::get("MENU_SHOW_MAIL"), "\n\n", print "(1) ", UVmessage::get("MENU_SHOW_MAIL"), "\n\n",
UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n", UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n",
"(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n"; "(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n";
@ -79,6 +87,7 @@ sub menu {
print "(5) ", UVmessage::get("MENU_BALLOT_ID"), " [$$ballot_id]\n" print "(5) ", UVmessage::get("MENU_BALLOT_ID"), " [$$ballot_id]\n"
if ($config{personal}); if ($config{personal});
print "(6) ", UVmessage::get("MENU_BDSG"), "\n" if ($config{bdsg}); print "(6) ", UVmessage::get("MENU_BDSG"), "\n" if ($config{bdsg});
print "(7) ", UVmessage::get("MENU_VOTING"), " [", $$voting, "]\n";
} }
print "\n", print "\n",
@ -93,7 +102,14 @@ sub menu {
# only accept 1, 2, i and w if called from uvcfv.pl # only accept 1, 2, i and w if called from uvcfv.pl
next if ($mailonly && $input !~ /^[12iw]$/i); next if ($mailonly && $input !~ /^[12iw]$/i);
if ($input eq '1') { if ($input eq '0') {
# ignore SIGPIPE (Bug in more and less)
$SIG{PIPE} = 'IGNORE';
open (DIFF, "|$config{diff} - $config{sampleballotfile} | $config{pager}");
print DIFF $$body, "\n";
close (DIFF);
} elsif ($input eq '1') {
system($config{clearcmd}); system($config{clearcmd});
# ignore SIGPIPE (Bug in more and less) # ignore SIGPIPE (Bug in more and less)
$SIG{PIPE} = 'IGNORE'; $SIG{PIPE} = 'IGNORE';
@ -269,6 +285,22 @@ sub menu {
$errors{InvalidBDSG} = UVmessage::get("MENU_INVALIDBDSG"); $errors{InvalidBDSG} = UVmessage::get("MENU_INVALIDBDSG");
} }
} elsif ($input eq '7') {
my $sel;
do {
print "[a] ", UVmessage::get("MENU_VOTING_CORRECT"), "\n",
"[b] ", UVmessage::get("MENU_VOTING_WRONG"), "\n\n",
UVmessage::get("MENU_PROMPT");
$sel = <STDIN>;
} until ($sel =~ /^[ab]$/i);
if ($sel =~ /^a$/i) {
delete $errors{NoVoting};
delete $errors{WrongVoting};
} else {
$errors{WrongVoting} = UVmessage::get("MENU_WRONGVOTING");
}
} elsif ($input =~ /^i$/i) { } elsif ($input =~ /^i$/i) {
my $ignore = UVmessage::get("MENU_IGNORE_STRING"); my $ignore = UVmessage::get("MENU_IGNORE_STRING");
# Set columns for Text::Wrap # Set columns for Text::Wrap

View file

@ -9,6 +9,7 @@ use UVmessage;
use MIME::QuotedPrint; use MIME::QuotedPrint;
use MIME::Base64; use MIME::Base64;
use MIME::Parser; use MIME::Parser;
use Mail::Box::Manager;
use POSIX qw(strftime); use POSIX qw(strftime);
use vars qw($VERSION); use vars qw($VERSION);
@ -118,37 +119,65 @@ sub process {
close (UIDLCACHE) or print STDERR UVmessage::get("READMAIL_UIDL_CLOSE") . "\n"; 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(); $pop->quit();
# Mailbox / Maildir
} else { } else {
# open mail file
open(VOTES, "<$filename")
or die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $filename)) . "\n\n";
# read all mails my $readfilename;
my $i = 0;
while (<VOTES>) { if ($caller==0) {
if (/$config{mailstart}/) { # called from uvvote.pl: use configured mailbox file
$i++; $readfilename = $config{votefile};
} } else {
$mails[$i] = ($mails[$i] || "") . $_; # else use filename provided in function call
$readfilename = $filename;
# and create backup archive filename
$filename .= '.processed';
} }
# close mail file my $mgr = Mail::Box::Manager->new;
close(VOTES); my $folder;
eval{
$folder = $mgr->open( folder => $readfilename,
create => 0,
access => 'rw',
type => $config{mailboxtype},
expand => 'LAZY',
remove_when_empty => 0,
);
};
die UVmessage::get("READMAIL_NOMAILFILE", (FILE => $readfilename)) . "\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';
}
$fromline .= ' ' . localtime($_->timestamp()) . "\n";
push (@mails, $fromline . $mail);
}
}
# 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) { foreach my $mail (@mails) {

View file

@ -3,11 +3,16 @@
# wieder abgeprueft wird. Alle Zeilen, die mit dem Kommentarzeichen # # wieder abgeprueft wird. Alle Zeilen, die mit dem Kommentarzeichen #
# anfangen, werden ignoriert. # anfangen, werden ignoriert.
# #
Zur Verarbeitung des Wahlscheines und inbesondere der Veroeffentlichung Zur Verarbeitung des Wahlscheines und insbesondere der Veroeffentlichung
des Ergebnisses ist deine Zustimmung zur Speicherung, Auswertung und des Ergebnisses ist Deine Einwilligung zur Speicherung, Auswertung und
Veroeffentlichung deiner Stimmdaten (Name und E-Mail-Adresse in Veroeffentlichung deiner Stimmdaten (Name und E-Mail-Adresse in
Verbindung mit dem Stimmverhalten) im Rahmen dieses Verfahrens Verbindung mit dem Stimmverhalten) im Rahmen dieses Verfahrens
erforderlich. Wenn du im Feld unterhalb dieses Absatzes "JA" erforderlich. Wenn du im Feld unterhalb dieses Absatzes "JA"
eintraegst, erklaerst du dich damit einverstanden. In allen anderen eintraegst, erklaerst du dich damit einverstanden. In allen anderen
Faellen wird der Wahlschein mit Ruecksicht auf das deutsche Faellen wird der Wahlschein mit Ruecksicht auf die DSGVO verworfen
Bundesdatenschutzgesetz verworfen und nicht gewertet. und nicht gewertet. Die Einwilligung kann jederzeit mit Wirkung
fuer die Zukunft widerrufen werden. Dafuer genuegt eine E-Mail an
den Votetaker. Die Wertung und Veroeffentlichung der Stimmdaten
kann auch durch die erneute Einreichung eines Wahlscheins mit
"ANNULLIERUNG" (statt "JA" oder "NEIN") als Stimmabgabe beim
ersten Abstimmungspunkt verhindert werden.

View file

@ -25,7 +25,6 @@ hostmaster@
install@ install@
mailer.*@ mailer.*@
maint.*@ maint.*@
news@
newsmaster@ newsmaster@
nobody@ nobody@
operator@ operator@
@ -38,5 +37,4 @@ sysop@
system@ system@
test@ test@
tutor@ tutor@
usenet@
uucp@ uucp@

View file

@ -29,6 +29,8 @@ MENU_INVALIDBDSG = Datenschutzhinweis fehlerhaft oder nicht bestaetigt.
MENU_DUPLICATEVOTE = Doppelte Stimmabgabe gefunden. MENU_DUPLICATEVOTE = Doppelte Stimmabgabe gefunden.
MENU_NOVOTE = Keine Stimmabgabe gefunden. MENU_NOVOTE = Keine Stimmabgabe gefunden.
MENU_INVALIDVOTE = Ungueltige Stimmabgabe. MENU_INVALIDVOTE = Ungueltige Stimmabgabe.
MENU_NOVOTING = Bezeichnung der Abstimmung nicht gefunden.
MENU_WRONGVOTING = Wahlschein fuer andere Abstimmung.
MENU_NOBALLOTID = Keine Scheinkennung gefunden. MENU_NOBALLOTID = Keine Scheinkennung gefunden.
MENU_WRONGBALLOTID = Scheinkennung falsch. MENU_WRONGBALLOTID = Scheinkennung falsch.
MENU_ADDRESSNOTREGISTERED = Adresse nicht registriert. MENU_ADDRESSNOTREGISTERED = Adresse nicht registriert.
@ -40,6 +42,7 @@ MENU_UNRECOGNIZED_LIST = Stimme
MENU_VIOLATEDRULE = Regel ${RULE} verletzt. MENU_VIOLATEDRULE = Regel ${RULE} verletzt.
MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden: MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden:
MENU_CAPTION = Auswahlmenue: MENU_CAPTION = Auswahlmenue:
MENU_DIFF_BALLOT = Wahlschein mit Original vergleichen (diff)
MENU_SHOW_MAIL = Anzeigen der Wahlmail MENU_SHOW_MAIL = Anzeigen der Wahlmail
MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften: MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
MENU_ADDRESS = Mailadresse MENU_ADDRESS = Mailadresse
@ -67,6 +70,9 @@ MENU_BALLOT_ID = Scheinkennung
MENU_BDSG = Datenschutzklausel MENU_BDSG = Datenschutzklausel
MENU_BDSG_ACCEPTED = Datenschutzklausel wurde akzeptiert MENU_BDSG_ACCEPTED = Datenschutzklausel wurde akzeptiert
MENU_BDSG_DECLINED = Datenschutzklausel nicht akzeptiert bzw. Text veraendert MENU_BDSG_DECLINED = Datenschutzklausel nicht akzeptiert bzw. Text veraendert
MENU_VOTING = Abstimmung
MENU_VOTING_CORRECT = Korrekter Wahlschein fuer diese Abstimmung
MENU_VOTING_WRONG = Wahlschein fuer andere Abstimmung
MENU_IGNORE = Diese Stimme ignorieren (ohne Benachrichtigung verwerfen) MENU_IGNORE = Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
MENU_IGNORE_WARNING = Die Stimme wird nicht aufgezeichnet, und es wird keine Bestaetigung verschickt. ${MENU_IGNORE_STRING} eingeben, wenn Du sicher bist: MENU_IGNORE_WARNING = Die Stimme wird nicht aufgezeichnet, und es wird keine Bestaetigung verschickt. ${MENU_IGNORE_STRING} eingeben, wenn Du sicher bist:
MENU_IGNORE_STRING = JA MENU_IGNORE_STRING = JA
@ -162,7 +168,7 @@ COUNT_DELETED = ${NUM} Stimme(n) geloescht.
VOTE_RENAMING_MAILBOX = Benenne Stimmdatei um... VOTE_RENAMING_MAILBOX = Benenne Stimmdatei um...
VOTE_WRITE_RESULTS = Ergebnisdatei ${FILE} nicht schreibbar! VOTE_WRITE_RESULTS = Ergebnisdatei ${FILE} nicht schreibbar!
VOTE_CLOSE_RESULTS = Ergebnisdatei ${FILE} konnte nicht erfolgreich geschlossen werden! VOTE_CLOSE_RESULTS = Ergebnisdatei ${FILE} konnte nicht erfolgreich geschlossen werden!
VOTE_NO_VOTES = Keine Stimmen zu verarbeiten. VOTE_NO_VOTEMAILS = Keine Stimmen zu verarbeiten.
VOTE_NUM_VOTES = ${COUNT} Stimmen bearbeitet. VOTE_NUM_VOTES = ${COUNT} Stimmen bearbeitet.
VOTE_NOT_SAVED = ${COUNT} Stimmen bearbeitet, aber nicht gespeichert. VOTE_NOT_SAVED = ${COUNT} Stimmen bearbeitet, aber nicht gespeichert.
VOTE_FIRSTRUN = 'uvvote clean' aufrufen, um Ergebnisse zu speichern und Bestaetigungen zu verschicken. VOTE_FIRSTRUN = 'uvvote clean' aufrufen, um Ergebnisse zu speichern und Bestaetigungen zu verschicken.
@ -173,6 +179,7 @@ VOTE_UNREGISTERED_ADDRESS = Adresse nicht registriert
VOTE_INVALID_VOTE = Ungueltige Stimmabgabe VOTE_INVALID_VOTE = Ungueltige Stimmabgabe
VOTE_VIOLATED_RULE = Regel ${RULE} verletzt VOTE_VIOLATED_RULE = Regel ${RULE} verletzt
VOTE_NO_VOTES = Keine Stimmen abgegeben VOTE_NO_VOTES = Keine Stimmen abgegeben
VOTE_WRONG_VOTING = Wahlschein gehoert nicht zu dieser Abstimmung
VOTE_INVALID_ACCOUNT = Ungueltiger Account VOTE_INVALID_ACCOUNT = Ungueltiger Account
VOTE_INVALID_ADDRESS = Ungueltige Adresse VOTE_INVALID_ADDRESS = Ungueltige Adresse
VOTE_INVALID_REALNAME = Ungueltiger Realname VOTE_INVALID_REALNAME = Ungueltiger Realname

View file

@ -5,15 +5,22 @@ pos := value pos | fill-right 2
group-first := value group | first-words 50 group-first := value group | first-words 50
group-more := value group | drop-words 50 | create-lines 50 group-more := value group | drop-words 50 | create-lines 50
vote := value vote | fill-both 10 vote := value vote | fill-both 10
votetaker := value mailfrom | fill-left 65 votetaker := value mailfrom
voteaccount-line := value voteaccount | fill-both 70
== TEMPLATE ================================================================= == TEMPLATE =================================================================
Diese automatische Nachricht wurde dir nach Zaehlung deiner Stimme Diese automatische Nachricht wurde dir nach Zaehlung deiner Stimme
zugesandt. Wenn alles stimmt, gibt es keinen Anlass fuer eine Reaktion. zugesandt. Wenn alles stimmt, gibt es keinen Anlass fuer eine Reaktion.
Wenn deine Stimme falsch registriert wurde, stimme bitte erneut ab, Wenn deine Stimme falsch registriert wurde, stimme bitte erneut ab,
indem du diese Mail komplett zitierst und die falschen Wertungen indem du diese Mail komplett zitierst und die falschen Wertungen
korrigierst (zwischen die eckigen Klammern schreiben). Dabei darf korrigierst (zwischen die eckigen Klammern schreiben). Dabei darf
keinesfalls die laufende Nummer am Zeilenanfang entfernt werden. keinesfalls die laufende Nummer am Zeilenanfang entfernt werden.
Beachte bitte, dass Du Deine Stimme an die Abstimmadresse senden
musst! Es genuegt daher nicht, einfach auf diese E-Mail zu antworten,
vielmehr muss die Antwort an die Adresse
[$voteaccount-line]
gerichtet sein.
Diese Wahl ist oeffentlich, und die Adressen aller Waehlerinnen und Diese Wahl ist oeffentlich, und die Adressen aller Waehlerinnen und
Waehler werden am Ende bekanntgegeben. Wenn du deine Adresse & Stimme Waehler werden am Ende bekanntgegeben. Wenn du deine Adresse & Stimme
@ -29,8 +36,8 @@ Wahlscheinkennung gueltig!
[$name-line] [$name-line]
(Real-Namen sind fuer diese Abstimmung vorgeschrieben. Wenn hier (Real-Namen sind fuer diese Abstimmung vorgeschrieben. Wenn hier
nicht Dein wirklicher Name steht, dann korrigiere die Zeile nicht Dein wirklicher Name steht, dann korrigiere die Zeile
bitte und sende die Nachricht zurueck; sonst kann die Stimme bitte und sende die Nachricht erneut an die Abstimmadresse,
spaeter als ungueltig gewertet werden.) sonst kann die Stimme spaeter als ungueltig gewertet werden.)
Deine Stimmabgabe wurde wie folgt erkannt: Deine Stimmabgabe wurde wie folgt erkannt:
@ -39,8 +46,7 @@ Deine Stimmabgabe wurde wie folgt erkannt:
[@group-more| [$line]\n]|\n] [@group-more| [$line]\n]|\n]
Danke fuer deine Stimmabgabe. Eine Kopie des CfV kannst du von mir er- Danke fuer deine Stimmabgabe.
halten (bitte Namen der Abstimmung angeben, falls mehrere laufen).
[$votetaker] [$votetaker]
\[mit [$usevote_version]\] \[mit [$usevote_version]\]

View file

@ -14,7 +14,7 @@ bdsgtext-more := value bdsgtext | drop-words 50 | create-lines 50
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
WAHLSCHEIN fuer [$votename-first] [$ballotintro] [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]

View file

@ -29,7 +29,7 @@ votetaker := value mailfrom | fill-left 65
=-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=- Alles vor dieser Zeile bitte loeschen =-=-=-=-=-=-=-=-
WAHLSCHEIN fuer [$votename-first] [$ballotintro] [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]

View file

@ -11,9 +11,10 @@ group-more := value group | drop-words 40 | create-lines 40
Ergebnisse [$votename-first] Ergebnisse [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]
([$numvalid] gueltige Stimmen)
Ja Nein : 2/3? >=60? : ang.? : Gruppe Es wurden [$numvalid] gueltige Stimmen abgegeben.
Ja Nein : 2/3? >=15? : ang.? : Gruppe
---- ---- : ---- ----- : ----- : --------------------------------------- ---- ---- : ---- ----- : ----- : ---------------------------------------
[@count|[$yes] [$no] : [?cond1| Ja |Nein] [?cond2| Ja |Nein] : [?result| Ja |Nein] : [$group-first] [@count|[$yes] [$no] : [?cond1| Ja |Nein] [?cond2| Ja |Nein] : [?result| Ja |Nein] : [$group-first]
[@group-more| : : : [$line]\n]\n] [@group-more| : : : [$line]\n]\n]
@ -24,6 +25,7 @@ Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
E-Mail bei der Moderation von de.admin.news.announce (Adressen E-Mail bei der Moderation von de.admin.news.announce (Adressen
siehe Signatur) einzulegen. siehe Signatur) einzulegen.
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
werden, wird die Moderation von de.admin.news.announce das werden, wird die Moderation von de.admin.news.announce das
Ergebnis danach umsetzen. Ergebnis danach umsetzen.

View file

@ -12,7 +12,8 @@ group-more := value group | drop-words 40 | create-lines 40
Ergebnisse [$votename-first] Ergebnisse [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]
([$numvalid] gueltige Stimmen)
Es wurden [$numvalid] gueltige Stimmen abgegeben.
Ja Nein : J>=N? Ja/Nein : ang.? : Gruppe Ja Nein : J>=N? Ja/Nein : ang.? : Gruppe
---- ---- : ----- ------- : ----- : --------------------------------------- ---- ---- : ----- ------- : ----- : ---------------------------------------
@ -24,6 +25,7 @@ Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
E-Mail bei der Moderation von de.admin.news.announce (Adressen E-Mail bei der Moderation von de.admin.news.announce (Adressen
siehe Signatur) einzulegen. siehe Signatur) einzulegen.
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
werden, wird die Moderation von de.admin.news.announce das werden, wird die Moderation von de.admin.news.announce das
Ergebnis danach umsetzen. Ergebnis danach umsetzen.

View file

@ -8,19 +8,21 @@ votename-text-more := value votename | drop-words 30 | create-lines 72
Ergebnisse [$votename-first] Ergebnisse [$votename-first]
[@votename-more| [$line]\n] [@votename-more| [$line]\n]
([$numvalid] gueltige Stimmen)
Es wurden [$numvalid] gueltige Stimmen abgegeben.
Es gab [$yes] Ja-Stimmen und [$no] Nein-Stimmen[?numabstain| bei [$numabstain] Enthaltungen]. Es gab [$yes] Ja-Stimmen und [$no] Nein-Stimmen[?numabstain| bei [$numabstain] Enthaltungen].
[?numinvalid|[$numinvalid] Stimme(n) wurden als ungueltig gewertet.] [?numinvalid|[$numinvalid] Stimme(n) wurden als ungueltig gewertet.]
Es wurde [?cond1|die|keine] 2/3-Mehrheit erreicht und es gingen [?cond2|mehr|weniger] als 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] 15 Ja-Stimmen ein. Damit ist die [$votename-text-first]
[@votename-text-more|[$line] |\n][?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt]. [@votename-text-more|[$line] |\n][?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt].
Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner
Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per Veroeffentlichung Einspruch erhoben werden. Der Einspruch ist per
E-Mail bei der Moderation von de.admin.news.announce (Adressen E-Mail bei der Moderation von de.admin.news.announce (Adressen
siehe Signatur) einzulegen. siehe Signatur) einzulegen.
Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt Wenn es keine ernsthaften Einsprueche gibt oder diese abgelehnt
werden, wird die Moderation von de.admin.news.announce das werden, wird die Moderation von de.admin.news.announce das
Ergebnis danach umsetzen. Ergebnis danach umsetzen.

21
templates/wrong-voting Normal file
View file

@ -0,0 +1,21 @@
votetaker := value mailfrom | fill-left 65
body := value body | quote "> "
== TEMPLATE =================================================================
Offenbar hast du einen Wahlschein fuer eine andere Abstimmung eingesandt
oder der Name der Abstimmung geht aus dem Wahlschein nicht hervor. Wenn
das ein Irrtum war, pruefe bitte noch einmal die im CfV angegebene
Abstimmungsadresse und wiederhole Deine Stimmabgabe.
Dieser Fehler kann auftreten, wenn Du an mehreren Abstimmungen teilnimmst
und den Wahlschein von Hand einsendest (und dabei mehrere Abstimmungen
verwechselst), oder wenn Du die Bezeichnung der Abstimmung im Wahlschein
veraendert oder geloescht hast.
Hier die Mail, die ich erhalten habe:
[$body]
[$votetaker]
\[mit [$usevote_version]\]

View file

@ -75,7 +75,11 @@ multigroup = 1
# wird nur Bedingung 1 ausgewertet und kann z.B. auf "$yes>$no" gesetzt # wird nur Bedingung 1 ausgewertet und kann z.B. auf "$yes>$no" gesetzt
# werden. # werden.
condition1 = $yes>=2*$no condition1 = $yes>=2*$no
condition2 = $yes>=60 condition2 = $yes>=15
# Datei mit Musterwahlschein, wie er im CfV geposted wurde. Wird fuer
# Vergleich mit ankommenden Wahlscheinen per "diff" genutzt.
sampleballotfile = ballot.sample
# Ergebnisdatei, in der alle Einzelergebniss zusammengeschrieben werden # Ergebnisdatei, in der alle Einzelergebniss zusammengeschrieben werden
# (wird bei jedem Programmlauf neu erstellt!) # (wird bei jedem Programmlauf neu erstellt!)
@ -90,6 +94,9 @@ pop3 = 1
# Mailbox, in der die zu verarbeitenden Mails liegen (falls pop3=0) # Mailbox, in der die zu verarbeitenden Mails liegen (falls pop3=0)
votefile = votes votefile = votes
# Typ der Mailbox (mbox, maildir)
mailboxtype = mbox
# POP3-Einstellungen fuer Abruf der eingehenden Wahlscheine: # POP3-Einstellungen fuer Abruf der eingehenden Wahlscheine:
# Server, Port, Benutzername, Passwort # Server, Port, Benutzername, Passwort
pop3server = 127.0.0.1 pop3server = 127.0.0.1
@ -183,7 +190,7 @@ domailfile = tmp/domail
# MTA-Aufruf zum Verschicken der Bestaetigungsmails # MTA-Aufruf zum Verschicken der Bestaetigungsmails
# nuetzlich ist die Sendmail-Option -f zum Setzen des Absenders # nuetzlich ist die Sendmail-Option -f zum Setzen des Absenders
#mailcmd = sendmail -oi -oem -femail@adresse #mailcmd = sendmail -oi -oem -femail@adresse --
# Weiteres Kommando, welches nach jeder Mail aufgerufen werden soll (falls smtp=0). # Weiteres Kommando, welches nach jeder Mail aufgerufen werden soll (falls smtp=0).
# Sinnvoll ist ein "sleep x", wobei x bei langsamen Systemen hoeher # Sinnvoll ist ein "sleep x", wobei x bei langsamen Systemen hoeher
@ -205,6 +212,9 @@ clearcmd = clear
# Windows-Verzeichnis kopieren (URL siehe README-Datei) # Windows-Verzeichnis kopieren (URL siehe README-Datei)
pager = less pager = less
# Shellbefehl fuer Dateivergleich
diff = diff -u
# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei) # Datei mit diversen Meldungen und Textfragmenten (Resourcendatei)
messagefile = messages.cfg messagefile = messages.cfg
@ -227,6 +237,10 @@ mailstart = "^From "
begin_divider = Alles vor dieser Zeile bitte loeschen begin_divider = Alles vor dieser Zeile bitte loeschen
end_divider = Alles nach dieser Zeile bitte loeschen end_divider = Alles nach dieser Zeile bitte loeschen
# Ueberschrift fuer den Wahlschein
# Achtung, muss im Wahlschein genauso stehen!
ballotintro = WAHLSCHEIN fuer
# Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im # Text fuer die Namens-Angabe im Wahlschein. Achtung, muss im
# Wahlschein genauso stehen! # Wahlschein genauso stehen!
nametext = Dein Realname, falls nicht im FROM-Header: nametext = Dein Realname, falls nicht im FROM-Header:
@ -267,6 +281,10 @@ enth_stimme = (E|E\s*N\s*T\s*H\s*A\s*L\s*T\s*U\s*N\s*G)
# Achtung, sollte auch in den Templates im Bestaetigungstext angepasst werden # 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 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
# RegExp fuer Bestaetigung der Datenschutzklause (case-insensitive)
# Standardmaessig wird nur JA erkannt
bdsg_confirm = JA
# Template files (these files are in the template directory defined above) # Template files (these files are in the template directory defined above)
tpl_mailheader = "mailheader" # generally used mail header tpl_mailheader = "mailheader" # generally used mail header
tpl_bouncelist = "bouncelist" # used by uvbounce.pl tpl_bouncelist = "bouncelist" # used by uvbounce.pl
@ -290,4 +308,5 @@ tpl_invalid_name = "invalid-name" # used by uvvote.pl
tpl_multiple_votes = "multiple-votes" # used by uvvote.pl tpl_multiple_votes = "multiple-votes" # used by uvvote.pl
tpl_no_ballot = "no-ballot" # used by uvvote.pl tpl_no_ballot = "no-ballot" # used by uvvote.pl
tpl_no_votes = "no-votes" # used by uvvote.pl tpl_no_votes = "no-votes" # used by uvvote.pl
tpl_wrong_voting = "wrong-voting" # used by uvvote.pl
tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul) tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul)

4
uvballot.pl Normal file → Executable file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
############################################################################### ###############################################################################
# UseVoteGer 4.09 Wahlscheingenerierung # UseVoteGer 4.13 Wahlscheingenerierung
# (c) 2001-2005 Marc Langer <uv@marclanger.de> # (c) 2001-2022 Marc Langer <uv@marclanger.de>
# #
# This script package is free software; you can redistribute it and/or # 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 # modify it under the terms of the GNU Public License as published by the

4
uvbounce.pl Normal file → Executable file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
############################################################################### ###############################################################################
# UseVoteGer 4.09 Bounce-Verarbeitung # UseVoteGer 4.13 Bounce-Verarbeitung
# (c) 2001-2005 Marc Langer <uv@marclanger.de> # (c) 2001-2022 Marc Langer <uv@marclanger.de>
# #
# This script package is free software; you can redistribute it and/or # 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 # modify it under the terms of the GNU Public License as published by the

8
uvcfv.pl Normal file → Executable file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
############################################################################### ###############################################################################
# UseVoteGer 4.09 Personalisierte Wahlscheine # UseVoteGer 4.13 Personalisierte Wahlscheine
# (c) 2001-2005 Marc Langer <uv@marclanger.de> # (c) 2001-2022 Marc Langer <uv@marclanger.de>
# #
# This script package is free software; you can redistribute it and/or # 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 # modify it under the terms of the GNU Public License as published by the
@ -152,9 +152,9 @@ sub process_request {
# check for suspicious addresses # check for suspicious addresses
foreach my $element (@bad_addr) { foreach my $element (@bad_addr) {
if ($voter_addr =~ /^$element/) { if ($voter_addr =~ /^$element/) {
my (@votes, @set, $ballot_id); # irrelevant, but necessary for UVmenu::menu() my (@votes, @set, $ballot_id, $voting); # irrelevant, but necessary for UVmenu::menu()
my @errors = ('SuspiciousAccountBallot'); my @errors = ('SuspiciousAccountBallot');
my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, \$ballot_id, \@set, \@errors); my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, \$ballot_id, \$voting, \@set, \@errors);
# "Ignore": don't deliver a ballot # "Ignore": don't deliver a ballot
return 0 if ($res eq 'i'); return 0 if ($res eq 'i');

4
uvcount.pl Normal file → Executable file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
############################################################################### ###############################################################################
# UseVoteGer 4.09 Stimmauswertung # UseVoteGer 4.13 Stimmauswertung
# (c) 2001-2005 Marc Langer <uv@marclanger.de> # (c) 2001-2022 Marc Langer <uv@marclanger.de>
# #
# This script package is free software; you can redistribute it and/or # 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 # modify it under the terms of the GNU Public License as published by the

40
uvvote.pl Normal file → Executable file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w #!/usr/bin/perl -w
############################################################################### ###############################################################################
# UseVoteGer 4.09 Wahldurchfuehrung # UseVoteGer 4.13 Wahldurchfuehrung
# (c) 2001-2005 Marc Langer <uv@marclanger.de> # (c) 2001-2022 Marc Langer <uv@marclanger.de>
# #
# This script package is free software; you can redistribute it and/or # 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 # modify it under the terms of the GNU Public License as published by the
@ -123,7 +123,7 @@ if ($clean) {
my $ext = time; my $ext = time;
opendir (TMP, $config{tmpdir}); opendir (TMP, $config{tmpdir});
my @tmpfiles = readdir (DIR); my @tmpfiles = readdir (TMP);
closedir (TMP); closedir (TMP);
opendir (FERTIG, $config{archivedir}); opendir (FERTIG, $config{archivedir});
my @fertigfiles = readdir (FERTIG); my @fertigfiles = readdir (FERTIG);
@ -135,16 +135,6 @@ if ($clean) {
my $thisresult = "ergebnis-" . $ext; my $thisresult = "ergebnis-" . $ext;
my $thisvotes = "stimmen-" . $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 results file
open (RESULT, ">>$config{tmpdir}/$thisresult") open (RESULT, ">>$config{tmpdir}/$thisresult")
or die UVmessage::get("VOTE_WRITE_RESULTS", (FILE=>$thisresult)) . "\n\n"; or die UVmessage::get("VOTE_WRITE_RESULTS", (FILE=>$thisresult)) . "\n\n";
@ -158,7 +148,7 @@ if ($clean) {
# no mails: exit here # no mails: exit here
unless ($count) { unless ($count) {
print UVmessage::get("VOTE_NO_VOTES") . "\n\n"; print UVmessage::get("VOTE_NO_VOTEMAILS") . "\n\n";
exit 0; exit 0;
} }
@ -224,6 +214,7 @@ sub process_vote {
my $onevote = 0; # 0=no votes, 1=everything OK, 2=vote cancelled my $onevote = 0; # 0=no votes, 1=everything OK, 2=vote cancelled
my $voteerror = ""; # error message in case of invalid vote my $voteerror = ""; # error message in case of invalid vote
my $ballot_id = ""; # ballot id (German: Wahlscheinkennung) my $ballot_id = ""; # ballot id (German: Wahlscheinkennung)
my $voting = ""; # voting (should be votename)
# found address? # found address?
if ($voter_addr) { if ($voter_addr) {
@ -239,6 +230,15 @@ sub process_vote {
push (@errors, 'InvalidAddress'); push (@errors, 'InvalidAddress');
} }
# correct voting?
if ($$body =~ /\Q$config{ballotintro}\E\s+(.+?)\s*\n([>:|]*?[\t ]+(\S+.+)\s*$)?/m) {
$voting = $1;
$voting .= " $3" if (defined($3) and $3 !~ /\Q$config{nametext}\E/);
push (@errors, 'WrongVoting') if ($config{votename} !~ /^\s*\Q$voting\E\s*$/);
} else {
push (@errors, 'NoVoting');
}
# personalized ballots? # personalized ballots?
if ($config{personal}) { if ($config{personal}) {
if ($$body =~ /$config{ballotidtext}\s+([a-z0-9]+)/) { if ($$body =~ /$config{ballotidtext}\s+([a-z0-9]+)/) {
@ -273,7 +273,7 @@ sub process_vote {
# this matches on a single appearance: # this matches on a single appearance:
if ($$body =~ /#$votenum\W*?\[(.+)\]/) { if ($$body =~ /#$votenum\W*?\[(.+)\]/) {
# one or more vote strings were found # one or more vote strings were found
$onevote = 1; $onevote ||= 1; # set $onevote to 1 if it was 0
my $votestring = $1; my $votestring = $1;
if ($votestring =~ /^\W*$config{ja_stimme}\W*$/i) { if ($votestring =~ /^\W*$config{ja_stimme}\W*$/i) {
$vote = "J"; $vote = "J";
@ -319,7 +319,7 @@ sub process_vote {
# Should read like this: #a [ STIMME ] Text # Should read like this: #a [ STIMME ] Text
# (Text is configurable in usevote.cfg) # (Text is configurable in usevote.cfg)
unless ($$body =~ /$bdsg_regexp/s && unless ($$body =~ /$bdsg_regexp/s &&
$$body =~ /#a\W*?\[\W*?$config{ja_stimme}\W*?\]\W*?$bdsg2_regexp/is) { $$body =~ /#a\W*?\[\W*?$config{bdsg_confirm}\W*?\]\W*?$bdsg2_regexp/is) {
push (@errors, 'InvalidBDSG'); push (@errors, 'InvalidBDSG');
} }
@ -343,7 +343,7 @@ sub process_vote {
# Errors encountered? # Errors encountered?
if (@errors) { if (@errors) {
my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name, my $res = UVmenu::menu(\@votes, \@header, $body, \$voter_addr, \$voter_name,
\$ballot_id, \@set, \@errors); \$ballot_id, \$voting, \@set, \@errors);
return 0 if ($res eq 'i'); # "Ignore": Ignore vote, don't save return 0 if ($res eq 'i'); # "Ignore": Ignore vote, don't save
my $tpl; my $tpl;
@ -402,6 +402,12 @@ sub process_vote {
my $msg = $template->processTemplate($config{tpl_bdsg_error}); my $msg = $template->processTemplate($config{tpl_bdsg_error});
UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack}); UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack});
return 0; return 0;
} elsif ($error{NoVoting} or $error{WrongVoting}) {
$voteerror = UVmessage::get("VOTE_WRONG_VOTING");
my $template = UVtemplate->new();
$template->setKey('body' => $$body);
my $msg = $template->processTemplate($config{tpl_wrong_voting});
UVsendmail::mail($voter_addr, "Fehler", $msg, $msgid) if ($config{voteack});
} elsif ($error{NoVote}) { } elsif ($error{NoVote}) {
$voteerror = UVmessage::get("VOTE_NO_VOTES"); $voteerror = UVmessage::get("VOTE_NO_VOTES");
my $template = UVtemplate->new(); my $template = UVtemplate->new();