slitaz-base-files rev 127

Add new slitaz.conf (more logical name, less tazpkg specifique vars, clean comments PLEASE adapte you scripts
author Christophe Lincoln <pankso@slitaz.org>
date Thu Apr 12 22:23:20 2012 +0200 (2012-04-12)
parents 32c560235098
children 617a18197606
files rootfs/etc/slitaz/slitaz.conf rootfs/usr/lib/slitaz/httphelper rootfs/usr/lib/slitaz/httphelper.sh
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/rootfs/etc/slitaz/slitaz.conf	Thu Apr 12 22:23:20 2012 +0200
     1.3 @@ -0,0 +1,54 @@
     1.4 +# /etc/slitaz/slitaz.conf: SliTaz variables used by almost all tools.
     1.5 +#
     1.6 +
     1.7 +# Slitaz release.
     1.8 +SLITAZ_RELEASE="$(cat /etc/slitaz-release)"
     1.9 +
    1.10 +# Slitaz directory.
    1.11 +SLITAZ_HOME="/home/slitaz"
    1.12 +
    1.13 +# Slitaz directory.
    1.14 +SLITAZ_CONFIGS="/etc/slitaz"
    1.15 +
    1.16 +# Slitaz logs directory.
    1.17 +SLITAZ_LOGS="/var/log/slitaz"
    1.18 +
    1.19 +# Path to each version.
    1.20 +STABLE="$SLITAZ_DIR/stable"
    1.21 +COOKING="$SLITAZ_DIR/cooking"
    1.22 +UNDIGEST="$SLITAZ_DIR/undigest"
    1.23 +
    1.24 +# The type of checksum and ext for packages.md5-like file
    1.25 +# md5sum : default (but weak) [sha1sum|sha256sum|sha512sum]
    1.26 +CHECKSUM="md5sum"
    1.27 +SUM="${CHECKSUM/sum}"
    1.28 +
    1.29 +# Main mirror URL.
    1.30 +MIRROR_URL="http://mirror.slitaz.org"
    1.31 +
    1.32 +# Online and local packages repository.
    1.33 +ONLINE_PKGS="$MIRROR_URL/packages/$SLITAZ_VERSION/"
    1.34 +LOCAL_PKGS="$SLITAZ_HOME/packages/$SLITAZ_VERSION/"
    1.35 +
    1.36 +# Path to Tazpkg data.
    1.37 +LOCALSTATE="/var/lib/tazpkg"
    1.38 +
    1.39 +# Path to installed packages data.
    1.40 +INSTALLED="$LOCALSTATE/installed"
    1.41 +
    1.42 +# Packages categories.
    1.43 +PKGS_CATEGORIES="
    1.44 +base-system
    1.45 +x-window
    1.46 +utilities
    1.47 +network
    1.48 +graphics
    1.49 +multimedia
    1.50 +office
    1.51 +development
    1.52 +system-tools
    1.53 +security
    1.54 +games
    1.55 +misc
    1.56 +meta
    1.57 +non-free"
     2.1 --- a/rootfs/usr/lib/slitaz/httphelper	Thu Apr 12 22:11:05 2012 +0200
     2.2 +++ b/rootfs/usr/lib/slitaz/httphelper	Thu Apr 12 22:23:20 2012 +0200
     2.3 @@ -1,240 +1,1 @@
     2.4 -#!/bin/sh
     2.5 -#
     2.6 -# SliTaz Helper for SHell CGI scripts - See httphelper function
     2.7 -#
     2.8 -# This helper is used in TazPanel, Pizza and other SliTaz CGI tools and 
     2.9 -# services. The goal is to maintain it according to the needs of the 
    2.10 -# project and Busybox httpd server applet since it is used for URL 
    2.11 -# [en|de]coding.
    2.12 -#
    2.13 -# Copyright (C) SliTaz 2012 - GNU gpl v2
    2.14 -#
    2.15 -
    2.16 -alias urlencode='busybox httpd -e'
    2.17 -alias urldecode='busybox httpd -d'
    2.18 -
    2.19 -# Help and usage.
    2.20 -httphelper() {
    2.21 -	cat << EOT
    2.22 -
    2.23 -Include this helper in a script:
    2.24 -  . /usr/lib/slitaz/httphelper
    2.25 -
    2.26 -Functions:
    2.27 -  GET [var [index]]
    2.28 -  POST [var [index]]
    2.29 -  COOKIE [var [index]]
    2.30 -  FILE [var {name|tmpname|size|type}]
    2.31 -  header [strings]
    2.32 -  http_urlencode string
    2.33 -  urlencode string
    2.34 -  urldecode string
    2.35 -  htmlentities string
    2.36 -  md5crypt string
    2.37 -  sha512crypt string
    2.38 -  httpinfo
    2.39 -  httphelper
    2.40 -
    2.41 -Example:
    2.42 -  header "Content-type: text/html" "Set-Cookie: name=value; HttpOnly"
    2.43 -  
    2.44 -  if [ "\$(GET name)" ]; then
    2.45 -      echo "Input name has a value from HTML form"
    2.46 -  fi
    2.47 -
    2.48 -EOT
    2.49 -}
    2.50 -
    2.51 -# Send headers.
    2.52 -header() {
    2.53 -	local i
    2.54 -	[ -z "$1" ] && set -- "Content-type: text/html"
    2.55 -	for i in "$@" ""
    2.56 -	do 
    2.57 -		echo -e "$i\r"
    2.58 -	done
    2.59 -}
    2.60 -
    2.61 -http_urlencode() {
    2.62 -	sed	-e "s|%|%25|g;s|!|%21|g;s|\*|%2A|g;s|'|%27|g;s|(|%28|g" \
    2.63 -		-e "s|)|%29|g;s|;|%3B|g;s|:|%3A|g;s|@|%40|g;s|&|%26|g" \
    2.64 -		-e "s|=|%3D|g;s|+|%2B|g;s|\$|%24|g;s|,|%2C|g;s|/|%2F|g" \
    2.65 -		-e "s|\?|%3F|g;s|#|%25|g;s|\[|%5B|g;s|\]|%5D|g;s| |+|g"
    2.66 -}
    2.67 -
    2.68 -htmlentities() {
    2.69 -	echo $1 | sed 's|&|\&amp;|g;s|<|\&lt;|g;s|>|\&gt;|g;s|"|\&quot;|g'
    2.70 -}
    2.71 -
    2.72 -# MD5 crypt a string such as password (httpd -m dont give same result ?)
    2.73 -md5crypt() {
    2.74 -	echo -n "$1" | md5sum | awk '{print $1}'
    2.75 -}
    2.76 -
    2.77 -# MD5 crypt a string. Stronger crypto than MD5
    2.78 -sha512crypt() {
    2.79 -	echo -n "$1" | sha512sum | awk '{print $1}'
    2.80 -}
    2.81 -
    2.82 -_ARRAY()
    2.83 -{
    2.84 -[ -z "$2" ] && eval echo \$${1}__NAMES ||
    2.85 -	[ -n "$(eval echo \$${1}__NAMES)" ] && eval echo \$${1}_${2}_${3:-1}
    2.86 -}
    2.87 -
    2.88 -GET()		{ _ARRAY GET	"$1" $2; }
    2.89 -POST()		{ _ARRAY POST	"$1" $2; }
    2.90 -FILE()		{ _ARRAY FILE	"$1" $2; }
    2.91 -COOKIE()	{ _ARRAY COOKIE	"$1" $2; }
    2.92 -
    2.93 -httpinfo()
    2.94 -{
    2.95 -local i
    2.96 -local j
    2.97 -local x
    2.98 -for i in SERVER_PROTOCOL SERVER_SOFTWARE SERVER_NAME SERVER_PORT AUTH_TYPE \
    2.99 -	 GATEWAY_INTERFACE REMOTE_HOST REMOTE_ADDR REMOTE_PORT \
   2.100 -	 HTTP_REFERER HTTP_HOST HTTP_USER_AGENT HTTP_ACCEPT \
   2.101 -	 HTTP_ACCEPT_LANGUAGE HTTP_COOKIE AUTH_TYPE REMOTE_USER REMOTE_IDENT \
   2.102 -	 REQUEST_METHOD REQUEST_URI QUERY_STRING CONTENT_LENGTH CONTENT_TYPE \
   2.103 -	 SCRIPT_NAME SCRIPT_FILENAME PATH_INFO PATH_TRANSLATED \
   2.104 -	 USER HOME LOGNAME SHELL PWD ; do
   2.105 -	eval x=\$$i
   2.106 -	[ -n "$x" ] && echo "$i='$x'"
   2.107 -done
   2.108 -for x in GET POST COOKIE ; do
   2.109 -	for i in $($x) ; do
   2.110 -		if [ $($x $i count) -gt 1 ]; then
   2.111 -			for j in $(seq 1 $($x $i count)); do
   2.112 -				echo "$x($i,$j)='$($x $i $j)'"
   2.113 -			done
   2.114 -		else
   2.115 -			echo "$x($i)='$($x $i)'"
   2.116 -		fi
   2.117 -	done
   2.118 -done
   2.119 -for i in $(FILE) ; do
   2.120 -	for j in name size type tmpname ; do
   2.121 -		echo "FILE($i,$j)='$(FILE $i $j)'"
   2.122 -	done
   2.123 -done
   2.124 -}
   2.125 -
   2.126 -read_query_string()
   2.127 -{
   2.128 -local i
   2.129 -local names
   2.130 -local cnt
   2.131 -names=""
   2.132 -IFS="&"
   2.133 -for i in $2 ; do
   2.134 -	var=${i%%[^A-Za-z_0-9]*}
   2.135 -	case " $names " in
   2.136 -	*\ $var\ *)	eval cnt=\$${1}_${var}_count ;;
   2.137 -	*)		cnt=0
   2.138 -			names="$names $var" ;;
   2.139 -	esac
   2.140 -	eval ${1}_${var}_count=$((++cnt))
   2.141 -	eval ${1}_${var}_$cnt=\'$(busybox httpd -d "${i#*=}" | sed "s/'/\'\\\\\'\'/g")\'
   2.142 -done
   2.143 -unset IFS
   2.144 -eval ${1}__NAMES=\'${names# }\'
   2.145 -}
   2.146 -
   2.147 -[ -z "$GET__NAMES" ] && read_query_string GET "$QUERY_STRING"
   2.148 -[ -z "$COOKIE_NAMES" ] &&
   2.149 -	read_query_string COOKIE "$(echo "$HTTP_COOKIE" | sed 's/; /\&/g')"
   2.150 -
   2.151 -ddcut()
   2.152 -{
   2.153 -page=4096
   2.154 -skip=$1
   2.155 -count=$(($2 - $1 -2))
   2.156 -tmp=$(($skip / $page))
   2.157 -[ $tmp -ne 0 ] && dd bs=$page skip=$tmp count=0 
   2.158 -skip=$(($skip - ($tmp * $page) ))
   2.159 -dd bs=1 skip=$skip count=0
   2.160 -tmp=$(( ($page - $skip) % $page ))
   2.161 -if [ $tmp -ne 0 -a $tmp -le $count ]; then
   2.162 -	dd bs=1 count=$tmp
   2.163 -	count=$(($count - $tmp))
   2.164 -fi
   2.165 -tmp=$(($count / $page))
   2.166 -[ $tmp -ne 0 ] && dd bs=$page count=$tmp
   2.167 -dd bs=1 count=$(($count - ($tmp * $page) ))
   2.168 -}
   2.169 -
   2.170 -if [ "$REQUEST_METHOD$POST__NAMES" == "POST" ]; then
   2.171 -	prefix=/tmp/httpd_post
   2.172 -	mkdir $prefix$$
   2.173 -	now=$(stat -c %Y $prefix$$)
   2.174 -	for i in $prefix* ; do
   2.175 -		[ $(stat -c %Y $i) -lt $(($now - 3600)) ] && rm -rf $i
   2.176 -	done
   2.177 -	post=$prefix$$/post
   2.178 -	n=1
   2.179 -	cat > ${post}0
   2.180 -	read args < ${post}0
   2.181 -	delim="${args%?}"
   2.182 -	case "$delim" in
   2.183 -	-*)	awk "/$delim/ { o+=index(\$0,\"$delim\")-1; print o }
   2.184 -	   		  { o+=1+length() }" < ${post}0 | while read offset; do
   2.185 -		    if [ $offset -ne 0 ]; then
   2.186 -			ddcut $last $offset < ${post}0 > $post$n 2> /dev/null
   2.187 -			n=$(($n+1))
   2.188 -		    fi
   2.189 -		    last=$offset
   2.190 -		done
   2.191 -		rm -f ${post}0
   2.192 -		CR=`printf '\r'`
   2.193 -		for i in $post* ; do
   2.194 -		    head -n 2 $i | grep -q filename= || echo '' >> $i
   2.195 -		    filename=
   2.196 -		    while read line; do
   2.197 -			case "$line" in
   2.198 -			*Content-Disposition*)
   2.199 -			    name=$(echo $line | sed 's/.* name="\([^"]*\)".*$/\1/')
   2.200 -			    name=${name%%[^A-Za-z_0-9]*}
   2.201 -			    case "$line" in
   2.202 -			    *filename=*) filename=$(echo $line | sed 's/.* filename="\([^"]*\)".*$/\1/') ;;
   2.203 -			    esac ;;
   2.204 -			*Content-Type*)
   2.205 -			    type=$(echo $line | sed 's/.*-Type: \(.*\).$/\1/') ;;
   2.206 -			$CR)
   2.207 -			    if [ -n "$filename" ]; then
   2.208 -				tmp=$(mktemp $prefix$$/uploadXXXXXX)
   2.209 -				cat > $tmp
   2.210 -				FILE__NAMES="$FILE__NAMES $name"
   2.211 -				FILE__NAMES="${FILE__NAMES# }"
   2.212 -				eval FILE_${name}_tmpname=$tmp
   2.213 -				eval FILE_${name}_name=$filename
   2.214 -				eval FILE_${name}_size=$(stat -c %s $tmp)
   2.215 -				eval FILE_${name}_type=$type
   2.216 -			    elif [ -n "$name" ]; then
   2.217 -			        eval cnt=\$POST_${name}_count
   2.218 -			        cnt=$(($cnt + 1))
   2.219 -				eval var=\$POST_${name}_$cnt
   2.220 -				while read line; do
   2.221 -					[ -n "$var" ] && var="$var
   2.222 -"
   2.223 -					var="$var$line"
   2.224 -				done
   2.225 -				eval POST_${name}_$cnt="\$var"
   2.226 -				eval POST_${name}_count=$cnt
   2.227 -				case " $POST__NAMES " in
   2.228 -				*\ $name\ *) ;;
   2.229 -				*) POST__NAMES="$POST__NAMES $name"
   2.230 -				   POST__NAMES="${POST__NAMES# }" ;;
   2.231 -				esac
   2.232 -			    fi
   2.233 -			    break ;;
   2.234 -			*)
   2.235 -			esac
   2.236 -		    done < $i
   2.237 -		    rm -f $i
   2.238 -		done
   2.239 -		rmdir $(dirname $post) ;;
   2.240 -	*)	rm -rf $(dirname $post)
   2.241 -		read_query_string POST "$args" ;;
   2.242 -	esac
   2.243 -fi
   2.244 +httphelper.sh
   2.245 \ No newline at end of file
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/rootfs/usr/lib/slitaz/httphelper.sh	Thu Apr 12 22:23:20 2012 +0200
     3.3 @@ -0,0 +1,240 @@
     3.4 +#!/bin/sh
     3.5 +#
     3.6 +# SliTaz Helper for SHell CGI scripts - See httphelper function
     3.7 +#
     3.8 +# This helper is used in TazPanel, Pizza and other SliTaz CGI tools and 
     3.9 +# services. The goal is to maintain it according to the needs of the 
    3.10 +# project and Busybox httpd server applet since it is used for URL 
    3.11 +# [en|de]coding.
    3.12 +#
    3.13 +# Copyright (C) SliTaz 2012 - GNU gpl v2
    3.14 +#
    3.15 +
    3.16 +alias urlencode='busybox httpd -e'
    3.17 +alias urldecode='busybox 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 +  http_urlencode string
    3.33 +  urlencode string
    3.34 +  urldecode string
    3.35 +  htmlentities string
    3.36 +  md5crypt string
    3.37 +  sha512crypt string
    3.38 +  httpinfo
    3.39 +  httphelper
    3.40 +
    3.41 +Example:
    3.42 +  header "Content-type: text/html" "Set-Cookie: name=value; HttpOnly"
    3.43 +  
    3.44 +  if [ "\$(GET name)" ]; then
    3.45 +      echo "Input name has a value from HTML form"
    3.46 +  fi
    3.47 +
    3.48 +EOT
    3.49 +}
    3.50 +
    3.51 +# Send headers.
    3.52 +header() {
    3.53 +	local i
    3.54 +	[ -z "$1" ] && set -- "Content-type: text/html"
    3.55 +	for i in "$@" ""
    3.56 +	do 
    3.57 +		echo -e "$i\r"
    3.58 +	done
    3.59 +}
    3.60 +
    3.61 +http_urlencode() {
    3.62 +	sed	-e "s|%|%25|g;s|!|%21|g;s|\*|%2A|g;s|'|%27|g;s|(|%28|g" \
    3.63 +		-e "s|)|%29|g;s|;|%3B|g;s|:|%3A|g;s|@|%40|g;s|&|%26|g" \
    3.64 +		-e "s|=|%3D|g;s|+|%2B|g;s|\$|%24|g;s|,|%2C|g;s|/|%2F|g" \
    3.65 +		-e "s|\?|%3F|g;s|#|%25|g;s|\[|%5B|g;s|\]|%5D|g;s| |+|g"
    3.66 +}
    3.67 +
    3.68 +htmlentities() {
    3.69 +	echo $1 | sed 's|&|\&amp;|g;s|<|\&lt;|g;s|>|\&gt;|g;s|"|\&quot;|g'
    3.70 +}
    3.71 +
    3.72 +# MD5 crypt a string such as password (httpd -m dont give same result ?)
    3.73 +md5crypt() {
    3.74 +	echo -n "$1" | md5sum | awk '{print $1}'
    3.75 +}
    3.76 +
    3.77 +# MD5 crypt a string. Stronger crypto than MD5
    3.78 +sha512crypt() {
    3.79 +	echo -n "$1" | sha512sum | awk '{print $1}'
    3.80 +}
    3.81 +
    3.82 +_ARRAY()
    3.83 +{
    3.84 +[ -z "$2" ] && eval echo \$${1}__NAMES ||
    3.85 +	[ -n "$(eval echo \$${1}__NAMES)" ] && eval echo \$${1}_${2}_${3:-1}
    3.86 +}
    3.87 +
    3.88 +GET()		{ _ARRAY GET	"$1" $2; }
    3.89 +POST()		{ _ARRAY POST	"$1" $2; }
    3.90 +FILE()		{ _ARRAY FILE	"$1" $2; }
    3.91 +COOKIE()	{ _ARRAY COOKIE	"$1" $2; }
    3.92 +
    3.93 +httpinfo()
    3.94 +{
    3.95 +local i
    3.96 +local j
    3.97 +local x
    3.98 +for i in SERVER_PROTOCOL SERVER_SOFTWARE SERVER_NAME SERVER_PORT AUTH_TYPE \
    3.99 +	 GATEWAY_INTERFACE REMOTE_HOST REMOTE_ADDR REMOTE_PORT \
   3.100 +	 HTTP_REFERER HTTP_HOST HTTP_USER_AGENT HTTP_ACCEPT \
   3.101 +	 HTTP_ACCEPT_LANGUAGE HTTP_COOKIE AUTH_TYPE REMOTE_USER REMOTE_IDENT \
   3.102 +	 REQUEST_METHOD REQUEST_URI QUERY_STRING CONTENT_LENGTH CONTENT_TYPE \
   3.103 +	 SCRIPT_NAME SCRIPT_FILENAME PATH_INFO PATH_TRANSLATED \
   3.104 +	 USER HOME LOGNAME SHELL PWD ; do
   3.105 +	eval x=\$$i
   3.106 +	[ -n "$x" ] && echo "$i='$x'"
   3.107 +done
   3.108 +for x in GET POST COOKIE ; do
   3.109 +	for i in $($x) ; do
   3.110 +		if [ $($x $i count) -gt 1 ]; then
   3.111 +			for j in $(seq 1 $($x $i count)); do
   3.112 +				echo "$x($i,$j)='$($x $i $j)'"
   3.113 +			done
   3.114 +		else
   3.115 +			echo "$x($i)='$($x $i)'"
   3.116 +		fi
   3.117 +	done
   3.118 +done
   3.119 +for i in $(FILE) ; do
   3.120 +	for j in name size type tmpname ; do
   3.121 +		echo "FILE($i,$j)='$(FILE $i $j)'"
   3.122 +	done
   3.123 +done
   3.124 +}
   3.125 +
   3.126 +read_query_string()
   3.127 +{
   3.128 +local i
   3.129 +local names
   3.130 +local cnt
   3.131 +names=""
   3.132 +IFS="&"
   3.133 +for i in $2 ; do
   3.134 +	var=${i%%[^A-Za-z_0-9]*}
   3.135 +	case " $names " in
   3.136 +	*\ $var\ *)	eval cnt=\$${1}_${var}_count ;;
   3.137 +	*)		cnt=0
   3.138 +			names="$names $var" ;;
   3.139 +	esac
   3.140 +	eval ${1}_${var}_count=$((++cnt))
   3.141 +	eval ${1}_${var}_$cnt=\'$(busybox httpd -d "${i#*=}" | sed "s/'/\'\\\\\'\'/g")\'
   3.142 +done
   3.143 +unset IFS
   3.144 +eval ${1}__NAMES=\'${names# }\'
   3.145 +}
   3.146 +
   3.147 +[ -z "$GET__NAMES" ] && read_query_string GET "$QUERY_STRING"
   3.148 +[ -z "$COOKIE_NAMES" ] &&
   3.149 +	read_query_string COOKIE "$(echo "$HTTP_COOKIE" | sed 's/; /\&/g')"
   3.150 +
   3.151 +ddcut()
   3.152 +{
   3.153 +page=4096
   3.154 +skip=$1
   3.155 +count=$(($2 - $1 -2))
   3.156 +tmp=$(($skip / $page))
   3.157 +[ $tmp -ne 0 ] && dd bs=$page skip=$tmp count=0 
   3.158 +skip=$(($skip - ($tmp * $page) ))
   3.159 +dd bs=1 skip=$skip count=0
   3.160 +tmp=$(( ($page - $skip) % $page ))
   3.161 +if [ $tmp -ne 0 -a $tmp -le $count ]; then
   3.162 +	dd bs=1 count=$tmp
   3.163 +	count=$(($count - $tmp))
   3.164 +fi
   3.165 +tmp=$(($count / $page))
   3.166 +[ $tmp -ne 0 ] && dd bs=$page count=$tmp
   3.167 +dd bs=1 count=$(($count - ($tmp * $page) ))
   3.168 +}
   3.169 +
   3.170 +if [ "$REQUEST_METHOD$POST__NAMES" == "POST" ]; then
   3.171 +	prefix=/tmp/httpd_post
   3.172 +	mkdir $prefix$$
   3.173 +	now=$(stat -c %Y $prefix$$)
   3.174 +	for i in $prefix* ; do
   3.175 +		[ $(stat -c %Y $i) -lt $(($now - 3600)) ] && rm -rf $i
   3.176 +	done
   3.177 +	post=$prefix$$/post
   3.178 +	n=1
   3.179 +	cat > ${post}0
   3.180 +	read args < ${post}0
   3.181 +	delim="${args%?}"
   3.182 +	case "$delim" in
   3.183 +	-*)	awk "/$delim/ { o+=index(\$0,\"$delim\")-1; print o }
   3.184 +	   		  { o+=1+length() }" < ${post}0 | while read offset; do
   3.185 +		    if [ $offset -ne 0 ]; then
   3.186 +			ddcut $last $offset < ${post}0 > $post$n 2> /dev/null
   3.187 +			n=$(($n+1))
   3.188 +		    fi
   3.189 +		    last=$offset
   3.190 +		done
   3.191 +		rm -f ${post}0
   3.192 +		CR=`printf '\r'`
   3.193 +		for i in $post* ; do
   3.194 +		    head -n 2 $i | grep -q filename= || echo '' >> $i
   3.195 +		    filename=
   3.196 +		    while read line; do
   3.197 +			case "$line" in
   3.198 +			*Content-Disposition*)
   3.199 +			    name=$(echo $line | sed 's/.* name="\([^"]*\)".*$/\1/')
   3.200 +			    name=${name%%[^A-Za-z_0-9]*}
   3.201 +			    case "$line" in
   3.202 +			    *filename=*) filename=$(echo $line | sed 's/.* filename="\([^"]*\)".*$/\1/') ;;
   3.203 +			    esac ;;
   3.204 +			*Content-Type*)
   3.205 +			    type=$(echo $line | sed 's/.*-Type: \(.*\).$/\1/') ;;
   3.206 +			$CR)
   3.207 +			    if [ -n "$filename" ]; then
   3.208 +				tmp=$(mktemp $prefix$$/uploadXXXXXX)
   3.209 +				cat > $tmp
   3.210 +				FILE__NAMES="$FILE__NAMES $name"
   3.211 +				FILE__NAMES="${FILE__NAMES# }"
   3.212 +				eval FILE_${name}_tmpname=$tmp
   3.213 +				eval FILE_${name}_name=$filename
   3.214 +				eval FILE_${name}_size=$(stat -c %s $tmp)
   3.215 +				eval FILE_${name}_type=$type
   3.216 +			    elif [ -n "$name" ]; then
   3.217 +			        eval cnt=\$POST_${name}_count
   3.218 +			        cnt=$(($cnt + 1))
   3.219 +				eval var=\$POST_${name}_$cnt
   3.220 +				while read line; do
   3.221 +					[ -n "$var" ] && var="$var
   3.222 +"
   3.223 +					var="$var$line"
   3.224 +				done
   3.225 +				eval POST_${name}_$cnt="\$var"
   3.226 +				eval POST_${name}_count=$cnt
   3.227 +				case " $POST__NAMES " in
   3.228 +				*\ $name\ *) ;;
   3.229 +				*) POST__NAMES="$POST__NAMES $name"
   3.230 +				   POST__NAMES="${POST__NAMES# }" ;;
   3.231 +				esac
   3.232 +			    fi
   3.233 +			    break ;;
   3.234 +			*)
   3.235 +			esac
   3.236 +		    done < $i
   3.237 +		    rm -f $i
   3.238 +		done
   3.239 +		rmdir $(dirname $post) ;;
   3.240 +	*)	rm -rf $(dirname $post)
   3.241 +		read_query_string POST "$args" ;;
   3.242 +	esac
   3.243 +fi