12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #! /bin/bash -E
-
- # (internal) routine to store POST data
- function cgi_get_POST_vars() {
- # save POST variables (only first time this is called)
- [ -z "$QUERY_STRING_POST" \
- -a "$REQUEST_METHOD" = "POST" -a ! -z "$CONTENT_LENGTH" ] && \
- read -N $CONTENT_LENGTH QUERY_STRING_POST
- if [ "${CONTENT_TYPE}" != "application/x-www-form-urlencoded" ]; then
- # might work with regular parsing below..
- return
- elif [ "${CONTENT_TYPE}" != "multipart/form-data" ]; then
- # cant handle..
- return
- fi
- return
- }
-
- # (internal) routine to decode urlencoded strings
- function cgi_decodevar() {
- [ $# -ne 1 ] && return
- local v t h
- # replace all + with whitespace and append %%
- t="${1//+/ }%%"
- while [ ${#t} -gt 0 -a "${t}" != "%" ]; do
- v="${v}${t%%\%*}" # digest up to the first %
- t="${t#*%}" # remove digested part
- # decode if there is anything to decode and if not at end of string
- if [ ${#t} -gt 0 -a "${t}" != "%" ]; then
- h=${t:0:2} # save first two chars
- t="${t:2}" # remove these
- v="${v}"`echo -e \\\\x${h}` # convert hex to special char
- fi
- done
- # return decoded string
- echo "${v}"
- return
- }
-
- # routine to get variables from http requests
- # usage: cgi_getvars method varname1 [.. varnameN]
- # method is either GET or POST or BOTH
- # the magic varible name ALL gets everything
- function cgi_getvars() {
- [ $# -lt 2 ] && return
- local q="" p k v s
- # get query
- case $1 in
- GET)
- [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&"
- ;;
- POST)
- cgi_get_POST_vars
- [ ! -z "${QUERY_STRING_POST}" ] && q="${QUERY_STRING_POST}&"
- ;;
- BOTH)
- [ ! -z "${QUERY_STRING}" ] && q="${QUERY_STRING}&"
- cgi_get_POST_vars
- [ ! -z "${QUERY_STRING_POST}" ] && q="${q}${QUERY_STRING_POST}&"
- ;;
- esac
- shift
- s=" $* "
- # parse the query data
- p="${q%%?*}" # get first part of query string
- while [ ! -z "$q" ]; do
- q="${q#$p&*}" # strip first part from query string
- k="${q%%=*}" # get the key (variable name) from it
- v="${q#*=}" # get the value from it
- v="${v%%&*}" # get the value from it
- q="${q#$k=$v}" # strip first part from query string
- # decode and evaluate var if requested
- [ "$1" = "ALL" -o "${s/ $k /}" != "$s" ] && \
- eval "$k=\"$(cgi_decodevar $v | sed 's/[\"\\]/\\&/g')\""
- done
- return
- }
|