#!/usr/bin/perl
$| = 1;
#####################################
#                                   #
# RobBoard v1.0b                    #
# Copyright 1999 by Rob Eisler      #
# rob@robplanet.com                 #
# http://www.robplanet.com          #
#                                   #
# Last modified on Jun. 7, '99      #
#                                   #
#####################################
#
# Copyright Notice:
# Copyright 1999 Robert S. Eisler.  All Rights Reserved.
#
# This code may be used and modified by anyone so long as this header and
# copyright information remains intact.  By using this code you agree to 
# indemnify Robert S. Eisler from any liability that might arise from its 
# use.  You must obtain written consent before selling or redistributing 
# this code.
#
#####################################

# declare the variables

$boarddir = '/home/panther/public_html/vds';
$boardurl = 'http://www.toppoint.de/~panther/vds';
$cgi = 'http://www.toppoint.de/~panther/cgi-bin/vds/robboard.cgi';
$indexcgi = 'http://www.toppoint.de/~panther/cgi-bin/vds/index.cgi';
$queryswitch = '?';

$html = 1;   # 0 = remove all html, 1 = show html as text, 2 = show html as html
$datetype = 2;
$useban = 1;
$encrypt = 1;
$style = 0;
$threaded = 1;

$fontface = 'arial';
$fontsize = 2;
$tablecolor1 = 'black';
$tablecolor2 = 'white';
$tablecolor3 = 'white';
$fontcolor1 = 'white';
$fontcolor2 = 'black';
$fontcolor3 = 'black';

#########################################################################
# Don't change anything below here unless you know what you're doing :) #
#########################################################################

$datadir = "$boarddir/data";
$datafile = "$boarddir/data.txt";
$index_t = "$boarddir/index_t.html";
$page_t = "$boarddir/page_t.html";
$html_t = "$boarddir/html.html";
$thread_t = "$boarddir/thread_t.html";
$numfile = "$boarddir/number.txt";
$banfile = "$boarddir/ban.txt";
$pwdfile = "$boarddir/pwd.txt";
$pdefile = "$boarddir/pde15.txt";
$assfile = "$boarddir/ass.txt";
$bn2file = "$boarddir/ban2.txt";
$use_cgi = 1;
$LOCK_EX = 2;
$LOCK_UN = 8;

print "Content-type: text/html\n\n";

&get_date;
&readform;


&post if ($action eq 'post');
&display if ($action eq 'display');
&viewthread if ($action eq 'viewthread');
&admin if ($action eq 'admin');
&remove if ($action eq 'remove');
&remove2 if ($action eq 'remove2');
&ban if ($action eq 'ban');
&ban2 if ($action eq 'ban2');
&unban if ($action eq 'unban');
&unban2 if ($action eq 'unban2');
&password if ($action eq 'password');
&password2 if ($action eq 'password2');
&assban if ($action eq 'assban');
&assban2 if ($action eq 'assban2');
&htmlout if ($action eq 'htmlout');

&fatal_error("This page was called incorrectly. Try <a href=\"$indexcgi\">this</a> instead.");

sub post {

	&bancheck if ($useban == 1);

	$follow = $INFO{'follow'};

	$name = $FORM{'name'};
	$email = $FORM{'email'};
	$subject = $FORM{'subject'};
	$message = $FORM{'message'};

        $name =~ s/\n//g;
        $name =~ s/\r//g;

        $subject =~ s/\n//g;
        $subject =~ s/\r//g;

        &bbbcheck($message,"IP") if ($useban == 1);
        &rrrcheck($message) if ($useban == 1);
        &xxxcheck($message) if ($useban == 1);

	&post_error("von: muss ausgefuellt sein =niemand?") unless($name);
	&post_error("ueber: muss ausgefuellt sein") unless($subject);
	&post_error("Beitrag: muss ausgefuellt sein") unless($message);

	$name =~ s/`/\'/g;
	$email =~ s/`/\'/g;
	$message =~ s/`/\'/g;
	$subject =~ s/`/\'/g;
	$name =~ s/\&/\&amp;/g;
	$email =~ s/\&/\&amp;/g;
	$subject =~ s/\&/\&amp;/g;
	$message =~ s/\&/\&amp;/g;
	$name =~ s/"/\&quot;/g;
	$email =~ s/"/\&quot;/g;
	$subject =~ s/"/\&quot;/g;
	$message =~ s/"/\&quot;/g;
	$name =~ s/  / \&nbsp;/g;
	$email =~ s/  / \&nbsp;/g;
	$subject =~ s/  / \&nbsp;/g;
	$message =~ s/  / \&nbsp;/g;

        $mggt = 'claibra';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
	$mggt = 'harriett';
 	&post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'jtsfds';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'ClarkKent';
	&post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'megasex';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'viagra';
	&post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'VanDenn';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'Sillana';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'Gartman';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'Broxx';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'jonn';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'RaulDone';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'fan page';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'fanpage';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'DokInnogmaGom';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'gropourtaipax';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);

	if ($html == 0) {
		$name =~ s/<([^>]|\n)*>//g;
		$email =~ s/<([^>]|\n)*>//g;
		$subject =~ s/<([^>]|\n)*>//g;
		$message =~ s/<([^>]|\n)*>//g;
	}

	elsif ($html == 1) {

		$name =~ s/</&lt;/g;
		$name =~ s/>/&gt;/g;
		$email =~ s/</&lt;/g;
		$email =~ s/>/&gt;/g;
		$subject =~ s/</&lt;/g;
		$subject =~ s/>/&gt;/g;
		$message =~ s/</&lt;/g;
		$message =~ s/>/&gt;/g;

	}

	$message =~ s/\t/ \&nbsp; \&nbsp; \&nbsp;/g;
	$message =~ s/\n\n/<p>\n\n/g;
	$message =~ s/\n/<br>\n/g;
	$message =~ s/\cM//g;
	
        open (FAILE, "$numfile") || &fatal_error("Unable to open $numfile");
	&lock(FAILE);
	@info = <FAILE>;
	&unlock(FAILE);
	close (FAILE);

	($postnum,$chop) = split(/``/,$info[0]);
	$postnum++;

	open FIELE, ">", "$numfile" || &fatal_error("Unable to write to $numfile");
	&lock(FIELE);
	print FIELE "$postnum";
	print FIELE "``xx";
	&unlock(FIELE);
	close (FIELE);

	open (FILE, "$datafile") || &fatal_error("Unable to open $datafile");
	&lock(FILE);
	@messages = <FILE>;
	&unlock(FILE);
	close (FILE);

	open FILE, ">", "$datafile" || &fatal_error("Unable to write to $datafile");
	&lock(FILE);

	if ($follow eq 'no') {

		print FILE "$postnum``$subject``1``$name``$email``$date``$ENV{REMOTE_ADDR}``$ENV{HTTP_USER_AGENT}``xx\n";
		print FILE @messages;

	}

	else {

		$followto = $FORM{'followto'};
		$level = $FORM{'level'} + 1;

		for ($a = 0; $a < @messages; $a++) {

			($checknum,@junk) = split(/``/,$messages[$a]);

			print FILE "$messages[$a]";

			if ($checknum == $followto) {

				$level = $junk[1] + 1;
				print FILE "$postnum``$subject``$level``$name``$email``$date``$ENV{REMOTE_ADDR}``$ENV{HTTP_USER_AGENT}``xx\n";

			}

		}

	}

	&unlock(FILE);
	close(FILE);

	open(FILE, ">$datadir/$postnum\.txt") || &fatal_error("Unable to open $postnum\.txt");
	&lock(FILE);

	print FILE $message;

	&unlock(FILE);
	close (FILE);

        chmod 644 , "$datadir/$postnum\.txt";

	print "<html>\n";
	print "<head><title> geschafft! </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial><center>\n";
	print "<h3>Beitrag erfolgreich veroeffentlicht</h3>\n";

	print "<blockquote>\n";
	print "Dein Beitrag ueber <b>$subject</b> wurde veroeffentlicht.<p>\n";

	if ($style == 0) {

		print "<a href=\"$cgi$queryswitch";
		print "action=display\&num=$postnum\">lese Dein Beitrag</a><br>\n";
		print "<a href=\"$indexcgi\">zurueck zur Versammlung der Spieler</a><p>\n";

	} elsif ($threaded == 0) {

		print "<a href=\"$indexcgi\">zurueck zur Versammlung der Spieler</a><p>\n";

	} else {

		print "<a href=\"$cgi$queryswitch";
		print "action=viewthread\&num=$postnum\">lese in diesem  Beitrag weiter</a><br>\n";
		print "<a href=\"$indexcgi\">zurueck zur Versammlung der Spieler</a><p>\n";

	}

	print "</blockquote>\n";
	print "</center>";
	print "</font></body></html>\n";

	exit;

}

