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|&|\&amp;|g;s|<|\&lt;|g;s|>|\&gt;|g;s|"|\&quot;|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