slitaz-base-files rev 105 4.4.1
Add /usr/lib/slitaz/httphelper since Busybox removed upstream and we intensivly use it in SliTaz
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sat Mar 17 14:09:13 2012 +0100 (2012-03-17) |
parents | 7b0bf576d2b8 |
children | 773fdb10ba5c |
files | README rootfs/usr/bin/calc rootfs/usr/lib/slitaz/httphelper |
line diff
1.1 --- a/README Wed Mar 07 11:01:30 2012 +0100 1.2 +++ b/README Sat Mar 17 14:09:13 2012 +0100 1.3 @@ -1,21 +1,20 @@ 1.4 -README for slitaz-base-files 1.5 +README for SliTaz Base files 1.6 =============================================================================== 1.7 1.8 1.9 -Ce paquet fournit les fichiers et répertoires de base du système, il est 1.10 -construit via la recette du wok et Tazwok. Les fichiers sont décrits dans 1.11 -le Cookbook de SliTaz : 1.12 +This package provides the base system files and directories, it is built 1.13 +using a wok receipt and Cookutils. The creation of the initial files are 1.14 +described in the SliTaz Scratchbook: http://www.slitaz.org/en/doc/scratchbook/ 1.15 1.16 - http://www.slitaz.org/doc/cookbook/ 1.17 1.18 +Files in rootfs/ 1.19 +---------------- 1.20 1.21 -English 1.22 -------- 1.23 - 1.24 -This package provides the base system files and directories, it is built 1.25 -using a wok receipt and Tazwok. The files are described in the SliTaz 1.26 -Cookbook : 1.27 - 1.28 + * /etc: Configuration files for SliTaz such as users network. 1.29 + * /sbin: Scripts that may be used at boot without /usr mounted. 1.30 + * /usr/bin: Small utility and tools depending only on Busybox. 1.31 + * /usr/lib/slitaz: SliTaz base library and helper. 1.32 + 1.33 1.34 =============================================================================== 1.35 http://www.slitaz.org/
2.1 --- a/rootfs/usr/bin/calc Wed Mar 07 11:01:30 2012 +0100 2.2 +++ b/rootfs/usr/bin/calc Sat Mar 17 14:09:13 2012 +0100 2.3 @@ -9,7 +9,7 @@ 2.4 awk "BEGIN{ print $* }" ;; 2.5 *) 2.6 name=$(basename $0) 2.7 - echo -e "\nUsage: $name [0-9][+-*/][0-9]" 2.8 + echo -e "\nUsage: $name [0-9][+-*/][0-9]" 2.9 echo -e "Example: $name 36*12\n" ;; 2.10 esac 2.11 exit 0
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/rootfs/usr/lib/slitaz/httphelper Sat Mar 17 14:09:13 2012 +0100 3.3 @@ -0,0 +1,224 @@ 3.4 +#!/bin/sh 3.5 +# 3.6 +# SliTaz Helper for SHell CGI scripts - See httphelper function 3.7 +# 3.8 +# The initial script was found in Busybox 1.18.4 but was removed upstream 3.9 +# it is used in TazPanel, Pizza and other SliTaz CGI tools and services. 3.10 +# The goal is to maintain it according to the needs of the project and 3.11 +# Busybox httpd server applet since it is used for URL [en|de]coding 3.12 +# 3.13 +# Copyright (C) SliTaz/Busybox 2012 - GNU gpl v2 3.14 +# 3.15 + 3.16 +alias urlencode='httpd -e' 3.17 +alias urldecode='httpd -d' 3.18 + 3.19 +# Help and usage. 3.20 +httphelper() { 3.21 + cat << EOT 3.22 + 3.23 +Include this helper in a script: 3.24 + . /usr/lib/slitaz/httphelper 3.25 + 3.26 +Functions: 3.27 + GET [var [index]] 3.28 + POST [var [index]] 3.29 + COOKIE [var [index]] 3.30 + FILE [var {name|tmpname|size|type}] 3.31 + header [strings] 3.32 + urlencode string 3.33 + urldecode string 3.34 + htmlentities string 3.35 + httpinfo 3.36 + 3.37 +Example: 3.38 + header "Content-type: text/html" "Set-Cookie: name=value; HttpOnly" 3.39 + 3.40 + if [ "\$(GET name)" ]; then 3.41 + echo "Input name have a value from HTML form" 3.42 + fi 3.43 + 3.44 +EOT 3.45 +} 3.46 + 3.47 +# Send headers. 3.48 +header() { 3.49 + local i 3.50 + [ -z "$1" ] && set -- "Content-type: text/html" 3.51 + for i in "$@" "" 3.52 + do 3.53 + echo -e "$i\r" 3.54 + done 3.55 +} 3.56 + 3.57 +htmlentities() { 3.58 + echo $1 | sed 's|&|\&|g;s|<|\<|g;s|>|\>|g;s|"|\"|g' 3.59 +} 3.60 + 3.61 +_ARRAY() 3.62 +{ 3.63 +[ -z "$2" ] && eval echo \$${1}__NAMES || 3.64 + [ -n "$(eval echo \$${1}__NAMES)" ] && eval echo \$${1}_${2}_${3:-1} 3.65 +} 3.66 + 3.67 +GET() { _ARRAY GET "$1" $2; } 3.68 +POST() { _ARRAY POST "$1" $2; } 3.69 +FILE() { _ARRAY FILE "$1" $2; } 3.70 +COOKIE() { _ARRAY COOKIE "$1" $2; } 3.71 + 3.72 +httpinfo() 3.73 +{ 3.74 +local i 3.75 +local j 3.76 +local x 3.77 +for i in SERVER_PROTOCOL SERVER_SOFTWARE SERVER_NAME SERVER_PORT AUTH_TYPE \ 3.78 + GATEWAY_INTERFACE REMOTE_HOST REMOTE_ADDR REMOTE_PORT \ 3.79 + HTTP_REFERER HTTP_HOST HTTP_USER_AGENT HTTP_ACCEPT \ 3.80 + HTTP_ACCEPT_LANGUAGE HTTP_COOKIE AUTH_TYPE REMOTE_USER REMOTE_IDENT \ 3.81 + REQUEST_METHOD REQUEST_URI QUERY_STRING CONTENT_LENGTH CONTENT_TYPE \ 3.82 + SCRIPT_NAME SCRIPT_FILENAME PATH_INFO PATH_TRANSLATED \ 3.83 + USER HOME LOGNAME SHELL PWD ; do 3.84 + eval x=\$$i 3.85 + [ -n "$x" ] && echo "$i='$x'" 3.86 +done 3.87 +for x in GET POST COOKIE ; do 3.88 + for i in $($x) ; do 3.89 + if [ $($x $i count) -gt 1 ]; then 3.90 + for j in $(seq 1 $($x $i count)); do 3.91 + echo "$x($i,$j)='$($x $i $j)'" 3.92 + done 3.93 + else 3.94 + echo "$x($i)='$($x $i)'" 3.95 + fi 3.96 + done 3.97 +done 3.98 +for i in $(FILE) ; do 3.99 + for j in name size type tmpname ; do 3.100 + echo "FILE($i,$j)='$(FILE $i $j)'" 3.101 + done 3.102 +done 3.103 +} 3.104 + 3.105 +read_query_string() 3.106 +{ 3.107 +local i 3.108 +local names 3.109 +local cnt 3.110 +names="" 3.111 +IFS="&" 3.112 +for i in $2 ; do 3.113 + var=${i%%[^A-Za-z_0-9]*} 3.114 + case " $names " in 3.115 + *\ $var\ *) eval cnt=\$${1}_${var}_count ;; 3.116 + *) cnt=0 3.117 + names="$names $var" ;; 3.118 + esac 3.119 + eval ${1}_${var}_count=$((++cnt)) 3.120 + eval ${1}_${var}_$cnt=\'$(httpd -d "${i#*=}" | sed "s/'/\'\\\\\'\'/g")\' 3.121 +done 3.122 +unset IFS 3.123 +eval ${1}__NAMES=\'${names# }\' 3.124 +} 3.125 + 3.126 +[ -z "$GET__NAMES" ] && read_query_string GET "$QUERY_STRING" 3.127 +[ -z "$COOKIE_NAMES" ] && 3.128 + read_query_string COOKIE "$(echo "$HTTP_COOKIE" | sed 's/; /\&/g')" 3.129 + 3.130 +ddcut() 3.131 +{ 3.132 +page=4096 3.133 +skip=$1 3.134 +count=$(($2 - $1 -2)) 3.135 +tmp=$(($skip / $page)) 3.136 +[ $tmp -ne 0 ] && dd bs=$page skip=$tmp count=0 3.137 +skip=$(($skip - ($tmp * $page) )) 3.138 +dd bs=1 skip=$skip count=0 3.139 +tmp=$(( ($page - $skip) % $page )) 3.140 +if [ $tmp -ne 0 -a $tmp -le $count ]; then 3.141 + dd bs=1 count=$tmp 3.142 + count=$(($count - $tmp)) 3.143 +fi 3.144 +tmp=$(($count / $page)) 3.145 +[ $tmp -ne 0 ] && dd bs=$page count=$tmp 3.146 +dd bs=1 count=$(($count - ($tmp * $page) )) 3.147 +} 3.148 + 3.149 +if [ "$REQUEST_METHOD$POST__NAMES" == "POST" ]; then 3.150 + prefix=/tmp/httpd_post 3.151 + mkdir $prefix$$ 3.152 + now=$(stat -c %Y $prefix$$) 3.153 + for i in $prefix* ; do 3.154 + [ $(stat -c %Y $i) -lt $(($now - 3600)) ] && rm -rf $i 3.155 + done 3.156 + post=$prefix$$/post 3.157 + n=1 3.158 + cat > ${post}0 3.159 + read delim < ${post}0 3.160 + delim=${delim%?} 3.161 + case "$delim" in 3.162 + -*) awk "/$delim/ { o+=index(\$0,\"$delim\")-1; print o } 3.163 + { o+=1+length() }" < ${post}0 | while read offset; do 3.164 + if [ $offset -ne 0 ]; then 3.165 + ddcut $last $offset < ${post}0 > $post$n 2> /dev/null 3.166 + n=$(($n+1)) 3.167 + fi 3.168 + last=$offset 3.169 + done 3.170 + rm -f ${post}0 3.171 + CR=`printf '\r'` 3.172 + for i in $post* ; do 3.173 + head -n 2 $i | grep -q filename= || echo '' >> $i 3.174 + filename= 3.175 + while read line; do 3.176 + case "$line" in 3.177 + *Content-Disposition*) 3.178 + name=$(echo $line | sed 's/.* name="\([^"]*\)".*$/\1/') 3.179 + name=${name%%[^A-Za-z_0-9]*} 3.180 + case "$line" in 3.181 + *filename=*) filename=$(echo $line | sed 's/.* filename="\([^"]*\)".*$/\1/') ;; 3.182 + esac ;; 3.183 + *Content-Type*) 3.184 + type=$(echo $line | sed 's/.*-Type: \(.*\).$/\1/') ;; 3.185 + $CR) 3.186 + if [ -n "$filename" ]; then 3.187 + tmp=$(mktemp $prefix$$/uploadXXXXXX) 3.188 + cat > $tmp 3.189 + FILE__NAMES="$FILE__NAMES $name" 3.190 + FILE__NAMES="${FILE__NAMES# }" 3.191 + eval FILE_${name}_tmpname=$tmp 3.192 + eval FILE_${name}_name=$filename 3.193 + eval FILE_${name}_size=$(stat -c %s $tmp) 3.194 + eval FILE_${name}_type=$type 3.195 + elif [ -n "$name" ]; then 3.196 + eval cnt=\$POST_${name}_count 3.197 + cnt=$(($cnt + 1)) 3.198 + eval var=\$POST_${name}_$cnt 3.199 + while read line; do 3.200 + [ -n "$var" ] && var="$var 3.201 +" 3.202 + var="$var$line" 3.203 + done 3.204 + eval POST_${name}_$cnt="\$var" 3.205 + eval POST_${name}_count=$cnt 3.206 + case " $POST__NAMES " in 3.207 + *\ $name\ *) ;; 3.208 + *) POST__NAMES="$POST__NAMES $name" 3.209 + POST__NAMES="${POST__NAMES# }" ;; 3.210 + esac 3.211 + fi 3.212 + break ;; 3.213 + *) 3.214 + esac 3.215 + done < $i 3.216 + rm -f $i 3.217 + done 3.218 + rmdir $(dirname $post) ;; 3.219 + *) rm -rf $(dirname $post) 3.220 + read_query_string POST "$delim" ;; 3.221 + esac 3.222 +fi 3.223 + 3.224 +case "$1" in 3.225 + usage|help) 3.226 + httphelper ;; 3.227 +esac