sub display {

	$viewnum = $INFO{'num'};
	$viewnum = int ( $viewnum );

	&fatal_error("This function has been called incorrectly. ( you weren't trying to hack this, were you? )") unless ($viewnum > 0);

	open (FILE, "$datafile") || &fatal_error("Unable to open $datafile");
	&lock(FILE);
	@messages = <FILE>;
	&unlock(FILE);
	close(FILE);

	for ($a = 0; $a < @messages; $a++) {

		($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]);

		if ($viewnum == $mnum[$a]) {
			$idnum = $a;
		}

	}

	open (FILE, "$datadir/$viewnum\.txt") || &fatal_error("Unable to open $viewnum\.txt");
	&lock(FILE);
	@body = <FILE>;
	&unlock(FILE);
	close(FILE);

	open (FILE, "$page_t") || &fatal_error("Unable to open $page_t");
	&lock(FILE);
	@template = <FILE>;
	&unlock(FILE);
	close(FILE);

	for ($a = 0; $a < @template; $a++) {

		$_ = $template[$a];

		if (/<!--message-->/) {

			print @body;

		}

		elsif (/<!--form-->/) {

			print "<form action=\"$cgi$queryswitch";
			print "action=post&follow=yes\" method=post>\n";

			print "<table border=0>\n";

			print "<tr><td align=right>von: </td>\n";
			print "<td><input type=text name=name size=80></td></tr>\n\n";

			print "<tr><td align=right>ueber: </td>\n";
			print "<td><input type=text name=subject size=80></td></tr>\n\n";

			print "<tr><td align=right valign=top>Beitrag: </td>\n";
			print "<td><textarea name=message rows=10 cols=80 wrap=virtual></textarea></td></tr>\n\n";

			print "<tr><td align=center colspan=2>";
			print "<input type=hidden name=followto value=$viewnum>\n";
			print "<input type=hidden name=level value=$mfollow[$idnum]>\n";
			print "<input type=submit value=\"diesen Beitrag veroeffentlichen\"> ";
			print "<input type=reset value=\"Formularinhalte loeschen\"></td></tr>\n";

			print "</table></form>\n\n";

		}

		elsif (/<!--followups-->/) {

			if ($mfollow[$idnum] >= $mfollow[$idnum+1]) {

				print "<center>keine weiteren Beitraege hierzu.</center>";

			}

			else {

				print "<ul>\n";

				$last = $mfollow[$idnum+1];

				for ($d = $idnum+1; $d < @messages; $d++) {

					if ($mfollow[$d] <= $mfollow[$idnum]) {
						$d = @messages;
						$count = $last - $mfollow[$idnum];
					}

					else {

						if ($mfollow[$d] > $last) {
							print "<ul>\n";
						}

						elsif ($mfollow[$d] < $last) {
							for ($e = 0; $e < $last - $mfollow[$d]; $e++) {
								print "</ul>\n";
							}	
						}


						print "<li>\n";
						print "<a href=\"$cgi$queryswitch";
						print "action=display\&num=$mnum[$d]\">$msub[$d]</a> ";
						print "- <b>$mname[$d]</b>, $mdate[$d]</li>\n";

					}

					$last = $mfollow[$d];

				}

				for ($b = 0; $b < $count; $b++) {

					print "</ul>\n";

				}

			}

		}

		elsif (/<!--subject-->/) {

			print "$msub[$idnum]\n";

		}

		elsif (/<!--mailto-->/) {

			print "$mname[$idnum]\n";

		}

		elsif (/<!--name-->/) {

			print "$mname[$idnum]\n";

		}

		elsif (/<!--email-->/) {

			print "$mname[$idnum]\n";

		}

		elsif (/<!--date-->/) {

			print "$mdate[$idnum]\n";

		}

		elsif (/<!--browser-->/) {

			print "$mbrowser[$idnum]\n";

		}

		elsif (/<!--ip-->/) {

			print "$mip[$idnum]\n";

		}

               elsif (/<!--footer-->/) {

                       open (FILE, "footer\.html") || &fatal_error("Unable  to open footer");
                        &lock(FILE);
                        @bddy = <FILE>;
                        &unlock(FILE);
                        close(FILE);

                        print "@bddy";
                }

               elsif (/<!--head1-->/) {

                       open (FILE, "head1\.html") || &fatal_error("Unable  to open head1");
                        &lock(FILE);
                        @bddy = <FILE>;
                        &unlock(FILE);
                        close(FILE);

                        print "@bddy";
                }
               elsif (/<!--head2-->/) {

                       open (FILE, "head2\.html") || &fatal_error("Unable  to open head2");
                        &lock(FILE);
                        @bddy = <FILE>;
                        &unlock(FILE);
                        close(FILE);

                        print "@bddy";
                }
               elsif (/<!--style-->/) {

                       open (FILE, "style\.html") || &fatal_error("Unable  to open style");
                        &lock(FILE);
                        @bddy = <FILE>;
                        &unlock(FILE);
                        close(FILE);

                        print "@bddy";
                }

		else {

			print "$_";

		}

	}

	exit;

}

