#!/usr/local/bin/perl # # telnet.cgi # # 1997/08/18 Ver.0.00 # 1997/08/19 Ver.0.01 # 1997/09/05 Ver.0.02 # 1997/09/17 Ver.0.03 アンダーラインの処理を追加 # 1997/11/11 Ver.0.04 PATH の設定 # 1998/01/23 Ver.0.05 $ownname の自動化 # 1998/01/30 Ver.0.06 PATH の見直しなど # 1998/03/03 Ver.0.07 多重打ち、リストマークの処理など # 感謝! yav さん(http://www2s.biglobe.ne.jp/~yav/ ) # 1998/04/06 Ver.0.08 pwd から cwd へ, cd の入力の解釈をちょっと改良 # Hi-HO, RIMNET での動作を確認 # # 2000/12/22 Ver.0.08a method を POST に変更してパスワード認証を付加 # (nakka@nakka.com) # # (c) 1997,1998 がま # e-mail addr : gama@mvg.biglobe.ne.jp # # usage: # ex. # telnet.cgi?date # # cgi 自身の名前 ------------------------------------------------------- $ownname="http://$ENV{'SERVER_NAME'}$ENV{'SCRIPT_NAME'}"; # パスワード(変更してからお使いください) ------------------------------- $password="pass"; # PATH を設定する ------------------------------------------------------ $ENV{'PATH'} = '/bin' . ':/usr/bin' . ':/usr/ucb' . ':/etc' . ':/usr/etc' . ':/usr/lib' . ':/usr/local/bin' . ':/usr/local/X11R6/bin' . ':/usr/local/bin/mh' . ':/usr/local/lib' . ':/usr/local/lib/mh' . ':/usr/local/sbin' . ':/usr/local/libexec' . ':/usr/local/canna/bin' ; # ---------------------------------------------------------------------- if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); ($pass,$dir,$cmd)=split('&',$query_string); $pass =~ s/pass=//; $pass =~ s/%(..)/pack('c',hex($1))/ge; $dir =~ s/dir=//; $dir =~ s/%(..)/pack('c',hex($1))/ge; $cmd =~ s/cmd=//; $cmd =~ s/\+/ /g; $cmd =~ s/%(..)/pack('c',hex($1))/ge; } # ---------------------------------------------------------------------- $|=1; print "Content-type: text/html\n\n"; print 'telnet'; print "
\n";

if ($pass ne $password) {
	print "pass:\n";
	print '
'; print ''; print ''; print '
'; print ''; exit; } # ---------------------------------------------------------------------- chdir("$dir"); $wd=&pwd; print "Curr Dir:$wd\n"; # ---------------------------------------------------------------------- $cmdpr = $cmd; $cmdpr =~ s/&/&/g; $cmdpr =~ s//>/g; print "\n>$cmdpr\n"; # ---------------------------------------------------------------------- if ($cmd =~ /^cd(\s)*/ ) { # cd は、内部で処理する。 unless (chdir($')) { print "cd $':not success.\n"; } $dir=&pwd; print "Curr Dir:$dir\n"; } else { open(PROC,"$cmd 2>&1 |"); # 実行 while () { # 結果を読み出す s//\002/g; # s/(.)(\x08\1)+/$1<\/B>/g; # 多重打ち : . 08h(BS) . s/_\x08(.)/$1<\/U>/g; # アンダーライン : 5fh(_) 08h(BS) s/o\x08\+/X<\/S>/g; # リストマーク : 35h(o) 08h(BS) 2bh(+) s/<\/(.)><\1>//g; # を削除 s/&/&/g; # s/\001/</g; # s/\002/>/g; # print $_; } close(PROC); } # ---------------------------------------------------------------------- print "
\n"; print '
'; print '
'; print ''; print ''; print ''; print ''; print '
'; print ''; exit; # ---------------------------------------------------------------------- sub pwd { use Cwd; $wd = Cwd::getcwd(); unless ($wd) { $wd='/'; } return $wd; }