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

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