plan9fox/rc/bin/rc-httpd/handlers/cgi

55 lines
823 B
Plaintext
Raw Normal View History

2013-02-04 22:40:05 +00:00
#!/bin/rc
fn filter_headers{
response='HTTP/1.1 200 OK'^$cr
lines=''
done=false
while(~ $done false){
line=`{read}
head=`{echo $line | awk '{print tolower($1)}'}
if(~ $head status:*){
tmp=`{echo $line | awk '{$1="" ; print}'}
response='HTTP/1.1 '^$"tmp^$cr
}
if not if(~ $line '')
done=true
if not
lines=$"lines^$"line^$cr^'
'
}
echo $response
echo -n $"lines
}
fn run_cgi {
path=$cgi_path exec $"cgi_bin $params
}
cgi_bin=$1
if(! ~ $cgi_bin /*){
pwd=`{pwd}
cgi_bin=$"pwd ^ / ^ $cgi_bin
}
cgi_dir=$*($#*)
if(! test -d $cgi_dir){
cgi_dir=`{basename -d $cgi_dir}
cgi_dir=$"cgi_dir
}
if(! test -d $"cgi_dir){
error 500
exit
}
if(! test -f $cgi_bin -x $cgi_bin){
error 500
exit
}
do_log 200
builtin cd $"cgi_dir
run_cgi | {
filter_headers
emit_extra_headers
echo $cr
exec cat
}