sub viewthread {

	$viewnum = $INFO{'num'};
	$viewnum = int ( $viewnum );

	&fatal_error("This function has been called incorrectly. ( you weren't trying to hack this, were you? )") unless ($viewnum > 0);

	open (FILE, "$datafile") || &fatal_error("Unable to open $datafile");
	&lock(FILE);
	@messages = <FILE>;
	&unlock(FILE);
	close(FILE);

	for ($a = 0; $a < @messages; $a++) {

		($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]);

		if ($viewnum == $mnum[$a]) {
			$idnum = $a;
		}

	}

	while ($mfollow[$idnum] > 1) {
		$idnum--;
	}

	$depth = 1;
	$messcount = -1;

	for ($a = $idnum+1; $a < @messages; $a++) {

		if ($mfollow[$a] == 1) {

			$messcount = $a - $idnum;
			$a = @messages;

		} elsif ($mfollow[$a] > $depth) {

			$depth = $mfollow[$a];

		}

	}

	$messcount = @messages - $idnum if ($messcount == -1);
	
	open (FILE, "$thread_t") || &fatal_error("Unable to open $thread_t");
	&lock(FILE);
	@template = <FILE>;
	&unlock(FILE);
	close(FILE);

	for ($a = 0; $a < @template; $a++) {

		$_ = $template[$a];

		if (/<!--message-->/) {

			print "<table border=0 cellpadding=2>\n";

			for ($b = $idnum; $b < $idnum + $messcount; $b++) {

				open (FILE, "$datadir/$mnum[$b]\.txt") || &fatal_error("Unable to open $mnum[$b]\.txt");
				&lock(FILE);
				@body = <FILE>;
				&unlock(FILE);
				close(FILE);

				$colspan = $depth - $mfollow[$b] + 2;
				$colspan2 = $colspan - 1;

				print "<tr bgcolor=\"$tablecolor1\">";
				for ($c = 1; $c < $mfollow[$b]; $c++) {
					print "<td></td>\n";
				}
				print "<td colspan=$colspan align=right><font face=\"$fontface\" size=0 color=\"$fontcolor1\">$mdate[$b]</font></td></tr>\n";

				print "<tr>";
				for ($c = 1; $c < $mfollow[$b]; $c++) {
					print "<td></td>\n";
				}
				print "<td align=right><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor2\"><b>von:</b></font></td>\n";
				print "<td colspan=$colspan2><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor3\"><a href=\"mailto:$memail[$b]\">$mname[$b]</a></font></td></tr>\n";

				print "<tr>";
				for ($c = 1; $c < $mfollow[$b]; $c++) {
					print "<td></td>\n";
				}
				print "<td align=right><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor2\"><b>ueber:</b></font></td>\n";
				print "<td colspan=$colspan2><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor3\">$msub[$b]</font></td></tr>\n";

				print "<tr>";
				for ($c = 1; $c < $mfollow[$b]; $c++) {
					print "<td></td>\n";
				}
				print "<td align=right valign=top><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor2\"><b>Beitrag:</b></font></td>\n";
				print "<td colspan=$colspan2><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor3\">@body</font></td></tr>\n";

				print "<tr>";
				for ($c = 1; $c < $mfollow[$b]; $c++) {
					print "<td></td>\n";
				}
				print "<td align=right valign=top><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor2\"><b>Beitrag Info:</b></font></td>\n";
				print "<td colspan=$colspan2><font face=\"$fontface\" size=\"$fontsize\" color=\"$fontcolor3\"><a href=\"$cgi$queryswitch";
				print "action=display\&num=$mnum[$b]\">hierzu Beitrag veroeffentlichen </a>.</font></td></tr>\n";

			}

			print "</table>\n";

		}

		elsif (/<!--form-->/) {

			print "<form action=\"$cgi$queryswitch";
			print "action=post&follow=yes\" method=post>\n";

			print "<table border=0>\n";

			print "<tr><td align=right>von: </td>\n";
			print "<td><input type=text name=name size=100></td></tr>\n\n";

			print "<tr><td align=right>ueber: </td>\n";
			print "<td><input type=text name=subject size=100></td></tr>\n\n";

			print "<tr><td align=right valign=top>Beitrag:  </td>\n";
			print "<td><textarea name=message rows=10 cols=100 wrap=virtual></textarea></td></tr>\n\n";

			print "<tr><td align=center colspan=2>";
			print "<input type=hidden name=followto value=$viewnum>\n";
			print "<input type=hidden name=level value=$mfollow[$idnum]>\n";
			print "<input type=submit value=\"diesen Beitrag veroeffentlichen\"> ";
			print "<input type=reset value=\"Formularinhalte loeschen\"></td></tr>\n";

			print "</table></form>\n\n";

		}

		elsif (/<!--subject-->/) {

			print "$msub[$idnum]\n";

		}

		elsif (/<!--mailto-->/) {

			print "<a href=\"mailto:$memail[$idnum]\">$mname[$idnum]</a>\n";

		}

		elsif (/<!--name-->/) {

			print "$mname[$idnum]\n";

		}

		elsif (/<!--email-->/) {

			print "$memail[$idnum]\n";

		}

		elsif (/<!--date-->/) {

			print "$mdate[$idnum]\n";

		}

		elsif (/<!--browser-->/) {

			print "$mbrowser[$idnum]\n";

		}

		elsif (/<!--ip-->/) {

			print "$mip[$idnum]\n";

		}

		else {

			print "$_";

		}

	}

	exit;

}

