h
s;^(GET|HEAD|POST) ([^\?]*)\??(.+)? (HTTP\/[0-9]\.[0-9])\r?$;export REQUEST_METHOD='\''\1'\'';p
g
+ s;^(GET|HEAD|POST) ([^\?]*\??.*) (HTTP\/[0-9]\.[0-9])\r?$;\2;
+ s;'\'';'\''\\'\'''\'';g
+ s;^.*$;export REQUEST_URI='\''&'\'';p
+ g
s;^(GET|HEAD|POST) ([^\?]*)\??(.+)? (HTTP\/[0-9]\.[0-9])\r?$;\2;
s;'\'';'\''\\'\'''\'';g
s;^.*$;export PATH_INFO='\''&'\'';p
)
HTTP_format(){
- LC_ALL=C sed -rn '
+ LC_ALL=C sed -urn '
:A
/^\r?$/!{H;n;bA}
g
- s;^(\r?\n)*;;
+ s;^(\r?\n)*;;;
+ s;([^\r])\n;\1\r\n;g;
aConnection: close\r\n\r
- /^HTTP\/[0-9]\.[0-9] [1-5][0-9][0-9] .*/bX
+ /^Status: *[1-5][0-9][0-9] .*/{s;^Status: *;HTTP/1.1 ;; bX}
s;^(.+\n)?Location: .*$;HTTP/1.1 302 Found\r\n&;
s;^(.+\n)?Content-Type: .*$;HTTP/1.1 200 OK\r\n&;
'
}
-PATH_INFO="$(invalidate "${PATH_INFO}" '(^|.*/)\.\./.*' '')"
-if [ -z "$QUERY_STRING" -a -f "$_DATA/$PATH_INFO" ]; then
- . "$_EXEC/shcgi/static.sh" "$_DATA/$PATH_INFO"
+if [ -z "$QUERY_STRING" ]; then
+ PATH_INFO="$(printf "$(printf %s "$PATH_INFO" |sed 's:+: :g;s:\\:\\\\:g;s:%:\\x:g')")"
+ PATH_INFO="$(invalidate "${PATH_INFO}" '(^|.*/)\.\./.*' '')"
+ [ -f "${treeroot:-${_DATA}}/$PATH_INFO" ] && . "$_EXEC/shcgi/static.sh" "${treeroot:-${_DATA}}/$PATH_INFO"
exit 0
fi |HTTP_format