%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/rappan/www/cgi_link/
Upload File :
Create Path :
Current File : /home/rappan/www/cgi_link/admin.cgi

#!/usr/bin/perl

#=======================================================================================
#				BANNER LINK SYSTEM                                                 Script by HAL
#                                                                 Last Update 2007.11.08
#=======================================================================================
require 'preset.cgi';
require $jcode;
require 'sub.pl';

# クッキー機能のチェック
&get_adcookie;
$passw = $COOKIE{'pass'};

&get_date;

if($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#){ #マルチパート対応の場合
	if($ENV{'REQUEST_METHOD'} eq "POST"){
		$buf = "";
		$read_data = "";
		$remain = $ENV{'CONTENT_LENGTH'};
		binmode(STDIN);
		while ($remain) {
			$remain -= sysread(STDIN, $buf, $remain);
			$read_data .= $buf;
		}
		$pos1 = 0; # ヘッダ部の先頭
		$pos2 = 0; # ボディ部の先頭
		$pos3 = 0; # ボディ部の終端
		$delimiter = "";
		$max_count = 0;
		while (1) {
			# ヘッダ処理
			$pos2 = index($read_data,"\r\n\r\n",$pos1)+4;
			@headers = split("\r\n",substr($read_data,$pos1,$pos2-$pos1));
			$filename="";
			$name="";
			$flag=0;
			foreach(@headers){
				if ($delimiter eq "") {$delimiter = $_;
				}elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"; filename="([^;]*)"/i) {
					$name = $2;
					if ($3) {
						# 拡張子の取り出し
						@filefooter = split(/\./,$3);
						$f_footer = pop(@filefooter);
						$f_footer =~ tr/A-Z/a-z/;
						if($f_footer ne "gif" && $f_footer ne "jpg" && $f_footer ne "jpeg" && $f_footer ne "png"){ &error("許可されていない拡張子です。"); } 
						$filename = time() ."\.".$f_footer; #ファイルを時間でリネーム
					}
				}elsif(/^Content-Disposition: ([^;]*); name="([^;]*)"/i){$name = $2;}
			}
			# ボディ処理
			$pos3 = index($read_data, "\r\n$delimiter", $pos2);
			$size = $pos3 - $pos2;
			if($filename){
				if (open(OUT, "> $bn_dir$filename")) {
					binmode(OUT);
					print OUT substr($read_data, $pos2, $size);
					close(OUT);
				}
				$QUERY{$name} = $filename;
			}elsif($name){
				$QUERY{$name} = substr($read_data,$pos2,$size);
				$QUERY{$name} =~ s/\t/ /g;
			}
			# 終了処理
			$pos1 = $pos3 + length("\r\n$delimiter");
			if(substr($read_data, $pos1, 4) eq "--\r\n") {
				# すべてのファイルの終端
				last;
			}else{
				# 次のファイルを読み出す
				$pos1 += 2;
				next;
			}
		}
	}else{
		$buffer = $ENV{'QUERY_STRING'};
		@pairs = split(/&/,$buffer);
		@spall =();
		foreach $pair (@pairs) {
			($name, $value) = split(/=/, $pair);
			$value =~ tr/+/ /;
			$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
			# 文字コード変換
			jcode::convert(\$value,"sjis","sjis", "");
			$value =~ s/\t/ /g;
			$QUERY{$name} = $value;
		}
	}
}else{
	if ($ENV{'REQUEST_METHOD'} eq "POST") {
		read(STDIN, $formdata, $ENV{'CONTENT_LENGTH'});
	} else { $formdata = $ENV{'QUERY_STRING'}; }
	@pairs = split(/&/,$formdata);
	foreach $pair (@pairs) {
		($name, $value) = split(/=/, $pair);
		$value =~ tr/+/ /;
		$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
		$value =~ s/</&lt;/g;
		$value =~ s/>/&gt;/g;
		$value =~ s/\n//g;
		$value =~ s/\,//g;
		jcode::convert(\$value,"sjis","sjis", "");
		$QUERY{$name} = $value;
	}
}

if($QUERY{'passwd'} ne ""){ $passw = $QUERY{'passwd'}; }

