Compare commits

..

2 commits

Author SHA1 Message Date
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 89 additions and 452 deletions

1
.gitattributes vendored
View file

@ -1 +0,0 @@
* text=auto

52
CHANGES
View file

@ -1,48 +1,14 @@
UseVoteGer Versionshistorie (aktuelle Version: 4.12, released 28.02.2014)
UseVoteGer Versionshistorie (aktuelle Version: 4.10, released 17.09.2012)
=========================================================================
TODO:
- aussortieren von Bounces aus Stimmenliste
Version 4.13 (unreleased):
- BDSG-Klausel an die DSGVO angepasst
- "mailcmd" muss mit "--" enden, damit Mailadressen, die mit "-"
beginnen, richtig erkannt werden.
- "diff -u" ist ein besserer Default für 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
- 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.10 (17.09.2012):
- Fehler in uvvote.pl, Zeile 126 behoben (Verarbeitung von temporaeren
@ -57,7 +23,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 geprueft (Wahlschein gehört
- Abstimmungsname wird nun auf Korrektheit geprüft (Wahlschein gehört
zur richtigen Abstimmung)
- neue Konfigurations-Option "ballotintro" und neues Template
tpl_wrong_voting
@ -70,7 +36,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 fuer Ergebnisausgabe korrigiert (fehlendes Newline
- Fehler in Template für Ergebnisausgabe korrigiert (fehlendes Newline
nach umgebrochenen Abstimmungspunkten)
- Fehler in Doku der Kommandozeilenoptionen von uvcount.pl behoben
(--voters statt --votes)

30
README
View file

@ -1,4 +1,4 @@
UseVoteGer 4.12 (c) 2001-2014 Marc Langer
UseVoteGer 4.10 (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.12 - Usenet-Abstimmungssoftware
UseVoteGer 4.10 - Usenet-Abstimmungssoftware
===========================================
von Marc Langer <uv@marclanger.de>
@ -187,7 +187,7 @@ UVrules.pm Routinen zur Regelverarbeitung (usevote.rul)
UVsendmail.pm Routinen zum Erzeugen von Mails
UVtemplate.pm Routinen zur Verarbeitung von Vorlagen (Templates)
bdsgtext.cfg Spezieller Text fuer den Wahlschein (Hinweis auf
DSGVO), muss ausserhalb Deutschlands ggfls.
Datenschutzgesetz), muss ausserhalb Deutschlands ggfls.
angepasst oder kann ignoriert werden (bdsg=0 in usevote.cfg)
mailpatterns.cfg Wildcards fuer verdaechtige Mailadressen
messages.cfg Programm-Meldungen (Ressourcen-Datei)
@ -324,7 +324,6 @@ ohne die .pl und .pm Dateien jedesmal mitzukopieren. Folgende Dateien
sollten im Abstimmungsverzeichnis vorhanden sein (notwendig ist nur
usevote.cfg, darin können alle anderen Pfade angepasst werden):
ballot.sample
bdsgtext.cfg
mailpatterns.cfg
messages.cfg
@ -405,7 +404,6 @@ mit einzelnen Stimmen wirst Du interaktiv durch Menues gefuehrt.
Meistens gibt es folgende Moeglichkeiten, die durch die
eingeklammerten Buchstaben und Zahlen aufgerufen werden koennen:
(0) Wahlschein mit Original vergleichen (diff)
(1) Anzeigen der Wahlmail
Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
@ -414,7 +412,6 @@ Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
(4) Stimmen
(5) Scheinkennung
(6) Datenschutzklausel
(7) Abstimmung
(i) Diese Stimme ignorieren (ohne Benachrichtigung verwerfen)
(w) Weiter
@ -429,11 +426,8 @@ Teilweise gibt es Unteroptionen:
Nun solltest Du zunaechst mit (1) die Mail ansehen und anhand
der bemaengelten Punkte entscheiden, ob der Wahlschein gueltig
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 (7) kannst Du einzelne Eigenschaften
Mit den Optionen (2) bis (6) kannst Du einzelne Eigenschaften
des Wahlscheins nachbessern (wenn Usevote z.B. einen Namen oder
eine Stimme nicht korrekt erkannt hat) oder auch einfach die
Korrektheit bestaetigen.
@ -524,7 +518,7 @@ Das Endergebnis kannst Du mit "uvcount.pl -r" ausgeben lassen.
Bei Verfahren mit mehreren Abstimmungspunkten wird automatusch
das folgende tabellarische Format verwendet:
Ja Nein : 2/3? >=15? : ang.? : Gruppe
Ja Nein : 2/3? >=60? : ang.? : Gruppe
==== ==== : ==== ===== : ===== : =======================================
100 70 : Nein Ja : Nein : Einrichtung von xyz
@ -691,10 +685,6 @@ uvbounce.pl
eingeschaltet und die Option -f (siehe unten) nicht benutzt wurde,
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-
Unterverzeichnis konfigurierbar (Datei "bouncelist").
@ -967,9 +957,7 @@ Hier eine Auflistung der immer anzupassenden Optionen
votename Name der Abstimmung
group1 Erster Abstimmungsgegenstand
group2 Zweiter (und so weiter durchnummerieren)
sampleballotfile Datei mit Musterwahlschein aus dem CfV fuer Dateivergleich (diff)
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
@ -989,7 +977,7 @@ onestep Mails direkt verschicken und Ergebnisse speichern? [BOOL]
multigroup Fuer das Ergebnis auch bei Eingruppenabstimmung des
Mehrgruppenformat waehlen? [BOOL]
condition1 Bedingungen fuer einen Erfolg der Abstimmung in Perl-Syntax
condition2 (normalerweise "$yes>=2*$no" und "$yes>=15"
condition2 (normalerweise "$yes>=2*$no" und "$yes>=60"
resultfile Datei fuer Gesamtergebnis (normalerweise ergebnis.alle)
idfile Datei mit Scheinkennungen (bei "personal=1")
pop3 POP3 benutzen? [BOOL] (andernfalls Stimmen aus Datei lesen)
@ -1027,7 +1015,7 @@ domailfile Name des Shellscripts zum Versenden der Bestaetigungsmails
(falls smtp=0, normalerweise tmp/domail)
mailcmd Aufruf des Mail Transfer Agents (MTA) zum Verschicken der
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
soll (falls smtp=0). Sinnvoll ist ein "sleep x", wobei x bei
langsamen Systemen hoeher gewaehlt werden sollte.
@ -1036,10 +1024,6 @@ clearcmd Shellbefehl zum Loeschen des Bildschirms (Standard: clear),
oder Betriebssystem keinen solchen Befehl bereitstellen,
sollte ein Kommando verwendet werden, welches eine Trennlinie
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
Bildschirm (normalerweise "less"). Unter Windows muss "more"
benutzt werden, unter Unix hingegen gibt es moeglicherweise

View file

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

View file

@ -60,7 +60,6 @@ sub menu {
while (1) {
system($config{clearcmd});
print "-> $config{votename} <-\n";
print UVmessage::get("MENU_PROBLEMS") . "\n";
foreach my $error (keys %errors) {
@ -70,12 +69,6 @@ sub menu {
my $menucaption = UVmessage::get("MENU_CAPTION");
print "\n\n$menucaption\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",
UVmessage::get("MENU_CHANGE_PROPERTIES"), "\n",
"(2) ", UVmessage::get("MENU_ADDRESS"), " [$voter_addr]\n";
@ -102,14 +95,7 @@ sub menu {
# only accept 1, 2, i and w if called from uvcfv.pl
next if ($mailonly && $input !~ /^[12iw]$/i);
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') {
if ($input eq '1') {
system($config{clearcmd});
# ignore SIGPIPE (Bug in more and less)
$SIG{PIPE} = 'IGNORE';
@ -301,6 +287,22 @@ sub menu {
$errors{WrongVoting} = UVmessage::get("MENU_WRONGVOTING");
}
} 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) {
my $ignore = UVmessage::get("MENU_IGNORE_STRING");
# Set columns for Text::Wrap

View file

@ -9,7 +9,6 @@ use UVmessage;
use MIME::QuotedPrint;
use MIME::Base64;
use MIME::Parser;
use Mail::Box::Manager;
use POSIX qw(strftime);
use vars qw($VERSION);
@ -119,65 +118,37 @@ 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";
my $readfilename;
if ($caller==0) {
# called from uvvote.pl: use configured mailbox file
$readfilename = $config{votefile};
} else {
# else use filename provided in function call
$readfilename = $filename;
# and create backup archive filename
$filename .= '.processed';
}
my $mgr = Mail::Box::Manager->new;
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';
# read all mails
my $i = 0;
while (<VOTES>) {
if (/$config{mailstart}/) {
$i++;
}
$fromline .= ' ' . localtime($_->timestamp()) . "\n";
push (@mails, $fromline . $mail);
$mails[$i] = ($mails[$i] || "") . $_;
}
}
# 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";
# close mail file
close(VOTES);
}
foreach my $mail (@mails) {

View file

@ -4,15 +4,10 @@
# anfangen, werden ignoriert.
#
Zur Verarbeitung des Wahlscheines und insbesondere der Veroeffentlichung
des Ergebnisses ist Deine Einwilligung zur Speicherung, Auswertung und
des Ergebnisses ist deine Zustimmung zur Speicherung, Auswertung und
Veroeffentlichung deiner Stimmdaten (Name und E-Mail-Adresse in
Verbindung mit dem Stimmverhalten) im Rahmen dieses Verfahrens
erforderlich. Wenn du im Feld unterhalb dieses Absatzes "JA"
eintraegst, erklaerst du dich damit einverstanden. In allen anderen
Faellen wird der Wahlschein mit Ruecksicht auf die DSGVO verworfen
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.
Faellen wird der Wahlschein mit Ruecksicht auf das deutsche
Bundesdatenschutzgesetz verworfen und nicht gewertet.

View file

@ -1,9 +0,0 @@
#!/bin/bash
cd ~/usevote
mkdir $1
cd $1
sed s/LOCALPART/$1/g ../usevote.tpl.cfg > usevote.cfg
mkdir tmp
mkdir done
echo "Voting $1 created!"

View file

@ -42,7 +42,6 @@ MENU_UNRECOGNIZED_LIST = Stimme
MENU_VIOLATEDRULE = Regel ${RULE} verletzt.
MENU_PROBLEMS = Die folgenden Probleme muessen beseitigt werden:
MENU_CAPTION = Auswahlmenue:
MENU_DIFF_BALLOT = Wahlschein mit Original vergleichen (diff)
MENU_SHOW_MAIL = Anzeigen der Wahlmail
MENU_CHANGE_PROPERTIES = Bestaetigen oder Aendern von Wahlschein-Eigenschaften:
MENU_ADDRESS = Mailadresse

View file

@ -14,7 +14,7 @@ Ergebnisse [$votename-first]
Es wurden [$numvalid] gueltige Stimmen abgegeben.
Ja Nein : 2/3? >=15? : ang.? : Gruppe
Ja Nein : 2/3? >=50? : ang.? : Gruppe
---- ---- : ---- ----- : ----- : ---------------------------------------
[@count|[$yes] [$no] : [?cond1| Ja |Nein] [?cond2| Ja |Nein] : [?result| Ja |Nein] : [$group-first]
[@group-more| : : : [$line]\n]\n]

View file

@ -15,7 +15,7 @@ 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
15 Ja-Stimmen ein. Damit ist die [$votename-text-first]
50 Ja-Stimmen ein. Damit ist die [$votename-text-first]
[@votename-text-more|[$line] |\n][?cond1|[?cond2|angenommen|abgelehnt]|abgelehnt].
Gegen dieses Ergebnis kann innerhalb einer Woche nach seiner

0
tmp/ergebnis-1191790177 Normal file
View file

0
tmp/stimmen-1191790177 Normal file
View file

View file

@ -75,11 +75,7 @@ multigroup = 1
# wird nur Bedingung 1 ausgewertet und kann z.B. auf "$yes>$no" gesetzt
# werden.
condition1 = $yes>=2*$no
condition2 = $yes>=15
# Datei mit Musterwahlschein, wie er im CfV geposted wurde. Wird fuer
# Vergleich mit ankommenden Wahlscheinen per "diff" genutzt.
sampleballotfile = ballot.sample
condition2 = $yes>=50
# Ergebnisdatei, in der alle Einzelergebniss zusammengeschrieben werden
# (wird bei jedem Programmlauf neu erstellt!)
@ -94,8 +90,6 @@ 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
@ -189,7 +183,7 @@ 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 = sendmail -oi -oem -femail@adresse
# Weiteres Kommando, welches nach jeder Mail aufgerufen werden soll (falls smtp=0).
# Sinnvoll ist ein "sleep x", wobei x bei langsamen Systemen hoeher
@ -211,9 +205,6 @@ clearcmd = clear
# Windows-Verzeichnis kopieren (URL siehe README-Datei)
pager = less
# Shellbefehl fuer Dateivergleich
diff = diff -u
# Datei mit diversen Meldungen und Textfragmenten (Resourcendatei)
messagefile = messages.cfg
@ -280,10 +271,6 @@ 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
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)
tpl_mailheader = "mailheader" # generally used mail header
tpl_bouncelist = "bouncelist" # used by uvbounce.pl

View file

@ -1,177 +0,0 @@
########################################################################
# 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 = mid.thh.votetaker.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黵 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@thh.votetaker.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
# Shellbefehl fuer Dateivergleich
diff = diff -u
# 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
# Ueberschrift fuer den Wahlschein
# Achtung, muss im Wahlschein genauso stehen!
ballotintro = WAHLSCHEIN fuer
# 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黵 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漩<5A>噔殍觏祛篁酊<E7AF81>闹芰谅扇释涛右在氽遌{2,} +.*[a-zA-Z漩<5A>噔殍觏祛篁酊<E7AF81>闹芰谅扇释涛右在氽遌{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
# 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)
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_wrong_voting = "wrong-voting" # used by uvvote.pl
tpl_rule_violated = "rule-violated" # used by uvvote.pl (c.f. usevote.rul)

View file

@ -1,85 +0,0 @@
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 = LOCALPART@thh.votetaker.de
# Absender fuer den From-Header der Bestaetigungsmails
mailfrom = Thomas Hochstein <thh@votetaker.de>
# Absender fuer den Envelope (Return-Path) der Bestaetigungsmails
# (bitte einfach nur die Adresse eintragen, ohne Klammern und Zusaetze)
envelopefrom = bounce-LOCALPART@thh.votetaker.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@localhost
# Alles in einem Schritt durchfuehren (gesonderter Aufruf von
# "uvvote.pl clean" entfaellt)? Fuehrt zu geringeren
# Eingreifmoeglichkeiten! (Mails werden automatisch verschickt)
onestep = 0
# Fuer das Ergebnis (xx Ja-Stimmen, xx Nein-Stimmen, xx Enthaltungen)
# auch bei Eingruppenabstimmung des Mehrgruppenformat waehlen?
multigroup = 1
# 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>=50
condition1 = $yes>=2*$no
condition2 = $yes>=15
mailcmd = /usr/sbin/sendmail -oi -oem -fbounce-LOCALPART@thh.votetaker.de --

4
uvballot.pl Executable file → Normal file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w
###############################################################################
# UseVoteGer 4.12 Wahlscheingenerierung
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
# UseVoteGer 4.10 Wahlscheingenerierung
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
#
# 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

4
uvbounce.pl Executable file → Normal file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w
###############################################################################
# UseVoteGer 4.12 Bounce-Verarbeitung
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
# UseVoteGer 4.10 Bounce-Verarbeitung
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
#
# 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

4
uvcfv.pl Executable file → Normal file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w
###############################################################################
# UseVoteGer 4.12 Personalisierte Wahlscheine
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
# UseVoteGer 4.10 Personalisierte Wahlscheine
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
#
# 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

4
uvcount.pl Executable file → Normal file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w
###############################################################################
# UseVoteGer 4.12 Stimmauswertung
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
# UseVoteGer 4.10 Stimmauswertung
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
#
# 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

20
uvvote.pl Executable file → Normal file
View file

@ -1,8 +1,8 @@
#!/usr/bin/perl -w
###############################################################################
# UseVoteGer 4.12 Wahldurchfuehrung
# (c) 2001-2014 Marc Langer <uv@marclanger.de>
# UseVoteGer 4.10 Wahldurchfuehrung
# (c) 2001-2012 Marc Langer <uv@marclanger.de>
#
# 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
@ -135,6 +135,16 @@ 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";
@ -231,9 +241,9 @@ 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(.*?[\t ]+(\S+.+)\s*$)?/m) {
$voting = $1;
$voting .= " $3" if (defined($3) and $3 !~ /\Q$config{nametext}\E/);
$voting .= " $3" if defined($3);
push (@errors, 'WrongVoting') if ($config{votename} !~ /^\s*\Q$voting\E\s*$/);
} else {
push (@errors, 'NoVoting');
@ -319,7 +329,7 @@ sub process_vote {
# Should read like this: #a [ STIMME ] Text
# (Text is configurable in usevote.cfg)
unless ($$body =~ /$bdsg_regexp/s &&
$$body =~ /#a\W*?\[\W*?$config{bdsg_confirm}\W*?\]\W*?$bdsg2_regexp/is) {
$$body =~ /#a\W*?\[\W*?$config{ja_stimme}\W*?\]\W*?$bdsg2_regexp/is) {
push (@errors, 'InvalidBDSG');
}