')"
}
-if [ -z "$REQUEST_METHOD" -a -z "$SERVER_PROTOCOL" ]; then
+if [ -z "$REQUEST_METHOD" ]; then
# no webserver variables means we are running via inetd / ncat
# so use builtin web server
# script.
cgilite_status='200 OK'; cgilite_response=''; cgilite_cl="Connection: close${CR}";
- . "$0" |sed '1{s;^Status: ;HTTP/1.1 ;; t; s;^;HTTP/1.1 200 OK\r\n;;}' \
- | while read -r l; do case $l in
+ . "$0" | while read -r l; do case $l in
Status:*) cgilite_status="${l#Status: }";;
Content-Length:*) cgilite_cl="${l}";;
$CR) printf '%s %s\r\n%s\n%s\n\r\n' \
printf %s "$*" \
| hexdump -v -e '/1 ",%02X"' \
- | tr , %
+ | sed 's;,;%;g; s;%2F;/;g;'
}
+PATH(){
+ printf %s "$1" \
+ | sed -r 's;^.*$;/&/;; s;/+;/;g;
+ :X;
+ s;^/\.\./;/;; s;/\./;/;g;
+ tX;
+ s;/[^/]+/\.\./;/;;
+ tX;
+ s;^(/.*)/$;\1;'
+}
+
+
SET_COOKIE(){
+ local expire cookie
case "$1" in
''|0|session) expire='';;
[+-][0-9]*) expire="$(date -R -d @$(($(date +%s) + $1)))";;
}
REDIRECT(){
- printf '%s: %s\r\n'
+ printf '%s: %s\r\n' \
Status "303 See Other" \
Content-Length 0 \
Location "$*"