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