#!/bin/sh
#
# (UN)INSTALL Script (install_spamcontrol.sh)
# -----------------------------------
#
# Purpose: To install and uninstall the spamcontrol patch
#
# Parameters: -u (uninstall)
# VRF (Version to be uninstalled)
#
# Usage: ./install_spamcontrol.sh [-u] [Version]
#
# Installation: ./install_spamcontrol.sh
# Uninstallation: ./install_spamcontrol.sh -u 105
#
# Return Codes: 0 - Patches applied successfully
# 1 - Original QMAIL files not found (Patch not extracted in QMAIL source directory)
# 2 - Patch files not found
#
# Output: spamcontrol.log
#
# History: 1.0.0 - Erwin Hoffmann - Initial release
# 1.0.1 - Erwin Hoffmann - Some more verbose information
# 1.0.3 - Erwin Hoffmann - REL=103, removed "cp" in some output line
# 1.0.4 - Erwin Hoffmann - REL=104, small bug fixed
# 1.0.5 - Erwin Hoffmann - REL=105
# 1.0.6 - Erwin Hoffmann - REL=106, Uninstallation added
# 1.0.7 - Erwin Hoffmann - REL=107, Flag for Solaris added
# 1.0.8 - Erwin Hoffmann - REL=108, Patch for ipme.c included
# 1.0.9 - Erwin Hoffmann - REL=109, Copy Documents to ./qmail/docs
# 1.0.10 - Erwin Hoffmann - REL=110, Mods for uninstalling ipme.c patch
# 1.0.11 - Erwin Hoffmann - REL=111, Additional STDOUT listing
# 1.0.12 - Erwin Hoffmann - REL=111, Fixed problem with obsolete "2" while piping to tee
# 1.0.13 - Erwin Hoffmann - REL=111, minor corrections
# 1.1.0 - Erwin Hoffmann - REL=190, patch files read from file FILES.spamcontrol
# 1.1.1 - Erwin Hoffmann - REL=191, misc. files copied to /var/qmail/doc/
# identification for SOLARIS included
# 1.1.2 - Erwin Hoffmann - REL=192, fixed typo "find-systype.sh"
# 1.2.0 - Erwin Hoffmann - REL=203 for SPAMCONTROL V2
# 1.3.0 - Erwin Hoffmann - REL=203 for SPAMCONTROL 2.0.4
# 1.3.1 - Erwin Hoffmann - REL=204 for SPAMCONTROL 2.1.0; STDTERR for patch written to log
# 1.3.2 - Erwin Hoffmann - REL=204 for SPAMCONTROL 2.1.2
# 1.4.0 - Erwin Hoffmann - REL=213 for SPAMCONTROL 2.1.3 - include Build info
# 1.4.1 - Erwin Hoffmann - REL=213 for SPAMCONTROL 2.1.8 - include some exceptions
# 1.4.2 - Erwin Hoffmann - REL=220 for SPAMCONTROL 2.2.0 - include qmail-*2recipients scripts
# 1.4.3 - Erwin Hoffmann - REL=220 for SPAMCONTROL 2.2.4 - BIGTODO trailer
# 1.5.0 - Erwin Hoffmann - REL=225 for SPAMCONTROL 2.2.5 - modifications even for own *.c files
# 1.6.0 - Erwin Hoffmann - REL=225 for SPAMCONTROL 2.2.7 - add test for QMAIL/doc
# 1.6.1 - Erwin Hoffmann - REL=228 for SPAMCONTROL 2.2.8 - rm *.opt now during de-install
# 1.6.2 - Erwin Hoffmann - REL=234 for SPAMCONTROL 2.3.4
# 1.6.3 - Erwin Hoffmann - REL=234 for SPAMCONTROL 2.3.5
# 1.6.4 - Erwin Hoffmann - REL=234 for SPAMCONTROL 2.3.6
# 1.7.0 - Erwin Hoffmann - REL=234 for SPAMCONTROL 2.3.7 - /var/qmail/scripts included
# 1.8.0 - Erwin Hoffmann - REL=234 for SPAMCONTROL 2.3.9 - removed EXCEPTION
# 1.8.1 - automated build
#
#---------------------------------------------------------------------------------------
#
DATE=$(date)
LOCDIR=${PWD}
QMAILHOME=$(head -n 1 conf-qmail)
SOLARIS=$(sh ./find-systype.sh | grep -ci "SunOS")
LOGFILE=spamcontrol.log
TARGETS=FILES.spamcontrol
CONF=conf-spamcontrol
IFSKEEP=${IFS}
REL=2418 # Should be identical to spamcontrol level
BUILD=2007080135149
if [ $# -eq 0 ] ; then
echo "INSTALLING spamcontrol $REL (Build $BUILD) at $DATE <<<" | tee -a $LOGFILE 2>&1
rm *.opt 2>&1 >> /dev/null
for FILE in $(grep "^= " ${TARGETS} | awk '{print $2}'); do
echo "Targeting file $FILE ..." | tee -a $LOGFILE 2>&1
if [ -s ${FILE} ] ; then
cp ${FILE} ${FILE}.$REL | tee -a $LOGFILE 2>&1
echo "--> ${FILE} copied to ${FILE}.$REL" | tee -a $LOGFILE 2>&1
else
echo "${FILE} not found!"
exit 1
fi
if [ -s ${FILE}.patch ] ; then
if [ ${SOLARIS} -gt 0 ]; then
echo "--> Patching qmail source file ${FILE} for Solaris ...." | tee -a $LOGFILE 2>&1
patch -i ${FILE}.patch ${FILE} 2>&1 | tee -a $LOGFILE
else
echo "--> Patching qmail source file ${FILE} ...." | tee -a $LOGFILE 2>&1
patch ${FILE} ${FILE}.patch 2>&1 | tee -a $LOGFILE
fi
else
echo "!! ${FILE}.patch not found / not applicable !"
exit 2
fi
done
echo "Adjusting compile options as defined in ${CONF} ..." | tee -a $LOGFILE 2>&1
rm sedfile 2>/dev/null
for FILE in $(grep "^= " ${TARGETS} | awk '{print $2}'); do
IFS=' =#'
echo "--> Modifying compile time options for ${FILE} ...." | tee -a $LOGFILE 2>&1
while read OPTION FLAG REST
do
if [ $(echo "${FLAG}" | grep -i "^no") ]; then
CHANGE=$(grep -i "^#define ${OPTION}" ${FILE} | head -n 1)
if [ "x${CHANGE}" != "x" ]; then
echo "s-^${CHANGE}-/\* ${CHANGE} \*/-" >> sedfile
fi
if [ -f sedfile ]; then
sed -f sedfile ${FILE} > ${FILE}.opt
cp ${FILE}.opt ${FILE}
fi
fi
done < ${CONF}
IFS=${IFSKEEP}
done
for FILE in $(grep "^+ " ${TARGETS} | awk '{print $2}'); do
IFS=' =#'
echo "--> Modifying compile time options for ${FILE} ...." | tee -a $LOGFILE 2>&1
while read OPTION FLAG REST
do
if [ $(echo "${FLAG}" | grep -i "^no") ]; then
CHANGE=$(grep -i "^#define ${OPTION}" ${FILE} | head -n 1)
if [ "x${CHANGE}" != "x" ]; then
echo "s-^${CHANGE}-/\* ${CHANGE} \*/-" >> sedfile
fi
if [ -f sedfile ]; then
sed -f sedfile ${FILE} > ${FILE}.opt
cp ${FILE}.opt ${FILE}
fi
fi
done < ${CONF}
IFS=${IFSKEEP}
done
echo "Copying additional scripts to ${QMAILHOME}/scripts/ ..." | tee -a $LOGFILE 2>&1
if [ ! -d ${QMAILHOME}/scripts ] ; then
echo "Creating ${QMAILHOME}/scripts ..."
mkdir ${QMAILHOME}/scripts
if [ $? -ne 0 ]; then
echo "You are not executing the installation script as 'root'."
echo "That's ok. However, you will miss the installation of documentation and scripts."
echo "Simply continue and check the installation log afterwards for the missing pieces."
echo "Type 'exit' if you wish to continue as root."
read REPLY
if [ "$REPLY" = "exit" ]; then
exit
else
echo "Proceeding with spamcontrol $REL installation .."
fi
fi
fi
echo "Attention!!" | tee -a $LOGFILE 2>&1
for FILE in $(grep "^& " ${TARGETS} | awk '{print $2}'); do
cp ${FILE} ${QMAILHOME}/scripts/ | tee -a $LOGFILE 2>&1
chmod +x ${QMAILHOME}/scripts/${FILE}
chown root:qmail ${QMAILHOME}/scripts/${FILE}
ls -la ${QMAILHOME}/scripts/${FILE} | tee -a $LOGFILE 2>&1
done
echo "These scripts need to be customized for your environment!" | tee -a $LOGFILE 2>&1
echo "Copying documentation and samples to ${QMAILHOME}/doc/ ..." | tee -a $LOGFILE 2>&1
if [ ! -d ${QMAILHOME}/doc ] ; then
echo "Creating ${QMAILHOME}/doc ..."
mkdir ${QMAILHOME}/doc
chown root:qmail ${QMAILHOME}/doc/
fi
for FILE in $(grep "^% " ${TARGETS} | awk '{print $2}'); do
cp ${FILE} ${QMAILHOME}/doc/ | tee -a $LOGFILE 2>&1
ls -la ${QMAILHOME}/doc/${FILE} | tee -a $LOGFILE 2>&1
done
echo "INSTALLATION of spamcontrol $REL (Build $BUILD) finished at $DATE <<<" | tee -a $LOGFILE 2>&1
# Now go for the uninstallation....
elif [ "$1" = "-u" ] ; then
# Get the Version Number from INPUT
if [ $# -eq 2 ] ; then
if [ $2 -gt 100 ] ; then
REL=$2
fi
fi
echo "DE-INSTALLING spamcontrol $REL (Build $BUILD) at $DATE <<<" | tee -a $LOGFILE 2>&1
rm *.opt >> $LOGFILE
for FILE in $(grep "^= " ${TARGETS} | awk '{print $2}'); do
echo "Targeting file $FILE ..." | tee -a $LOGFILE 2>&1
if [ -s ${FILE}.$REL ] ; then
mv ${FILE}.$REL ${FILE} | tee -a $LOGFILE 2>&1
touch ${FILE}
echo "--> ${FILE}.$REL moved to ${FILE}" | tee -a $LOGFILE 2>&1
else
echo "!! ${FILE}.$REL not found !"
echo "dns.c, qmail-local.c, cdb_seek.c, and error.h are required by SPAMCONTROL > 1.9.x only!"
echo "base64.h base64.c are requiered by SPAMCONTROL > 2.x.x only!"
echo "qmail-newbmt.c case_startb.c, and hier.c are required by SPAMCONTROL > 2.1.x only!"
echo "qmail-recipients* and recipients.* are requiered by SPAMCONTROL > 2.2.x only!"
echo "qmail-qstat.sh is only modified, if compile time option BIGTODO employed!"
echo "qmail-badmimetypes and qmail-badloadertypes are required by SPAMCONTROL >= 2.3 !"
echo "qmail-remote is required by SPAMCONTROL >= 2.3 !"
fi
done
echo "DE-INSTALLATION of spamcontrol $REL (Build $BUILD) finished at $DATE <<<" | tee -a $LOGFILE 2>&1
fi
exit 0
syntax highlighted by Code2HTML, v. 0.9.1