slitaz-base-files diff rootfs/usr/lib/slitaz/httphelper.sh @ rev 258
libpkg.sh: unset TAGS too in unset_receipt(); and code reformatting
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Thu Nov 27 16:26:29 2014 +0200 (2014-11-27) |
parents | c3e9d6b91059 |
children | efac6599349a |
line diff
1.1 --- a/rootfs/usr/lib/slitaz/httphelper.sh Thu Jun 26 18:25:46 2014 +0200 1.2 +++ b/rootfs/usr/lib/slitaz/httphelper.sh Thu Nov 27 16:26:29 2014 +0200 1.3 @@ -19,22 +19,23 @@ 1.4 header() { 1.5 local i 1.6 [ -z "$1" ] && set -- "Content-type: text/html; charset=UTF-8" 1.7 - for i in "$@" "" 1.8 - do 1.9 + for i in "$@" ""; do 1.10 echo -e "$i\r" 1.11 done 1.12 } 1.13 1.14 http_urlencode() { 1.15 - sed -e "s|%|%25|g;s|!|%21|g;s|\*|%2A|g;s|'|%27|g;s|(|%28|g" \ 1.16 - -e "s|)|%29|g;s|;|%3B|g;s|:|%3A|g;s|@|%40|g;s|&|%26|g" \ 1.17 - -e "s|=|%3D|g;s|+|%2B|g;s|\$|%24|g;s|,|%2C|g;s|/|%2F|g" \ 1.18 - -e "s|\?|%3F|g;s|#|%25|g;s|\[|%5B|g;s|\]|%5D|g;s| |+|g" 1.19 + sed \ 1.20 + -e "s|%|%25|g; s|!|%21|g; s|\*|%2A|g; s|'|%27|g; s|(|%28|g" \ 1.21 + -e "s|)|%29|g; s|;|%3B|g; s|:|%3A|g; s|@|%40|g; s|&|%26|g" \ 1.22 + -e "s|=|%3D|g; s|+|%2B|g; s|\$|%24|g; s|,|%2C|g; s|/|%2F|g" \ 1.23 + -e "s|\?|%3F|g; s|#|%25|g; s|\[|%5B|g; s|\]|%5D|g; s| |+|g" 1.24 } 1.25 1.26 htmlentities() { 1.27 - echo $1 | sed -e 's|&|\&|g;s|<|\<|g;s|>|\>|g' \ 1.28 - -e 's|"|\"|g;s|'"'"'|\´|g;s|\t|\	|g' 1.29 + echo $1 | sed \ 1.30 + -e 's|&|\&|g; s|<|\<|g; s|>|\>|g' \ 1.31 + -e 's|"|\"|g; s|'"'"'|\'|g; s|\t|\	|g' 1.32 } 1.33 1.34 # MD5 crypt a string such as password (httpd -m dont give same result ?) 1.35 @@ -49,83 +50,98 @@ 1.36 1.37 _ARRAY() 1.38 { 1.39 -[ -z "$2" ] && eval echo \$${1}__NAMES || 1.40 - [ -n "$(eval echo \$${1}__NAMES)" ] && eval echo \$${1}_${2}_${3:-1} 1.41 + if [ -z "$2" ]; then 1.42 + eval echo \$${1}__NAMES 1.43 + else 1.44 + [ -n "$(eval echo \$${1}__NAMES)" ] && eval echo \$${1}_${2}_${3:-1} 1.45 + fi 1.46 } 1.47 1.48 -GET() { _ARRAY GET "$1" $2; } 1.49 -POST() { _ARRAY POST "$1" $2; } 1.50 -FILE() { _ARRAY FILE "$1" $2; } 1.51 -COOKIE() { _ARRAY COOKIE "$1" $2; } 1.52 +GET() { _ARRAY GET "$1" $2; } 1.53 +POST() { _ARRAY POST "$1" $2; } 1.54 +FILE() { _ARRAY FILE "$1" $2; } 1.55 +COOKIE() { _ARRAY COOKIE "$1" $2; } 1.56 1.57 httpinfo() 1.58 { 1.59 -local i 1.60 -local j 1.61 -local x 1.62 -env | sort | sed "s/=/='/;s/$/'/" 1.63 -for x in GET POST COOKIE ; do 1.64 - for i in $($x) ; do 1.65 - if [ $($x $i count) -gt 1 ]; then 1.66 - for j in $(seq 1 $($x $i count)); do 1.67 - echo "$x($i,$j)='$($x $i $j)'" 1.68 - done 1.69 - else 1.70 - echo "$x($i)='$($x $i)'" 1.71 - fi 1.72 + local i 1.73 + local j 1.74 + local x 1.75 + env | sort | sed "s/=/='/;s/$/'/" 1.76 + for x in GET POST COOKIE ; do 1.77 + for i in $($x) ; do 1.78 + if [ $($x $i count) -gt 1 ]; then 1.79 + for j in $(seq 1 $($x $i count)); do 1.80 + echo "$x($i,$j)='$($x $i $j)'" 1.81 + done 1.82 + else 1.83 + echo "$x($i)='$($x $i)'" 1.84 + fi 1.85 + done 1.86 done 1.87 -done 1.88 -for i in $(FILE) ; do 1.89 - for j in name size type tmpname ; do 1.90 - echo "FILE($i,$j)='$(FILE $i $j)'" 1.91 + for i in $(FILE) ; do 1.92 + for j in name size type tmpname ; do 1.93 + echo "FILE($i,$j)='$(FILE $i $j)'" 1.94 + done 1.95 done 1.96 -done 1.97 } 1.98 1.99 read_query_string() 1.100 { 1.101 -local i 1.102 -local names 1.103 -local cnt 1.104 -names="" 1.105 -IFS="&" 1.106 -for i in $2 ; do 1.107 - var=${i%%[^A-Za-z_0-9]*} 1.108 - case " $names " in 1.109 - *\ $var\ *) eval cnt=\$${1}_${var}_count ;; 1.110 - *) cnt=0 1.111 - names="$names $var" ;; 1.112 - esac 1.113 - eval ${1}_${var}_count=$((++cnt)) 1.114 - eval ${1}_${var}_$cnt=\'$(busybox httpd -d "${i#*=}" | sed "s/'/\'\\\\\'\'/g")\' 1.115 -done 1.116 -unset IFS 1.117 -eval ${1}__NAMES=\'${names# }\' 1.118 + local i 1.119 + local names 1.120 + local cnt 1.121 + names="" 1.122 + IFS="&" 1.123 + for i in $2 ; do 1.124 + var=${i%%[^A-Za-z_0-9]*} 1.125 + case " $names " in 1.126 + *\ $var\ *) 1.127 + eval cnt=\$${1}_${var}_count ;; 1.128 + *) 1.129 + cnt=0 1.130 + names="$names $var" ;; 1.131 + esac 1.132 + eval ${1}_${var}_count=$((++cnt)) 1.133 + eval ${1}_${var}_$cnt=\'$(busybox httpd -d "${i#*=}" | sed "s/'/\'\\\\\'\'/g")\' 1.134 + done 1.135 + unset IFS 1.136 + eval ${1}__NAMES=\'${names# }\' 1.137 } 1.138 1.139 + 1.140 + 1.141 [ -z "$GET__NAMES" ] && read_query_string GET "$QUERY_STRING" 1.142 [ -z "$COOKIE_NAMES" ] && 1.143 read_query_string COOKIE "$(echo "$HTTP_COOKIE" | sed 's/; /\&/g')" 1.144 1.145 + 1.146 + 1.147 ddcut() 1.148 { 1.149 -page=4096 1.150 -skip=$1 1.151 -count=$(($2 - $1 -2)) 1.152 -tmp=$(($skip / $page)) 1.153 -[ $tmp -ne 0 ] && dd bs=$page skip=$tmp count=0 1.154 -skip=$(($skip - ($tmp * $page) )) 1.155 -dd bs=1 skip=$skip count=0 1.156 -tmp=$(( ($page - $skip) % $page )) 1.157 -if [ $tmp -ne 0 -a $tmp -le $count ]; then 1.158 - dd bs=1 count=$tmp 1.159 - count=$(($count - $tmp)) 1.160 -fi 1.161 -tmp=$(($count / $page)) 1.162 -[ $tmp -ne 0 ] && dd bs=$page count=$tmp 1.163 -dd bs=1 count=$(($count - ($tmp * $page) )) 1.164 + page=4096 1.165 + skip=$1 1.166 + count=$(($2 - $1 -2)) 1.167 + 1.168 + tmp=$(($skip / $page)) 1.169 + [ $tmp -ne 0 ] && dd bs=$page skip=$tmp count=0 1.170 + 1.171 + skip=$(($skip - ($tmp * $page) )) 1.172 + dd bs=1 skip=$skip count=0 1.173 + 1.174 + tmp=$(( ($page - $skip) % $page )) 1.175 + if [ $tmp -ne 0 -a $tmp -le $count ]; then 1.176 + dd bs=1 count=$tmp 1.177 + count=$(($count - $tmp)) 1.178 + fi 1.179 + 1.180 + tmp=$(($count / $page)) 1.181 + [ $tmp -ne 0 ] && dd bs=$page count=$tmp 1.182 + dd bs=1 count=$(($count - ($tmp * $page) )) 1.183 } 1.184 1.185 + 1.186 + 1.187 if [ "$REQUEST_METHOD$POST__NAMES" == "POST" ]; then 1.188 prefix=/tmp/httpd_post 1.189 mkdir $prefix$$ 1.190 @@ -138,73 +154,79 @@ 1.191 cat > ${post}0 1.192 read args < ${post}0 1.193 delim="${args%?}" 1.194 + 1.195 case "$delim" in 1.196 - 1.197 - -*) awk "/$delim/ { o+=index(\$0,\"$delim\")-1; print o } 1.198 - { o+=1+length() }" < ${post}0 | while read offset; do 1.199 - if [ $offset -ne 0 ]; then 1.200 - ddcut $last $offset < ${post}0 > $post$n 2> /dev/null 1.201 - n=$(($n+1)) 1.202 - fi 1.203 - last=$offset 1.204 + 1.205 + -*) 1.206 + awk "/$delim/ { o+=index(\$0,\"$delim\")-1; print o } 1.207 + { o+=1+length() }" < ${post}0 | \ 1.208 + while read offset; do 1.209 + if [ $offset -ne 0 ]; then 1.210 + ddcut $last $offset < ${post}0 > $post$n 2> /dev/null 1.211 + n=$(($n+1)) 1.212 + fi 1.213 + last=$offset 1.214 done 1.215 rm -f ${post}0 1.216 - CR=`printf '\r'` 1.217 + 1.218 for i in $post* ; do 1.219 - head -n 2 $i | grep -q filename= || echo '' >> $i 1.220 - filename= 1.221 - while read line; do 1.222 - case "$line" in 1.223 - 1.224 - *Content-Disposition*) 1.225 - name=$(echo $line | sed 's/.* name="\([^"]*\)".*$/\1/') 1.226 - name=${name%%[^A-Za-z_0-9]*} 1.227 - case "$line" in 1.228 - *filename=*) filename=$(echo $line | sed 's/.* filename="\([^"]*\)".*$/\1/') ;; 1.229 - esac ;; 1.230 - 1.231 - *Content-Type*) 1.232 - type=$(echo $line | sed 's/.*-Type: \(.*\).$/\1/') ;; 1.233 - 1.234 - $CR) 1.235 - if [ -n "$filename" ]; then 1.236 - tmp=$(mktemp $prefix$$/uploadXXXXXX) 1.237 - cat > $tmp 1.238 - FILE__NAMES="$FILE__NAMES $name" 1.239 - FILE__NAMES="${FILE__NAMES# }" 1.240 - eval FILE_${name}_tmpname=$tmp 1.241 - eval FILE_${name}_name=$filename 1.242 - eval FILE_${name}_size=$(stat -c %s $tmp) 1.243 - eval FILE_${name}_type=$type 1.244 - elif [ -n "$name" ]; then 1.245 - eval cnt=\$POST_${name}_count 1.246 - cnt=$(($cnt + 1)) 1.247 - eval var=\$POST_${name}_$cnt 1.248 - while read line; do 1.249 - [ -n "$var" ] && var="$var 1.250 -" 1.251 - var="$var$line" 1.252 - done 1.253 - eval POST_${name}_$cnt="\$var" 1.254 - eval POST_${name}_count=$cnt 1.255 - case " $POST__NAMES " in 1.256 - *\ $name\ *) ;; 1.257 - *) POST__NAMES="$POST__NAMES $name" 1.258 - POST__NAMES="${POST__NAMES# }" ;; 1.259 + head -n2 $i | grep -q filename= || echo '' >> $i 1.260 + filename= 1.261 + while read line; do 1.262 + case "$line" in 1.263 + 1.264 + *Content-Disposition*) 1.265 + name=$(echo $line | sed 's/.* name="\([^"]*\)".*$/\1/') 1.266 + name=${name%%[^A-Za-z_0-9]*} 1.267 + case "$line" in 1.268 + *filename=*) 1.269 + filename=$(echo $line | sed 's/.* filename="\([^"]*\)".*$/\1/') ;; 1.270 + esac ;; 1.271 + 1.272 + *Content-Type*) 1.273 + type=$(echo $line | sed 's/.*-Type: \(.*\).$/\1/') ;; 1.274 + 1.275 + $'\r') 1.276 + if [ -n "$filename" ]; then 1.277 + tmp=$(mktemp $prefix$$/uploadXXXXXX) 1.278 + cat > $tmp 1.279 + FILE__NAMES="$FILE__NAMES $name" 1.280 + FILE__NAMES="${FILE__NAMES# }" 1.281 + eval FILE_${name}_tmpname=$tmp 1.282 + eval FILE_${name}_name=$filename 1.283 + eval FILE_${name}_size=$(stat -c %s $tmp) 1.284 + eval FILE_${name}_type=$type 1.285 + elif [ -n "$name" ]; then 1.286 + eval cnt=\$POST_${name}_count 1.287 + cnt=$(($cnt + 1)) 1.288 + eval var=\$POST_${name}_$cnt 1.289 + while read line; do 1.290 + [ -n "$var" ] && var="$var"$'\n' 1.291 + var="$var$line" 1.292 + done 1.293 + eval POST_${name}_$cnt="\$var" 1.294 + eval POST_${name}_count=$cnt 1.295 + case " $POST__NAMES " in 1.296 + *\ $name\ *) 1.297 + ;; 1.298 + *) 1.299 + POST__NAMES="$POST__NAMES $name" 1.300 + POST__NAMES="${POST__NAMES# }" ;; 1.301 + esac 1.302 + fi 1.303 + break ;; 1.304 + 1.305 + *) ;; 1.306 esac 1.307 - fi 1.308 - break ;; 1.309 - *) 1.310 - esac 1.311 - done < $i 1.312 - rm -f $i 1.313 + done < $i 1.314 + rm -f $i 1.315 done 1.316 #rmdir $(dirname $post) 1.317 ;; 1.318 - 1.319 - *) 1.320 + 1.321 + *) 1.322 rm -rf $(dirname $post) 1.323 read_query_string POST "$args" ;; 1.324 - 1.325 + 1.326 esac 1.327 fi