sub htmlout {

        open (FILE, "$datafile") || &fatal_error("Unable to open 1 $datafile");
        &lock(FILE);
        @messages = <FILE>;
        &unlock(FILE);
        close(FILE);

        for ($a = 0; $a < @messages; $a++) {

                ($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]);

                if ($viewnum == $mnum[$a]) {
                        $idnum = $a;
                }

        }

        open (FILE, "$html_t") || &fatal_error("Unable to open 2 $html_t");
        &lock(FILE);
        @template = <FILE>;
        &unlock(FILE);
        close(FILE);

        for ($a = 0; $a < @template; $a++) {

                $_ = $template[$a];

 	        if (/<!--htmlout-->/) {
 	               $last = 1;
 	               print "<ul compact>\n";
 	               for ($b = 0; $b < @messages; $b++) {
 	                       $last = $mfollow[$b];

      		               open (FILE, "$datadir/$mnum[$b]\.txt") || &fatal_error("Unable to open 3 $mnum[$b]\.txt");
       		               &lock(FILE);
       		               @body = <FILE>;
       		               &unlock(FILE);
       		               close(FILE);
	
        	               if ($last <= 1) {
        	                        ($pl3v, $pl3n) = split(/\(/,$mdate[$b],2);
					print "</li><li><u>$msub[$b] ( $pl3v)</u> - <b>$mname[$b]</b>: @body\n";
        	               }
        	               else {
					print "<br><b>$mname[$b]</b>: @body\n"
        	               }
        	       }
        	       print "</li></ul>\n";
       		}

                elsif (/<!--style-->/) {

                       open (FILE, "style\.html") || &fatal_error("Unable  to open style");
                        &lock(FILE);
                        @bddy = <FILE>;
                        &unlock(FILE);
                        close(FILE);

                        print "@bddy";
                }

                else {

                        print "$_";

                }

        }

        exit;

}

sub bancheck {

	open (FILE, "$banfile") || &fatal_error("Unable to open $banfile");
	&lock(FILE);
	@banlist = <FILE>;
	&unlock(FILE);
	close(FILE);
	
	$subpos = index($ENV{REMOTE_HOST},"alestra\.net\.mx");

	if ($subpos > 0) {
	        $name = $FORM{'name'};
	        $subject = $FORM{'subject'};
	        $message = $FORM{'message'};
		&predumperr("MX-BAN *** $name *** $subject *** $message \n");
		&fatal_error("You cannot post to this message board. Your Host has been banned.");

	}
	
	$subpos = index($ENV{REMOTE_HOST},"\.net\.my");

        if ($subpos > 0) {
                $name = $FORM{'name'};
                $subject = $FORM{'subject'};
                $message = $FORM{'message'};
                &predumperr("MY-BAN *** $name *** $subject *** $message \n");
                &fatal_error("You cannot post to this message board. Your Host is banned.");

        }
														
	
	($this1,$this2,$this3,$this4) = split(/\./,$ENV{REMOTE_ADDR});

	for ($x = 0; $x < @banlist; $x++) {

		($ip1,$ip2,$ip3,$ip4,$chop) = split(/\./,$banlist[$x]);

		if ( ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$this4" eq "$ip4") ||
		     ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$ip4" eq 'X') ||
		     ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$ip3" eq 'X') ||
		     ("$this1" eq "$ip1" && "$ip2" eq 'X') ) {

                       $name = $FORM{'name'};
	               $subject = $FORM{'subject'};
	               $message = $FORM{'message'};
	               &predumperr("IP-BAN *** $name *** $subject *** message erased  \n");

			&fatal_error("You cannot post to this message board. Your IP has been banned.");
		}
	}

}

