#!/bin/bash # # webbuild functions # Copyright (c) 2012 by Silvan Calarco # . /etc/autodist/config SUDO_WRAPPER="sudo /usr/libexec/webbuild-sudo" #STATEDIR=$WEBBUILD_STATEDIR LOG=$WEBBUILD_STATEDIR/access_log DEFAULT_ENVIRONMENT=0 [ "`uname -m`" = "x86_64" ] && HOST_IS_X86_64=1 function set_user_state_var() { local statevar=$1 local statevalue=$2 local stateuser=$3 [ ! "$stateuser" ] && stateuser=$USER [ "$1" ] || return [ -e $WEBBUILD_STATEDIR/users/$stateuser.state ] || touch $WEBBUILD_STATEDIR/users/$stateuser.state sed -i "/^$statevar=/d" $WEBBUILD_STATEDIR/users/$stateuser.state [ "$statevalue" ] && echo "$statevar=$statevalue" >> $WEBBUILD_STATEDIR/users/$stateuser.state } function social_log() { local line=$1 [ "$line" ] || return if [ ! "$STATE_FAKEUSER" ]; then STATE_SOCIALLOG_ID=0 . $WEBBUILD_STATEDIR/users/webbuild.state STATE_SOCIALLOG_ID=`expr $STATE_SOCIALLOG_ID + 1` set_user_state_var STATE_SOCIALLOG_ID $STATE_SOCIALLOG_ID webbuild echo "SID=$STATE_SOCIALLOG_ID SPRIVACY=$STATE_PRIVACYMODE $line" >> $WEBBUILD_STATEDIR/social_log fi } function cgi_encodevar() { local string="${1}" local strlen=${#string} local encoded="" for (( pos=0 ; pos and flipflip industries # (internal) routine to store POST data function cgi_get_POST_vars() { # check content type # FIXME: not sure if we could handle uploads with this.. [ "${CONTENT_TYPE}" != "application/x-www-form-urlencoded" ] && \ echo "Warning: you should probably use MIME type "\ "application/x-www-form-urlencoded!" 1>&2 # 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 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 if [ "${h}" = "22" ]; then v="${v}\\\"" elif [ "${h}" = "0A" ]; then v="${v}\\\n" elif [ "${h}" = "24" ]; then v="${v}\\\$" elif [ "${h}" = "60" ]; then v="${v}\\\`" else v="${v}"`echo -e \\\\x${h}` # convert hex to special char fi 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 while [ ! -z "$q" ]; do p=`echo $q | sed "s|&.*||"` q=`echo $q | sed "s|[^&]*&||"` k="${p%%=*}" # get the key (variable name) from it v="${p#*=}" # get the value from it # decode and evaluate var if requested if [ "$k" != "SPECTEXT" ]; then v=`cgi_decodevar "$v"` fi eval "$k=\"$v\"" done return } function kill_tree() { local killpid=$1 [ $1 ] || return kill `pstree -p $killpid | sed 's/(/\n(/g' | grep '(' | sed 's/(\(.*\)).*/\1/' | tr "\n" " "` return $? }