############################################################################### # Subs.pl # ############################################################################### # YaBB: Yet another Bulletin Board # # Open-Source Community Software for Webmasters # # Version: YaBB 1 Gold - SP 1.3.1 # # Released: December 2001; Updated April 18, 2003 # # Distributed by: http://www.yabbforum.com # # =========================================================================== # # Copyright (c) 2000-2003 YaBB (www.yabbforum.com) - All Rights Reserved. # # Software by: The YaBB Development Team # # with assistance from the YaBB community. # # Sponsored by: Xnull Internet Media, Inc. - http://www.ximinc.com # ############################################################################### $subsplver = "1 Gold - SP 1.3.1"; use subs 'exit'; $yymain = ""; # set body start to blank &readform; # parse the query &get_date; # get the current date/time $currentboard = $INFO{'board'}; if ($currentboard =~ m~/~){ &fatal_error($txt{'399'}); } if ($currentboard =~ m~\\~){ &fatal_error($txt{'400'}); } if ($currentboard ne '' && $currentboard !~ /\A[\s0-9A-Za-z#%+,-\.:=?@^_]+\Z/){ &fatal_error($txt{'399'}); } $currentcat = $INFO{'cat'}; if ($currentcat =~ m~/~){ &fatal_error($txt{'399a'}); } if ($currentcat =~ m~\\~){ &fatal_error($txt{'400a'}); } if ($currentcat ne '' && $currentcat !~ /\A[\s0-9A-Za-z#%+,-\.:=?@^_]+\Z/){ &fatal_error($txt{'399a'}); } $pwseed ||= 'yy'; $user_ip = $ENV{'REMOTE_ADDR'}; if ($user_ip eq "127.0.0.1") { if ($ENV{'HTTP_CLIENT_IP'} && $ENV{'HTTP_CLIENT_IP'} ne "127.0.0.1") {$user_ip = $ENV{'HTTP_CLIENT_IP'};} elsif ($ENV{'X_CLIENT_IP'} && $ENV{'X_CLIENT_IP'} ne "127.0.0.1") {$user_ip = $ENV{'X_CLIENT_IP'};} elsif ($ENV{'HTTP_X_FORWARDED_FOR'} && $ENV{'HTTP_X_FORWARDED_FOR'} ne "127.0.0.1") {$user_ip = $ENV{'HTTP_X_FORWARDED_FOR'};} } $scripturl = qq~$boardurl/YaBB.$yyext~; if ($currentcat ne "") {$cgi = qq~$scripturl?cat=$currentcat~;} else {$cgi = qq~$scripturl?board=$currentboard~;} if ($currentboard && -e "$boardsdir/$currentboard.mbo" ) { require "$boardsdir/$currentboard.mbo"; } if (-e "$vardir/boards.pwd") {require "$vardir/boards.pwd";} if (-e "$vardir/cat.mco") {require "$vardir/cat.mco";} sub exit { local $| = 1; local $\ = ''; print ''; CORE::exit( $_[0] || 0 ); } sub header { my %params = @_; my $ret = ""; if ($params{'-status'}) { if ($yyIIS) { $ret .= "HTTP/1.0 $params{'-status'}\n"; } else { $ret .= "Status: $params{'-status'}\n"; } } $ret .= qq~Cache-Control: no-cache, must-revalidate\n~; $ret .= qq~Pragma: no-cache\n~; if ($params{'-cookie'}) { my(@cookie) = ref($params{'-cookie'}) && ref($params{'-cookie'}) eq 'ARRAY' ? @{$params{'-cookie'}} : $params{'-cookie'}; foreach (@cookie) { $ret .= "Set-Cookie: $_\n"; } } if ($params{'-location'}) { $ret .= "Location: $params{'-location'}\n"; } $params{'-charset'} = "; charset=$params{'-charset'}" if $params{'-charset'}; $params{'Content-Encoding'} = "Content-Encoding: $params{'Content-Encoding'}\n" if $params{'Content-Encoding'}; $ret .= "$params{'Content-Encoding'}Content-Type: text/html$params{'-charset'}\n\n"; return $ret; } sub cookie { my %params = @_; if ($params{'-expires'} =~ /\+(\d+)m/) { my ($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time + $1*60); $year += 1900; my @mos = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); my @dys = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat"); $mon = $mos[$mon]; $wday = $dys[$wday]; $params{'-expires'} = sprintf("%s, %02i-%s-%04i %02i:%02i:%02i GMT", $wday, $mday, $mon, $year, $hour, $min, $sec); } $params{'-path'} = " path=$params{'-path'};" if $params{'-path'}; $params{'-expires'} = " expires=$params{'-expires'};" if $params{'-expires'}; return "$params{'-name'}=$params{'-value'};$params{'-path'}$params{'-expires'}"; } sub Del_Max_IM { open(FILE, "$memberdir/$username.msg"); @messages = ; close(FILE); fopen(FILE, ">$memberdir/$username.msg", 1); for ($a = 0; $a < @messages; $a++) { chomp $messages[$a]; if($a < $numibox) { print FILE "$messages[$a]\n"; } } fclose(FILE); } sub Del_Max_IMOUT { open(FILE, "$memberdir/$username.outbox"); @omessages = ; close(FILE); fopen(FILE, ">$memberdir/$username.outbox", 1); for ($a = 0; $a < @omessages; $a++) { chomp $omessages[$a]; if($a < $numobox) { print FILE "$omessages[$a]\n"; } } fclose(FILE); } sub Del_Max_STORE { open(FILE, "$memberdir/$username.imstore"); @smessages = ; close(FILE); fopen(FILE, ">$memberdir/$username.imstore", 1); for ($a = 0; $a < @smessages; $a++) { chomp $smessages[$a]; if($a < $numstore) { print FILE "$smessages[$a]\n"; } } fclose(FILE); } sub redirectexit { print header(-status=>"302 Moved Temporarily", -location=>$yySetLocation); exit; } sub redirectinternal { &LoadIMs; # Load IM's if($currentboard) { if($INFO{'num'}) { require "$sourcedir/Display.pl"; &Display; } else { require "$sourcedir/MessageIndex.pl"; &MessageIndex; } } else { require "$sourcedir/BoardIndex.pl"; &BoardIndex; } exit; } sub template { my $gzaccept= $ENV{'HTTP_ACCEPT_ENCODING'}=~/\bgzip\b/ || $gzforce; ##### add exclusion for SSIC mod unless ( $ssic_dotemplate eq 'ssic_dotemplate' ) { if ($gzcomp && $gzaccept) { if($yySetCookies1 || $yySetCookies2) { print header(-cookie=>[$yySetCookies1, $yySetCookies2] , 'Content-Encoding' => 'gzip' ); } else { print header(-status=>'200 OK' , 'Content-Encoding' => 'gzip' ); } } else { if($yySetCookies1 || $yySetCookies2 || scalar @otherCookies) { print header(-status=>"200 OK", -cookie=>[$yySetCookies1, $yySetCookies2, @otherCookies], -charset=>$yycharset); } else { print header(-status=>"200 OK", -charset=>$yycharset); } } } # end exclusion for SSIC mod $yyposition = $yytitle; $yytitle = "$mbname - $yytitle"; $yymenu = qq~$img{'home'}$menusep$img{'help'}$menusep$img{'search'}$menusep$img{'memberlist'}~; chomp $newcalgroup; @newcalgrouplist = split(",",$newcalgroup); $newcalgroupflag = 0; foreach $newcalgroupitem (@newcalgrouplist) { if ($settings[7] eq $newcalgroupitem) { $newcalgroupflag = 1; } } if ($newcalopen == 1 || $settings[7] eq 'Administrator' || $newcalgroupflag == 1 ) { $yymenu .= qq~$menusep$img{'newcalendar'}~; } if($settings[7] eq 'Administrator') { $yymenu .= qq~$menusep$img{'admin'}~; } if($settings[7] eq 'Global Moderator' && $allow_mod == 1) { $yymenu .= qq~$menusep$img{'admin'}~; } if($username eq 'Guest') { $yymenu .= qq~$menusep$img{'login'}$menusep$img{'register'}~; } else { $yymenu .= qq~$menusep$img{'profile'}~; if ($enable_buddies == 1) { $yymenu .= qq~$menusep$img{'buddylist'}~; } if($enable_notification) { $yymenu .= qq~$menusep$img{'notification'}~; } $yymenu .= qq~$menusep$img{'logout'}~; } $yyimages = $imagesdir; fopen(TEMPLATE,"template.html") || die("$txt{'23'}: template.html"); @yytemplate =