#!/bin/sh ###################################################################### # # $Id: pad-script-guts,v 1.11 2006/05/25 22:17:28 mavrik Exp $ # ###################################################################### # # Copyright 2002-2006 The WebJob Project, All Rights Reserved. # ###################################################################### # # PaD technology is part of The WebJob Project and is distributed # under same terms and conditions as WebJob. # # WebJob is available at: http://webjob.sourceforge.net # ###################################################################### IFS=' ' PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin PROGRAM=`basename "$0"` XER_OK=0 XER_BootStrap=1 XER_ProcessArguments=2 XER_Suffix=3 XER_Basename=4 XER_Delimiter=5 XER_Extract=6 XER_Deliver=7 PaDBootStrap() { PAD_DELIMITER=PAD_GUTS_DELIMITER PAD_MUTE=${PAD_MUTE-0} # Allow environment overrides. PAD_OVERWRITE=${PAD_OVERWRITE-1} # Allow environment overrides. PAD_PAYLOAD_TOKEN=%payload PAD_SUFFIX=.pad PAD_BASENAME=`basename "$0" ${PAD_SUFFIX}` PAD_PAYLOAD=`echo "$0" | sed "s/${PAD_SUFFIX}$//"` PAD_UMASK=${PAD_UMASK-022} # Allow environment overrides. MASK=`echo ${PAD_UMASK} | grep '^0[0-7]\{0,3\}$' 2> /dev/null` if [ -z "${MASK}" ] ; then umask 022 else umask ${MASK} fi } PaDCheckBasename() { BASENAME=$1 SUFFIX=$2 if [ "${BASENAME}"X = "."X -o "${BASENAME}"X = ".."X -o "${BASENAME}"X = "${SUFFIX}"X ] ; then ERROR="PaDCheckBasename(): Error='Invalid or missing basename.'" return 1 fi } PaDCheckSuffix() { BASENAME=$1 PROGNAME=$2 if [ "${BASENAME}"X = "${PROGNAME}"X ] ; then ERROR="PaDCheckSuffix(): Error='Invalid or missing suffix.'" return 1 fi } PaDDeliverPayload() { PAYLOAD=$1 ; shift MUTE=$1 ; shift COMMAND_LINE="$*" if [ "${MUTE}"X = "0"X ] ; then echo "Delivering payload... ${COMMAND_LINE}" 1>&2 fi trap "rm -f ${PAYLOAD} ; ERROR=\"PaDDeliverPayload(): Error='Caught a signal.'\" ; return 1" 1 2 15 eval ${COMMAND_LINE} STATUS=$? if [ "${MUTE}"X = "0"X ] ; then echo "DeliveryStatus='${STATUS}'" 1>&2 fi rm -f ${PAYLOAD} } PaDExtractPayload() { PAYLOAD=$1 MUTE=$2 if [ "${MUTE}"X = "0"X ] ; then echo "Extracting payload..." 1>&2 fi if [ -f ${PAYLOAD} -a "${PAD_OVERWRITE}"X = "0"X ] ; then ERROR="PaDExtractPayload(): Error='File exists and PAD_OVERWRITE is disabled. Extraction aborted.'" return 1 fi tail +${PAD_SKIP} $0 > ${PAYLOAD} if [ $? -ne 0 ] ; then ERROR="PaDExtractPayload(): Error='Failed to extract payload.'" rm -f ${PAYLOAD} return 1 fi } PaDLocateDelimiter() { DELIMITER=${1-PAD_GUTS_DELIMITER} MAX_LINES=${2-200} HEAD_COUNT=`head -${MAX_LINES} $0 | sed "/^${DELIMITER}$/q" | wc -l | awk '{print $1}'` GREP_COUNT=`head -${MAX_LINES} $0 | grep "^${DELIMITER}$" | wc -l | awk '{print $1}'` if [ ${GREP_COUNT} -lt 1 ] ; then ERROR="PaDLocateDelimiter(): Error='Missing PaD delimiter.'" return 1 fi PAD_SKIP=`expr ${HEAD_COUNT} + 1` } PaDProcessArguments() { if [ -n "$*" ] ; then PAD_COMMAND_LINE=`echo "$*" | sed "s!${PAD_PAYLOAD_TOKEN}!${PAD_PAYLOAD}!g"` if [ -z "${PAD_COMMAND_LINE}" ] ; then ERROR="PaDProcessArguments(): Error='Failed to initialize delivery command.'" return 1 fi fi } PaDMain() { PaDBootStrap if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_BootStrap} fi PaDProcessArguments $* if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_ProcessArguments} fi PaDCheckBasename "${PAD_BASENAME}" "${PAD_SUFFIX}" if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_Basename} fi PaDCheckSuffix "${PAD_BASENAME}" "${PROGRAM}" if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_Suffix} fi PaDLocateDelimiter "${PAD_DELIMITER}" if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_Delimiter} fi PaDExtractPayload "${PAD_PAYLOAD}" "${PAD_MUTE}" if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_Extract} fi if [ -n "${PAD_COMMAND_LINE}" ] ; then PaDDeliverPayload "${PAD_PAYLOAD}" "${PAD_MUTE}" "${PAD_COMMAND_LINE}" if [ $? -ne 0 ] ; then echo "PaDMain(): ${ERROR-?}" 1>&2 ; return ${XER_Deliver} fi fi return ${XER_OK} } PaDMain $* ; exit $?