#!/usr/bin/perl if ($^O !~ /win/i) { alarm(300); # Höchstens 300 Sekunden } use CGI::Carp qw(fatalsToBrowser); require "templates/set.cgi"; # Nutzungsbedingungen (Newsletter): # Lizenz: # Stand: 9.09.2001 # # Durch Download der Software erklären Sie sich mit diesen Lizenzabkommen einverstanden. # Der Newsletter ist Freeware, jedoch nicht zum GPU/GPL - Abkommen zuzuordnen. # Diese Lizenz erlaubt es Ihnen, Newsletter zu benutzen. # Als Nutzer des Newsletter können Sie auf eigene Gefahr die Software verändern und/oder auf # Ihre Bedürfnisse anpassen. Sie können auch Dritte mit der Anpassung/Veränderung beauftragen. # Aus rechtlichen Gründen, ist es nicht gestattet den Link zur Abmeldung zu entfernen, der beim Newsletter zu finden ist. # # Die Original-Software unverändert darf weitergegeben werden jedoch nicht verkauft oder wiederverkauft werden. # # Die angepasste/veränderte Software und Teile dieser dürfen nicht weitergegeben ,verkauft oder wiederverkauft werden. # # Alle Copyright- und Versions-Hinweise, die im Newsletter oder deren HTML-Seiten verwendet, erstellt und/oder gezeigt # werden, dürfen nicht entfernt werden. Die Copyright- und Versions-Hinweise müssen für Benutzer sichtbar und in # ungeänderter Form dargestellt werden. # # Dieses Lizenzabkommen beruht sich auf der aktuellen internationalen Gesetzeslage. # # Bei einem Verstoß gegen diesen Lizenzvertrag durch die Firma Coder-World oder deren Beauftragten die erworbene # Lizenz jederzeit zurückgezogen und für nichtig erklärt werden sowie die Benutzung untersagt werden. # Newsletter und die dazugehörenden Dateien werden ohne Funktionsgarantie für die im Umfeld verwendete Hardware # oder Software verkauft. # # Coder-World oder deren Beauftragten sind in keiner Form für Inhalte oder Verfasser verantwortlich, die durch # diese Software erstellt wurden. # # Das Risiko der Benutzung vom Newsletter obliegt dem Lizenznehmer, jegliche Erstattungen im Rechtsfall sind ausgeschlossen. # Eine Lizenz ist zeitlich unbegrenzt nutzbar, in der Lizenz ist grundsätzlich der Zugriff auf alle neuen Versionen für # einen unbegrenzten Zeitraum enthalten. # # Hinweis: Es existieren keine Reseller-, Wiederverkaufs- oder Schüler-/Studenten - Versionen. Nach den Lizenzbedingungen # muß der Website-Besitzer die Lizenz selbst erhalten. # sub lock {local($file)=@_;if($use_flock) {flock($file, 2);}} sub unlock {local($file)=@_;if($use_flock) {flock($file, 8);}} if($OS=~/vms/i){ $CRLF = "\n"; }elsif($OS=~/^MacOS$/i){ $CRLF = "\n\r"; }else{ $CRLF = "\015\012"; } binmode STDIN; read(STDIN, $Daten, $ENV{'CONTENT_LENGTH'}); if($ENV{'CONTENT_TYPE'} =~ /^(.+)boundary=(.+)$/){ $boundary = '--'.$2; @parts = split(/$boundary/, $Daten); }else{ @parts = split(/&/, $Daten); } foreach $part (@parts){ if($boundary ne ""){ ($header, $content) = split(/$CRLF$CRLF/, $part, 2); ($name) = ($header =~ / name="([^"]*?)"/s); }else{ ($name, $content) = split(/=/, $part); } if($content ne ""){ if($header =~ /filename/s && $boundary ne "" && $name =~ /^file-upload-[\d]+$/i){ ($filename) = ($header =~ /; filename="([^"]*?)"/s); while ($filename =~ /\\/) { $filename =~ s/^.*\\//; } ($mimetype) = ($header =~ /Content-Type: (.*)/s); $mimetype =~ s/($CRLF.*)//s; if($filename){ $content =~ s/^$CRLF//gs; $content =~ s/$CRLF$//gs; $FORM{$name} = $content; $FILE{$name} = $filename; $MIME{$name} = $mimetype; } }else{ $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $content =~ tr/+/ /; $content =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $content =~ s/$CRLF/\n/g; if($FORM{$name} eq ""){ chomp($content); $FORM{$name} = $content; }else{ if($FORM{$name} !~ /\,/){ chomp($content); $FORM{$name} .= ",$content,"; }else{ chomp($content); $FORM{$name} .= "$content,"; } } } } } @pairs = split(/&/, $ENV{QUERY_STRING}); foreach $pair (@pairs) { ($name,$value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /;$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; if($INFO{$name} eq ""){ $INFO{$name} = $value; }else{ if($INFO{$name} !~ /\,/){ $INFO{$name} .= ",$value,"; }else{ $INFO{$name} .= "$value,"; } } } if($INFO{'action'} ne ""){ $action = $INFO{'action'}; }else{ $action = $FORM{'action'}; } $cgi = "newsletter.cgi\?"; if(-e("templates/standard.dat")){ if($action eq "subscribe") {&eintragen;} elsif($action eq "unsubscribe") {&austragen;} elsif($action =~ /aktiv/) {&$action;} elsif($action =~ /admin/) {&$action;} elsif($action =~ /newsletter/) {&$action;} &newsletter; }else{ &error("Daten für die Ausführung nicht gefunden."); } sub adminzahl { open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); $zahl = @file; print "Content-type: text/html\n\n"; if($INFO{'e'} eq "js"){ print "document.write('$zahl')"; }else{ print "$zahl"; } exit(0); } sub newsletter { # html-formular (eingabe) open(T,"templates/newsletter.html"); &lock(T); @template = ; &unlock(T); close(T); foreach $i (@template) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_url>/$url/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $ausgabe .= "$i"; } print "Content-type: text/html\n\n"; print $ausgabe; exit(0); } sub eintragen { $email = $FORM{'submitemail'}; if($email =~ /^([a-zA-z_0-9-\.]+)(\@)([a-zA-z_0-9-\.]+)(\.)(\w+)$/ && $email ne ""){ open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); foreach $line (@file){ $line =~ s/[\n\r]//g; if(lc($line) eq lc($email)){ &error("Diese Emailadresse wurde schon eingetragen."); } } open(F, "templates/standard.not"); &lock(F); @not = ; &unlock(F); close(F); foreach $i (@not){ $i =~ s/[\n\r]//g; if($i =~ /^\*/){ $stern = "1"; ($vor , $maili) = split(/\@/ , $i); }else{ $stern = "0"; } if(lc($i) eq lc($email)){ &error("Diese E-Mailadresse wurde gesperrt."); }elsif(lc($email) =~ /\@$maili$/i && $stern == 1){ &error("Diese E-Mailadresse wurde gesperrt."); } } open(F, "templates/gesperrt.pl"); &lock(F); @not2 = ; &unlock(F); close(F); foreach $i (@not2){ $i =~ s/[\n\r]//g; if($i =~ /^\*/){ $stern = "1"; ($vor , $maili) = split(/\@/ , $i); }else{ $stern = "0"; } if(lc($i) eq lc($email)){ &error("Diese E-Mailadresse wurde gesperrt."); }elsif(lc($email) =~ /\@$maili$/i && $stern == 1){ &error("Diese E-Mailadresse wurde gesperrt."); } } if($aktiv == 1){ @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if (-e $mailtest && -X $mailtest) { $mailprog = $mailtest; } } $key = crypt("$email","$cryptkey"); # Key generieren $key =~ s/^$cryptkey//isg; open(T,"templates/aktiv.txt"); &lock(T); @mail = ; &unlock(T); close(T); foreach $i (@mail) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_to>/$email/g; $i =~ s/<_from>/$webmasteremail/g; $i =~ s/<_aktiv>/$url\/newsletter.cgi?email=$email\&key=$key\&action=aktiv/g; $mail .= "$i"; } open (M,"| $mailprog -t") || die "Can't open Mail!"; print M "$mail"; close(M); open(T,"templates/aktiv.html"); &lock(T); @aktiv = ; &unlock(T); close(T); foreach $line (@aktiv) { $line =~ s/<_cgi>/$cgi/g; $line =~ s/<_email>/$email/g; $line =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $aktivX .= "$line"; } print "Content-type: text/html\n\n"; print "$aktivX"; exit(0); } open(F, "templates/standard.dat"); &lock(F); @allmail = ; &unlock(F); close(F); open(F, ">templates/standard.dat"); &lock(F); print F "$email\n"; print F @allmail; &unlock(F); close(F); @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } open(T,"templates/eintragen.txt"); &lock(T); open (M,"| $mailprog -t"); print M "To: $email\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; foreach $i () { $i =~ s/<_cgi>/$url\/$cgi/g; $i =~ s/<_email>/$email/g; print M "$i"; } &unlock(T); close(T); close(M); if($new == 1){ open(T,"templates/admin.txt"); &lock(T); @etemplate2 = ; &unlock(T); close(T); foreach $i (@etemplate2) { $i =~ s/<_cgi>/$url\/$cgi/g; $i =~ s/<_email>/$email/g; $ausX .= "$i"; } @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } open (M,"| $mailprog -t"); print M "To: $webmasteremail\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; print M "$ausX"; close(M); } open(T,"templates/eintragen2.html"); &lock(T); @template = ; &unlock(T); close(T); foreach $i (@template) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_email>/$email/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $ausgabe .= "$i"; } print "Content-Type: text/html\n\n"; print $ausgabe; exit(0); }else{ &error("Emailadresse hatte kein \"\@\" oder \".\" Enthalten. Normale Emailadressen sehen aus wie name\@domain.de! Tippfehler können passieren."); } } sub aktiv { $email = $INFO{'email'}; $key = $INFO{'key'}; open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); foreach $line (@file){ $line =~ s/[\n\r]//g; if(lc($line) eq lc($email)){ &error("Diese Emailadresse wurde schon eingetragen."); } } open(F, "templates/standard.not"); &lock(F); @not = ; &unlock(F); close(F); foreach $i (@not){ $i =~ s/[\n\r]//g; if($i =~ /^\*/){ $stern = "1"; ($vor,$maili) = split(/\@/,$i); }else{ $stern = "0"; } if(lc($i) eq lc($email)){ &error("Diese E-Mailadresse wurde gesperrt."); }elsif(lc($email) =~ /\@$maili$/i && $stern == 1){ &error("Diese E-Mailadresse wurde gesperrt."); } } open(F, "templates/gesperrt.pl"); &lock(F); @not2 = ; &unlock(F); close(F); foreach $i (@not2){ $i =~ s/[\n\r]//g; if($i =~ /^\*/){ $stern = "1"; ($vor , $maili) = split(/\@/ , $i); }else{ $stern = "0"; } if(lc($i) eq lc($email)){ &error("Diese E-Mailadresse wurde gesperrt."); }elsif(lc($email) =~ /\@$maili$/i && $stern == 1){ &error("Diese E-Mailadresse wurde gesperrt."); } } $keyG = crypt("$email", "$cryptkey"); $keyG =~ s/^$cryptkey//isg; if($keyG ne $key){&error("Key stimmt nicht.");} open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); open(F, ">templates/standard.dat"); &lock(F); print F "$email\n"; print F @file; &unlock(F); close(F); if($new == 1){ open(T,"templates/admin.txt"); &lock(T); @etemplate2 = ; &unlock(T); close(T); foreach $i (@etemplate2) { $i =~ s/<_cgi>/$url\/$cgi/g; $i =~ s/<_email>/$email/g; $ausX .= "$i"; } @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } open (M,"| $mailprog -t"); print M "To: $webmasteremail\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; print M "$ausX"; close(M); } open(T,"templates/eintragen2.html"); &lock(T); @template = ; &unlock(T); close(T); foreach $i (@template) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_email>/$email/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $ausgabe .= "$i"; } print "Content-type: text/html\n\n"; print "$ausgabe"; open(T,"templates/eintragen.txt"); &lock(T); @etemplate = ; &unlock(T); close(T); foreach $i (@etemplate) { $i =~ s/<_cgi>/$url\/$cgi/g; $i =~ s/<_email>/$email/g; $aus .= "$i"; } @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } open (M,"| $mailprog -t"); print M "To: $email\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; print M "$aus"; close(M); exit(0); } sub aktiv2 { open(F, "templates/standard.old"); &lock(F); @daten = ; &unlock(F); close(F); $daten[0] =~ s/[\n\r]//g; @split = split(/\|/ , $daten[0]); $FORM{'empfang'} = $split[0]; $html = $split[1]; $FORM{'subject'} = $split[2]; shift @daten; if($html eq "1"){ foreach $x (@daten){ $x =~ s/[\n\r]//g; $FORM{'emails'} .= "$x"; } }else{ foreach $x (@daten){ $x =~ s/[\n\r]//g; $FORM{'emails'} .= "$x
"; } } print "Content-type: text/html\n\n"; print "$FORM{'subject'}
$FORM{'emails'}"; exit(0); } sub austragen { if($FORM{'submitemail'} ne ""){ $email = "$FORM{'submitemail'}"; }else{ $email = "$INFO{'submitemail'}"; } open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); foreach $line (@file){ $line =~ s/[\n\r]//g; if(lc($line) eq lc($email)){ $nein = "1"; } } if($nein ne 1){ &error("Diese E-Mailadresse ist nicht vorhanden."); } open(F, ">templates/standard.dat"); &lock(F); foreach $i (@file) { $i =~ s/[\n\r]//g; if(lc($i) ne lc($email)){ print F "$i\n"; } } &unlock(F); close(F); open(T,"templates/austragen.html"); &lock(T); @template = ; &unlock(T); close(T); foreach $i (@template) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_email>/$email/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $ausgabe .= "$i"; } open(T,"templates/austragen.txt"); &lock(T); @etemplate = ; &unlock(T); close(T); foreach $i (@etemplate) { $i =~ s/<_cgi>/$url\/$cgi/g; $i =~ s/<_email>/$email/g; $aus .= "$i"; } @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } open (M,"| $mailprog -t"); print M "To: $email\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; print M "$aus"; close(M); print "Content-type: text/html\n\n"; print $ausgabe; exit(0); } sub admin { open(T,"templates/admin.html"); &lock(T); @template = ; &unlock(T); close(T); foreach $i (@template) { $i =~ s/<_cgi>/$cgi/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; $ausgabe .= "$i"; } print "Content-type: text/html\n\n"; print $ausgabe; exit(0); } sub admin2 { if($FORM{'passwort'} ne ""){ $pass = "$FORM{'passwort'}"; }else{ $pass = "$INFO{'passwort'}"; } $pass = "$FORM{'pass'}" if($pass eq ""); $pass = "$INFO{'pass'}" if($pass eq ""); if($passwort ne $pass){ &error("FEHLER: Falsches Passwort"); }else{ open(F, "templates/standard.dat"); &lock(F); @file = (sort { lc($a) cmp lc($b) } ()); &unlock(F); close(F); for ($e = 0; $e < @file; $e++) { $file[$e] =~ s/[\n\r]//g; $xtemp3 .= "$file[$e]\n"; } open(F, "templates/standard.not"); &lock(F); @file2 = (sort { lc($a) cmp lc($b) } ()); &unlock(F); close(F); for ($i2 = 0; $i2 < @file2; $i2++) { $file2[$i2] =~ s/[\n\r]//g; $xtemp2 .= "$file2[$i2]\n"; } $fertig = "Keine"; if($INFO{'fertig'} eq "yes"){ $fertig = "Erfolgreich geändert!"; }elsif($INFO{'fertig'} eq "yes2"){ $fertig = "Newsletter wurde an $e Empfänger verschickt."; }elsif($INFO{'fertig'} eq "generell"){ $fertig = "Einstellungen wurden gespeichert"; }elsif($INFO{'fertig'} eq "test"){ $fertig = "Test Newsletter wurde an Sie verschickt"; }elsif($INFO{'fertig'} eq "sperrung"){ $fertig = "Liste der gesperrten E-Mailadressen wurde geupdatet."; }elsif($INFO{'fertig'} eq "txt"){ $fertig = "Die Liste wurde an ihre E-Mailadresse als Anhang verschickt."; } open(T,"templates/newsletter.html"); &lock(T); $i3 = join("",); &unlock(T); close(T); @html = split(//,$i3); $ausgabeF = $html[1]; $ausgabeF =~ s/<_cgi>/$cgi/g; $ausgabeF =~ s/<_url>/$url/g; $ausgabeF =~ s//>/g; $ausgabeF =~ s/[\n\r]//g; if($aktiv == 1){$on = "checked";}else{$off = "checked";} if($new == 1){$new2 = "checked";}else{$new3 = "checked";} if($use_flock == 1){$flock2 = "checked";}else{$flock3 = "checked";} if($aktivon == 1){$aktivon2 = "checked";}else{$aktivon3 = "checked";} open(F,"templates/standard.stat"); &lock(F); foreach $stat (){ ($zahl,$size,$datum) = split(/\|/,$stat); $zahlA += $zahl; $sizeA += $size; $gesamtA++; } &unlock(F); close(F); if($gesamtA ne "" && $sizeA ne ""){ $sizeA = sprintf("%.0f",($sizeA / $gesamtA)); }else{ $sizeA = 0; $gesamtA = 0; $zahlA = 0; } open(T,"templates/admin2.html"); &lock(T); $i = join("",); &unlock(T); close(T); $i =~ s/<_text>/$xtemp3/g; $i =~ s/<_text2>/$xtemp2/g; $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_zahln>/$gesamtA/g; $i =~ s/<_zahle>/$zahlA/g; $i =~ s/<_zahlg>/$sizeA/g; $i =~ s/<_zahl>/$e/g; $i =~ s/<_zahl2>/$i2/g; $i =~ s/<_xaktiv>/$aktivon2/g; $i =~ s/<_xaktiv2>/$aktivon3/g; $i =~ s/<_flock>/$flock2/g; $i =~ s/<_flock2>/$flock3/g; $i =~ s/<_url2>/$url/g; $i =~ s/<_code>/$ausgabeF/g; $i =~ s/<_fertig>/$fertig/g; $i =~ s/<_zeichen>/$zeichen/g; $i =~ s/<_on>/$on/g; $i =~ s/<_off>/$off/g; $i =~ s/<_new>/$new2/g; $i =~ s/<_new2>/$new3/g; $i =~ s/<_pass>/$pass/g; $i =~ s/<_url>/$url/g; $i =~ s/<_mb>/$gross/g; $i =~ s/<_email>/$webmasteremail/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; print "Content-type: text/html\n\n"; print $i; } exit(0); } sub admingenerell { if($passwort ne $FORM{'passwort'}){ &error("FEHLER: Falsches Passwort"); } if($FORM{'passwort2'} !~ /^[A-Za-z0-9]+$/){&error("Das Passwort enthält Sonderzeichen!");} &error("Einer der Felder nicht ausgefüllt.") if($FORM{'email'} eq "" or $FORM{'passwort'} eq "" or $FORM{'url'} eq "" or $FORM{'new'} eq ""); $FORM{'email'} =~ s/\@/\\\@/g; open(F, ">templates/set.cgi"); &lock(F); print F qq~\$webmasteremail = "$FORM{'email'}";\n\$url = "$FORM{'url'}";\n\$use_flock = "$FORM{'flock'}";\n\$cryptkey = "$cryptkey";\n\$aktiv = "$FORM{'aktiv'}";\n\$zeichen = "$FORM{'zeichen'}";\n\$passwort = "$FORM{'passwort2'}";\n\$aktivon = "$FORM{'xaktiv'}";\n\$gross = "$FORM{'gross'}";\n\$new = "$FORM{'new'}";\n1;~; &unlock(F); close(F); print "Location: $cgi\&action=admin2&passwort=$FORM{'passwort2'}&fertig=generell\n\n";exit(0); } sub adminstat { if($FORM{'passwort'} ne ""){ $pass = "$FORM{'pass'}"; }else{ $pass = "$INFO{'pass'}"; } if($passwort ne $pass){ &error("FEHLER: Falsches Passwort"); } open(T,"templates/adminstat.html"); &lock(T); ($split,$split2,$split3) = split(//,join("",),3); &unlock(T); close(T); open(F,"templates/standard.stat"); &lock(F); foreach $stat (){ ($zahl,$size,$datum) = split(/\|/,$stat); $iy = $split2; $iy =~ s/<_anzahl>/$zahl/g; $iy =~ s/<_size>/$size/g; $iy =~ s/<_datum>/$datum/g; $new2 .= $iy; $zahlA += $zahl; $sizeA += $size; } &unlock(F); close(F); $Temp = $split . $new2 . $split3; $Temp =~ s/<_anzahlA>/$zahlA/g; $Temp =~ s/<_sizeA>/$sizeA/g; $Temp =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; print "Content-Type: text/html\n\n"; print $Temp; exit(0); } sub admin3 { if($FORM{'passwort'} ne ""){ $pass = "$FORM{'passwort'}"; }else{ $pass = "$INFO{'passwort'}"; } if($FORM{'emails'} ne ""){ $emails = "$FORM{'emails'}"; }else{ $emails = "$INFO{'emails'}"; } $sort = $FORM{'new'}; if($passwort ne $pass){ &error("FEHLER: Falsches Passwort"); }else{$aktivon = 0; if($aktivon ne "1"){ open(F, ">templates/standard.dat"); &lock(F); print F "$emails"; &unlock(F); close(F); my (@new, @ziel, $elem, %schonda); open(F, "templates/standard.dat"); &lock(F); @new = ; &unlock(F); close(F); @ziel = grep { !$schonda{$_}++ } @new; open(F, ">templates/standard.dat"); &lock(F); print F @ziel; &unlock(F); close(F); }else{ open(F, "templates/standard.dat"); &lock(F); @new = ; &unlock(F); close(F); @newy = split(/\n/,$emails); @newy = grep { !$schonda2{$_}++ } @newy; foreach $e (@new) { $e =~ s/[\n\r]//g; $da{$e} = 1; } open(F, ">templates/standard.dat"); &lock(F); foreach $e (@newy) { $e =~ s/[\n\r]//g; if($e =~ /^([a-zA-z_0-9-\.]+)(\@)([a-zA-z_0-9-\.]+)(\.)(\w+)$/ && $e ne ""){ if ($da{$e} ne "1") { $mail = ""; @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if (-e $mailtest && -X $mailtest) { $mailprog = $mailtest; } } $key = crypt("$e","$cryptkey"); # Key generieren $key =~ s/^$cryptkey//isg; open(T,"templates/aktiv.txt"); &lock(T); @mail = ; &unlock(T); close(T); foreach $i (@mail) { $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_to>/$e/g; $i =~ s/<_from>/$webmasteremail/g; $i =~ s/<_aktiv>/$url\/newsletter.cgi?email=$e\&key=$key\&action=aktiv/g; $mail .= "$i"; } open (M,"| $mailprog -t") || die "Can't open Mail!"; print M "$mail"; close(M); }else{ print F "$e\n"; } } } &unlock(F); close(F); my (@new, @ziel, $elem, %schonda); open(F, "templates/standard.dat"); &lock(F); @new = ; &unlock(F); close(F); @ziel = grep { !$schonda{$_}++ } @new; open(F, ">templates/standard.dat"); &lock(F); print F @ziel; &unlock(F); close(F); } } print "Location: $cgi\&action=admin2&passwort=$pass&fertig=yes\n\n";exit(0); } sub adminnot { if($FORM{'passwort'} ne ""){ $pass = "$FORM{'passwort'}"; }else{ $pass = "$INFO{'passwort'}"; } if($FORM{'emails'} ne ""){ $emails = "$FORM{'emails'}"; }else{ $emails = "$INFO{'emails'}"; } if($passwort ne $pass){ &error("FEHLER: Falsches Passwort"); }else{ open(F, ">templates/standard.not"); &lock(F); print F "$emails"; &unlock(F); close(F); } print "Location: $cgi\&action=admin2&passwort=$pass&fertig=sperrung\n\n";exit(0); } sub admin4 { $pass = $FORM{'passwort'}; $pass = "$INFO{'passwort'}" if($pass eq ""); $pass = "$FORM{'pass'}" if($pass eq ""); $pass = "$INFO{'pass'}" if($pass eq ""); $html = "$FORM{'html'}"; $FORM{'subject'} =~ s/[\n\r]//g; if($INFO{'start'} ne "") {$start="$INFO{'start'}";} else {$start=0;} $bytes = (($gross * 1024) * 1024); if($FILE{'file-upload-01'} ne "" && $MIME{'file-upload-01'} ne "" && $FORM{'file-upload-01'} ne "" && length($FORM{'file-upload-01'}) > $bytes){ &error("Der Datei-Anhang ist zugross. Der Datei-Anhang darf maximal $gross MB betragen kein byte mehr!"); } if($passwort ne $pass){ &error("FEHLER: Falsches Passwort"); }else{ @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if (-e $mailtest && -X $mailtest) { $mailprog = $mailtest; } } open(F, "templates/standard.dat"); &lock(F); @file = ; &unlock(F); close(F); $zahlY = @file; if($FORM{'test'} ne "1" && $start eq "0"){ open(F, ">templates/standard.old"); &lock(F); print F "$FORM{'empfang'}\|$html\|$FORM{'subject'}\|$FORM{'speedy'}\|$FILE{'file-upload-01'}\|$MIME{'file-upload-01'}\n$FORM{'emails'}"; &unlock(F); close(F); if($FILE{'file-upload-01'} ne "" && $MIME{'file-upload-01'} ne "" && $FORM{'file-upload-01'} ne ""){ open(F, ">files/$FILE{'file-upload-01'}"); &lock(F); print F $FORM{'file-upload-01'}; &unlock(F); close(F); } ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime; $mon_num = $mon+1; $hour = "0$hour" if($hour < 10); $min = "0$min" if($min < 10); $sec = "0$sec" if($sec < 10); $year += 1900; $mon_num = "0$mon_num" if($mon_num < 10); $mday = "0$mday" if($mday < 10); $thishour = (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,0) [(localtime)[2]]; $thismonth = (Januar,Februar,Maerz,April,Mai,Juni,Juli,August,September,Oktober,November,Dezember)[(localtime)[4]]; $thisday = (Sonntag,Montag,Dienstag,Mittwoch,Donnerstag,Freitag,Samstag)[(localtime)[6]]; open(F, "templates/standard.stat"); &lock(F); @oldstat = ; &unlock(F); close(F); $stat = (stat("templates/standard.old"))[7]; $size = $stat + length($FORM{'file-upload-01'}); open(F, ">templates/standard.stat"); &lock(F); print F "$zahlY\|$size\|$mday.$mon_num.$year , $hour:$min\|\n"; print F @oldstat; &unlock(F); close(F); }else{ if($FORM{'test'} ne "1" && $start ne "0"){ open(F, "templates/standard.old"); &lock(F); @daten = ; &unlock(F); close(F); $daten[0] =~ s/[\n\r]//g; @split = split(/\|/ , $daten[0]); $FORM{'empfang'} = $split[0]; $html = $split[1]; $FORM{'subject'} = $split[2]; $FORM{'speedy'} = $split[3]; $FILE{'file-upload-01'} = $split[4]; $MIME{'file-upload-01'} = $split[5]; shift @daten; foreach $x (@daten){ $x =~ s/[\n\r]//g; $FORM{'emails'} .= "$x\n"; } if($html ne "1"){ $FORM{'emails'} =~ s/\/\n/isg; } } } if($FORM{'speedy'} eq "1"){ $xp = "X-Priority: 1 (Highest)\n"; }elsif($FORM{'speedy'} eq "2"){ $xp = "X-Priority: 2 (High)\n"; }elsif($FORM{'speedy'} eq "4"){ $xp = "X-Priority: 4 (Low)\n"; }elsif($FORM{'speedy'} eq "5"){ $xp = "X-Priority: 5 (Lowest)\n"; }else{ $xp = "X-Priority: 3 (Normal)\n"; } if($FORM{'empfang'} eq "1"){ $dn = "Disposition-Notification-To: $webmasteremail\n"; } if($FILE{'file-upload-01'} ne "" && $MIME{'file-upload-01'} ne "" && $FORM{'file-upload-01'} ne ""){ if($start eq "0"){ if($FORM{'test'} eq "1"){ if($FILE{'file-upload-01'} ne "" && $MIME{'file-upload-01'} ne "" && $FORM{'file-upload-01'} ne ""){ open(F, ">files/$FILE{'file-upload-01'}"); &lock(F); print F $FORM{'file-upload-01'}; &unlock(F); close(F); } open (M,"| $mailprog -t"); print M "To: $webmasteremail\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n$dn"; print M "Subject: $FORM{'subject'}\n$xp"; print M "MIME-Version: 1.0\n"; print M "Content-type: multipart/mixed; boundary=\"$boundary\"\n\n"; if($html eq "1"){ $text = "$FORM{'emails'}"; print M "--$boundary\nContent-type: text/html\n\n"; print M "$text
"; print M "

"; print M "
Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$webmasteremail
"; print M "\n--$boundary\n"; print M "Content-type: $MIME{'file-upload-01'};\n" . " name=\"$FILE{'file-upload-01'}\"\n"; print M "Content-Transfer-Encoding: base64\n"; print M 'Content-Disposition: attachment;' . " filename=\"$FILE{'file-upload-01'}\"\n\n"; &base64enc( M, "files/$FILE{'file-upload-01'}"); print M "\n--$boundary--\n"; }else{ $text = "$FORM{'emails'}"; $text =~ s/(.{$zeichen}[^\n])[ \-]/$1\n/g; print M "--$boundary\nContent-type: text/plain; charset=US-ASCII\n\n"; print M "$text\n"; print M "\n-------------------------------------------------\n"; print M "Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$webmasteremail\n"; print M "\n--$boundary\n"; print M "Content-type: $MIME{'file-upload-01'};\n" . " name=\"$FILE{'file-upload-01'}\"\n"; print M "Content-Transfer-Encoding: base64\n"; print M 'Content-Disposition: attachment;' . " filename=\"$FILE{'file-upload-01'}\"\n\n"; &base64enc( M, "files/$FILE{'file-upload-01'}"); print M "\n--$boundary--\n"; } close(M); unlink("files/$FILE{'file-upload-01'}"); print "Location: $cgi\&action=admin2&passwort=$pass&fertig=test\n\n";exit(0); } } $boundary = &generate_boundary(); $start2 = $start + 125; for ($i = $start; $i < @file; $i++) { $file[$i] =~ s/[\n\r]//g; if($i eq $start2){print "Location: $cgi\&action=admin4&passwort=$pass&start=$start2\n\n";exit(0);} if($file[$i] =~ /^([a-zA-z_0-9-\.]+)(\@)([a-zA-z_0-9-\.]+)(\.)(\w+)$/){ open (M,"| $mailprog -t"); print M "To: $file[$i]\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n$dn"; print M "Subject: $FORM{'subject'}\n$xp"; print M "MIME-Version: 1.0\n"; print M "Content-type: multipart/mixed; boundary=\"$boundary\"\n\n"; if($html eq "1"){ $text = "$FORM{'emails'}"; print M "--$boundary\nContent-type: text/html\n\n"; print M "$text
"; print M "

"; print M "
Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$file[$i]
"; print M "\n--$boundary\n"; print M "Content-type: $MIME{'file-upload-01'};\n" . " name=\"$FILE{'file-upload-01'}\"\n"; print M "Content-Transfer-Encoding: base64\n"; print M 'Content-Disposition: attachment;' . " filename=\"$FILE{'file-upload-01'}\"\n\n"; &base64enc( M, "files/$FILE{'file-upload-01'}"); print M "\n--$boundary--\n"; }else{ $text = "$FORM{'emails'}"; $text =~ s/(.{$zeichen}[^\n])[ \-]/$1\n/g; print M "--$boundary\nContent-type: text/plain; charset=US-ASCII\n\n"; print M "$text\n"; print M "\n-------------------------------------------------\n"; print M "Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$file[$i]\n"; print M "\n--$boundary\n"; print M "Content-type: $MIME{'file-upload-01'};\n" . " name=\"$FILE{'file-upload-01'}\"\n"; print M "Content-Transfer-Encoding: base64\n"; print M 'Content-Disposition: attachment;' . " filename=\"$FILE{'file-upload-01'}\"\n\n"; &base64enc( M, "files/$FILE{'file-upload-01'}"); print M "\n--$boundary--\n"; } close(M); } } }else{ if($start eq "0"){ if($FORM{'test'} eq "1"){ if($FILE{'file-upload-01'} ne "" && $MIME{'file-upload-01'} ne "" && $FORM{'file-upload-01'} ne ""){ open(F, ">files/$FILE{'file-upload-01'}"); &lock(F); print F $FORM{'file-upload-01'}; &unlock(F); close(F); } open (M,"| $mailprog -t"); print M "To: $webmasteremail\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n$dn"; print M "Subject: $FORM{'subject'}\n$xp"; if($html eq "1"){ $text = "$FORM{'emails'}"; print M "Content-Type: text/html\n\n"; print M "$text
"; print M "

"; print M "
Abmelden: $url/$cgi\?action=unsubscribe&submitemail=$webmasteremail
"; }else{ $text = "$FORM{'emails'}"; $text =~ s/(.{$zeichen}[^\n])[ \-]/$1\n/g; print M "Content-Type: text/plain;\n\n"; print M "\n"; print M "$text\n"; print M "\n-------------------------------------------------\n"; print M "Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$webmasteremail\n"; } close(M); unlink("files/$FILE{'file-upload-01'}"); print "Location: $cgi\&action=admin2&passwort=$pass&fertig=test\n\n";exit(0); } } $start2 = $start + 125; for ($i = $start; $i < @file; $i++) { $file[$i] =~ s/[\n\r]//g; if($i eq $start2){print "Location: $cgi\&action=admin4&passwort=$pass&start=$start2\n\n";exit;} if($file[$i] =~ /^([a-zA-z_0-9-\.]+)(\@)([a-zA-z_0-9-\.]+)(\.)(\w+)$/){ open (M,"| $mailprog -t"); print M "To: $file[$i]\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n$dn"; print M "Subject: $FORM{'subject'}\n$xp"; if($html eq "1"){ $text = "$FORM{'emails'}"; print M "Content-Type: text/html\n\n"; print M "$text
"; print M "

"; print M "
Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$file[$i]
"; }else{ $text = "$FORM{'emails'}"; $text =~ s/(.{$zeichen}[^\n])[ \-]/$1\n/g; print M "Content-Type: text/plain;\n\n"; print M "\n"; print M "$text\n"; print M "\n-------------------------------------------------\n"; print M "Abmelden: $url/$cgi\&action=unsubscribe&submitemail=$file[$i]\n"; } close(M); } } } } unlink("files/$FILE{'file-upload-01'}") if(-e("files/$FILE{'file-upload-01'}")); print "Location: $cgi\&action=admin2\&pass=$pass&fertig=yes2\n\n";exit(0); } sub admintemplate { if($FORM{'pass'} ne ""){ $pass = $FORM{'pass'}; }else{ $pass = $INFO{'pass'}; } &error("Falsches Passwort!") if($passwort ne $pass); if($FORM{'template'} ne ""){ $template = $FORM{'template'}; }else{ $template = $INFO{'template'}; } if($notemp eq "1"){&error("Der Betreiber hat die Template bearbeitung deaktiviert.");} if($INFO{'temp'} eq "yes"){$tempx = "Die Template wurde abgeändert.";} if($template =~ /\.html$|\.txt$/ && $template !~ /\// && $template !~ /\.\./){ if(-e("templates/$template")){ open(T,"templates/$template"); }else{ $names = $template; open(T,"templates/$names"); } &lock(T); $inhalt = join("",); &unlock(T); close(T); } $inhalt =~ s!&!&!g; $inhalt =~ s!<!<!g; $inhalt =~ s!>!>!g; $inhalt =~ s!!>!g; $inhalt =~ s/\|/\&\#124\;/g; open(T,"templates/admin3.html"); &lock(T); $ausgabe = join("",); &unlock(T); close(T); $ausgabe =~ s/<_cgi>/$cgi/g; $ausgabe =~ s/<_grafik>/$imagesdir/g; $ausgabe =~ s/<_temp>/$tempx/g; $ausgabe =~ s/<_template>/$template/g; $ausgabe =~ s/<_inhalt>/$inhalt/g; $ausgabe =~ s/<_pass>/$pass/g; $ausgabe =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; print "Content-type: text/html\n\n"; print $ausgabe; exit(0); } sub admintemplate2 { if($FORM{'pass'} ne ""){ $pass = $FORM{'pass'}; }else{ $pass = $INFO{'pass'}; } if ($passwort ne $pass){&error("Falsches Passwort!");} if($FORM{'template'} ne ""){ $template = $FORM{'template'}; }else{ $template = $INFO{'template'}; } if($FORM{'inhalt'} ne ""){ $inhalt = $FORM{'inhalt'}; }else{ $inhalt = $INFO{'inhalt'}; } open(T,">templates/$template"); &lock(T); print T "$inhalt"; &unlock(T); close(T); print "Location: $cgi\&action=admintemplate&pass=$pass&template=$template&temp=yes\n\n";exit(0); } sub admintxt { if($FORM{'pass'} ne ""){ $pass = $FORM{'pass'}; }else{ $pass = $INFO{'pass'}; } if ($passwort ne $pass){&error("Falsches Passwort!");} @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if(-e $mailtest && -X $mailtest){ $mailprog = $mailtest; } } $boundary = &generate_boundary(); $i = "templates/standard.dat"; open (M,"| $mailprog -t"); print M "To: $webmasteremail\n"; print M "From: $webmasteremail\n"; print M "Reply-To: $webmasteremail\n"; print M "Subject: E-Mailadressen per E-Mail als Anhang\n"; print M "MIME-Version: 1.0\n"; print M "Content-type: multipart/mixed; boundary=\"$boundary\"\n\n"; print M "--$boundary\nContent-type: text/plain; charset=US-ASCII\n\n"; my $mime_type = &get_mime_type($i); print M "\n--$boundary\n"; print M "Content-type: $mime_type;\n" . " name=\"standard.dat\"\n"; print M "Content-Transfer-Encoding: base64\n"; print M "Content-Disposition: attachment;" . " filename=\"standard.dat\"\n\n"; &base64enc( M, $i); print M "\n--$boundary--\n"; close(M); print "Location: $cgi\&action=admin2&passwort=$INFO{'pass'}&fertig=txt\n\n";exit(0); } # # Errorseite # sub error { local($e) = @_; open(T,"templates/error.html"); &lock(T); $i = join("",); &unlock(T); close(T); $i =~ s/<_cgi>/$cgi/g; $i =~ s/<_e>/$e/g; $i =~ s!!

Newsletter, v1.31
© Coder-World.de, 2001-2002 (Stefanos)

!g; print "Content-type: text/html\n\n"; print $i; exit(0); } sub generate_boundary() { my $unique_id = crypt(time(), $to) . crypt(time(), $from); return "----_=_$unique_id"; } sub get_mime_type { my $filename = shift; my %types = ( 'dat' => 'application/octet-stream', ); chomp(my $typ = [split(/\./, $filename)]->[-1]); return ( $types{$typ} or 'application/octet-stream'); } sub base64enc { my $mailpipe = shift; my $filename = shift; open(F, "< $filename") or die "Fehler: Konnte $filename nicht oeffnen!"; my @b64str = ("A".."Z","a".."z","0".."9","+","/"); my($buflen,$num,$len,$dat,@dat,$a,$b,$c,$d,$e,$f,$g); $buflen=300*3; $num=0; { local $^W = 0; while (!eof(F)) { $len=read(F, $dat, $buflen); @dat=unpack('C*', $dat); while (@dat) { $a=shift(@dat); $b=shift(@dat); $c=shift(@dat); if ($b eq "") { ($d,$e)=($a>>2, ($a<<4)&0x3f); print $mailpipe "$b64str[$d]$b64str[$e]=="; } elsif ($c eq "") { ($d,$e,$f)=(($a>>2), ((($a<<4)&0x3f) | $b>>4), ($b<<2)&0x3f); print $mailpipe "$b64str[$d]$b64str[$e]$b64str[$f]="; } else { ($d,$e,$f,$g)= ($a>>2, (($a<<4)&0x3f) | $b>>4, ($b<<2)&0x3f | $c>>6, $c&0x3f); print $mailpipe "$b64str[$d]$b64str[$e]$b64str[$f]$b64str[$g]"; } if (++$num==15) {print $mailpipe "\n"; $num=0;} } } } print $mailpipe "\n" unless ($num==0); }