_DATA="${_DATA:-.}"
_EXEC="${_EXEC%/}" _DATA="${_DATA%/}" _BASE="${_BASE%/}"
+export _EXEC _DATA _BASE
+
# Carriage Return and Line Break characters for convenience
CR="\r"
BR='
"$pfx"[0-9a-fA-F][0-9a-fA-F]*) in="${in#${pfx}}";;
\\*) in="${in#?}"; out="${out}\\\\"; continue;;
%*) in="${in#?}"; out="${out}%%"; continue;;
- *) out="${out}${in%"${in#?}"}"; in="${in#?}"; continue;;
+ *) att="${in%%"${pfx}"*}"; att="${att%%%*}"; att="${att%%\\*}"
+ out="${out}${att}"; in="${in#"${att}"}"; continue;;
esac;
# Hex escapes for printf (e.g. \x41) are not portable
(sleep $cgilite_timeout && kill $$) & cgilite_watchdog=$!
while read REQUEST_METHOD REQUEST_URI SERVER_PROTOCOL; do
+ unset PATH_INFO QUERY_STRING cgilite_headers CONTENT_LENGTH CONTENT_TYPE
+
[ "${SERVER_PROTOCOL#HTTP/1.[01]${CR}}" ] && break
kill $cgilite_watchdog
[ "${REQUEST_URI}" = "${REQUEST_URI#*\?}" ] \
&& QUERY_STRING='' \
|| QUERY_STRING="${REQUEST_URI#*\?}"
- cgilite_headers=''; while read -r hl; do
+ while read -r hl; do
hl="${hl%${CR}}"; [ "$hl" ] || break
case $hl in
'Content-Length: '*) CONTENT_LENGTH="${hl#*: }";;
done
export REMOTE_ADDR SERVER_NAME SERVER_PORT REQUEST_METHOD REQUEST_URI SERVER_PROTOCOL \
- PATH_INFO QUERY_STRING CONTENT_TYPE CONTENT_LENGTH
+ PATH_INFO QUERY_STRING CONTENT_TYPE CONTENT_LENGTH cgilite_headers
# Try to serve multiple requests, provided that script serves a
# Content-Length header.
# Also escape [, ], and \n for use in html-sh
local str out
[ $# -eq 0 ] && str="$(cat)" || str="$*"
- while [ "$str" ]; do
- case $str in
- \&*) out="${out}&";;
- \<*) out="${out}<";;
- \>*) out="${out}>";;
- \"*) out="${out}"";;
- \'*) out="${out}'";;
- \[*) out="${out}[";;
- \]*) out="${out}]";;
- "${CR}"*) out="${out}
";;
- "${BR}"*) out="${out}
";;
- *) out="${out}${str%"${str#?}"}";;
- esac
- str="${str#?}"
- done
+ while [ "$str" ]; do case $str in
+ \&*) out="${out}&"; str="${str#?}";;
+ \<*) out="${out}<"; str="${str#?}";;
+ \>*) out="${out}>"; str="${str#?}";;
+ \"*) out="${out}""; str="${str#?}";;
+ \'*) out="${out}'"; str="${str#?}";;
+ \[*) out="${out}["; str="${str#?}";;
+ \]*) out="${out}]"; str="${str#?}";;
+ "${CR}"*) out="${out}
"; str="${str#?}";;
+ "${BR}"*) out="${out}
"; str="${str#?}";;
+ *) out="${out}${str%%[]&<>\"\'[]*}"; str="${str#"${str%%[]&<>\"\'[]*}"}";;
+ esac; done
printf %s "$out"
}
# Escape pathes, so they can be used in link tags and HTTP Headers
local str out
[ $# -eq 0 ] && str="$(cat)" || str="$*"
- while [ "$str" ]; do
- case $str in
- \&*) out="${out}%26";;
- \"*) out="${out}%22";;
- \'*) out="${out}%27";;
- \?*) out="${out}%3F";;
- \#*) out="${out}%23";;
- \[*) out="${out}%5B";;
- \]*) out="${out}%5D";;
- \ *) out="${out}%20";;
- " "*) out="${out}%09";;
- "${CR}"*) out="${out}%0D";;
- "${BR}"*) out="${out}%0A";;
- %*) out="${out}%25";;
- *) out="${out}${str%"${str#?}"}";;
- esac
- str="${str#?}"
- done
+ while [ "$str" ]; do case $str in
+ \&*) out="${out}%26"; str="${str#?}";;
+ \"*) out="${out}%22"; str="${str#?}";;
+ \'*) out="${out}%27"; str="${str#?}";;
+ \?*) out="${out}%3F"; str="${str#?}";;
+ \#*) out="${out}%23"; str="${str#?}";;
+ \[*) out="${out}%5B"; str="${str#?}";;
+ \]*) out="${out}%5D"; str="${str#?}";;
+ \ *) out="${out}%20"; str="${str#?}";;
+ " "*) out="${out}%09"; str="${str#?}";;
+ "${CR}"*) out="${out}%0D"; str="${str#?}";;
+ "${BR}"*) out="${out}%0A"; str="${str#?}";;
+ %*) out="${out}%25"; str="${str#?}";;
+ *) out="${out}${str%%[]&\"\'\?# ${CR}${BR}%[]*}"; str="${str#"${str%%[]&\"\'\?# ${CR}${BR}%[]*}"}";;
+ esac; done
printf %s "$out"
}