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

47 lines
796 B
Text
Raw Normal View History

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