#!/usr/bin/perl use CGI::Carp "fatalsToBrowser"; #use diagnostics; ############################################################################## # YaBB.cgi ############################################################################## # Yet another Bulletin Board (http://www.yabb.com.ru) # Open Source project started by Zef Hemel (zef@zefnet.com) # =========================================================================== # Copyright (c) The YaBB Programming team # =========================================================================== # This file has been written by: Zef Hemel ############################################################################## eval { ($0 =~ m,(.*)/[^/]+,) and unshift (@INC, "$1"); ($0 =~ m,(.*)\\[^\\]+,) and unshift (@INC, "$1"); }; require "Settings.cgi"; require "$sourcedir/Subs.cgi"; $userpiclink = "0"; $guestoff = "0"; $YaBBversion = "1 Final"; # $gycversion in der Subs.cgi $Cookie_Exp_Date = 'Mon, 31-Jan-2034 12:00:00 GMT'; &get_date; @mailtest = ("/bin/sendmail","/sbin/sendmail","/usr/lib/sendmail","/usr/bin/sendmail","/usr/share/sendmail","/usr/sbin/sendmail"); foreach $mailtest (@mailtest) { if (-e $mailtest && -X $mailtest) { $mailprog = $mailtest;#last; } } if($currentboard eq "" && (-e("templates/boardindex.html")) && $temp eq ""){ require "$boarddir/styles/boardindex.cgi"; }elsif((-e("templates/$currentboard.html")) && $temp eq ""){ require "$boarddir/styles/$currentboard.cgi"; }else{ require "grafik.cgi"; } if ($INFO{'board'} =~ /\// or $INFO{'board'} =~ /\\/){ &fatal_error("Board false" ); } $temp = "$INFO{'site'}"; $cgi = "$boardurl/YaBB.cgi\?site=$temp\&board=$currentboard"; $cgi2 = "$boardurl/YaBB.cgi"; $num = "$INFO{'num'}"; foreach (split(/; /,$ENV{'HTTP_COOKIE'})) { ($cookie,$value) = split(/=/); if($cookie eq "$cookieautolog") { $alogout="$value"; } if($cookie eq "$cookieusername") { $username="$value"; } if($cookie eq "$cookiepassword") { $password="$value"; } if($cookie eq "$cookiemessages") { $IMessages="$value"; } } if(!defined($username) or $username eq ""){ $username = "Guest"; &fatal_error("Invalid1 character used.") if ($username !~ /^[A-Za-z]+$/); }else{ $username=~ s/[\n\r]//g; $password =~ s/[\n\r]//g; } if ($username eq "Guest" && $guestoff == 1){ require "$sourcedir/LogInOut.cgi"; &Login3; } # Load user settings $field2 = "$ENV{'REMOTE_ADDR'}"; if($username ne "Guest"){ $nologout = "post2,modify2"; if (!$action || $nologout !~ /$action/ ) { if ( $alogout < time() && $action !~ /admin/) { require "$sourcedir/LogInOut.cgi"; &Logout; } } open(FILE, "$memberdir/$username.dat"); &lock(FILE); @settings=; &unlock(FILE); close(FILE); $settings[0] =~ s/[\n\r]//g; if($settings[0] ne $password) { require "$sourcedir/LogInOut.cgi"; &Logout; &fatal_error("$txt{'39'}") if($action ne "logout"); } foreach $i (1..14) { $settings[$i] =~ s/[\n\r]//g;} $realname = "$username"; # $settings[1] ($realemail, $showemail) = split(/\|/, $settings[2]); $realpass = "$settings[0]"; # teil 2 if($settings[7] ne "Administrator"){ open(FILE, "$vardir/sperre.txt"); &lock(FILE); @stop = ; &unlock(FILE); close(FILE); foreach $line (@stop){ $line =~ s/[\n\r]//g; @lines = split(/\|/,$line); &fatal_error("Dieser Usernamen wurde gesperrt!") if ($settings[1] eq "$lines[0]" or $test[1] eq "$lines[1]" or $username eq "$lines[2]"); &fatal_error("Diese E-Mailadressse wurde gesperrt!") if($realemail eq "$lines[1]" or $test[2] eq "$lines[2]"); &fatal_error("Diese IP-Adresse wurde gesperrt!") if ($lines[2] eq "$field2"); } } } # Write log open(LOG, "$vardir/log.txt"); &lock(LOG); @entries = ; &unlock(LOG); close(LOG); $logdate = time; open(LOG, ">$vardir/log.txt"); &lock(LOG); print LOG "$username\|$logdate\|$action\|$hostname\|$currentboard\|$num\n"; $tu = 1; $date1 = ""; $date2 = ""; foreach $curentry (@entries){ $curentry =~ s/\n//g; ($name, $lastdate, $name2, $name3) = split(/\|/, $curentry); if($name3 ne "$hostname" && $logdate - $lastdate < 900){ if($name eq "Guest"){ print LOG "$curentry\n"; $tu++; }elsif($name ne "$username"){ print LOG "$curentry\n"; $tu++; } } } &unlock(LOG); close(LOG); @stat = stat("$vardir/total.txt"); $log = 0; @stat = localtime($stat[8]); $wt0 = $stat[6] + 1; open(LOG, "$vardir/log24.txt");&lock(LOG); @entries = ;&unlock(LOG);close(LOG); open(LOG, ">$vardir/log24.txt"); &lock(LOG); print LOG "$username\|$hostname\n";$tu24 = 1; @heute = localtime(time); $wt = $heute[6] + 1; $heute[4]++; if ($wt0 == $wt){ foreach $curentry (@entries) { $curentry =~ s/\n//g; ($name, $IP) = split(/\|/, $curentry); if($IP ne "$hostname" && $name eq "Guest"){ print LOG "$curentry\n"; $tu24++; }elsif($name ne "$username"){ print LOG "$curentry\n"; $tu24++; } } } &unlock(LOG); close(LOG); open(FILE, "$vardir/total.txt"); &lock(FILE); @rek = ; &unlock(FILE); close(FILE); foreach $i (0..16){ $rek[$i] =~ s/[\n\r]//g; } if ($rek[0] < $tu){ foreach $i (1..4) {if ($heute[$i] < 10) {$heute[$i] = "0$heute[$i]";}} $rek[0] = $tu; $log = 1; $rek[8] = "$heute[3].$heute[4] $heute[2]:$heute[1]"; } if ($wt0 != $wt) {$rek[$wt] = 0; $rek[16] = 0; unlink("$vardir/total.txt"); unlink("$vardir/log24.txt"); $log = 1;} if ($rek[16] < $tu) { $rek[16] = $tu; $log = 1; } if ($rek[$wt] < $tu24) { $rek[$wt] = $tu24; $log = 1; } if ($rek[$wt+8] < $tu24) { $rek[$wt+8] = $tu24; $log = 1; } if ($log == 1) { open (FILE1, ">$vardir/total.txt"); &lock(FILE1); foreach $i (0..16) { print FILE1 "$rek[$i]\n";} &unlock(FILE1); close (FILE1); } # Load board information if($currentboard ne ""){ $boardname = ""; open(FILE, "$boardsdir/$currentboard.dat"); &lock(FILE); @boardinfo=; &unlock(FILE); close(FILE); $boardinfo[0] =~ s/[\n\r]//g; $boardinfo[2] =~ s/[\n\r]//g; $boardname = "$boardinfo[0]"; foreach (split(/\|/,$boardinfo[2])){ $moderators{$_} = $_; } } # Depending on on the action field choose what to do if(!defined($settings[7]) or $settings[7] ne "$Administrator"){ if($maintenance == 1 && $action eq "login2"){ require "$sourcedir/LogInOut.cgi"; &Login2; } elsif($maintenance == 1) { require "$sourcedir/Maintenance.cgi"; &InMaintenance; } }else{ if($action =~/admin/) {require "$sourcedir/Admin.cgi"; &$action;} if($action eq "setstyle") { require "$sourcedir/Setstyle.cgi"; &Setstyle; } if($action eq "sendstyles") { require "$sourcedir/Setstyle.cgi"; &SendStyles; } if($action eq "setgen") { require "$sourcedir/setgen.cgi"; &Setgen; } if($action eq "sendgen") { require "$sourcedir/setgen.cgi"; &Sendgen; } if($action eq "ml") { require "$sourcedir/Admin.cgi"; &ml; } } sub CanViewMemberlist { if ($ml_visible eq "0") { return 1; } else { if ($ml_visible eq "1") { if ($username ne "Guest") { return 1; } else { return 0; } } elsif ($ml_visible eq "2") { if ($settings[7] eq "$Administrator") { return 1; } } } } if ($action ne "") { if ($action eq "display") {require "$sourcedir/Display.cgi"; &Display;} elsif($currentboard ne "" && $action eq "" && $num eq "") {require "$sourcedir/MessageIndex.cgi";&MessageIndex;} if ($action =~ /oldnews/) {require "$sourcedir/Admin.cgi"; &adminoldnews;} elsif ($action =~/database/) {require "$sourcedir/database.cgi"; &$action;} elsif ($action eq "who") { require "$sourcedir/who.cgi"; &who; } elsif ($action eq "boardtoday") { $cgi = "$boardurl/YaBB.cgi\?site=$site\&board="; require "$sourcedir/boardtoday.cgi"; &boardtoday; } elsif ($action =~/pics/) {require "$sourcedir/pics.cgi"; &$action;} elsif ($action =~/forennotify/) {require "$sourcedir/foren.cgi"; &$action;} elsif ($action =~/notify/) {require "$sourcedir/Notify.cgi"; &$action;} elsif ($action =~/email/) {require "$sourcedir/email.cgi"; &$action;} elsif ($action =~/forget/) {require "$sourcedir/forget.cgi"; &$action;} elsif ($action =~/renamethread/) {require "$sourcedir/rename.cgi"; &$action;} elsif ($action eq "login") { require "$sourcedir/LogInOut.cgi"; &Login; } elsif ($action eq "login2") { require "$sourcedir/LogInOut.cgi"; &Login2; } elsif ($action eq "logout") { require "$sourcedir/LogInOut.cgi"; &Logout; } elsif ($action eq "post") { require "$sourcedir/Post.cgi"; &Post; } elsif ($action eq "regeln") {require "$sourcedir/Subs4.cgi"; ®eln; } elsif ($action eq "profile") { require "$sourcedir/Profile.cgi"; &ModifyProfile; } elsif ($action eq "viewprofile") { require "$sourcedir/Profile.cgi"; &ViewProfile; } elsif ($action eq "post2") { require "$sourcedir/Post.cgi"; &Post2; } elsif ($action eq "profile2") { require "$sourcedir/Profile.cgi"; &ModifyProfile2; } elsif ($action eq "search") { require "$sourcedir/Search.cgi"; &SearchForm; } elsif ($action eq "search2") { require "$sourcedir/Search.cgi"; &DoSearch; } elsif ($action eq "search3") { require "$sourcedir/Search.cgi";&DisplayResults; } elsif ($action eq "modify") { require "$sourcedir/ModifyMessage.cgi"; &ModifyMessage; } elsif ($action eq "modify2") { require "$sourcedir/ModifyMessage.cgi"; &ModifyMessage2; } elsif ($action eq "markasread") { require "$sourcedir/MessageIndex.cgi"; &MarkRead; } elsif ($action eq "im") { require "$sourcedir/InstantMessage.cgi"; &IMIndex; } elsif ($action eq "imprefs") { require "$sourcedir/InstantMessage.cgi"; &IMPreferences; } elsif ($action eq "imprefs2") { require "$sourcedir/InstantMessage.cgi"; &IMPreferences2; } elsif ($action eq "imoutbox") { require "$sourcedir/InstantMessage.cgi"; &IMOutbox; } elsif ($action eq "imremove") { require "$sourcedir/InstantMessage.cgi"; &IMRemove; } elsif ($action eq "imsend") { require "$sourcedir/InstantMessage.cgi"; &IMPost; } elsif ($action eq "imsend2") { require "$sourcedir/InstantMessage.cgi"; &IMPost2; } elsif ($action eq "hilfe") { require "$sourcedir/Subs4.cgi"; &hilfe; } elsif ($action eq "legende") { require "$sourcedir/smilies.cgi"; &legende; } elsif ($action eq "copy") { require "$sourcedir/Copy.cgi"; &Copy; } elsif ($action eq "vote") {require "$sourcedir/Subs.cgi"; &vote;} elsif ($action eq "mlall") { if (CanViewMemberlist == 1) { require "$sourcedir/Memberlist.cgi"; &MLAll; } } elsif ($action eq "mlletter") { if (CanViewMemberlist == 1) { require "$sourcedir/Memberlist.cgi"; &MLByLetter; } } elsif ($action eq "mltop") { if (CanViewMemberlist == 1) { require "$sourcedir/Memberlist.cgi"; &MLTop; } } elsif ($action eq "rewritten") { require "$sourcedir/rewritten.cgi"; &rewritten; } elsif ($action eq "icqpager") { require "$sourcedir/icqpager.cgi"; &icqpager; } elsif ($action eq "picture") { require "$sourcedir/picture.cgi"; &legende; } elsif ($action eq "movethread") { require "$sourcedir/MoveThread.cgi"; &MoveThread; } elsif ($action eq "movethread2") { require "$sourcedir/MoveThread.cgi"; &MoveThread2; } elsif ($action eq "removeoldthreads") { require "$sourcedir/RemoveOldThreads.cgi"; &RemoveOldThreads; } elsif ($action eq "lock") { require "$sourcedir/LockThread.cgi"; &LockThread; } elsif ($action eq "removethread") { require "$sourcedir/RemoveThread.cgi"; &RemoveThread; } elsif ($action eq "removethread2") { require "$sourcedir/RemoveThread.cgi"; &RemoveThread2; } elsif ($action eq "setsmp") { &setsmp; } elsif ($action eq "changemode") { &setmode; } elsif ($action eq "changemv") { &setmv; } elsif ($action eq "managecats") { require "$sourcedir/ManageCats.cgi"; &ManageCats; } elsif ($action eq "modifycatorder") { require "$sourcedir/ManageCats.cgi"; &ReorderCats; } elsif ($action eq "removecat") { require "$sourcedir/ManageCats.cgi"; &RemoveCat; } elsif ($action eq "createcat") { require "$sourcedir/ManageCats.cgi"; &CreateCat; } elsif ($action eq "manageboards") { require "$sourcedir/ManageBoards.cgi"; &ManageBoards; } elsif ($action eq "modifyboard") { require "$sourcedir/ManageBoards.cgi"; &ModifyBoard; } elsif ($action eq "addboard") { require "$sourcedir/ManageBoards.cgi"; &CreateBoard; } elsif ($action eq "reorderboards") { require "$sourcedir/ManageBoards.cgi"; &ReorderBoards; } elsif ($action eq "reorderboards2") { require "$sourcedir/ManageBoards.cgi"; &ReorderBoards2; } elsif ($action eq "forumtoday") { require "$sourcedir/forumtoday.cgi"; &forumtoday; } elsif ($action eq "membersetting") { require "$sourcedir/membersetting.cgi"; &membersetting; } elsif ($action eq "viewwarn") { require "$sourcedir/Viewwarn.cgi"; &Viewwarn1; } elsif ($action eq "viewwarn2") { require "$sourcedir/Viewwarn.cgi"; &Viewwarn2; } elsif ($action eq "viewwarn3") { require "$sourcedir/Viewwarn.cgi"; &Viewwarn3; } # Who-is-Bug abfangen # falls der User eine action eingegeben hat, die bisher oder in den kommenden Zeilen nicht bearbeitet wurde, kommt eine Fehlermeldung elsif (($action ne "register") && ($action ne "register2") && ($action ne "haftung") && ($action ne "messageindex") && ($action ne "upload") && ($action ne "userpic")) { &fatal_error("Es ist leider ein Fehler aufgetreten.

Hier geht es wieder zurück zum Board." );} if ($enable_reg) { if ($action eq "register") { require "$sourcedir/Register.cgi"; &Register; } elsif ($action eq "register2") { require "$sourcedir/Register.cgi"; &Register2; } elsif ($action eq "haftung") { require "$sourcedir/Subs4.cgi"; &haftung; } } if ($enable_userpic) { if ($action eq "userpic") { require "$sourcedir/userpic.cgi"; &userpic; } elsif ($action eq "upload") { require "$sourcedir/upload.cgi"; &upload; } } } # In no board specified display board index if ($currentboard eq "") { require "$sourcedir/BoardIndex.cgi"; &BoardIndex; } require "$sourcedir/MessageIndex.cgi";&MessageIndex;