sub bbbcheck {
        my $alles = shift;
	my $tehi = shift;
	
        ($vor,$nach) = split(/http\:\/\//,$alles);
	($vor,$nach) = split(/\//,$nach);
	
        $dothis = "nslookup ".$vor."| tail -2| head -1";
	chop($answer = `$dothis`);
        $answer =~ s/Address: //g;

        open (FILE, "$banfile") || &fatal_error("Unable to open $banfile");
        &lock(FILE);
        @banlist = <FILE>;
        &unlock(FILE);
        close(FILE);

       ($this1,$this2,$this3,$this4,$this5) = split(/\./,$answer.".xx");

       for ($x = 0; $x < @banlist; $x++) {

          ($ip1,$ip2,$ip3,$ip4,$chop) = split(/\./,$banlist[$x]);

          if ( ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$this4" eq "$ip4") ||
               ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$this3" eq "$ip3" && "$ip4" eq 'X') ||
               ("$this1" eq "$ip1" && "$this2" eq "$ip2" && "$ip3" eq 'X') ||
               ("$this1" eq "$ip1" && "$ip2" eq 'X') ) {

                $name = $FORM{'name'};
	        $subject = $FORM{'subject'};
	        $message = $FORM{'message'};
	        &predumperr("HTTP-$tehi-Ban *** $name *** $subject *** erased \n");
#  &predumperr("HTTP-$tehi-Ban *** $name *** $subject *** $message \n");
#
               &fatal_error("You cannot post this message to the board. That $tehi has been banned.");
          }
       }
}

sub ddddoit {
       my $alles = shift;
       $name = $FORM{'name'};
       $subject = $FORM{'subject'};
       $message = $FORM{'message'};
       &predumperr("HTTP-$alles-Ban *** $name *** $subject *** $message \n");

       &fatal_error("You cannot post this message to the board. That HTTP has been banned.");
}

sub xxxcheck {
        my $alles = shift;


        open (FILE, "$assfile") || &fatal_error("Unable to open $assfile");
        &lock(FILE);
        @asslist = <FILE>;
        &unlock(FILE);
        close(FILE);

        for ($x = 0; $x < @asslist; $x++) 
	{
           ($thisass,$thisdump) = split(/\|/,$asslist[$x]."|xx");
	   $vork = index($alles,$thisass); if ( $vork >0 )
	       { 
	           &ddddoit($thisass);
               }
        }
}

sub rrrcheck {
	my $alles = shift;
	
        ($vor,$nach) = split(/http\:\/\//,$alles);
        ($vor,$nach) = split(/\//,$nach);

	# 1.js
	
        $dothis = "wget -q -O - ".$vor."/1.js | grep http " ;
	chop($answer = `$dothis`);

	$answer =~ s/"//g;
	@ansvek = split(/\,/,$answer);

	for ($aaa = 0; $aaa < @ansvek; $aaa++) {
		&bbbcheck($ansvek[$aaa],"J1");	
	}

	# nix
	
 	$dothis = "wget -q -O - ".$vor."/ | grep http " ;
	chop($answer = `$dothis`);

        &bbbcheck($answer,"H2");

	# js.js
	
        $dothis = "wget -q -O - ".$vor."/js.js | grep http " ;
        chop($answer = `$dothis`);

        $answer =~ s/"//g;
        @ansvek = split(/\,/,$answer);

        for ($aaa = 0; $aaa < @ansvek; $aaa++) {
 	       &bbbcheck($ansvek[$aaa],"J2");
        }

        $dothis = "wget -q -O - ".$vor."/ | grep blackjack | wc -l " ;
        chop($answer = `$dothis`);

	if ($answer >= 10 ) {
	       $name = $FORM{'name'};
	       $subject = $FORM{'subject'};
	       $message = $FORM{'message'};
	       &predumperr("HTTP-BJ-Ban *** $name *** $subject *** $message \n");

               &fatal_error("You cannot post this message to the board. That HTTP-Content has been banned.");
	
	}
	   
	$dothis = substr($FORM{'message'},0,7); 
	$xxer = "comment";
	if ("$xxer" eq "$dothis" ) { &ddddoit($xxer);};
	
	$dothis = substr($FORM{'message'},0,9);
        $xxer = "Rear side";
        if ("$xxer" eq "$dothis" ) { &ddddoit($xxer);};


}

sub admin {

	print "<html>\n";
	print "<head><title> RobBoard Administration </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard Administration</h2>\n";

	print "<b>Let's do some administrating!</b><p>\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=remove\">Remove Messages</a><br>\n";
	print "<a href=\"$cgi$queryswitch";
	print "action=ban\">Ban a User</a><br>\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=unban\">Unban User(s)</a><br>\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=password\">Change Password</a><p>\n";

        print "<a href=\"$cgi$queryswitch";
        print "action=assban\">Add banned phrase</a><p>\n";

	print "<table border=0 cellpadding=4>\n";

	print "<tr><th colspan=3><font face=arial size=2>Current Option Settings</font></th></tr>\n\n";

	print "<tr><th><font face=arial size=2>Variable</font></th>\n";
	print "<th><font face=arial size=2>Value</font></th>\n";
	print "<th><Font face=arial size=2>Comments</font></th></tr>\n\n";

	print "<tr>\n";
	print "<td align=center><font face=arial size=2><i>\$useban</i></font></td>\n";
	print "<td align=center><font face=arial size=2><b>$useban</b></font></td>\n";
	print "<td><font face=arial size=2>";

	if ($useban == 1) {
		print "Users with IPs on the ban list cannot post.";
	} else {
		print "The ban list is not in use. Anyone can post.";
	}

	print "</font></td></tr>\n";

	print "<tr>\n";
	print "<td align=center><font face=arial size=2><i>\$html</i></font></td>\n";
	print "<td align=center><font face=arial size=2><b>$html</b></font></td>\n";
	print "<td><font face=arial size=2>";

	if ($html == 0) {

		print "All HTML is removed from posts.";

	} elsif ($html == 1) {

		print "HTML appears as plain text.";

	} else {

		print "HTML functions as HTML (can be dangerous).";

	}

	print "</font></td></tr>\n";

	print "<tr>\n";
	print "<td align=center><font face=arial size=2><i>\$datetype</i></font></td>\n";
	print "<td align=center><font face=arial size=2><b>$datetype</b></font></td>\n";
	print "<td><font face=arial size=2>Example: $date</td>";

	print "</tr>\n";

	print "<tr>\n";
	print "<td align=center><font face=arial size=2><i>\$encrypt</i></font></td>\n";
	print "<td align=center><font face=arial size=2><b>$encrypt</b></font></td>\n";
	print "<td><font face=arial size=2>";

	if ($encrypt == 1) {
		print "The password will use the <i>crypt</i> function.";
	} else {
		print "The password will not be encrypted.";
	}

	print "</tr>\n";

	print "<tr><td align=center colspan=3><font face=arial size=2>";
	print "These variables can be changed in robboard.cgi</font></td>\n";

	print "</tr></table><p>\n";

	print "<b>Or...</b><p>\n";

	print "<a href=\"$indexcgi\">Back to the Message Board</a><br>\n";

	print "<a href=\"http://rob.webking.com/cgi\">Rob's Freeware Perl</a>\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub remove {

	open (FILE, "$datafile") || &fatal_error("Unable to open $datafile");
	&lock(FILE);
	@messages = <FILE>;
	&unlock(FILE);
	close(FILE);

	for ($a = 0; $a < @messages; $a++) {

		($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]);

		if ($viewnum == $mnum[$a]) {
			$idnum = $a;
		}

	}

	print "<html>\n";
	print "<head><title> RobBoard - Remove Messages </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Remove Messages</h2>\n";

	print "<form action=\"$cgi$queryswitch";
	print "action=remove2\" method=post>\n\n";

	print "Password: <input type=\"password\" name=pass size=20><p>\n";

	print "<table border=0 cellpadding=7>\n\n";

	print "<tr><th>Delete</th><th>Keep</th><th>BanDel</th><th>Number</th><th>Message</th><th>Date</th></tr>\n";

	for ($a = 0; $a < @messages; $a++) {

		print "<tr>\n";
		print "<td><input type=radio name=line$a value=\"yes\"></td>\n";
		print "<td><input type=radio checked name=line$a value=\"no\"></td>\n";
		print "<td><input type=radio name=line$a value=\"ban\"></td>\n";
		print "<td>$mnum[$a]</td>\n";
		print "<td><a href=\"$cgi$queryswitch";
		print "action=display\&num=$mnum[$a]\">$msub[$a]</a></td>\n";
		print "<td align=center>$mdate[$a]</td></tr>\n";

	}

	print "</table>\n";

	print "<input type=hidden name=total value=$a>\n";
	print "<input type=submit value=\"Delete Selected Messages\">\n";
	print "<input type=reset>\n";

	print "</form>\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub remove2 {

	&checkpass;

	$something = 0;
	$delcounter = 0;

	for ($x = 0; $x < $FORM{'total'}; $x++) {
		$okiedokie[$x] = $FORM{"line$x"};
		$something = 1 if ($okiedokie[$x] eq "yes");
		$something = 1 if ($okiedokie[$x] eq "ban");
	}

	if ($something == 1) {

		open (FILE, "$datafile") || &fatal_error("Unable to open $datafile");
		&lock(FILE);
		@messages = <FILE>;
		&unlock(FILE);
		close(FILE);

		for ($a = 0; $a < @messages; $a++) {
	
			($mnum[$a],$msub[$a],$mfollow[$a],$mname[$a],$memail[$a],$mdate[$a],$mip[$a],$mbrowser[$a],$chop) = split(/``/,$messages[$a]);

		}

	        open (FAILE, ">>$banfile") || &fatal_error("Can't find $banfile");
	        &lock(FAILE);

                for ($xwx = 0; $xwx < @messages; $xwx++) {

                  if ($okiedokie[$xwx] eq "ban") {

                    $grunnel = $mip[$xwx];
                    &predumperr("Del-Ban *** $grunnel \n");
                    print FAILE "$grunnel\.xx\n";
		    $grannel = "yes";
	            $okiedokie[$xwx] = $grannel;
                  }
                }
		&unlock (FAILE);
                close (FAILE);

		open (FILE, ">$datafile") || &fatal_error("Unable to open $datafile");
                &lock(FILE);

		for ($x = 0; $x < @messages; $x++) {

			if ($okiedokie[$x] eq "yes") {

				$y = $x;

				while ( $x==$y || ( $mnum[$x] > $mnum[$y] && $x < @messages ) ) {

					unlink("$datadir/$mnum[$x]\.txt");
					$delcounter++;
					$x++;

				}
				$x--;
			}

			else {

				print FILE $messages[$x];

			}

		}
		&unlock (FILE);
		close (FILE);

	}

        print "<html>\n";
        print "<head><title> RobBoard - Remove Messages </title></head>\n";
        print "<body bgcolor=white text=black link=blue vlink=blue>\n";
        print "<font face=arial size=2><center>\n";
        print "<h2>RobBoard - Remove Messages</h2>\n";

        print "$delcounter message(s) removed.<p>\n\n";

        print "<a href=\"$cgi$queryswitch";
        print "action=admin\">RobBoard Admin</a><br>\n";
        print "<a href=\"$indexcgi\">Back to the Message Board</a>\n\n";

        print "</center></font>\n";
        print "</body></html>\n";

        exit;
}

sub ban {

	print "<html>\n";
	print "<head><title> RobBoard - Ban a User </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Ban a User</h2>\n";

	print "<form action=\"$cgi$queryswitch";
	print "action=ban2\" method=post>\n\n";

	print "Password: <input type=\"password\" name=pass size=20><p>\n";

	print "<b>Ban this IP</b><p>\n";

	print "<input type=text name=box1 size=4> .\n";
	print "<input type=text name=box2 size=4> .\n";
	print "<input type=text name=box3 size=4> .\n";
	print "<input type=text name=box4 size=4><p>\n";

	print "<input type=submit value=\"Ban This IP\">\n";
	print "<input type=reset>\n";

	print "</form>\n";

	print "<table border=0 width=85%>\n";

	print "<tr><td><font face=arial size=2>\n";

	print "Enter the IP you want to ban in the boxes above. You can ban a range of\n";
	print "IPs by entering a <b>single upper-case X</b> in a box. For example, entering\n";
	print "123 234 345 123 will ban only the IP 123.234.345.123, but entering\n";
	print "123 234 345 X will ban 123.234.345.* - all IPs with 123 234 345 as their first\n";
	print "three numbers. Similarly, 123 234 X will ban 123.234.*.* . You can also ban people by editing the <i>ban.txt</i> file\n";
	print "by hand, but you must be very careful. If you're not sure how the ban.txt\n";
	print "holds the ban data, you should stick to using this form.\n";

	print "</font></td></tr></table><p>\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub ban2 {

	&checkpass;

	open (FILE, ">>$banfile") || &fatal_error("Unable to open $banfile");
	&lock(FILE);
	print FILE "$FORM{'box1'}.$FORM{'box2'}.$FORM{'box3'}.$FORM{'box4'}.xx\n";
	&unlock(FILE);
	close(FILE);

	print "<html>\n";
	print "<head><title> RobBoard - Ban User(s) </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Ban User(s)</h2>\n";

	print "<b>$FORM{'box1'}\.$FORM{'box2'}\.$FORM{'box3'}\.$FORM{'box4'}</b> has been added to the ban list.<p>\n\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=admin\">RobBoard Admin</a><br>\n";
	print "<a href=\"$indexcgi\">Back to the Message Board</a>\n\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub assban {

        print "<html>\n";
	print "<head><title> RobBoard - Add Banned Phrase </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Add Banned Phrase</h2>\n";

       print "<form action=\"$cgi$queryswitch";
       print "action=assban2\" method=post>\n\n";

       print "<table border=0>\n\n";

       print "<tr><td align=right> Password: </td>\n";
       print "<td><input type=\"password\" name=pass size=20></td></tr><p>\n";

       print "<tr><td align=right> Banned Phrase: </td>\n";
       print "<td><input type=text name=new1 size=20></td></tr>\n";

       print "</table>\n\n";

       print "<input type=submit value=\"Submit Phrase\">\n";
       print "<input type=reset>\n";
       print "</form>\n";

       print "</center></font>\n";
       print "</body></html>\n";

       exit;
} 

sub assban2 {

         &checkpass;
         &fatal_error("No Banned Phriase entered") unless ($FORM{'new1'});

         $grunnel = $FORM{'new1'};

         open (FAILE, ">>$assfile") || &fatal_error("Can't find $assfile");
         &lock(FAILE);

         print FAILE "$grunnel|xx\n";
         &unlock (FAILE);
         close (FAILE);

       print "<html>\n";
       print "<head><title> RobBoard - Ban a Phrase </title></head>\n";
       print "<body bgcolor=white text=black link=blue vlink=blue>\n";
       print "<font face=arial size=2><center>\n";
       print "<h2>RobBoard - Banned Phrase</h2>\n";

       print "<b>$FORM{'new1'}</b> has been added to the ban list.<p>\n\n";

       print "<a href=\"$cgi$queryswitch";
       print "action=admin\">RobBoard Admin</a><br>\n";
       print "<a href=\"$indexcgi\">Back to the Message Board</a>\n\n";

       print "</center></font>\n";
       print "</body></html>\n";



         exit;
}


sub unban {

	open (FILE, "$banfile") || &fatal_error("Unable to open $banfile");
	&lock(FILE);
	@banlist = <FILE>;
	&unlock(FILE);
	close(FILE);

	print "<html>\n";
	print "<head><title> RobBoard - Unban User(s) </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Unban User(s)</h2>\n";

	print "<form action=\"$cgi$queryswitch";
	print "action=unban2\" method=post>\n\n";

	print "Password: <input type=\"password\" name=pass size=20><p>\n";

	print "<table border=0 cellpadding=7>\n";

	print "<tr><th>Remove From Ban List</th><th>Keep on Ban List</th><th>IP</th></tr>\n";

	for ($x = 0; $x < @banlist; $x++) {

		($ip1,$ip2,$ip3,$ip4,$chop) = split(/``/,$banlist[$x]);

		print "<tr><th><input type=radio name=line$x value=\"yes\"></th>\n";
		print "<th><input type=radio checked name=line$x value=\"no\"></th>\n";
		print "<td align=center>$ip1\.$ip2\.$ip3\.$ip4</td></tr>\n";

	}

	print "</table>\n\n";

	print "<input type=hidden name=total value=$x>\n";
	print "<input type=submit value=\"Make these Changes\">\n";
	print "<input type=reset>\n";

	print "</form>\n\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub unban2 {

	&checkpass;

	$something = 0;
	$delcounter = 0;

	for ($x = 0; $x < $FORM{'total'}; $x++) {
		$okiedokie[$x] = $FORM{"line$x"};
		$something = 1 if ($okiedokie[$x] eq "yes");
	}

	if ($something == 1) {

		open (FILE, "$banfile") || &fatal_error("Unable to open $banfile");
		&lock(FILE);
		@banlist = <FILE>;
		&unlock(FILE);
		close(FILE);

		open (FILE, ">$banfile") || &fatal_error("Unable to open $banfile");
		&lock(FILE);

		for ($x = 0; $x < @banlist; $x++) {
			if ($okiedokie[$x] eq 'yes') {
				$delcounter++;
			} else {
				print FILE $banlist[$x];
			}
		}

		&unlock(FILE);
		close (FILE);

	}

	print "<html>\n";
	print "<head><title> RobBoard - Unban User(s) </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Unban User(s)</h2>\n";

	print "$delcounter entrie(s) were removed from the ban list.<p>\n\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=admin\">RobBoard Admin</a><br>\n";
	print "<a href=\"$indexcgi\">Back to the Message Board</a>\n\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub password {

	print "<html>\n";
	print "<head><title> RobBoard - Change Admin Password </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Change Admin Password</h2>\n";

	print "<form action=\"$cgi$queryswitch";
	print "action=password2\" method=post>\n\n";

	print "<table border=0>\n\n";

	print "<tr><td align=right>Current Password: </td>\n";
	print "<td><input type=\"password\" name=pass size=20></td></tr>\n";

	print "<tr><td align=right>New Password: </td>\n";
	print "<td><input type=\"password\" name=new1 size=20></td></tr>\n";

	print "<tr><td align=right>Confirm Password: </td>\n";
	print "<td><input type=\"password\" name=new2 size=20></td></tr>\n";

	print "</table>\n\n";

	print "<input type=submit value=\"Submit New Password\">\n";
	print "<input type=reset>\n";
	print "</form>\n";

	print "</center></font>\n";
	print "</body></html>\n";


	exit;

}

sub password2 {

	&checkpass;
	&fatal_error("The two new password fields don't match") if ($FORM{'new1'} ne $FORM{'new2'});
	&fatal_error("No new password was entered") unless ($FORM{'new1'});

	open(FILE, "$pwdfile") || &fatal_error("Can't find $pwdfile");
	@lines = <FILE>;
	close(FILE);

	($p, $nochop) = split(/``/,$lines[0]);
	($p2, $nochop) = split(/``/,$lines[1]);

	if ($encrypt == 1) {
		$new = crypt($FORM{'new1'}, substr($p, 0, 2));
	} else {
		$new = $FORM{'new1'};
	}

	open (FILE, ">$pwdfile") || &fatal_error("Can't find $pwdfile");

	if ($encrypt == 1) {
		print FILE "$new``xx\n";
		print FILE "$p2``xx";
	} else {
		print FILE "$p``xx\n";
		print FILE "$new``xx";
	}

	close (FILE);

	print "<html>\n";
	print "<head><title> RobBoard - Change Password </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial size=2><center>\n";
	print "<h2>RobBoard - Change Password</h2>\n";

	print "The admin password has been changed successfully.<p>\n";

	print "<a href=\"$cgi$queryswitch";
	print "action=admin\">RobBoard Admin</a><br>\n";
	print "<a href=\"$indexcgi\">Back to the Message Board</a>\n\n";

	print "</center></font>\n";
	print "</body></html>\n";

	exit;

}

sub checkpass {

	open(FILE, "$pwdfile") || &fatal_error("Can't find $pwdfile");

	@lines = <FILE>;
	close(FILE);

	($p, $nochop) = split(/``/,$lines[0]);
	($p2, $nochop) = split(/``/,$lines[1]);

	&fatal_error("Invalid Password") if ($p ne crypt($FORM{'pass'}, substr($p, 0, 2)) && $encrypt == 1);
	&fatal_error("Invalid Password") if ($p2 ne $FORM{'pass'} && $encrypt != 1);

}

sub post_error {

	local($e) = @_;

	print "<html>\n";
	print "<head><title> Fehler beim Veroeffentlichen </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial><center>\n";
	print "<h2>Fehler</h2>\n";

	print "<blockquote>\n";
	print "Die Goetter haben ein Problem beim Veroeffentlichen des Beitrages entdeckt. Das Problem\n";
	print "ist wohl:<p>\n";

	print "<b>$e</b><p>\n\n";

	print "Du kannst den Back-Button deines Browsers nutzen, um das Problem zu beseitigen.<p>\n";

	print "<a href=\"$indexcgi\">oder zur Versammlung der Spieler</a><p>\n";
	print "</blockquote>\n";
	print "</center>";
	print "</font></body></html>\n";
	exit;

}

sub fatal_error {

	local($e) = @_;

	print "<html>\n";
	print "<head><title> RobBoard Fatal Error </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial><center>\n";
	print "<h2>RobBoard Fatal Error</h2>\n";

	print "<blockquote>\n";
	print "RobBoard experienced an unrecoverable error. The error seems\n";
	print "to be:<p>\n";

	print "<b>$e</b><p>\n\n";

	print "If this error continues, you should contact the administrator.<p>\n";

	print "<a href=\"$indexcgi\">RobBoard Main</a><p>\n";
	print "</blockquote>\n";
	print "</center>";
	print "</font></body></html>\n";
	exit;

}


sub predumperr {

        local($e) = @_;

        $Decider = $e;

        open (FILLE, "$bn2file") || &fatal_error("Unable to open $bn2file");
	&lock(FILLE);
        @bn2list = <FILLE>;
        &unlock(FILLE);
        close(FILLE);

        for ($x = 0; $x < @bn2list; $x++)
	{ 
	     ($thisbn2,$thisdump) = split(/\|/,$bn2list[$x]."|xx");
	     if ( $ENV{REMOTE_ADDR} == $thisbn2 )
	             {
		        $Decider = "Inhalt geloescht\n";
		     }
	}

	open (FIDLE, ">>$pdefile") || &fatal_error("Can't find $pdefile");
	print FIDLE "$date ::: $ENV{REMOTE_ADDR} ::: $ENV{HTTP_USER_AGENT} ::: $Decider";
        close (FIDLE);

} 

sub readform {

	read(STDIN, $input, $ENV{'CONTENT_LENGTH'});
	@pairs = split(/&/, $input);
        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;
	        $FORM{$name} = $value;
	}

	@vars = split(/&/, $ENV{QUERY_STRING});
	foreach $var (@vars) {
	        ($v,$i) = split(/=/, $var);
	        $v =~ tr/+/ /;
	        $v =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	        $i =~ tr/+/ /;
	        $i =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
	        $i =~ s/<!--(.|\n)*-->//g;
	        $INFO{$v} = $i;
	}

	$action = $INFO{'action'};

}

sub get_date {

        @days = ('Sontag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'); 
        @months = ('Januar','Februar','Maerz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');

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

	$mon_num = $mon+1;
	$savehour = $hour;
	$hour = "0$hour" if ($hour < 10);
	$min = "0$min" if ($min < 10);
	$sec = "0$sec" if ($sec < 10);
	$saveyear = ($year % 100);
	$year = 1900 + $year;

	if ($datetype == 1) {
		$date = "$days[$wday], $months[$mon] $mday, $year um $hour\:$min\:$sec";
	} elsif ($datetype == 2) {
		$date = "$mday. $months[$mon], $year um $hour\:$min\:$sec";
	} elsif ($datetype == 3) {
		$xxx3 = substr($months[$mon],1,3);
		$date = "$xxx3\. $mday, $year - $hour\:$min\:$sec";
	} elsif ($datetype == 4) {
		$mon_num = "0$mon_num" if ($mon_num < 10);
		$mday = "0$mday" if ($mday < 10);
		$saveyear = "0$saveyear" if ($saveyear < 10);
		$date = "$mon_num/$mday/$saveyear - $hour\:$min\:$sec";
	}

}

sub lock {
  local($file)=@_;
  flock($file, $LOCK_EX);
}

sub unlock {
  local($file)=@_;
  flock($file, $LOCK_UN) or $merken = "oh oh ";
}
