#!/usr/bin/perl
#use CGI::Carp "fatalsToBrowser";
require "dl-data/set.cgi";

#
# Autor: Stefan Gipper (Stefanos)
# Webseite: http://www.coder-world.de
# E-Mail: support@coder-world.de
#

$version = "2.5";
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;
	if($FORM{$name} ne ""){
		$FORM{$name} .= ",$value";
	}else{
		$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;
	$value =~ s/<!--(.|\n)*-->//g;
	if($INFO{$name} ne ""){
		$INFO{$name} .= ",$value";
	}else{
		$INFO{$name} = $value;
	}
}
$action = $INFO{'action'} || $FORM{'action'};
$cgi = "download.cgi\?";

if($action =~ /count/) {&$action;}
elsif($action =~ /admin/) {&$action;}
elsif($action =~ /config/) {&$action;}
elsif($action =~ /anzeige/) {&$action;}
elsif($action =~ /top/) {&top;}
elsif($action =~ /version/) {&version;}
&top;exit;

sub count {
	if($INFO{'url'} =~ /^\d+$/){
		open(F,"+<dl-data/liste.dat");
		while(<F>){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($LISTEid eq $INFO{'url'}){
				$INFO{'url'} = $LISTEurl;
				last;
			}
		}
		close(F);
	}elsif($INFO{'url'} !~ /^http:\/\//i && $INFO{'url'}){
		open(F,"+<dl-data/liste.dat");
		while(<F>){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($LISTEurl =~ /\Q$INFO{'url'}\E$/){
				$INFO{'url'} = $LISTEurl;
				last;
			}
		}
		close(F);
	}else{
		&error("Keine korrekte Internetadresse &uuml;bergeben.") if($INFO{'url'} eq "" or $INFO{'url'} =~ /^http/i && $INFO{'url'} !~ /^http:\/\//i);
	}

	$check_referer = 1;
	open(F,"<dl-data/block.dat");
	flock(F,2) if($flock);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		if($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$_|i){
			$check_referer = 0;
			last;
		}
	}
	close(F);
	&error("Diese Internet-Adresse ist gesperrt.") if($check_referer != 1);

	if($referer){
		$ENV{'HTTP_REFERER'} = "Unbekannt" if($ENV{'HTTP_REFERER'} !~ /^http:\/\//i);
		$auf = $ENV{'HTTP_REFERER'} || "Unbekannt";

		$noref = 1;
		open(F,"<dl-data/noref.dat");
		flock(F,2) if($flock);
		while(<F>){
			$_ =~ s/[\n\r]//g;
			if($auf =~ /\Q$_\E/i){
				$noref = 0;
			}
		}
		close(F);

		if($noref == 1){
			($suchwort) = ($auf =~ /(?:context=|searchfor=|domain=|as_epq|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|q2=|qs=|su=|gs=|q=|p=)([^&]*)(?:&|\?|$)/i);

			if($suchwortYES == 1 && $suchwort ne "" && $auf =~ /(?:context=|searchfor=|domain=|as_epq|epq=|qry=|keywords=|search=|query=|string=|keyword=|begriff=|name=|asq=|q2=|qs=|su=|gs=|q=|p=)([^&]*)(?:&|\?|$)/i){
				$suchwort = lc($suchwort);
				$suchwort =~ tr/+/ /;
				$suchwort =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
				$suchwort =~ s/[\n\r]//g;
				$suchwort =~ s/\s\s+//g;
				$suchwort =~ s/\s$//g;
				$suchwort =~ s/^\s//g;

				open(F,"+<dl-data/suchwort.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $suchwort && $aufyes ne 1){
							$one++;
							print F "$one\|$suchwort\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$suchwort\n" if($aufyes ne 1);
				}else{
					print F "1\|$suchwort\n";
				}
				close(F);
			}else{
				open(F,"+<dl-data/ref.dat");
				flock(F,2) if($flock);
				@auf = <F>;
				$zahl = $#auf+1;
				seek(F,0,0);
				truncate(F,0);
				if($zahl >= 1){
					foreach (@auf){
						s/[\n\r]//g;
						($one,$two) = split(/\|/);

						if($two eq $auf && $aufyes ne 1){
							$one++;
							print F "$one\|$auf\n";
							$aufyes = 1;
						}else{
							print F "$one\|$two\n";
						}
					}
					print F "1\|$auf\n" if($aufyes ne 1);
				}else{
					print F "1\|$auf\n";
				}
				close(F);
			}
		}
	}

	open(F,"+<dl-data/liste.dat");
	flock(F,2);
	@liste = <F>;
	seek(F,0,0);
	truncate(F,0);
	$liste[0] =~ s/[\n\r]//g;
	($test,$test2) = split(/\|/,$liste[0],2);

	($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
	$hour -= 1;

	open(W,"<dl-data/limit.dat");
	flock(W,2) if($flock);
	($OLDstundenlimit,$OLDhour,$OLDtageslimit,$OLDday) = split(/\|/,(<W>)[0]);
	close(W);

	$idnummer = 1;
	$new = "1";
	if($test2 eq "" && $test eq "" && $NEWnoadmin && $INFO{'url'} =~ /^http:\/\//i or $liste[0] eq "" && $NEWnoadmin && $INFO{'url'} =~ /^http:\/\//i){
		print F "1\|$INFO{'url'}\|\|\|1\n";
		$new = "0";
	}else{
		foreach (@liste){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($LISTEurl eq $INFO{'url'} && $LISTEurl ne ""){
				if($LISTEmaxdl && $LISTEmaxdl > $LISTEzahl or !$LISTEmaxdl){
					$maxbytes = $LISTEfilesize;
					if($trafficstunde){
						$maxbytes1 = $maxbytes + $OLDstundenlimit;
						if($OLDhour eq $hour){
							$stundeerreicht = 1 if($maxbytes1 > $trafficstunde);
						}
					}

					if($traffictag){
						$maxbytes3 = $maxbytes + $OLDtageslimit;
						if($OLDday eq $mday){
							$tagerreicht = 1 if($maxbytes3 > $traffictag);
						}
					}

					if(!$tagerreicht && !$stundeerreicht){
						++$LISTEzahl;
					}
					print F "$LISTEzahl\|$LISTEurl\|$LISTEfilesize\|$LISTEmaxdl\|$LISTEid\n";
				}else{
					$downloadlimit = 1;
				}
				$new = "0";
			}elsif($LISTEurl ne $INFO{'url'} && $LISTEurl ne ""){
				print F "$LISTEzahl\|$LISTEurl\|$LISTEfilesize\|$LISTEmaxdl\|$LISTEid\n";
			}
			if($idnummer < $LISTEid){
				$idnummer = $LISTEid;
			}
		}
	}
	if($new == 1 && $NEWnoadmin && $INFO{'url'} =~ /^http:\/\//i){
		$idnummer++;
		print F "1\|$INFO{'url'}\|\|\|$idnummer\n";
		$new = "0";
	}
	close(F);
	&error("Die maximale Anzahl an Downloads wurde erreicht.") if($downloadlimit);

	unless($new){
		if($trafficstunde or $traffictag){
			open(F,"+<dl-data/limit.dat");
			flock(F,2) if($flock);
			($OLDstundenlimit,$OLDhour,$OLDtageslimit,$OLDday) = split(/\|/,(<F>)[0]);
			seek(F,0,0);
			truncate(F,0);
			if($trafficstunde){
				if($OLDhour ne $hour){
					print F "$maxbytes\|$hour\|";
				}else{
					if(!$stundeerreicht){
						$maxbytes1 = $maxbytes + $OLDstundenlimit;
						print F "$maxbytes1\|$hour\|";
					}else{
						print F "$OLDstundenlimit\|$hour\|";
					}
				}
			}else{
				print F "0\|$hour\|";
			}

			if($traffictag){
				if($OLDday ne $mday){
					print F "$maxbytes\|$mday\|";
				}else{
					if(!$tagerreicht){
						$maxbytes3 = $maxbytes + $OLDtageslimit;
						print F "$maxbytes3\|$mday\|";
					}else{
						print F "$OLDtageslimit\|$mday\|";
					}
				}
			}else{
				print F "0\|$mday\|";
			}
			close(F);
		}

		if(!$tagerreicht && !$stundeerreicht){
			print "Location: $INFO{'url'}\n\n";
		}else{
			if($tagerreicht){
				&error("Tageslimit vom Download erreicht.");
			}else{
				&error("Stundenlimit vom Download erreicht.");
			}
		}
	}else{
		&error("Die Downloadadresse existiert nicht in der Datenbank.");
	}
	exit;
}

sub version {
	print "Content-Type: text/html\n\n";
	print $version;
	exit;
}

sub anzeige {
	if($INFO{'url'} =~ /^\d+$/){
		open(F,"+<dl-data/liste.dat");
		while(<F>){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($LISTEid eq $INFO{'url'}){
				$INFO{'url'} = $LISTEurl;
				last;
			}
		}
		close(F);
	}elsif($INFO{'url'} !~ /^http:\/\//i){
		open(F,"+<dl-data/liste.dat");
		while(<F>){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($LISTEurl =~ /\Q$INFO{'url'}\E$/){
				$INFO{'url'} = $LISTEurl;
				last;
			}
		}
		close(F);
	}else{
		&error("Keine korrekte Internetadresse &uuml;bergeben.") if($INFO{'url'} eq "" or $INFO{'url'} =~ /^http/i && $INFO{'url'} !~ /^http:\/\//i);
	}

	open(F,"<dl-data/liste.dat");
	flock(F,2);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		($anzahl,$wert,$rest) = split(/\|/,$_);
		if($wert eq $INFO{'url'}){
			$ausgabe = $anzahl;
			last;
		}
	}
	close(F);
	$ausgabe = "0" unless($ausgabe);

	print "Content-type: text/html\n\n";
	if($INFO{'js'} eq "1"){
		print "document.write('$ausgabe')";exit;
	}else{
		print $ausgabe;exit;
	}
}

sub anzeigeall {
	open(F,"<dl-data/liste.dat");
	flock(F,2);
	while(<F>){
		$_ =~ s/[\n\r]//g;
		my($anzahl) = (split(/\|/,$_))[0];
		$gesamtdl += $anzahl;
	}
	close(F);
	$gesamtdl = "0" unless($gesamtdl);

	print "Content-type: text/html\n\n";
	if($INFO{'js'} eq "1"){
		print "document.write('$gesamtdl')";exit;
	}else{
		print $gesamtdl;exit;
	}
}

sub top {
	$zaehler = "1";
	open(F,"<dl-data/liste.dat");
	flock(F,2);
	if($LISTsort == 1){# Nach Dateiname A-Z
		@liste = (sort {(split(/\//,(split(/\|/,$a))[1]))[-1] cmp (split(/\//,(split(/\|/,$b))[1]))[-1]} (<F>));
	}elsif($LISTsort == 2){# Nach Dateiname Z-A
		@liste = (sort {(split(/\//,(split(/\|/,$b))[1]))[-1] cmp (split(/\//,(split(/\|/,$a))[1]))[-1]} (<F>));
	}elsif($LISTsort == 3){# Alphabetische nach Url A-Z
		@liste = sort {(split(/\|/,$a))[1] cmp (split(/\|/,$b))[1]} <F>;
	}elsif($LISTsort == 4){# Alphabetische nach Url Z-A
		@liste = sort {(split(/\|/,$b))[1] cmp (split(/\|/,$a))[1]} <F>;
	}elsif($LISTsort == 5){# Nach Downloads 9-0
		@liste = (sort {$a <=> $b} (<F>));
	}else{# Nach Downloads 0-9
		@liste = (sort {$b <=> $a} (<F>));
	}
	close(F);
	$maxdisplay = "25" unless($maxdisplay);

	$zahl = $#liste+1;

	$nv = 1;
	$start = $INFO{'start'} || 0;
	$start = $start > $zahl ? $zahl : $start;
	$start = (sprintf("%.0f",$start / $maxdisplay)) * $maxdisplay;

	if($start >= (4 * $maxdisplay)){
		$startp = $start - (4 * $maxdisplay);
		$nv = (sprintf("%.0f",$startp / $maxdisplay)) + 1;
	}
	if($zahl >= $start + (5 * $maxdisplay)){
		$end = $start + (5 * $maxdisplay);
	}else{
		$end = $zahl;
	}
	if($startp > 0){
		$pages = qq~<a href="$cgi\&action=top&start=0">1</a>&nbsp;...&nbsp;~;
	}
	if($startp == $maxdisplay){
		$pages = qq~<a href="$cgi\&action=top&start=0">1</a>&nbsp;~;
	}

	for($ns = $startp; $ns < $end; $ns += $maxdisplay){
		$pages .= $start == $ns ? qq~<b>$nv</b>&nbsp;~ : qq~<a href="$cgi\&action=top&start=$ns">$nv</a>&nbsp;~;
		$nv++;
	}
	if($end < ($zahl - $maxdisplay)){
		$lastpn = int(($zahl / $maxdisplay) + 0.9);
		$lastptn = int($lastpn - 0.9) * $maxdisplay;
		$page = qq~&nbsp;...&nbsp;~;
		$page .= qq~&nbsp;<a href="$cgi\&action=top&start=$lastptn">$lastpn</a>~;
	}
	$pages .= $page;

        if($nv == 1 or $nv == 2){
                $pages =" &lt;&lt; &nbsp;1&nbsp; &gt;&gt;";
        }else{
                $x=($start/$maxdisplay)+1;
                $xs=$start+$maxdisplay;
                $xs2=$start-$maxdisplay;

                if($x<($nv-1)){
                        if($x>1){
                                $pages=qq~<a href="$cgi\&action=top&start=$xs2">&lt;&lt;</a> &nbsp;$pages~;
                        }else{
                                $pages="&nbsp;$pages";
                        }
                        $pages .=qq~&nbsp;<a href="$cgi\&action=top&start=$xs">&gt;&gt;</a> ~;
                }else{
                        if($x>1){
                                $pages=qq~<a href="$cgi\&action=top&start=$xs2">&lt;&lt;</a> &nbsp;$pages~;
                        }else{
                                $pages="&nbsp;$pages";
                        }
                        $pages .=" &nbsp;";
                }
        }
        $pages =~ s/&nbsp;&nbsp;/&nbsp;/g;

	open(T,"<dl-data/dl.html");
	flock(T,2);
	($split,$split2,$split3) = split(/<!-- SPLIT -->/,join("",<T>));
	close(T);

	if($INFO{'zahl'} =~ /^\d+$/){
		for ($i=0;$i<@liste;$i++){
			$liste[$i] =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$liste[$i]);
			$gesamtall += $LISTEzahl;

			$url = $LISTEurl;
			$url = (split(/\//,$LISTEurl))[-1] if($daten == 1);

			if(length($url) > 80 && $url =~ /^http:\/\/([^"]*)$/i){
				$url =~ s/^(.{40})(.+?)(.{40})$/$1\.\.\.$3/g;
			}

			$i2 = $split2;
			$i2 =~ s/<_wert>/$LISTEzahl/g;
			$i2 =~ s/<_wert2>/$LISTEurl/g;
			$i2 =~ s/<_hits>/$LISTEzahl/g;
			$i2 =~ s/<_url>/$LISTEurl/g;
			$i2 =~ s/<_id>/$LISTEid/g;
			$i2 =~ s/<_maxdl>/$LISTEmaxdl/g;
			$i2 =~ s/<_filesize>/$LISTEfilesize/g;
			$i2 =~ s/<_zaehler>/$i+1/eg;
			$i2 =~ s/<_url3>/$url/g;
			$ausgabe2 .= $i2;

			last if(($i+1) >= ($INFO{'zahl'}));
		}
		$split .= $ausgabe2 . $split3;
		$split =~ s/<_zaehler>/$INFO{'zahl'}/g;
		$split =~ s/<_pages>//g;
	}else{
		for ($i=$start;$i<@liste;$i++){
			$liste[$i] =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$liste[$i]);
			$gesamtall += $LISTEzahl;

			$url = $LISTEurl;
			$url = (split(/\//,$LISTEurl))[-1] if($daten == 1);

			if(length($url) > 80 && $url =~ /^http:\/\/([^"]*)$/i){
				$url =~ s/^(.{40})(.+?)(.{40})$/$1\.\.\.$3/g;
			}

			$i2 = $split2;
			$i2 =~ s/<_wert>/$LISTEzahl/g;
			$i2 =~ s/<_wert2>/$LISTEurl/g;
			$i2 =~ s/<_hits>/$LISTEzahl/g;
			$i2 =~ s/<_url>/$LISTEurl/g;
			$i2 =~ s/<_id>/$LISTEid/g;
			$i2 =~ s/<_maxdl>/$LISTEmaxdl/g;
			$i2 =~ s/<_filesize>/$LISTEfilesize/g;
			$i2 =~ s/<_zaehler>/$i+1/eg;
			$i2 =~ s/<_url3>/$url/g;
			$ausgabe2 .= $i2;

			last if(($i+1) >= ($maxdisplay+$start));
		}
		$split .= $ausgabe2 . $split3;
		$split =~ s/<_zaehler>/$#liste+1/eg;
		$split =~ s/<_pages>/$pages/g;
	}
	$split =~ s/__gesamtside__/$gesamtall/g;

	$split =~ s/__stundegesamtMB__/filesizename($trafficstunde)/eg;
	$split =~ s/__taggesamtMB__/filesizename($traffictag)/eg;

	if($trafficstunde or $traffictag){
		($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
		$hour -= 1;

		open(F,"<dl-data/limit.dat");
		flock(F,2) if($flock);
		($OLDstundenlimit,$OLDhour,$OLDtageslimit,$OLDday) = split(/\|/,(<F>)[0]);
		close(F);
		if($OLDstundenlimit && $OLDhour eq $hour){
			$stundefreiMB = $trafficstunde - $OLDstundenlimit;
			$split =~ s/__stundefreiMB__/filesizename($stundefreiMB)/eg;
		}else{
			$split =~ s/__stundefreiMB__/filesizename($trafficstunde)/eg;
		}
		if($OLDtageslimit && $mday eq $OLDday){
			$tagfreiMB = $traffictag - $OLDtageslimit;
			$split =~ s/__tagfreiMB__/filesizename($tagfreiMB)/eg;
		}else{
			$split =~ s/__tagfreiMB__/filesizename($traffictag)/eg;
		}
		if($trafficstunde){
			$split =~ s/<!-- STUNDE -->(.+?)<!-- STUNDE -->/$1/sg;
		}else{
			$split =~ s/<!-- STUNDE -->(.+?)<!-- STUNDE -->//sg;
		}
		if($traffictag){
			$split =~ s/<!-- TAG -->(.+?)<!-- TAG -->/$1/sg;
		}else{
			$split =~ s/<!-- TAG -->(.+?)<!-- TAG -->//sg;
		}
	}else{
		$split =~ s/<!-- STUNDE -->(.+?)<!-- STUNDE -->//sg;
		$split =~ s/<!-- TAG -->(.+?)<!-- TAG -->//sg;
	}

	&ausgabe($split);
}

sub error {
	local($e) = @_;

	open(T,"<dl-data/error.html");
	flock(T,2);
	$html = join("",<T>);
	close(T);
	$html =~ s/<_e>/$e/g;

	&ausgabe($html);
}

sub config {
	open(T,"<dl-data/admin.html");
	flock(T,2);
	$html = join("",<T>);
	close(T);

	&ausgabe($html);
}

sub config2 {
	$pass = $FORM{'pass'} || $INFO{'pass'};
	$sid = $INFO{'sid'} || $FORM{'sid'};
	&error("Falsches Passwort.") if($pass ne $passwort && $sid eq "");

	open(F,"+<dl-data/session.dat");
	flock(F,2) if($flock);
	@session = <F>;
	seek(F,0,0);
	truncate(F,0);
	foreach(@session){
		s/[\n\r]//g;
		($SESSIONkey,$SESSIONtime,$SESSIONip) = split(/\|/);
		if($Times < ($SESSIONtime+1800)){
			if($ENV{'REMOTE_ADDR'} eq $SESSIONip && $SESSIONkey eq $sid){
				$ySESSIONkey = $SESSIONkey;
				$ySESSIONtime = $Times;
				$ySESSIONip = $SESSIONip;
				print F "$SESSIONkey\|$Times\|$SESSIONip\|\n";
				$yes = 1;
			}else{
				print F $_ . "\n";
			}
		}
	}
	if($yes eq "" && $pass eq $passwort){
		@random = (0..9, 'A'..'Z', 'a'..'z');
		$ySESSIONkey .= $random[rand 62] while (length($ySESSIONkey) < 33);

		print F "$ySESSIONkey\|$Times\|$ENV{'REMOTE_ADDR'}\|\n";
		$yes = 1;
	}
	close(F);
	&error("Keine g&uuml;ltige Session gefunden.") unless($yes);
	$sid = $ySESSIONkey;

	open(T,"<dl-data/admin2.html");
	flock(T,2);
	$temp = join("",<T>);
	close(T);

	$m = "Keine";
	if($INFO{'m'} == 1){$m = "URL wurde erfolgreich Eingetragen";
	}elsif($INFO{'m'} == 2){$m = "URL wurde nicht erfolgreich Eingetragen";
	}elsif($INFO{'m'} == 3){$m = "Generelle Einstellungen erfolgreich gespeichert.";
	}elsif($INFO{'m'} == 7){$m = "Diese Downloadadresse ist bereits in der Liste vorhanden.";}
	if($gzip == 1){
		$gzip2 = "checked";
	}else{
		$gzip3 = "checked";
	}
	$temp =~ s/__gzip__/$gzip2/g;
	$temp =~ s/__gzip2__/$gzip3/g;

	if($NEWnoadmin == 1){
		$NEWnoadmin2 = "checked";
	}else{
		$NEWnoadmin3 = "checked";
	}
	$temp =~ s/<_links>/$NEWnoadmin2/g;
	$temp =~ s/<_links2>/$NEWnoadmin3/g;

	$temp =~ s/__herkunftseite__/$herkunftseite/g;
	$temp =~ s/__suchwortseite__/$suchwortseite/g;
	$temp =~ s/__maxdisplay__/$maxdisplay2/g;
	if($referer == 1){
		$referer2 = "checked";
	}else{
		$referer3 = "checked";
	}
	$temp =~ s/__referer__/$referer2/g;
	$temp =~ s/__referer2__/$referer3/g;
	$temp =~ s/<_m>/$m/g;
	$temp =~ s/<_pass>/$passwort/g;
	$temp =~ s/<_anzahl>/$maxdisplay/g;
	$temp =~ s/<_anzahl>/$maxdisplay/g;

	if($LISTsort == 5){
		$LISTsortx5 = "checked";
	}elsif($LISTsort == 4){
		$LISTsortx4 = "checked";
	}elsif($LISTsort == 3){
		$LISTsortx3 = "checked";
	}elsif($LISTsort == 2){
		$LISTsortx2 = "checked";
	}elsif($LISTsort == 1){
		$LISTsortx1 = "checked";
	}else{
		$LISTsortx = "checked";
	}

	$temp =~ s/<_listsort1>/$LISTsortx1/g;
	$temp =~ s/<_listsort2>/$LISTsortx2/g;
	$temp =~ s/<_listsort3>/$LISTsortx3/g;
	$temp =~ s/<_listsort4>/$LISTsortx4/g;
	$temp =~ s/<_listsort5>/$LISTsortx5/g;
	$temp =~ s/<_listsort>/$LISTsortx/g;

	$temp =~ s/<_traffictag>/int($traffictag \/ 1024)/eg;
	$temp =~ s/<_trafficstunde>/int($trafficstunde \/ 1024)/eg;
	$temp =~ s/__version__/$version/g;
	$temp =~ s/(<_sid>|__sid__)/$sid/g;

	open(F,"<dl-data/block.dat");
	flock(F,2);
	$block = join("",<F>);
	close(F);
	$temp =~ s/__block__/$block/g;

	open(F,"<dl-data/noref.dat");
	flock(F,2);
	$noref = join("",<F>);
	close(F);
	$temp =~ s/__inetreferer__/$noref/g;

	if($daten == 1){
		$art = "checked";
	}else{
		$art2 = "checked";
	}
	$temp =~ s/<_art>/$art/g;
	$temp =~ s/<_art2>/$art2/g;

	&ausgabe($temp);
}

sub config3 {
	&sid;
	$FORM{'gzip'} =~ s/[^\d]//g;
	$FORM{'herkunftseite'} =~ s/[^\d]//g;
	$FORM{'suchwortseite'} =~ s/[^\d]//g;
	$FORM{'referer'} =~ s/[^\d]//g;
	$FORM{'links'} =~ s/[^\d]//g;
	$FORM{'trafficstunde'} =~ s/[^\d]//g;
	$FORM{'traffictag'} =~ s/[^\d]//g;
	$FORM{'listsort'} =~ s/[^\d]//g;
	$FORM{'traffictag'} *= 1024;
	$FORM{'trafficstunde'} *= 1024;

	open(F,">dl-data/set.cgi");
	flock(F,2);
	print F qq~\$NEWnoadmin = '$FORM{'links'}';\n
\$referer = '$FORM{'referer'}';\n
\$trafficstunde = '$FORM{'trafficstunde'}';\n
\$traffictag = '$FORM{'traffictag'}';\n
\$maxdisplay2 = '$FORM{'maxdisplay'}';\n
\$herkunftseite = '$FORM{'herkunftseite'}';\n
\$suchwortseite = '$FORM{'suchwortseite'}';\n
\$gzip = '$FORM{'gzip'}';\n
\$daten = '$FORM{'art'}';\n
\$LISTsort = '$FORM{'listsort'}';\n
\$passwort = '$FORM{'passwort'}';\n
\$maxdisplay = '$FORM{'anzahl'}';\n
1;~;
	close(F);

	open(F,">dl-data/noref.dat");
	flock(F,2) if($flock);
	print F $FORM{'inetreferer'};
	close(F);

	open(F,">dl-data/block.dat");
	flock(F,2) if($flock);
	print F $FORM{'block'};
	close(F);

	if($FORM{'limitdel'} == 1){
		open(F,">dl-data/limit.dat");
		flock(F,2) if($flock);
		print F "";
		close(F);
	}

	print "Location: $cgi\&action=config2&sid=$sid&m=3\n\n";exit;
}

sub adminherkunft {
	&sid;

	open(F,"<dl-data/adminref.html");
	flock(F,2) if($flock);
	$split = join("",<F>);
	close(F);
	($split2) = ($split =~ /<!--1(.+?)1-->/s);
	($split3) = ($split =~ /<!--2(.+?)2-->/s);

	$herkunftseite = "100" unless($herkunftseite);
	$suchwortseite = "100" unless($suchwortseite);

	open(F,"<dl-data/ref.dat");
	flock(F,2) if($flock);
	@auf = sort{ $b <=> $a } <F>;
	close(F);
	$zahl = $#auf+1;

	$nv = 1;
	$start = $INFO{'start'} || 0;
	$start = $start > $zahl ? $zahl : $start;
	$start = (sprintf("%.0f",$start / $herkunftseite)) * $herkunftseite;

	if($start >= (4 * $herkunftseite)){
		$startp = $start - (4 * $herkunftseite);
		$nv = (sprintf("%.0f",$startp / $herkunftseite)) + 1;
	}
	if($zahl >= $start + (5 * $herkunftseite)){
		$end = $start + (5 * $herkunftseite);
	}else{
		$end = $zahl;
	}
	if($startp > 0){
		$pages = qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=0">1</a>&nbsp;...&nbsp;~;
	}
	if($startp == $herkunftseite){
		$pages = qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=0">1</a>&nbsp;~;
	}

	for($ns = $startp; $ns < $end; $ns += $herkunftseite){
		$pages .= $start == $ns ? qq~<b>$nv</b>&nbsp;~ : qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=$ns">$nv</a>&nbsp;~;
		$nv++;
	}
	if($end < ($zahl - $herkunftseite)){
		$lastpn = int(($zahl / $herkunftseite) + 0.9);
		$lastptn = int($lastpn - 0.9) * $herkunftseite;
		$page = qq~&nbsp;...&nbsp;~;
		$page .= qq~&nbsp;<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=$lastptn">$lastpn</a>~;
	}
	$pages .= $page;

        if($nv == 1 or $nv == 2){
                $pages =" &lt;&lt; &nbsp;1&nbsp; &gt;&gt;";
        }else{
                $x=($start/$herkunftseite)+1;
                $xs=$start+$herkunftseite;
                $xs2=$start-$herkunftseite;

                if($x<($nv-1)){
                        if($x>1){
                                $pages=qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=$xs2">&lt;&lt;</a> &nbsp;$pages~;
                        }else{
                                $pages="&nbsp;$pages";
                        }
                        $pages .=qq~&nbsp;<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=$xs">&gt;&gt;</a> ~;
                }else{
                        if($x>1){
                                $pages=qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start2=$INFO{'start2'}&start=$xs2">&lt;&lt;</a> &nbsp;$pages~;
                        }else{
                                $pages="&nbsp;$pages";
                        }
                        $pages .=" &nbsp;";
                }
        }
        $pages =~ s/&nbsp;&nbsp;/&nbsp;/g;

	foreach (@auf){
		$_ =~ s/[\n\r]//g;
		($zx,$zy) = split(/\|/,$_);

		$gesamt += $zx;
		$links++;
	}

        for($x=$start;$x<@auf;$x++){
		$auf[$x] =~ s/[\n\r]//g;
		($zx,$zy) = split(/\|/,$auf[$x]);

		$zy2 = $zy;
		$plus = $split2;
		$plus =~ s/__zahl__/$zx/g;
		if(length($zy2) > 80){
			$zy2 =~ s/^(.{40})(.+?)(.{40})$/$1\.\.\.$3/g;
		}
		$plus =~ s/__url__/$zy2/g;
		if($zy2 =~ /^http:\/\//){
			$plus =~ s/__url2__/$zy/g;
		}else{
			$plus =~ s/__url2__/#/g;
		}
		$plus =~ s/__x__/$x/g;
		$rest .= $plus;

		last if(($x+1) >= ($herkunftseite+$start));
	}
	$split =~ s/<!--1(.+?)1-->/$rest/isg;

	open(F,"<dl-data/suchwort.dat");
	flock(F,2) if($flock);
	@auf = sort{ $b <=> $a } <F>;
	close(F);
	$zahl = $#auf+1;

	$nv = 1;
	$start = $INFO{'start2'} || 0;
	$start = $start > $zahl ? $zahl : $start;
	$start = (sprintf("%.0f",$start / $suchwortseite)) * $suchwortseite;

	if($start >= (4 * $suchwortseite)){
		$startp = $start - (4 * $suchwortseite);
		$nv = (sprintf("%.0f",$startp / $suchwortseite)) + 1;
	}
	if($zahl >= $start + (5 * $suchwortseite)){
		$end = $start + (5 * $suchwortseite);
	}else{
		$end = $zahl;
	}
	if($startp > 0){
		$pages2 = qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=0">1</a>&nbsp;...&nbsp;~;
	}
	if($startp == $suchwortseite){
		$pages2 = qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=0">1</a>&nbsp;~;
	}

	for($ns = $startp; $ns < $end; $ns += $suchwortseite){
		$pages2 .= $start == $ns ? qq~<b>$nv</b>&nbsp;~ : qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=$ns">$nv</a>&nbsp;~;
		$nv++;
	}
	if($end < ($zahl - $suchwortseite)){
		$lastpn = int(($zahl / $suchwortseite) + 0.9);
		$lastptn = int($lastpn - 0.9) * $suchwortseite;
		$page = qq~&nbsp;...&nbsp;~;
		$page .= qq~&nbsp;<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=$lastptn">$lastpn</a>~;
	}
	$pages2 .= $page;

        if($nv == 1 or $nv == 2){
                $pages2 =" &lt;&lt; &nbsp;1&nbsp; &gt;&gt;";
        }else{
                $x=($start/$suchwortseite)+1;
                $xs=$start+$suchwortseite;
                $xs2=$start-$suchwortseite;

                if($x<($nv-1)){
                        if($x>1){
                                $pages2=qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=$xs2">&lt;&lt;</a> &nbsp;$pages2~;
                        }else{
                                $pages2="&nbsp;$pages2";
                        }
                        $pages2 .=qq~&nbsp;<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=$xs">&gt;&gt;</a> ~;
                }else{
                        if($x>1){
                                $pages2=qq~<a href="download.cgi?action=adminherkunft&sid=$sid&start=$INFO{'start'}&start2=$xs2">&lt;&lt;</a> &nbsp;$pages2~;
                        }else{
                                $pages2="&nbsp;$pages2";
                        }
                        $pages2 .=" &nbsp;";
                }
        }
        $pages2 =~ s/&nbsp;&nbsp;/&nbsp;/g;

	foreach (@auf){
		$_ =~ s/[\n\r]//g;
		($zx,$zy) = split(/\|/,$_);

		$gesamt2 += $zx;
		$links2++;
	}

        for($x=$start;$x<@auf;$x++){
		$auf[$x] =~ s/[\n\r]//g;
		($zx,$zy) = split(/\|/,$auf[$x]);

		$zy2 = $zy;
		$plus = $split3;
		$plus =~ s/__zahl__/$zx/g;
#		if(length($zy2) > 80){
#			$zy2 =~ s/^(.{40})(.+?)(.{40})$/$1\.\.\.$3/g;
#		}
		$plus =~ s/__url__/$zy2/g;
		if($zy2 =~ /^http:\/\//i){
			$plus =~ s/__url2__/$zy/g;
		}else{
			$plus =~ s/__url2__/#/g;
		}
		$plus =~ s/__x__/$x/g;
		$rest2 .= $plus;

		last if(($x+1) >= ($suchwortseite+$start));
	}
	$split =~ s/<!--2(.+?)2-->/$rest2/isg;
	$temp = $split;

	$m  = "Keine";
	if($INFO{'m'} eq "reset"){$m = "Die Statistik \"Aufrufe\" wurde gel&ouml;scht.";}
	elsif($INFO{'m'} eq "reset2"){$m = "Die Statistik \"Suchw&ouml;rter\" wurde gel&ouml;scht.";}
	elsif($INFO{'m'} eq "reset3"){$m = "Der Eintrag wurde gel&ouml;scht.";}
	$temp =~ s/(__m__|<_m>)/$m/g;
	$temp =~ s/__code__//g;
	$temp =~ s/(<_sid>|__sid__)/$ySESSIONkey/g;
	$temp =~ s/__url__/$url/g;
	$temp =~ s/__version__/$version/g;
	$temp =~ s/__pass__/$passwort/g;
	$temp =~ s~__pages__~$pages~g;
	$temp =~ s~__pages2__~$pages2~g;
	$temp =~ s~__links__~$links~g;
	$temp =~ s~__gesamt__~$gesamt~g;
	$temp =~ s~__suchwort__~$links2~g;
	$temp =~ s~__suchwoerter__~$gesamt2~g;

	&ausgabe($temp);
}

sub adminentry {
	&sid;

	open(F,"<dl-data/adminentry.html");
	flock(F,2) if($flock);
	($temp,$temp2,$temp3) = split(/<!-- SPLIT -->/,join("",<F>));
	close(F);

	open(F,"<dl-data/liste.dat");
	flock(F,2);
	@liste = <F>;
	close(F);
	$zahl = $#liste+1;
	$maxdisplay2 = "25" unless($maxdisplay2);

	$nv = 1;
	$start = $INFO{'start'} || 0;
	$start = $start > $zahl ? $zahl : $start;
	$start = (sprintf("%.0f",$start / $maxdisplay2)) * $maxdisplay2;

	if($start >= (4 * $maxdisplay2)){
		$startp = $start - (4 * v);
		$nv = (sprintf("%.0f",$startp / $maxdisplay2)) + 1;
	}
	if($zahl >= $start + (5 * $maxdisplay2)){
		$end = $start + (5 * $maxdisplay2);
	}else{
		$end = $zahl;
	}
	if($startp > 0){
		$pages2 = qq~<a href="download.cgi?action=adminentry&sid=$sid&start=0">1</a>&nbsp;...&nbsp;~;
	}
	if($startp == $maxdisplay2){
		$pages2 = qq~<a href="download.cgi?action=adminentry&sid=$sid&start=0">1</a>&nbsp;~;
	}

	for($ns = $startp; $ns < $end; $ns += $maxdisplay2){
		$pages2 .= $start == $ns ? qq~<b>$nv</b>&nbsp;~ : qq~<a href="download.cgi?action=adminentry&sid=$sid&start=$ns">$nv</a>&nbsp;~;
		$nv++;
	}
	if($end < ($zahl - $maxdisplay2)){
		$lastpn = int(($zahl / $maxdisplay2) + 0.9);
		$lastptn = int($lastpn - 0.9) * $maxdisplay2;
		$page = qq~&nbsp;...&nbsp;~;
		$page .= qq~&nbsp;<a href="download.cgi?action=adminentry&sid=$sid&start=$lastptn">$lastpn</a>~;
	}
	$pages2 .= $page;

        if($nv == 1 or $nv == 2){
                $pages2 =" &lt;&lt; &nbsp;1&nbsp; &gt;&gt;";
        }else{
                $x=($start/$maxdisplay2)+1;
                $xs=$start+$maxdisplay2;
                $xs2=$start-$maxdisplay2;

                if($x<($nv-1)){
                        if($x>1){
                                $pages2=qq~<a href="download.cgi?action=adminentry&sid=$sid&start=$xs2">&lt;&lt;</a> &nbsp;$pages2~;
                        }else{
                                $pages2="&nbsp;$pages2";
                        }
                        $pages2 .=qq~&nbsp;<a href="download.cgi?action=adminentry&sid=$sid&start=$xs">&gt;&gt;</a> ~;
                }else{
                        if($x>1){
                                $pages2=qq~<a href="download.cgi?action=adminentry&sid=$sid&start=$xs2">&lt;&lt;</a> &nbsp;$pages2~;
                        }else{
                                $pages2="&nbsp;$pages2";
                        }
                        $pages2 .=" &nbsp;";
                }
        }
        $pages2 =~ s/&nbsp;&nbsp;/&nbsp;/g;

        for($x=$start;$x<@liste;$x++){
		$liste[$x] =~ s/[\n\r]//g;
		my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$liste[$x]);
		$plus = $temp2;
		$plus =~ s/<_hits>/$LISTEzahl/g;
		$plus =~ s/<_url>/$LISTEurl/g;
		$plus =~ s/<_id>/$LISTEid/g;
		$plus =~ s/<_maxdl>/$LISTEmaxdl/g;
		$plus =~ s/<_filesize>/int($LISTEfilesize \/ 1024)/eg;
		$plus =~ s/<_hits>/$LISTEzahl/g;
		$plus =~ s/__hex__/unpack('H*',"$LISTEurl$LISTEid$LISTEfilesize")/eg;
		$rest .= $plus;

		last if(($x+1) >= ($maxdisplay2+$start));
	}

	$temp .= $rest . $temp3;
	$m  = "Keine";
	if($INFO{'m'} == 5){
		$m = "L&ouml;schung wurde erfolgreich ausgef&uuml;hrt.";
	}elsif($INFO{'m'} == 6){
		$m = "L&ouml;schung ist fehlgeschlagen.";
	}
	$temp =~ s/(__m__|<_m>)/$m/g;
	$temp =~ s/__code__//g;
	$temp =~ s/(<_sid>|__sid__)/$ySESSIONkey/g;
	$temp =~ s/__url__/$url/g;
	$temp =~ s/__pages__/$pages2/g;

	&ausgabe($temp);
}

sub adminentry2 {
	&sid;

	foreach (split(/\,/,$FORM{'del'})){
		$del{$_} = 1;
	}

	open(F,"+<dl-data/liste.dat");
	flock(F,2);
	@liste = <F>;
	seek(F,0,0);
	truncate(F,0);
	foreach (@liste){
		$_ =~ s/[\n\r]//g;
		my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
		my $hex = unpack('H*',"$LISTEurl$LISTEid$LISTEfilesize");
		next if($del{$LISTEurl});
		if($FORM{$hex.'url'}){
			$FORM{$hex.'filesize'} *= 1024;
			print F "$FORM{$hex.'hits'}\|$FORM{$hex.'url'}\|$FORM{$hex.'filesize'}\|$FORM{$hex.'maxdl'}\|$LISTEid\n";
		}else{
			print F $_ . "\n";
		}
	}
	close(F);

	print "Location: download.cgi?sid=$sid&action=adminentry\n\n";exit;
}

sub filesizename {
	local($e1) = @_;
	if($e1 < 1024){
		$e1 = "$e1 B";
	}elsif($e1 < (1024 * 1024)){
		$e1 = sprintf("%.0f",$e1 / 1024);
		$e1 = "$e1 KB";
	}elsif($e1 < (1024 * 1024 * 1024)){
		$e1 = sprintf("%.2f",$e1 / 1024 / 1024);
		$e1 = "$e1 MB";
	}elsif($e1 < (1024 * 1024 * 1024 * 1024)){
		$e1 = sprintf("%.2f",$e1 / 1024 / 1024 / 1024);
		$e1 = "$e1 GB";
	}elsif($e1 < (1024 * 1024 * 1024 * 1024 * 1024)){
		$e1 = sprintf("%.2f",$e1 / 1024 / 1024 / 1024 / 1024);
		$e1 = "$e1 TB";
	}else{
		$e1 = sprintf("%.2f",$e1 / 1024 / 1024 / 1024 / 1024 / 1024);
		$e1 = "$e1 PB";
	}
	return($e1);
}

sub configadd {
	&sid;
	$FORM{'filesize'} =~ s/[^\d]//g;
	$FORM{'trafficdl'} =~ s/[^\d]//g;

	my $yesx = undef;
	foreach my $oldnewurl (split(/\n/,$FORM{'url'})){
		$yesx = "";
		next unless($oldnewurl);
		my $idnummer = 0;
		open(F,"+<dl-data/liste.dat");
		flock(F,2);
		my @liste = <F>;
		seek(F,0,0);
		truncate(F,0);
		foreach (@liste){
			$_ =~ s/[\n\r]//g;
			my($LISTEzahl,$LISTEurl,$LISTEfilesize,$LISTEmaxdl,$LISTEid) = split(/\|/,$_);
			if($oldnewurl eq $LISTEurl){
				$yesx = 1;
			}
			if($idnummer < $LISTEid){
				$idnummer = $LISTEid;
			}
		}
		$idnummer++;

		$FORM{'filesize'} *= 1024;
		print F "0\|$oldnewurl\|$FORM{'filesize'}\|$FORM{'trafficdl'}\|$idnummer\n" unless($yesx);
		foreach (@liste){
			$_ =~ s/[\n\r]//g;
			print F "$_\n";
		}
		close(F);
	}

	if($yesx){
		print "Location: $cgi\&action=config2&sid=$sid&m=7\n\n";exit;
	}else{
		print "Location: $cgi\&action=config2&sid=$sid&m=1\n\n";exit;
	}
}

sub ausgabe {
	local($e) = @_;
	$e =~ s/<_cgi>/$cgi/g;

	$code="0a092465203d7e20737e3c2f5b62425d5b4f6f5d5b44645d5b59795d3e7e3c62723e3c62723e3c63656e7465723e3c7461626c6520626f726465723d2230222063656c6c73706163696e673d2231222063656c6c70616464696e673d2231223e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e3c623e446f776e6c6f61647363726970743c2f623e2c20762476657273696f6e3c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c74723e3c74643e3c63656e7465723e3c666f6e7420666163653d2256657264616e612c417269616c222073697a653d2232223e26636f70793b203c6120687265663d22687474703a2f2f7777772e636f6465722d776f726c642e646522207461726765743d225f626c616e6b223e3c623e436f6465722d576f726c642e64653c2f623e3c2f613e2c20323030312d32303039202853746566616e6f73293c2f666f6e743e3c2f63656e7465723e3c2f74643e3c2f74723e3c2f7461626c653e3c2f63656e7465723e3c2f626f64793e7e673b0a09696628246520217e202f3c5c2f626f64793e2f297b0a09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b0a09097072696e7420224b65696e20266c743b2f626f64792667743b20656e7468616c74656e21223b0a0909657869743b0a097d0a232323636f707972696768742323230a09424547494e207b0a09096576616c207b2024646965645f696e5f6576616c203d20313b207265717569726520436f6d70726573733a3a5a6c69623b207d3b0a090969662028244029207b0a090909247a6c6962203d20303b0a09097d656c73657b0a090909247a6c6962203d20313b0a090909696d706f727420436f6d70726573733a3a5a6c69623b0a09097d0a097d0a0a0969662824454e567b27485454505f4143434550545f454e434f44494e47277d203d7e202f28782d677a69707c677a6970292f2026262024454e567b275345525645525f50524f544f434f4c277d2065712022485454502f312e31222026262024677a6970203d3d2031297b0a09097072696e742022436f6e74656e742d456e636f64696e673a2024315c6e223b0a09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b0a090962696e6d6f6465205354444f55543b0a0909696628247a6c6962297b0a0909097072696e7420436f6d70726573733a3a5a6c69623a3a6d656d477a6970282465293b0a09097d656c73657b0a0909096f70656e28475a49502c20227c20677a6970202d6622293b0a09090962696e6d6f646528475a4950293b0a0909097072696e7420475a49502024653b0a090909636c6f736528475a4950293b0a09097d0a097d656c73657b0a09097072696e742022436f6e74656e742d547970653a20746578742f68746d6c5c6e5c6e223b0a09097072696e742024653b0a097d0a";$code =~ s/([a-fA-F0-9]{2})/pack("C", hex($1))/eg;eval $code;

	exit;
}


sub sid {
	$sid = $INFO{'sid'} || $FORM{'sid'};
	open(F,"+<dl-data/session.dat");
	flock(F,2) if($flock);
	@session = <F>;
	seek(F,0,0);
	truncate(F,0);
	foreach(@session){
		s/[\n\r]//g;
		($SESSIONkey,$SESSIONtime,$SESSIONip) = split(/\|/);
		if($Times < ($SESSIONtime+1800)){
			if($ENV{'REMOTE_ADDR'} eq $SESSIONip && $SESSIONkey eq $sid){
				$ySESSIONkey = $SESSIONkey;
				$ySESSIONtime = $Times;
				$ySESSIONip = $SESSIONip;
				print F "$SESSIONkey\|$Times\|$SESSIONip\|\n";
				$yes = 1;
			}else{
				print F $_ . "\n";
			}
		}
	}
	close(F);
	&error("Keine g&uuml;ltige Session gefunden.") unless($yes);
	$sid = $ySESSIONkey;
}

sub adminreset {
	&sid;

	open(F,">dl-data/ref.dat");
	print F "";
	close(F);

	print "Location: download.cgi?action=adminherkunft&sid=$sid&m=reset\n\n";exit;
}

sub adminreset2 {
	&sid;

	open(F,">dl-data/suchwort.dat");
	print F "";
	close(F);

	print "Location: download.cgi?action=adminherkunft&sid=$sid&m=reset2#down\n\n";exit;
}

sub adminreset3 {
	&sid;

	open(F,"+<dl-data/ref.dat");
	flock(F,2) if($flock);
	@dat = sort{ $b <=> $a } <F>;
	seek(F,0,0);
	truncate(F,0);
	for($i=0;$i<@dat;$i++){
		if($i ne $INFO{'line'}){
			print F $dat[$i];
		}
	}
	close(F);

	print "Location: download.cgi?action=adminherkunft&sid=$sid&m=reset3\n\n";exit;
}

sub adminreset4 {
	&sid;

	open(F,"+<dl-data/suchwort.dat");
	flock(F,2) if($flock);
	@dat = sort{ $b <=> $a } <F>;
	seek(F,0,0);
	truncate(F,0);
	for($i=0;$i<@dat;$i++){
		if($i ne $INFO{'line'}){
			print F $dat[$i];
		}
	}
	close(F);

	print "Location: download.cgi?action=adminherkunft&sid=$sid&m=reset3#down\n\n";exit;
}
