#!/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/rb';
$boardurl = 'http://www.toppoint.de/~panther/rb';
$cgi = 'http://www.toppoint.de/~panther/cgi-bin/rb/robboard.cgi';
$indexcgi = 'http://www.toppoint.de/~panther/cgi-bin/rb/index.cgi';
$queryswitch = '?';

$html = 2;   # 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/pde3.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');
&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'};

	&post_error("von: muss ausgefuellt sein =niemand?") unless($name);
	&post_error("ueber: muss ausgefuellt sein") unless($subject);
	&post_error("Geruecht: 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;

        &post_error("von: muss korrekt ausgefuellt sein") if ($name eq 'amoudge');
	$mggt = 'assan';
	&post_error("von: muss richtig ausgefuellt sein") if (index($name,$mggt) > -1);
        $mggt = 'klaster';
	&post_error("von: muss richtig gefuellt sein") if (index($name,$mggt) > -1);
        $mggt = 'hyikin';
	&post_error("von: muss OK gefuellt sein") if (index($name,$mggt) > -1);
        $mggt = 'xdcgs';
	&post_error("von: muss schon OK gefuellt sein") if (index($name,$mggt) > -1);
        $mggt = 'osama';
	&post_error("von: muss echt gefuellt sein") if (index($name,$mggt) > -1);
        $mggt = 'Diadia';
        &post_error("von: muss echt gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'scuko';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);
        $mggt = 'jtsfds';
        &post_error("von: muss gefuellt sein!") if (index($name,$mggt) > -1);


        &bbbcheck($message,"IP") if ($useban == 1);
        &qqqcheck($message) if ($useban == 1);
        &rrrcheck($message) if ($useban == 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 (FILE, "$numfile") || &fatal_error("Unable to open $numfile");
	&lock(FILE);
	@info = <FILE>;
	&unlock(FILE);
	close(FILE);

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

	open (FILE, ">$numfile") || &fatal_error("Unable to open at $numfile with this $postnum");
	&lock(FILE);
	print FILE "$postnum";
	print FILE "``xx";
	&unlock(FILE);
	close (FILE);

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

	open (FILE, ">$datafile") || &fatal_error("Unable to open $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);

	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>Geruecht erfolgreich verbreitet</h3>\n";

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

	if ($style == 0) {

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

	} elsif ($threaded == 0) {

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

	} else {

		print "<a href=\"$cgi$queryswitch";
		print "action=viewthread\&num=$postnum\">lese in diesem Geruecht weiter</a><br>\n";
		print "<a href=\"$indexcgi\">zurueck zur Geruechtekueche</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 value=Anonym 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>Geruecht: </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=\"dieses Geruecht verbreiten\"> ";
			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 Geruechte 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> ";
                            		        if ($mname[$d] eq "Anonym" ) {
                            	                	print "- ";
                                	        }
                        	                else {
                	                        	print "- <b>$mname[$d]</b>, ";
        	                                }
		                                print "$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>Geruecht:</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>Geruechte 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 Geruecht verbreiten</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>Geruecht: </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=\"dieses Geruecht verbreiten\"> ";
			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 $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 $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 $mnum[$b]\.txt");
                               &lock(FILE);
                               @body = <FILE>;
                               &unlock(FILE);
                               close(FILE);

			       $usename = '<b>'.$mname[$b].'</b>: ';
			       $vglname = 'Anonym';
			       if ("$mname[$b]" eq "$vglname") { $usename = ' - ' } 

                               if ($last <= 1) {
                                        ($pl3v, $pl3n) = split(/\(/,$mdate[$b],2);
                                        print "</li><li>$usename@body\n";
                               }
                               else {
                                        print "<br>$usename@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') ) {

			&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 *** $message \n");

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

sub qqqcheck {
     my $alles = shift;

     $vork = index($alles,"a HREF=&quot;http://");

     if ( $vork > 0)
     {
          $name = $FORM{'name'};
          $subject = $FORM{'subject'};
          $message = $FORM{'message'};
          &predumperr("HTTP-Qu-Ban *** $name *** $subject *** $message \n");

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

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

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

sub rrrcheck {
        my $alles = shift;

        $vork = index($alles,"teen teen"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://jew"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://gold"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"asian teen"); if ( $vork >0 ) { &ddddoit($message); }
	$vork = index($alles,"a href=http://xont"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://jeppe"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://pdlca"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://p-pill"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"a href=http://goto.stred.biz"); if ( $vork >0 ) { &ddddoit($message); }
	$vork = index($alles,"a href=http://hlos.201mb.com"); if ( $vork >0 ) { &ddddoit($message); }
	$vork = index($alles,"japanese nude teen"); if ( $vork >0 ) { &ddddoit($message); }
	$vork = index($alles,"fizwig.com"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"lycos.nl"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"empubm06.info"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"vogue.com.au"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"ratedcontentsite.com"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"blogspot.com"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"asian milf"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"lycos.es"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"lycos.fr"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"chevrolet mclaughlin"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"bmw z4"); if ( $vork >0 ) { &ddddoit($message); }
	$vork = index($alles,"cadillac dakota"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"esnips.com"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"connotea.org"); if ( $vork >0 ) { &ddddoit($message); }
        $vork = index($alles,"ilutiki.vox.com"); if ( $vork >0 ) { &ddddoit($message); }


}





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 "<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>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>$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");
	}

	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 (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 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 Verbreiten </title></head>\n";
	print "<body bgcolor=white text=black link=blue vlink=blue>\n";
	print "<font face=arial><center>\n";
	print "<h2>Verbreitungsfehler</h2>\n";

	print "<blockquote>\n";
	print "Die Goetter haben ein Problem beim Verbreiten des Geruechts 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 Geruechtekueche</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) = @_;

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


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 = ('Wende','Anfang','Hreson','Tagatha','Falion','Natrus','Vugur','Trelon','Sima','Gother','Slonga','Norden');


	($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);
	# 1985 + 100 -1 war Tagatha 
	# -1 für Nova-Tagatha	
	# -2 für Tharanor
	$year = 1900 + $year - 2004 -2 ;  

	if ($datetype == 1) {
		$date = "$days[$wday], $months[$mon] $mday, $year";
	} elsif ($datetype == 2) {
	# nbvs war Tagatha
		$date = "$mday. $months[$mon] $year nach Hyoo ";
	} elsif ($datetype == 3) {
		$xxx3 = substr($months[$mon],1,3);
		$date = "$xxx3\. $mday, $year";
	} 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";
	}

}

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

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