home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2005 June
/
ccd0605.iso
/
Software
/
Shareware
/
Comunicatii
/
nat32
/
httpdi.tcl
< prev
next >
Wrap
Text File
|
2003-06-09
|
4KB
|
135 lines
#!tcl
#
# HTTP Daemon (Internet version)
#
if {$argc == 1} {
set port [lindex $argv 0]
} else {
set port 80
}
exec seth $port
set s [socket -p $port 1]
echo "HTTPDI listening at Internet Port $port (public)"
while {1} {
set ns [$s accept]
set data [$ns gets 512]
set fname [lindex $data 1]
if {$fname == "/"} {
set default nat32.htm
set fname $fname$default
}
set fname [concat [pwd]$fname]
if {[file exists $fname]} {
set len [file size $fname]
} else {
set password [format "+%s" [exec password]]
if {$password == "+"} {
$ns puts "HTTP/1.0 200 OK\n"
$ns puts "Content-type: text/plain\n"
$ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
$ns puts "\n"
$ns puts "ERROR: password invalid\n"
$ns shutdown
rename $ns {}
continue
}
set p [string last $password $fname]
if {$p == -1} {
$ns puts "HTTP/1.0 200 OK\n"
$ns puts "Content-type: text/plain\n"
$ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
$ns puts "\n"
$ns puts "ERROR: file not found or password invalid\n"
$ns shutdown
rename $ns {}
continue
} else {
incr p -1
set fname [string range $fname 0 $p]
}
set r [string first "shell?cmd=" $fname]
if {$r != -1} {
set cmd [split $fname =]
set cmd [lindex $cmd 1]
set cmd [split $cmd +]
set command [lindex $cmd 0]
set arg1 [lindex $cmd 1]
set arg2 [lindex $cmd 2]
set arg3 [lindex $cmd 3]
set arg4 [lindex $cmd 4]
set arg5 [lindex $cmd 5]
set arg6 [lindex $cmd 6]
set arg7 [lindex $cmd 7]
set arg8 [lindex $cmd 8]
set arg9 [lindex $cmd 9]
set arg10 [lindex $cmd 10]
$ns puts "HTTP/1.0 200 OK\n"
$ns puts "Content-type: text/plain\n"
$ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
$ns puts "\n"
set temp [string first "exec" $cmd]
if {$temp == "0"} {
$ns puts "ERROR: $cmd prohibited\n"
$ns shutdown
rename $ns {}
unset data
continue
}
if {$cmd == "exit"} {
$ns puts "ERROR: exit prohibited\n"
$ns shutdown
rename $ns {}
unset data
continue
}
if {$cmd == "termin"} {
$ns puts "Goodbye.\nHTTPD terminated.\n"
$ns shutdown
rename $ns {}
break
}
if {$command != ""} {
$ns puts [exec $command $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8]
$ns puts "\n"
}
$ns shutdown
rename $ns {}
unset data
continue
} else {
$ns puts "HTTP/1.0 200 OK\n"
$ns puts "Content-type: text/plain\n"
$ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
$ns puts "\n"
$ns puts "ERROR: file not found\n"
$ns shutdown
rename $ns {}
unset data
continue
}
}
$ns puts "HTTP/1.0 200 OK\n"
$ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
set d [string first ".." $fname]
if {$d == -1} {
$ns puts "\n"
set len [$ns putf $fname]
} else {
$ns puts "Content-type: text/plain\n"
$ns puts "\n"
$ns puts "ERROR: access prohibited\n"
}
$ns shutdown
rename $ns {}
unset data
}
rename $s {}
echo HTTP Daemon terminated