home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 June / ccd0605.iso / Software / Shareware / Comunicatii / nat32 / httpdi.tcl < prev    next >
Text File  |  2003-06-09  |  4KB  |  135 lines

  1. #!tcl
  2.  
  3. #
  4. # HTTP Daemon (Internet version)
  5. #
  6.  
  7. if {$argc == 1} {
  8.     set port [lindex $argv 0]
  9. } else {
  10.     set port 80
  11. }
  12. exec seth $port
  13.  
  14. set s [socket -p $port 1]
  15. echo "HTTPDI listening at Internet Port $port (public)"
  16.  
  17. while {1} {
  18.     set ns [$s accept]
  19.     set data [$ns gets 512]
  20.     set fname [lindex $data 1]
  21.     if {$fname == "/"} {
  22.         set default nat32.htm
  23.         set fname $fname$default
  24.     }
  25.     set fname [concat [pwd]$fname]
  26.  
  27.     if {[file exists $fname]} {
  28.         set len [file size $fname]
  29.     } else {
  30.         set password [format "+%s" [exec password]]
  31.         if {$password == "+"} {
  32.             $ns puts "HTTP/1.0 200 OK\n"
  33.             $ns puts "Content-type: text/plain\n"
  34.             $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
  35.             $ns puts "\n"
  36.             $ns puts "ERROR: password invalid\n"
  37.             $ns shutdown
  38.             rename $ns {}
  39.             continue
  40.         }
  41.  
  42.         set p [string last $password $fname]
  43.         if {$p == -1} {
  44.             $ns puts "HTTP/1.0 200 OK\n"
  45.             $ns puts "Content-type: text/plain\n"
  46.             $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
  47.             $ns puts "\n"
  48.             $ns puts "ERROR: file not found or password invalid\n"
  49.             $ns shutdown
  50.             rename $ns {}
  51.             continue
  52.         } else {
  53.             incr p -1
  54.             set fname [string range $fname 0 $p]
  55.         }
  56.         set r [string first "shell?cmd=" $fname]
  57.         if {$r != -1} {
  58.             set cmd [split $fname =]
  59.             set cmd [lindex $cmd 1]
  60.             set cmd [split $cmd +]
  61.             set command [lindex $cmd 0]
  62.             set arg1 [lindex $cmd 1]
  63.             set arg2 [lindex $cmd 2] 
  64.             set arg3 [lindex $cmd 3] 
  65.             set arg4 [lindex $cmd 4] 
  66.             set arg5 [lindex $cmd 5] 
  67.             set arg6 [lindex $cmd 6] 
  68.             set arg7 [lindex $cmd 7] 
  69.             set arg8 [lindex $cmd 8] 
  70.             set arg9 [lindex $cmd 9] 
  71.             set arg10 [lindex $cmd 10] 
  72.             $ns puts "HTTP/1.0 200 OK\n"
  73.             $ns puts "Content-type: text/plain\n"
  74.             $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
  75.             $ns puts "\n"
  76.  
  77.             set temp [string first "exec" $cmd]
  78.             if {$temp == "0"} {
  79.                 $ns puts "ERROR: $cmd prohibited\n"
  80.                 $ns shutdown
  81.                 rename $ns {}
  82.                 unset data
  83.                 continue
  84.             }
  85.             if {$cmd == "exit"} {
  86.                 $ns puts "ERROR: exit prohibited\n"
  87.                 $ns shutdown
  88.                 rename $ns {}
  89.                 unset data
  90.                 continue
  91.             }
  92.             if {$cmd == "termin"} {
  93.                 $ns puts "Goodbye.\nHTTPD terminated.\n"
  94.                 $ns shutdown
  95.                 rename $ns {}
  96.                 break
  97.             }
  98.             if {$command != ""} {
  99.                 $ns puts [exec $command $arg1 $arg2 $arg3 $arg4 $arg5 $arg6 $arg7 $arg8]
  100.                 $ns puts "\n"
  101.             }
  102.             $ns shutdown
  103.             rename $ns {} 
  104.             unset data
  105.             continue
  106.         } else {
  107.             $ns puts "HTTP/1.0 200 OK\n"
  108.             $ns puts "Content-type: text/plain\n"
  109.             $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
  110.             $ns puts "\n"
  111.             $ns puts "ERROR: file not found\n"
  112.             $ns shutdown
  113.             rename $ns {} 
  114.             unset data
  115.             continue
  116.         }
  117.     }
  118.     $ns puts "HTTP/1.0 200 OK\n"
  119.     $ns puts "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n"
  120.     set d [string first ".." $fname] 
  121.     if {$d == -1} {
  122.         $ns puts "\n"
  123.         set len [$ns putf $fname]
  124.     } else {
  125.         $ns puts "Content-type: text/plain\n"
  126.         $ns puts "\n"
  127.         $ns puts "ERROR: access prohibited\n"
  128.     }
  129.     $ns shutdown
  130.     rename $ns {}
  131.     unset data
  132. }
  133. rename $s {}
  134. echo HTTP Daemon terminated
  135.