home *** CD-ROM | disk | FTP | other *** search
- #!tcl
-
- #
- # HTTP Daemon
- #
-
- if {$argc == 1} {
- set port [lindex $argv 0]
- } else {
- set port 80
- }
-
- exec seth $port
-
- set s [socket -p $port 1]
- set ip [$s getaddr]
- echo "HTTPD listening at $ip:$port (private)"
-
- while {1} {
- set ns [$s accept]
- set ip [$ns getaddr]
- set t [string last " \[public" $ip]
- if {$t != -1} {
- incr t -1
- set ip [string range $ip 0 $t]
- echo [exec date] HTTPD: connection request from $ip ignored
- rename $ns {}
- continue
- }
- 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"
- $ns puts "\n"
- set len [$ns putf $fname]
- $ns shutdown
- rename $ns {}
- unset data
- }
- rename $s {}
- echo HTTP Daemon terminated
-