#!/usr/bin/perl
#use CGI::Carp "fatalsToBrowser";
# Setup
$vorschaupfad = "./preview"; # Entsprechend den Pfad zum Verzeichnis mit den Vorschaubildern angeben, unverändert lassen wenn die Vorgabe genommen werden soll.
$bilderpfad = "./files"; # Entsprechend den Pfad zum Verzeichnis mit den Bildern angeben, unverändert lassen wenn die Vorgabe genommen werden soll.
$scripturl = "http://www.lachkiste.de/cgi-bin/einladungen"; # Internetadresse zum Script "epostkarten.cgi" ohne Dateiname am Ende. Diese Einstellung wird für den E-Mailcode benötigt.
$zeilen = "4"; # Hier können sie die Anzahl einstellen wieviel Bilder pro Zeile angezeigt werden sollen.
$webmasteremail = 'sport@lachkiste.de'; # Ihre E-Mailadresse eintragen, dorthin wird die Kopie der Postkarte gesendet.
$kopie = "0"; # 1=AN, 0=AUS - Hierdurch wird eine Kopie an den Webmaster gesendet.
$log = "0"; # 1=AN, 0=AUS - Alle Daten der versendeten Postkarten werden mitgeloggt.
$logmail = "0"; # 1=AN, 0=AUS - Alle E-Mailadressen der versendeten Postkarten werden mitgeloggt in 2 getrennte Dateien.
$begrenzung = "200"; # Hiermit kann der Besucher nur eine bestimmte Menge an Textzeichen pro Postkarte eingeben.
$floodzeit = "120"; # Bestimmt in welchem Abstand in Sekunden ein Besucher eine Postkarte senden darf mit derselben IP-Adresse.
$gzip = "0"; # 1=AN, 0=AUS
$flock = "1"; # 1=AN, 0=AUS
$grafikcode = "0"; # 1=AN, 0=AUS - Um sicherzustellen das ein Mensch die Postkarte abschickt kann ein Grafikcode zum Eingeben eingeblendet werden.
$emailcode = "0"; # 1=AN, 0=AUS - Der Absender muss seine E-Mailadresse durch einen Code bestätigen.
$codesave = "20"; # In Tagen angeben, wielange der Absender mit der E-Mailadresse ohne erneute Bestätigung weitere Postkarten versenden darf.
$returnpath = "0"; # 1=AN - 0=AUS
$smtp = '0'; # 1=AN/SMTP - 0=AUS/Sendmail, hierbei wird festgelegt ob SMTP oder Sendmail genommen wird, um die E-Mails zu versenden.
$timeout = "300"; # In Sekunden angeben, wielange das Script versuchen soll eine SMTP-Verbindung aufzubauen.
$mailprog = ''; # Sollte die automatische Erkennung von Sendmail fehlschlagen. So kann hier manuell der Pfad eingetragen werden.
# LEER lassen wenn der Sendmailpfad automatisch erkannt werden soll.
$SMTPusername = ''; # Der Zugangsusername zum Versenden einer E-Mail per SMTP, freie SMTP-Server brauchen dies nicht.
$SMTPpassword = ''; # Das Zugangspasswort zum Versenden einer E-Mail per SMTP, freie SMTP-Server brauchen dies nicht.
$SMTPserver = ''; # z.B.: smtp.domain.de ggf. beim Provider erkundigen.
$SMTPtyp = 'LOGIN'; # Je nach Konfiguration eines Servers werden die Zugangsdaten auch verschlüsselt übertragen.
# Mögliche Typen sind ANONYMOUS, CRAM_MD5, DIGEST_MD5, EXTERNAL, LOGIN, PLAIN
$POP3abfrage = '0'; # 1=AN - 0=AUS, Manche Server verlangen vor dem Versenden einer E-Mail, die Abfrage vom POP3-Postfach.
$POP3username = ''; # Der Zugangsusername um E-Mails abzurufen.
$POP3passwort = ''; # Das Zugangspasswort um E-Mails abzurufen.
$POP3server = 'pop3.domain.tld'; # z.B.: pop3.domain.de ggf. beim Provider erkundigen.
# Setup End
#
# Nutzungsbedingungen:
# Lizenz: ePostkarten
# Stand: 3.09.2001
#
# Durch Download der Software erklären Sie sich mit diesen Lizenzabkommen einverstanden.
# Der ePostkarten ist Freeware, jedoch nicht zum GNU/GPL - Abkommen zuzuordnen.
# Diese Lizenz erlaubt es Ihnen, ePostkarten zu benutzen.
# Als Nutzer des ePostkarten können Sie auf eigenes Risiko die Software verändern und/oder auf
# Ihre Bedürfnisse anpassen. Sie können auch Dritte mit der Anpassung/Veränderung beauftragen.
# 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 ePostkarten 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 kann 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.
# ePostkarten 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 ePostkarten 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.
#
# Erstellt von www.Coder-World.de
# E-Mail: support@coder-world.de
# Webseite: http://www.coder-world.de
#
$| = 1;
read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
foreach (split(/&/, $input)) {
($name, $value) = split(/=/, $_);
$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;
$FORM{$name} = $value;
}
foreach (split(/&/, $ENV{QUERY_STRING})){
($name,$value) = split(/=/, $_);
$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;
$INFO{$name} = $value;
}
$action = $FORM{'action'} || $INFO{'action'};
$version = "1.3";
$codesave = 5 if($codesave !~ /^\d+$/);
$scripturl = "." unless($scripturl);
BEGIN {
use FindBin;
use lib ("$FindBin::Bin", "$FindBin::Bin/libs");
$ENV{'TMPDIR'} = $ENV{'TEMP'} || "";
eval { $died_in_eval = 1; require Image::Magick; };
if($@){
$magick = 0;
}else{
if($Image::Magick::VERSION){
$moduleadmin .= "Image::Magick " . $Image::Magick::VERSION . ", ";
}else{
$moduleadmin .= "Image::Magick, ";
}
$magick = 1;
import Image::Magick;
}
eval { $died_in_eval = 1; require GD; };
if($@){
$gd = 0;
}else{
if($GD::VERSION){
$moduleadmin .= "GD " . $GD::VERSION . ", ";
}else{
$moduleadmin .= "GD, ";
}
$gd = 1;
import GD;
}
eval { $died_in_eval = 1; require Imager; };
if($@){
$imager = 0;
}else{
if($Imager::VERSION){
$moduleadmin .= "Imager " . $Imager::VERSION . ", ";
}else{
$moduleadmin .= "Imager, ";
}
$imager = 1;
import Imager;
}
eval { $died_in_eval = 1; require Net::POP3; };
if ($@) {
$pop3 = 0;
}else{
$pop3 = 1;
import Net::POP3;
}
eval { $died_in_eval = 1; require Net::SMTP_auth; };
if ($@) {
$smtpauth = 0;
}else{
$smtpauth = 1;
import Net::SMTP_auth;
}
eval { $died_in_eval = 1; require MIME::Base64; };
if ($@) {
$base64 = 0;
}else{
$base64 = 1;
import MIME::Base64;
}
eval { $died_in_eval = 1; require Compress::Zlib; };
if ($@) {
$zlib = 0;
}else{
$zlib = 1;
import Compress::Zlib;
}
eval { $died_in_eval = 1; require String::Random; };
if ($@) {
$stringrandom = 0;
}else{
$stringrandom = 1;
import String::Random;
}
if($magick or $gd){
eval { $died_in_eval = 1; require GD::SecurityImage; };
if ($@) {
$gdsecurityimage = 0;
}else{
$gdsecurityimage = 1;
import GD::SecurityImage;
}
}
}
if($action eq "version"){
print "Content-Type: text/html\n\n";
print "Version: $version
\nModule: $moduleadmin";
exit;
}elsif($action eq "refresh"){
&refresh();
}elsif($action == 1){
$error .= "Kein korrektes Bild übermittelt.
\n" if($FORM{'bild'} =~ /\||\;|\\|\/|\.\./);
$error .= "Sie haben den Namen vom Empfänger nicht eingegeben.
\n" unless($FORM{'name'});
$error .= "Sie haben Ihren Namen nicht eingegeben.
\n" unless($FORM{'name'});
$error .= "Ihre E-Mailadresse ist inkorrekt.
\n" if($FORM{'email2'} !~ /^([\w-\.]+)(\@)([a-zA-Z0-9][\w-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]+)$/);
$error .= "Die E-Mailadresse vom Empfäger ist inkorrekt.
\n" if($FORM{'email'} !~ /^([\w-\.]+)(\@)([a-zA-Z0-9][\w-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]+)$/);
$FORM{'name'} =~ s/[\"<>\|]//g;
$FORM{'name2'} =~ s/[\"<>\|]//g;
$error .= "Der Text ist grösser als $begrenzung Zeichen." if(length($FORM{'text'}) > $begrenzung);
open(F,";
flock(F,8) if($use_flock);
close(F);
foreach $ee (@zensur){
$ee =~ s/[\n\r]//g;
if($FORM{'text'} =~ /$ee/i){
$error .= "Im Text befindet sich das Wort \"$ee\", das Verboten wurde.
\n";
}
}
open(F,";
flock(F,8) if($use_flock);
close(F);
foreach $x (@sperre2){
$x =~ s/[\n\r]//g;
if($x =~ /^\*/){
$stern = 1;
($vor,$maili) = split(/\@/,$x);
}else{
$stern = 0;
}
if(lc($x) eq lc($FORM{'email'}) or lc($FORM{'email'}) =~ /\@$maili$/i && $stern == 1){
$error .= "Die E-Mailadresse vom Empfänger wurde gesperrt.
\n";
}elsif(lc($x) eq lc($FORM{'email2'}) or lc($FORM{'email2'}) =~ /\@$maili$/i && $stern == 1){
$error .= "Ihre E-Mailadresse wurde gesperrt.
\n";
}
}
&vorschau();
}elsif($action == 2){
if($grafikcode == 1){
$Times = time();
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach(@session){
s/[\n\r]//g;
($SESSIONkey,$SESSIONtime) = split(/\|/);
if($Times < ($SESSIONtime+3600) && $SESSIONkey ne $FORM{'grafikcode'}){
print F $_ . "\n";
}else{
$ySESSIONkey = $SESSIONkey;
}
}
flock(F,8) if($flock);
close(F);
$error .= "Der Grafikcode ist falsch.
\n" if(uc($FORM{'grafikcode'}) ne uc($ySESSIONkey) or !$FORM{'grafikcode'});
}
$error .= "Kein korrektes Bild übermittelt.
\n" if($FORM{'bild'} =~ /\||\;|\\|\/|\.\./);
$error .= "Sie haben den Namen vom Empfänger nicht eingegeben.
\n" unless($FORM{'name'});
$error .= "Sie haben Ihren Namen nicht eingegeben.
\n" unless($FORM{'name'});
$error .= "Ihre E-Mailadresse ist inkorrekt.
\n" if($FORM{'email2'} !~ /^([\w-\.]+)(\@)([a-zA-Z0-9][\w-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]+)$/);
$error .= "Die E-Mailadresse vom Empfäger ist inkorrekt.
\n" if($FORM{'email'} !~ /^([\w-\.]+)(\@)([a-zA-Z0-9][\w-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]+)$/);
$FORM{'name'} =~ s/[\"<>\|]//g;
$FORM{'name2'} =~ s/[\"<>\|]//g;
$error .= "Der Text ist grösser als $begrenzung Zeichen." if(length($FORM{'text'}) > $begrenzung);
open(F,";
flock(F,8) if($use_flock);
close(F);
foreach $ee (@zensur){
$ee =~ s/[\n\r]//g;
if($FORM{'text'} =~ /$ee/i){
$error .= "Im Text befindet sich das Wort \"$ee\", das Verboten wurde.
\n";
}
}
open(F,";
flock(F,8) if($use_flock);
close(F);
foreach $x (@sperre2){
$x =~ s/[\n\r]//g;
if($x =~ /^\*/){
$stern = 1;
($vor,$maili) = split(/\@/,$x);
}else{
$stern = 0;
}
if(lc($x) eq lc($FORM{'email'}) or lc($FORM{'email'}) =~ /\@$maili$/i && $stern == 1){
$error .= "Die E-Mailadresse vom Empfänger wurde gesperrt.
\n";
}elsif(lc($x) eq lc($FORM{'email2'}) or lc($FORM{'email2'}) =~ /\@$maili$/i && $stern == 1){
$error .= "Ihre E-Mailadresse wurde gesperrt.
\n";
}
}
$FORM{'name'} =~ s/[\"<>\|]//g;
$FORM{'name2'} =~ s/[\"<>\|]//g;
if($floodzeit =~ /^\d+$/ && !$error){
$time = time();
$flood = 1;
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach (@flood){
$_ =~ s/[\n\r]//g;
($ipadress,$sekunden) = split(/\|/,$_);
if($ipadress eq $ENV{'REMOTE_ADDR'}){
if($time <= ($sekunden+$floodzeit)){
print F "$ipadress\|$sekunden\n";
$formmailer = $sekunden;
$flood = 0;
}
}else{
if($time <= ($sekunden+$floodzeit)){
print F "$ipadress\|$sekunden\n";
}
}
}
if($flood == 1){
print F "$ENV{'REMOTE_ADDR'}\|$time\n";
}
flock(F,8) if($flock);
close(F);
if($formmailer){
$floodzeit = ($formmailer+$floodzeit) - $time;
if($floodzeit !~ /^\-|^0$/){
$error .= "Sie können erst in $floodzeit Sekunden wieder eine Postkarte versenden.
\n";
}
}
}
if($error){
&vorschau();
}
open(F,");
flock(F,8) if($flock);
close(F);
$x =~ s/__bild__/$FORM{'bild'}/g;
$x =~ s/__name__/$FORM{'name'}/g;
$x =~ s/__name2__/$FORM{'name2'}/g;
$x =~ s/__email__/$FORM{'email'}/g;
$x =~ s/__email2__/$FORM{'email2'}/g;
$FORM{'text'} =~ s!&!&!g;
$FORM{'text'} =~ s!<!<!g;
$FORM{'text'} =~ s!>!>!g;
$FORM{'text'} =~ s!!>!g;
$FORM{'text'} =~ s/\|/\&\#124\;/g;
$FORM{'text'} =~ s/\n/
/g;
$x =~ s/__text__/$FORM{'text'}/g;
$FORM{'name'} =~ s/\|/\&\#124\;/g;
$FORM{'name2'} =~ s/\|/\&\#124\;/g;
if($POP3abfrage == 1){
$pop = Net::POP3->new($POP3server, Timeout => $timeout);
$pop->login($POP3username, $POP3passwort) or &error("POP3-Postfach konnte nicht abgerufen werden. $!");
$pop->quit;
}
unless($mailprog){
foreach ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){
if(-e $_ && -X _){
$mailprog = $_;
last;
}
}
}
if($FORM{'bild'} =~ /\Q---\E/){
($FORM{'kat'},$FORM{'bild'}) = split(/\Q---\E/,$FORM{'bild'});
}
if($log == 1){
open(F,">>epk-data/log.txt");
flock(F,2) if($flock);
print F "$FORM{'bild'}\|$FORM{'name'}\|$FORM{'name2'}\|$FORM{'email'}\|$FORM{'email2'}\|$ENV{'REMOTE_ADDR'}\|" . time() . "\|$FORM{'kat'}\n";
flock(F,2) if($flock);
close(F);
}
if($logmail == 1){
open(F,"){
s/[\n\r]//g;
if($_ eq $FORM{'email2'}){
$foundOKe = 1;
last;
}
}
flock(F,2) if($flock);
close(F);
unless($foundOKe){
open(F,">>epk-data/empfaenger.txt");
flock(F,2) if($flock);
print F "$FORM{'email'}\n";
flock(F,2) if($flock);
close(F);
}
open(F,"){
s/[\n\r]//g;
if($_ eq $FORM{'email2'}){
$foundOK = 1;
last;
}
}
flock(F,2) if($flock);
close(F);
open(F,"){
s/[\n\r]//g;
if($_ eq $FORM{'email2'}){
$foundOK = 1;
last;
}
}
flock(F,2) if($flock);
close(F);
unless($foundOK){
open(F,">>epk-data/absender.txt");
flock(F,2) if($flock);
print F "$FORM{'email2'}\n";
flock(F,2) if($flock);
close(F);
}
}
if($emailcode == 1){
@words = qw(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9);
$random_numberx = "";
foreach (1..6){
$random_numberx .= $words[int rand($#words+1)];
}
$emailaktivcode = 0;
$Times = time();
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach(@session){
s/[\n\r]//g;
($SESSIONkey,$SESSIONtime,$SESSIONemail,$SESSIONaktiv) = split(/\|/);
if($Times < ($SESSIONtime+($codesave*24*60*60))){
$emailaktivcode = 1 if($SESSIONemail eq $FORM{'email2'} && $SESSIONemail && $SESSIONaktiv == 1);
print F $_ . "\n";
}
}
flock(F,8) if($flock);
close(F);
unless($emailaktivcode){
open(F,");
flock(F,2) if($flock);
close(F);
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach(@session){
s/[\n\r]//g;
($SESSIONkey,$SESSIONtime,$SESSIONemail,$SESSIONaktiv) = split(/\|/);
if($Times < ($SESSIONtime+($codesave*24*60*60))){
print F $_ . "\n";
}
}
print F "$random_numberx\|$Times\|$FORM{'email2'}\|0\n";
flock(F,8) if($flock);
close(F);
$emailcode =~ s/__link__/$scripturl\/epostkarten.cgi?action=4&code=$random_numberx/g;
$NEWmail2x = "To: $FORM{'email2'}\n";
$NEWmail2x .= "From: $webmasteremail\n" . $emailcode;
open(F,">>epk-data/maildata.txt");
flock(F,2) if($flock);
print F "$random_numberx\|$FORM{'bild'}\|$FORM{'name'}\|$FORM{'name2'}\|$FORM{'email'}\|$FORM{'email2'}\|$FORM{'text'}\|$ENV{'REMOTE_ADDR'}\|" . time() . "\|$FORM{'kat'}\n";
flock(F,2) if($flock);
close(F);
if($smtp){
$smtpOBJECT = Net::SMTP_auth->new($SMTPserver, Timeout => $timeout) or &error("Verbindung zu $SMTPserver konnte nicht aufgebaut werden: $!");
if($SMTPusername && $SMTPpassword){
$smtpOBJECT->auth($SMTPtyp,$SMTPusername,$SMTPpassword);
}
$smtpOBJECT->mail($webmasteremail);
$smtpOBJECT->to("$FORM{'email2'}") or &error("Empfänger wird vom Server nicht akzeptiert: $!");;
$smtpOBJECT->data();
$smtpOBJECT->datasend($NEWmail2x);
$smtpOBJECT->dataend();
$smtpOBJECT->quit();
}else{
if($returnpath){
open (M,"| $mailprog -f $webmasteremail -t");
}else{
open (M,"| $mailprog -t");
}
print M $NEWmail2x;
close(M);
}
}
}
open(F,";
flock(F,8) if($flock);
close(F);
$subject = shift(@data);
shift(@data);
$i = join("",@data);
$i =~ s/__bild__/$FORM{'bild'}/g;
$i =~ s/__name__/$FORM{'name'}/g;
$i =~ s/__name2__/$FORM{'name2'}/g;
$i =~ s/__email__/$FORM{'email'}/g;
$i =~ s/__email2__/$FORM{'email2'}/g;
$FORM{'text'} =~ s!&!&!g;
$i =~ s/__text__/$FORM{'text'}/g;
$boundary = &generate_boundary();
$i =~ s/__kat__/$FORM{'kat'}/g;
if(!$emailcode or $emailcode == 1 && $emailaktivcode == 1){
$NEWmail .= $subject;
$NEWmail .= "MIME-Version: 1.0\n";
$NEWmail .= "Content-type: multipart/related; boundary=\"$boundary\"\n\n";
$NEWmail .= "--$boundary\nContent-Type: text/html; charset=\"iso-8859-1\"; Content-Transfer-Encoding: 7bit\n\n$i";
my $mime_type = &get_mime_type($FORM{'bild'});
$NEWmail .= "\n--$boundary\n";
$NEWmail .= "Content-type: $mime_type;\n" . " name=\"$FORM{'bild'}\"\n";
$NEWmail .= "Content-Transfer-Encoding: base64\n";
$NEWmail .= "Content-ID: <$FORM{'bild'}>\n";
$NEWmail .= "Content-Disposition: inline; filename=\"$FORM{'bild'}\"\n\n";
open(Y,"<$bilderpfad/$FORM{'kat'}/$FORM{'bild'}");
if($base64){
$NEWmail .= encode_base64(join("",));
}else{
$NEWmail .= &easyencode_base64(join("",));
}
close(Y);
$NEWmail .= "\n--$boundary--\n";
if($kopie){
$NEWmail2 = "To: $webmasteremail\n";
$NEWmail2 .= "From: $FORM{'email'}\n" . $NEWmail;
if($smtp){
$smtpOBJECT = Net::SMTP_auth->new($SMTPserver, Timeout => $timeout) or &error("Verbindung zu $SMTPserver konnte nicht aufgebaut werden: $!");
if($SMTPusername && $SMTPpassword){
$smtpOBJECT->auth($SMTPtyp,$SMTPusername,$SMTPpassword);
}
$smtpOBJECT->mail($webmasteremail);
$smtpOBJECT->to("$webmasteremail") or &error("Empfänger wird vom Server nicht akzeptiert: $!");;
$smtpOBJECT->data();
$smtpOBJECT->datasend($NEWmail2);
$smtpOBJECT->dataend();
$smtpOBJECT->quit();
}else{
if($returnpath){
open (M,"| $mailprog -f $webmasteremail -t");
}else{
open (M,"| $mailprog -t");
}
print M $NEWmail2;
close(M);
}
}
$NEWmail = "To: $FORM{'email'}\n" . $NEWmail;
$NEWmail = "From: $FORM{'email2'}\n" . $NEWmail;
if($smtp){
$smtpOBJECT = Net::SMTP_auth->new($SMTPserver, Timeout => $timeout) or &error("Verbindung zu $SMTPserver konnte nicht aufgebaut werden: $!");
if($SMTPusername && $SMTPpassword){
$smtpOBJECT->auth($SMTPtyp,$SMTPusername,$SMTPpassword);
}
$smtpOBJECT->mail($webmasteremail);
$smtpOBJECT->to("$FORM{'email'}") or &error("Empfänger wird vom Server nicht akzeptiert: $!");;
$smtpOBJECT->data();
$smtpOBJECT->datasend($NEWmail);
$smtpOBJECT->dataend();
$smtpOBJECT->quit();
}else{
if($returnpath){
open (M,"| $mailprog -f $webmasteremail -t");
}else{
open (M,"| $mailprog -t");
}
print M $NEWmail;
close(M);
}
}
$x =~ s/__kat__/$FORM{'kat'}/g;
&ausgabe($x);
exit;
}elsif($action == 3){
&error("Der Bildname enthält ungültige Zeichen.") if($INFO{'bild'} =~ /\||\;|\\|\/|\.\./);
if($INFO{'bild'} =~ /\Q---\E/){
($INFO{'kat'},$INFO{'bild'}) = split(/\Q---\E/,$INFO{'bild'});
}
&error("Der Kategorienname enthält ungültige Zeichen.") if($INFO{'kat'} && $INFO{'kat'} =~ /\||\;|\\|\/|\.\./);
$x = 1 if($INFO{'bild'} =~ /-1$/);
$INFO{'bild'} =~ s/-1$//g;
if($INFO{'kat'}){
if($x == 1 && (-e("$vorschaupfad/$INFO{'kat'}/$INFO{'bild'}"))){
open(F,"<$vorschaupfad/$INFO{'kat'}/$INFO{'bild'}");
}else{
open(F,"<$bilderpfad/$INFO{'kat'}/$INFO{'bild'}");
}
}else{
if($x == 1 && (-e("$vorschaupfad/$INFO{'bild'}"))){
open(F,"<$vorschaupfad/$INFO{'bild'}");
}else{
open(F,"<$bilderpfad/$INFO{'bild'}");
}
}
flock(F,2) if($flock);
binmode(F);
$x = join("",);
flock(F,8) if($flock);
close(F);
if($FORM{'bild'} =~ /gif$/){
print "Content-Type: image/gif\n\n";
}elsif($FORM{'bild'} =~ /jpg$/){
print "Content-Type: image/jpeg\n\n";
}else{
print "Content-Type: image/png\n\n";
}
print $x;
exit;
}elsif($action == 4){
&error("Der E-Mailcode beinhaltet nicht nur Zeichen.") if($INFO{'code'} !~ /^\w+$/);
$yes = 0;
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach (@maildata){
s/[\n\r]//g;
@split = split(/\|/,$_);
if($INFO{'code'} == $split[0]){
$FORM{'bild'} = $split[1];
$FORM{'name'} = $split[2];
$FORM{'name2'} = $split[3];
$FORM{'email'} = $split[4];
$FORM{'email2'} = $split[5];
$FORM{'text'} = $split[6];
$FORM{'kat'} = $split[9];
$yes = 1;
}else{
print F $_ . "\n";
}
}
flock(F,2) if($flock);
close(F);
&error("Es wurde kein gültiger E-Mailcode gefunden.") unless($yes);
$emailaktivcode = 0;
$Times = time();
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach(@session){
s/[\n\r]//g;
($SESSIONkey,$SESSIONtime,$SESSIONemail,$SESSIONaktiv) = split(/\|/);
if($Times < ($SESSIONtime+($codesave*24*60*60))){
if($SESSIONkey eq $INFO{'code'}){
print F "$SESSIONkey\|$SESSIONtime\|$SESSIONemail\|1\n";
}else{
print F $_ . "\n";
}
}
}
flock(F,8) if($flock);
close(F);
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach (@absenderOLD){
s/[\n\r]//g;
next if($_ eq $FORM{'email2'});
print F "$_\n";
}
flock(F,2) if($flock);
close(F);
open(F,"){
s/[\n\r]//g;
if($_ eq $FORM{'email2'}){
$foundOK = 1;
last;
}
}
flock(F,2) if($flock);
close(F);
unless($foundOK){
open(F,">>epk-data/absenderok.txt");
flock(F,2) if($flock);
print F "$FORM{'email2'}\n";
flock(F,2) if($flock);
close(F);
}
open(F,");
flock(F,8) if($flock);
close(F);
$x =~ s/__bild__/$FORM{'kat'}---$FORM{'bild'}/g;
$x =~ s/__name__/$FORM{'name'}/g;
$x =~ s/__name2__/$FORM{'name2'}/g;
$x =~ s/__email__/$FORM{'email'}/g;
$x =~ s/__email2__/$FORM{'email2'}/g;
$FORM{'text'} =~ s!&!&!g;
$x =~ s/__text__/$FORM{'text'}/g;
$FORM{'name'} =~ s/\|/|/g;
$FORM{'name2'} =~ s/\|/|/g;
if($POP3abfrage == 1){
$pop = Net::POP3->new($POP3server, Timeout => $timeout);
$pop->login($POP3username, $POP3passwort) or &error("POP3-Postfach konnte nicht abgerufen werden. $!");
$pop->quit;
}
unless($mailprog){
foreach ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail","/usr/bin/sendmail.restart","/etc/sendmail.cf","/etc/sendmail.cw","/usr/man/man8/sendmail.8","/var/qmail/bin/qmail-inject"){
if(-e $_ && -X _){
$mailprog = $_;
last;
}
}
}
open(F,";
flock(F,8) if($flock);
close(F);
$subject = shift(@data);
shift(@data);
$i = join("",@data);
$i =~ s/__bild__/$FORM{'bild'}/g;
$i =~ s/__name__/$FORM{'name'}/g;
$i =~ s/__name2__/$FORM{'name2'}/g;
$i =~ s/__email__/$FORM{'email'}/g;
$i =~ s/__email2__/$FORM{'email2'}/g;
$FORM{'text'} =~ s!&!&!g;
$i =~ s/__text__/$FORM{'text'}/g;
$boundary = &generate_boundary();
$i =~ s/__kat__/$FORM{'kat'}/g;
$NEWmail .= $subject;
$NEWmail .= "MIME-Version: 1.0\n";
$NEWmail .= "Content-type: multipart/related; boundary=\"$boundary\"\n\n";
$NEWmail .= "--$boundary\nContent-Type: text/html; charset=\"iso-8859-1\"; Content-Transfer-Encoding: 7bit\n\n$i";
my $mime_type = &get_mime_type($FORM{'bild'});
$NEWmail .= "\n--$boundary\n";
$NEWmail .= "Content-type: $mime_type;\n" . " name=\"$FORM{'bild'}\"\n";
$NEWmail .= "Content-Transfer-Encoding: base64\n";
$NEWmail .= "Content-ID: <$FORM{'bild'}>\n";
$NEWmail .= "Content-Disposition: inline; filename=\"$FORM{'bild'}\"\n\n";
open(Y,"<$bilderpfad/$FORM{'kat'}/$FORM{'bild'}");
if($base64){
$NEWmail .= encode_base64(join("",));
}else{
$NEWmail .= &easyencode_base64(join("",));
}
close(Y);
$NEWmail .= "\n--$boundary--\n";
if($kopie){
$NEWmail2 = "To: $webmasteremail\n";
$NEWmail2 .= "From: $FORM{'email'}\n" . $NEWmail;
if($smtp){
$smtpOBJECT = Net::SMTP_auth->new($SMTPserver, Timeout => $timeout) or &error("Verbindung zu $SMTPserver konnte nicht aufgebaut werden: $!");
if($SMTPusername && $SMTPpassword){
$smtpOBJECT->auth($SMTPtyp,$SMTPusername,$SMTPpassword);
}
$smtpOBJECT->mail($webmasteremail);
$smtpOBJECT->to("$webmasteremail") or &error("Empfänger wird vom Server nicht akzeptiert: $!");;
$smtpOBJECT->data();
$smtpOBJECT->datasend($NEWmail2);
$smtpOBJECT->dataend();
$smtpOBJECT->quit();
}else{
if($returnpath){
open (M,"| $mailprog -f $webmasteremail -t");
}else{
open (M,"| $mailprog -t");
}
print M $NEWmail2;
close(M);
}
}
$NEWmail = "To: $FORM{'email'}\n" . $NEWmail;
$NEWmail = "From: $FORM{'email2'}\n" . $NEWmail;
if($smtp){
$smtpOBJECT = Net::SMTP_auth->new($SMTPserver, Timeout => $timeout) or &error("Verbindung zu $SMTPserver konnte nicht aufgebaut werden: $!");
if($SMTPusername && $SMTPpassword){
$smtpOBJECT->auth($SMTPtyp,$SMTPusername,$SMTPpassword);
}
$smtpOBJECT->mail($webmasteremail);
$smtpOBJECT->to("$FORM{'email'}") or &error("Empfänger wird vom Server nicht akzeptiert: $!");;
$smtpOBJECT->data();
$smtpOBJECT->datasend($NEWmail);
$smtpOBJECT->dataend();
$smtpOBJECT->quit();
}else{
if($returnpath){
open (M,"| $mailprog -f $webmasteremail -t");
}else{
open (M,"| $mailprog -t");
}
print M $NEWmail;
close(M);
}
$x =~ s/__kat__/$FORM{'kat'}/g;
&ausgabe($x);
exit;
}else{
open(F,");
flock(F,8) if($flock);
close(F);
($split4) = ($split =~ /(.+?)/s);
($split2) = ($split =~ /(.+?)/s);
($split5) = ($split =~ /(.+?)/s);
$firstkat = $INFO{'kat'};
opendir(DIR,"$bilderpfad");
foreach (sort readdir(DIR)){
next if(!-d("$bilderpfad/$_") or $_ eq "\." or $_ eq "\.\.");
$plus = $split5;
$firstkat = $_ if(!$firstkat && !$INFO{'kat'});
$plus =~ s/__kat__/$_/g;
$plus =~ s/__katname__/$_/g;
$splitz .= $plus;
}
closedir(DIR);
opendir(F,"$bilderpfad/$firstkat");
@bilder = sort { lc($a) cmp lc($b) }(grep(/(jpg|gif|png)$/i,readdir(F)));
closedir(F);
for($i=0;$i<@bilder;$i++){
$plus = $split2;
$plus3 = "";
foreach (1..$zeilen){
$i++;
$plus2 = $split4;
$zeile++;
$plus2 =~ s/__kat__/$firstkat/g;
$plus2 =~ s/__bild__/$bilder[$i-1]/g;
$plus2 =~ s/__bild2__/$bilder[$i-1]-1/g;
$plus2 =~ s/ checked//g if($i-1);
if($bilder[$i-1]){
$plus3 .= $plus2;
}
}
$plus =~ s/(.+?)/$plus3/s;
$i--;
$splitx .= $plus;
}
$split =~ s/(.+?)/$splitz/s;
$split =~ s/(.+?)/$splitx/s;
&ausgabe($split);
}
sub error {
local($e) = @_;
open(F,");
flock(F,8) if($flock);
close(F);
$error =~ s/__e__/$e/g;
&ausgabe($error);
}
sub vorschau {
open(F,");
flock(F,8) if($flock);
close(F);
$temp =~ s/__bild__/$FORM{'bild'}/g;
$temp =~ s/__name__/$FORM{'name'}/g;
$temp =~ s/__name2__/$FORM{'name2'}/g;
$temp =~ s/__email__/$FORM{'email'}/g;
$temp =~ s/__email2__/$FORM{'email2'}/g;
if($FORM{'bild'} =~ /\Q---\E/){
($INFO{'kat'}) = (split(/\Q---\E/,$FORM{'bild'}))[0];
}
$temp =~ s/__kat__/$INFO{'kat'}/g;
if($grafikcode == 1){
$temp =~ s/(.+?)/$1/sg;
}else{
$temp =~ s/(.+?)//sg;
}
$FORM{'text'} =~ s!&!&!g;
$FORM{'text'} =~ s!<!<!g;
$FORM{'text'} =~ s!>!>!g;
$FORM{'text'} =~ s!!>!g;
$FORM{'text'} =~ s/\|/\&\#124\;/g;
$FORM{'text'} =~ s/
/\n/g;
$temp =~ s/__text__/$FORM{'text'}/g;
$FORM{'text'} =~ s/\n/
/g;
$temp =~ s/__text2__/$FORM{'text'}/g;
if($error){
open(F,"/,join("",)))[1];
flock(F,8) if($flock);
close(F);
$errortemp =~ s/__e__/$error/g;
}
$temp =~ s/__error__/$errortemp/g;
&ausgabe($temp);
}
sub generate_boundary() {
return "------=====================_" . time() . "==_";
}
sub get_mime_type {
my $filename = shift;
my %types = (
'gif' => 'image/gif',
'jpg' => 'image/jpeg',
'png' => 'image/png',
'swf' => 'application/x-shockwave-flash',
);
chomp(my $typ = [split(/\./, $filename)]->[-1]);
return ( $types{$typ} or 'application/octet-stream');
}
sub ausgabe {
local($html) = shift;
$code = "092468746d6c203d7e20737e3c2f5b62425d5b4f6f5d5b44645d5b59795d3e7e3c62723e3c63656e7465723e3c7461626c6520626f726465723d2230222063656c6c73706163696e673d2231222063656c6c70616464696e673d2231223e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e3c623e65506f73746b617274656e3c2f623e2c20762476657273696f6e3c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e26636f70793b203c6120687265663d22687474703a2f2f7777772e636f6465722d776f726c642e646522207461726765743d225f626c616e6b223e3c623e436f6465722d576f726c642e64653c2f623e3c2f613e2c20323030312d32303036202853746566616e6f73293c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c2f7461626c653e3c2f63656e7465723e3c2f626f64793e7e3b096966282468746d6c20217e202f3c5c2f626f64793e2f297b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b09097072696e742022496e2065696e65722054656d706c61746520697374206b65696e20266c743b2f626f64792667743b20656e7468616c74656e21223b0909657869743b097d0969662824454e567b27485454505f4143434550545f454e434f44494e47277d203d7e202f28782d677a69707c677a6970292f2026262024454e567b275345525645525f50524f544f434f4c277d2065712022485454502f312e31222026262024677a6970203d3d2031297b09097072696e742022436f6e74656e742d456e636f64696e673a2024315c6e223b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b090962696e6d6f6465205354444f55543b0909696628247a6c6962297b0909097072696e7420436f6d70726573733a3a5a6c69623a3a6d656d477a6970282468746d6c293b09097d656c73657b0909096f70656e28475a49502c20227c20677a6970202d6622293b09090962696e6d6f646528475a4950293b0909097072696e7420475a4950202468746d6c3b090909636c6f736528475a4950293b09097d097d656c73657b09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b09097072696e74202468746d6c3b097d";$code =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;eval $code;
exit;
}
sub easyencode_base64 (){
my $res = "";
while ($_[0] =~ /(.{1,45})/gs) {
$res .= substr(pack('u', $1), 1);
chop($res);
}
$res =~ tr|` -_|AA-Za-z0-9+/|;
my $padding = (3 - length($_[0]) % 3) % 3;
$res =~ s/.{$padding}$/'=' x $padding/e if $padding;
$res =~ s/(.{1,76})/$1\n/g;
return $res;
}
sub easydecode_base64 (){
my $str = shift;
my $res = "";
$str =~ tr|A-Za-z0-9+=/||cd;
&error("Länge der Daten \"Base64\" kann nicht mit 4 multipliziert werden.") if(length($str) % 4);
$str =~ s/=+$//;
$str =~ tr|A-Za-z0-9+/| -_|;
while ($str =~ /(.{1,60})/gs) {
my $len = chr(32 + length($1)*3/4);
$res .= unpack("u", $len . $1 );
}
return $res;
}
sub refresh {
%config = (font => './GD/comic.ttf');
GD::SecurityImage->import(use_magick => $magick);
$IS_GD = $GD::SecurityImage::BACKEND eq 'GD';
%options = &all_options();
%styles = &all_styles();
@optz = keys %options;
@styz = keys %styles;
$rnd_opt = $options{$optz[int rand @optz]};
$rnd_sty = $styles{ $styz[int rand @styz]};
$image = GD::SecurityImage->new(
lines => $rnd_sty->{lines},
bgcolor => $rnd_sty->{bgcolor},
width => $rnd_opt->{width},
height => $rnd_opt->{height},
font => $rnd_opt->{font},
ptsize => $rnd_opt->{ptsize},
ptsize => $rnd_opt->{ptsize},
scramble => $rnd_opt->{scramble},
angle => $rnd_opt->{angle},
send_ctobg => $rnd_opt->{send_ctobg},
);
$image->random(String::Random->new->randregex('\g\g\g\g\g\g'));
$random_numberx = $image->random_str();
$image->create(ttf => $rnd_sty->{name}, $rnd_sty->{text_color}, $rnd_sty->{line_color});
$image->particle($rnd_sty->{dots} ? ($rnd_sty->{particle}, $rnd_sty->{dots}) : ($rnd_sty->{particle}));
my($image_data, $mime_type, $random_number) = $image->out(force => 'png');;
$Times = time();
open(F,"+;
seek(F,0,0);
truncate(F,0);
foreach(@session){
s/[\n\r]//g;
($SESSIONkey,$SESSIONtime) = split(/\|/);
if($Times < ($SESSIONtime+3600)){
print F $_ . "\n";
}
}
print F "$random_number\|$Times\n";
flock(F,8) if($flock);
close(F);
print "Content-Type: image/png\n\n";
print $image_data;
exit;
}
sub all_options {
my %gd = (
gd_ttf => {
width => 220,
height => 90,
send_ctobg => 1,
font => $config{font},
ptsize => 30,
},
gd_ttf_scramble => {
width => 360,
height => 100,
send_ctobg => 1,
font => $config{font},
ptsize => 25,
scramble => 1,
},
gd_ttf_scramble_fixed => {
width => 360,
height => 80,
send_ctobg => 1,
font => $config{font},
ptsize => 25,
scramble => 1,
angle => 30,
},
);
my %magick = (
magick => {
width => 250,
height => 100,
send_ctobg => 1,
font => $config{font},
ptsize => 50,
},
magick_scramble => {
width => 350,
height => 100,
send_ctobg => 1,
font => $config{font},
ptsize => 30,
scramble => 1,
},
magick_scramble_fixed => {
width => 350,
height => 80,
send_ctobg => 1,
font => $config{font},
ptsize => 30,
scramble => 1,
angle => 32,
},
);
return $IS_GD ? (%gd) : (%magick);
}
sub all_styles {
ec => {
name => 'ec',
lines => 16,
bgcolor => [ 0, 0, 0],
text_color => [84, 207, 112],
line_color => [ 0, 0, 0],
particle => 1000,
},
ellipse => {
name => 'ellipse',
lines => 15,
bgcolor => [208, 202, 206],
text_color => [184, 20, 180],
line_color => [184, 20, 180],
particle => 2000,
},
circle => {
name => 'circle',
lines => 40,
bgcolor => [210, 215, 196],
text_color => [ 63, 143, 167],
line_color => [210, 215, 196],
particle => 3500,
},
box => {
name => 'box',
lines => 6,
text_color => [245, 240, 220],
line_color => [115, 115, 115],
particle => 3000,
dots => 2,
},
rect => {
name => 'rect',
lines => 30,
text_color => [ 63, 143, 167],
line_color => [226, 223, 169],
particle => 2000,
},
default => {
name => 'default',
lines => 10,
text_color => [ 68, 150, 125],
line_color => [255, 0, 0],
particle => 5000,
},
}