#!/usr/bin/perl
require "mlistcfg.pl";
#--------------------------------------------------
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs)
{
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\n/ /g;
$form{$name} = $value;
}
print "Content-type: text/html\n\n";
$count=0;
if($form{'action'} eq "aggiungi")
{
&subscribe;
exit;
}
if($form{'action'} eq "rimuovi")
{
&unsubscribe;
exit;
}
else
{
&mainpage;
exit;
}
#--------------------------------------------------
sub subscribe
{
if($form{'address'}=~ tr/;<>*|`&$!#()[]{}:'"//)
{
&dheader;
print "Impossibile aggiungere l'indirizzo specificato
Verificarne la correttezza.";
&dfooter;
exit;
}
unless($form{'address'}=~/.*\@.*\..*/)
{
&dheader;
print "Impossibile aggiungere l'indirizzo specificato
Verificarne la correttezza.";
&dfooter;
exit;
}
open (list, "<$listdata") or &error("Impossibile aprire il file della lista in lettura.");
if($flock eq "y")
{flock list, 2;}
@list=;
close(list);
foreach $list(@list)
{
if($list =~ /$form{'address'}/i)
{
&dheader;
print "Impossibile aggiungere l'indirizzo specificato
$form{'address'}
è già presente nella lista.\n";
&dfooter;
exit;
}
}
open (data, ">>$listdata") or &error("Impossibile aprire il file della mailing list in scrittura.");
if($flock eq "y")
{flock data, 2;}
print data "$form{'address'}\n";
close(data);
&dheader;
print "$form{'address'}
è stato aggiunto alla lista.";
&dfooter;
exit;
}
#--------------------------------------------------
#--------------------------------------------------
sub unsubscribe
{
if ($form{'address'}=~ tr/;<>*|`&$!#()[]{}:'"//)
{
&dheader;
print "Impossibile rimuovere l'indirizzo specificato
Verificarne la correttezza.";
&dfooter;
exit;
}
unless ($form{'address'}=~/.*\@.*\..*/)
{
&dheader;
print "Impossibile rimuovere l'indirizzo specificato
Verificarne la correttezza.";
&dfooter;
exit;
}
open (list, "<$listdata") or &error("Impossibile aprire il file della lista in lettura.");
if($flock eq "y")
{flock list, 2;}
@list=;
close(list);
foreach $list(@list)
{
$count++;
if($list =~ /$form{'address'}/i)
{
$count--;
splice(@list, $count, 1);
open (wlist, ">$listdata") or &error("Impossibile aprire il file della lista in scrittura.");
if($flock eq "y")
{flock wlist, 2;}
print wlist @list;
close(wlist);
&dheader;
print "$form{'address'}
è stato rimosso dalla lista.";
&dfooter;
exit;
}
}
&dheader;
print "$form{'address'}
non è stato trovato nella lista.";
&dfooter;
}
#--------------------------------------------------
#--------------------------------------------------
sub mainpage
{
&dheader;
&dfooter;
}
#--------------------------------------------------
#--------------------------------------------------
sub dheader
{
open (dheader, ";
close(dheader);
print @dheader;
}
#--------------------------------------------------
#--------------------------------------------------
sub dfooter
{
open (dfooter, ";
close(dfooter);
print @dfooter;
}
#--------------------------------------------------