if($passw ne $admin_pass){
	print "Content-Type: text/html\n\n";
	print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n";
	print <<"EOM";
<html>
<head><title></title>
<center>
	<form action="$admin_cgi" method="post">
	Password <input type="password" name="passwd" size="10">
	<input type="submit" value="login">
	</form>
	</center>
</body></html>
EOM
	exit;
}

$cook="pass<>$passw";
&set_adcookie("60",$cook);

#CGIが呼び出された条件によって処理を分岐
if($QUERY{'mode'} eq 'inputbase') { &inputbase; }
elsif($QUERY{'mode'} eq 'input') { &input; }
elsif($QUERY{'mode'} eq 'del') { &del; }
elsif($QUERY{'mode'} eq 'logout') { &logout; }
else { &html; }

#===============================表示HTMLドキュメントを生成===========================
sub html {
	if($QUERY{'mode'} eq ""){ $QUERY{'mode'} = @junle_code[0]; }
	# ジャンルタイトル決定
	$i = 0; $jtitle = 'admin';
	foreach $modew (@junle_code) {
		if($QUERY{'mode'} eq $modew){ $jtitle .= "-$junle_str[$i]"; }
		$i++;
	}
	open(PRE,"$design_file") || &error('FILE OPEN ERROR - design');
	@htmls = <PRE>;
	close(PRE);
	$html = "";
	foreach (@htmls) { $html .= $_; }
	($dhead,$heads,$dfoot) = split(/<!--header-->/, $html);
	if($QUERY{'mode'} eq "index"){
		open(IND,"$index_file") || &error('FILE OPEN ERROR - index');
		@htmls = <IND>;
		close(IND);
		$html = "";
		foreach (@htmls) { $html .= $_; }
	}else{
		if($QUERY{'num'} ne ""){ $num = $QUERY{'num'}; } else{ $num = 0; }
		if($pmax == 0){ $pmax = 999; }
		$next_num = $num + $pmax;
		$html = $dhead .'<!--header-->' .$dfoot;
		($dhead,$sheet,$dfoot) = split(/<!--tr-->/, $html);
		($shead,$tsheet,$sfoot) = split(/<!--td-->/, $sheet);
		if($QUERY{'mode'} eq "rank"){ $log_file = $rank_file; }
		open(LOG,"$log_file") || &error('FILE OPEN ERROR - log');
		@logs = <LOG>;
		close(LOG);
		# ソート処理
			if($sort_ck == 2 || $sort_ck == 3){
				@sortw = ();
				foreach (@logs) {
					($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
					push(@sortw,"$seq<>$site_namek<>$site_name<>$cnt<>$ad_name<>$comm<>$url<>$bn_url<>$janru<>\n");
				}
				if($sort_ck == 2){ @sorted = sort { $b <=> $a } @sortw; }
				else{ @sorted = sort { $a <=> $b } @sortw; }
				@logs = ();
				foreach (@sorted) {
					($seq,$site_namek,$site_name,$cnt,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
					push(@logs,"$cnt<>$seq<>$site_name<>$site_namek<>$ad_name<>$comm<>$url<>$bn_url<>$janru<>\n");
				}
			}elsif($sort_ck == 1){ @logs = reverse @logs; }
		$prev = ""; $i = 0; $j = 0; $sf = 0;
		foreach (@logs) {
			($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
			if($bn_url eq ""){ $bn_url = $bn_dir .$nb_img; }
			elsif(!($bn_url =~ /http:/)){ $bn_url = $bn_dir .$bn_url; }
			$url = $view_cgi .'?url=' .$seq;
			$site_name = "<a href=\"$url\" target=\"_blank\">$site_name</a>";
			$linkb = "<a href=\"$url\" target=\"_blank\"><img src=\"$bn_url\" border=\"0\"></a>";
			$adminw = "<table width=100%><tr>";
			$adminw .= "<td><a href=\"$admin_cgi?mode=inputbase&seq=$seq\">編集</a>";
			$adminw .= "<td align=\"right\"><a href=\"javascript:WV_jumpok(\'$admin_cgi?mode=del&seq=$seq\',\'このデータを削除します。よろしいですか?\');\">削除</a>";
			$adminw .= "</tr></table>";
			if($QUERY{'mode'} eq "rank"){
				$f = 1; $i++;
			}elsif($admin_view == 0){
				$f = 1; $i++;
			}else{
				@janrus = split("##",$janru);
				$f = 0;
				foreach $value (@janrus) {
					if($value eq $QUERY{'mode'}){ $f = 1; $i++; last; }
				}
			}
			if($f == 1){
				if($j >= $num && $j < $next_num){
					$tsheetw = $tsheet;
					if($QUERY{'mode'} eq "rank"){ $tsheetw =~ s/<!--rcnt-->/[ $cnt ]/g; }
					elsif($cnt >= time()-60*60*24*$new_day){ # NEWマーク処理
						$tsheetw =~ s/<!--new-->/<img src="$new_img" align="absmiddle">/g;
					}
					$tsheetw =~ s/<!--site_name-->/$site_name/g;
					$tsheetw =~ s/<!--ad_name-->/$ad_name/g;
					$tsheetw =~ s/<!--comm-->/$comm/g;
					$tsheetw =~ s/<!--url-->/$url/g;
					$tsheetw =~ s/<!--link-->/$linkb/g;
					$tsheetw =~ s/<!--admin-->/$adminw/g;
					$sf++;
					if($sf == 1){ $prev .= $shead; }
					$prev .= $tsheetw;
					if($sf == $table_su){ $prev .= $sfoot; $sf = 0; }
				}
				$j++;
			}
		}
		if($sf != $table_su && $sf != 0){
			$tsheet =~ s/<!--site_name-->/No DATA/g;
			$tsheet =~ s/<!--comm-->/No DATA/g;
			while($sf < $table_su){ $prev .= $tsheet; $sf++; }
			$prev .= $sfoot;
		}
		$html = $dhead .$prev .$dfoot;
	}
	$newinput = "<a href=\"$admin_cgi?mode=inputbase\"><b>新規入力</b></a>&nbsp;&nbsp;<a href=\"$admin_cgi?mode=logout\"><b>ログアウト</b></a>";
	if($admin_view == 1){
		$heads =~ s/<!--cgi-->/$admin_cgi/g;
		$heads .= $newinput;
	}else{
		$heads = $newinput;
	}
	$p = $i / $pmax;
	$iw = 0; $page = "";
	while($iw < $p){
		$iww = $iw + 1; $numw = $iw * $pmax;
		if($num == $numw){ $page .= "[$iww]&nbsp;"; }
		else{ $page .= "<a href=\"$admin_cgi?mode=$QUERY{'mode'}&num=$numw\">[$iww]</a>&nbsp;"; }
		$iw++;
	}
	$html =~ s/<!--ken-->/$j/g;
	$html =~ s/<!--page-->/$page/g;
	$html =~ s/<!--header-->/$heads/g;
	$html =~ s/<!--cgi-->/$view_cgi/g;
	$html =~ s/<!--janru-->/$jtitle/g;
	$html =~ s/<!--admincgi-->/$admin_cgi/g;
	$html =~ s/<!--system-->/$systeminfo/g;
	print "Content-Type: text/html\n\n";
	print $html;
	exit;
}

#===============================表示HTMLドキュメントを生成===========================
sub inputbase {
	open(PRE,"$admin_file") || &error('FILE OPEN ERROR - admin');
	@htmls = <PRE>;
	close(PRE);
	$html = "";
	foreach (@htmls) { $html .= $_; }
	$hidden = "<input type=\"hidden\" name=\"mode\" value=\"input\">";
	$hidden .= "<input type=\"hidden\" name=\"seq\" value=\"$QUERY{'seq'}\">";
	if($QUERY{'seq'} ne ""){
		$f = 0;
		open(LOG,"$log_file") || &error('FILE OPEN ERROR - data');
		@logs = <LOG>;
		close(LOG);
		foreach (@logs) {
			($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
			if($seq == $QUERY{'seq'}){ $f = 1; last; }
		}
		if($f != 1){ &error('指定されたサイトは登録されていません。'); }
	}
	# ジャンルセレクト
		$sel = ""; $i = 0;
		@junles = split(/##/,$janru);
		foreach $sw (@junle_code) {
			$iw = 0;
			foreach $jw (@junles) {
				if($sw eq $jw){ $sel .= "<input type=\"checkbox\" name=\"j_$sw\" value=\"$sw\" checked>$junle_str[$i] \n"; $iw = 1; }
			}
			if($iw != 1){ $sel .= "<input type=\"checkbox\" name=\"j_$sw\" value=\"$sw\">$junle_str[$i] \n";}
			$i++;
		}
	$html =~ s/<!--admincgi-->/$admin_cgi?mode=inputbase/g;
	$html =~ s/<!--admin_cgi-->/$admin_cgi/g;
	$html =~ s/<!--hidden-->/$hidden/g;
	$html =~ s/<!--site_name-->/$site_name/g;
	$html =~ s/<!--site_namek-->/$site_namek/g;
	$html =~ s/<!--ad_name-->/$ad_name/g;
	$comm =~ s/<br>/\n/g;
	$html =~ s/<!--comm-->/$comm/g;
	$html =~ s/<!--url-->/$url/g;
	if(!($bn_url =~ /http:/)){ $bn_url = ""; }
	$html =~ s/<!--bn_url-->/$bn_url/g;
	$html =~ s/<!--janru-->/$sel/g;
	print "Content-Type: text/html\n\n";
	print $html;
	exit;
}

#===============================入力/編集処理===========================
sub input {
	$QUERY{'comm'} =~ s/\r\n/<br>/g;
	$QUERY{'comm'} =~ s/\r/<br>/g;
	$QUERY{'comm'} =~ s/\n/<br>/g;
	$bdf = 0; $QUERY{'janru'} = "";
	foreach $sw (@junle_code) {
		$jw = 'j_' .$sw;
		if($QUERY{$jw} ne ""){ $QUERY{'janru'} .= "$QUERY{$jw}" .'##'; }
	}
	if($QUERY{'janru'} eq ""){ &error('ジャンルを少なくとも一つは選択してください。'); }
	$QUERY{'janru'} = substr($QUERY{'janru'},0,-2);
	if($QUERY{'bn_url'} ne ""){ $bdf = 1; }
	if($QUERY{'up'} ne "" && $QUERY{'bn_url'} ne ""){ &error('直リンバナーかアップロードバナーかどちらかにしてください。'); }
	elsif($QUERY{'up'} ne ""){ $QUERY{'bn_url'} = $QUERY{'up'}; }
	# ロック開始
		if ($lockkey == 1) { &lock1; }
		elsif ($lockkey == 2) { &lock2; }
	open(LOG,"$log_file") || &error('FILE OPEN ERROR - data');
	@logs = <LOG>;
	close(LOG);
	@news = ();
	$i = 1;
	foreach (@logs) {
		($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
		if($seq != $QUERY{'seq'}){ push(@news,$_); }
		else{
			$cntw = $cnt;
			if($QUERY{'up'} ne "" || $bdf == 1 && !($bn_url =~ /http:/)){
				$w = $bn_dir .$bn_url;
				unlink $w;
			}
			elsif($bdf != 1 && ($bn_url =~ /http:/)){ $QUERY{'bn_url'} = ""; }
			elsif($QUERY{'bn_url'} eq ""){ $QUERY{'bn_url'} = $bn_url; }
		}
		if($seq >= $i){ $i = $seq + 1; }
	}
	if($QUERY{'seq'} eq ""){ $QUERY{'seq'} = $i; $cntw = time(); }
	unshift(@news,"$cntw<>$QUERY{'seq'}<>$QUERY{'site_name'}<>$QUERY{'site_namek'}<>$QUERY{'ad_name'}<>$QUERY{'comm'}<>$QUERY{'url'}<>$QUERY{'bn_url'}<>$QUERY{'janru'}<>\n");
	# ソート処理
		@sortw = ();
		foreach (@news) {
			($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
			push(@sortw,"$site_namek<>$seq<>$site_name<>$cnt<>$ad_name<>$comm<>$url<>$bn_url<>$janru<>\n");
		}
		@sorted = sort { $a cmp $b } @sortw;
		@logs = ();
		foreach (@sorted) {
			($site_namek,$seq,$site_name,$cnt,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
			push(@logs,"$cnt<>$seq<>$site_name<>$site_namek<>$ad_name<>$comm<>$url<>$bn_url<>$janru<>\n");
		}
	open(OUT,">$log_file") || &error('FILE OPEN ERROR - data');
	print OUT @logs;
	close(OUT);
	open(RNK,"$rank_file") || &error('FILE OPEN ERROR - log');
	@ranks = <RNK>;
	close(RNK);
	@news = (); $f = 0;
	foreach (@ranks) {
		($cntr,$seqr,$site_namer,$site_namekr,$ad_namer,$commr,$urlr,$bn_urlr,$janrur) = split(/<>/, $_);
		if($QUERY{'seq'} == $seqr){
			push(@news,"$cntr<>$seqr<>$QUERY{'site_name'}<>$QUERY{'site_namek'}<>$QUERY{'ad_name'}<>$QUERY{'comm'}<>$QUERY{'url'}<>$QUERY{'bn_url'}<>$QUERY{'janru'}<>\n");
			$f = 1;
		}else{ push(@news,$_); }
	}
	if($f == 1){
		open(OUT,">$rank_file") || &error('FILE OPEN ERROR - rank');
		print OUT @news;
		close(OUT);
	}
	&unlock; # ロック解除
	# リロード処理
    print "Location: $admin_cgi?\n\n";
}

#===============================削除処理===========================
sub del {
	# ロック開始
		if ($lockkey == 1) { &lock1; }
		elsif ($lockkey == 2) { &lock2; }
	open(LOG,"$log_file") || &error('FILE OPEN ERROR - data');
	@logs = <LOG>;
	close(LOG);
	@news = ();
	$i = 1;
	foreach (@logs) {
		($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
		if($seq != $QUERY{'seq'}){ push(@news,$_); }
		else{
			if(!($bn_url =~ /http:/)){
				$w = $bn_dir .$bn_url;
				unlink $w;
			}
		}
	}
	open(OUT,">$log_file") || &error('FILE OPEN ERROR - data');
	print OUT @news;
	close(OUT);
	open(LOG,"$rank_file") || &error('FILE OPEN ERROR - rank');
	@logs = <LOG>;
	close(LOG);
	@news = ();
	$i = 1;
	foreach (@logs) {
		($cnt,$seq,$site_name,$site_namek,$ad_name,$comm,$url,$bn_url,$janru) = split(/<>/, $_);
		if($seq != $QUERY{'seq'}){ push(@news,$_); }
	}
	open(OUT,">$rank_file") || &error('FILE OPEN ERROR - rank');
	print OUT @news;
	close(OUT);
	&unlock; # ロック解除
	# リロード処理
    print "Location: $admin_cgi?\n\n";
}


#===============================ログアウト処理===========================
sub logout{
	&set_adcookie("0","");
	# リロード処理
    print "Location: $admin_cgi?\n\n";
}

#===============================クッキーの取得===========================
sub get_adcookie{
	@pairs = split(/\;/, $ENV{'HTTP_COOKIE'});
	foreach $pair (@pairs) {
		local($name, $value) = split(/\=/, $pair);
		$name =~ s/ //g;
		$DUMMY{$name} = $value;
	}
	@pairs = split(/\,/, $DUMMY{$cookie_name});
	foreach $pair (@pairs) {
		local($name, $value) = split(/<>/, $pair);
		$COOKIE{$name} = $value;
	}
}

#===============================クッキーの発行(60日間有効)===========================
sub set_adcookie{
	my $days = $_[0];
	my $cook = $_[1];
	($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$dmy,$dmy) = gmtime(time + 60*24*60*$days);
	$yearg += 1900;
	if ($secg  < 10) { $secg  = "0$secg";  }
	if ($ming  < 10) { $ming  = "0$ming";  }
	if ($hourg < 10) { $hourg = "0$hourg"; }
	if ($mdayg < 10) { $mdayg = "0$mdayg"; }
	$month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong];
	$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg];
	$date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT";
	print "Set-Cookie: $cookie_name=$cook; expires=\"$date_gmt\"\n";
}

# 時間取得 ------------------------------------------------------------------------------
sub get_date{
	$ENV{'TZ'} = "JST-9";
	@date = localtime(time);
	$date[5] += 1900;
	$date[4] = sprintf("%02d",$date[4] + 1);
	$date[3] = sprintf("%02d",$date[3]);
	$date[2] = sprintf("%02d",$date[2]);
	$date[1] = sprintf("%02d",$date[1]);
	$date[6] = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$date[6]];
}


Zerion Mini Shell 1.0