#!/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 $?
syntax highlighted by Code2HTML, v. 0.9.1