#!/bin/sh
#
# Uninstall AntiVir for UNIX
#
# Copyright (c) 2009 AVIRA GmbH
#

PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin"
OS=`uname | env LANG=C LC_ALL=C LC_CTYPE=C tr '[:upper:]' '[:lower:]'`

AVDIR="/usr/lib/AntiVir"
BACKUP_NAME="avira"
BACKUPDIR="/var/backups/${BACKUP_NAME}"

FORCE="0"
BACKUP="0"
REMOVE_KEY_FILE="1"
REMOVE_RE="1"
KEY_FOUND="0"
CONF_FOUND="0"
LOG_FOUND="0"
CRON_FOUND="0"
ERR_SCRIPT="1"
NO_SAVAPI_UNINSTALL="1"
OTHER_PRODS_INSTALLED="1"

INSTALLED_PRODUCTS=""
SMC_PLUGIN=""
START_STOP_SCRIPT=""
SET_LIBRARY_PATH=""
REMOVE_DAZUKOFS="0"

case "${OS}" in
	sunos)
		PROCCMD="ps -ef"
		PROCCMD="ps -ef -o pid,comm"
		ECHO="echo_sun"
		RM_DIR="-r"
		SET_LIBRARY_PATH="env LD_LIBRARY_PATH="/usr/local/lib:/usr/lib/AntiVir/agent""
		
		;;
	*)
		PROCCMD="ps axw"
		PROCCMD="ps axw -o pid,command"
		ECHO="echo"
		RM_DIR="-rd"
		;;
esac

if [ -f ./etc/file_list -a -f ./etc/dir_list ]
then
	. ./etc/file_list
	. ./etc/dir_list

elif [ -f ${AVDIR}/file_list -a -f ${AVDIR}/dir_list ]
then
	. ${AVDIR}/file_list
	. ${AVDIR}/dir_list

else
	${ECHO} " "
	${ECHO} "file and dir list are not available"
	exit 7
fi


remove()
{
        REMOVE="${1}"
        REMOVE_DIR=""

        if [ -d  ${REMOVE} ]
        then
                REMOVE_DIR="$RM_DIR"
        fi

        ${ECHO} -n "remove ${REMOVE} ... "
        rm ${REMOVE_DIR} ${REMOVE}
        if [ ${?} -eq 0 ]
        then
                ${ECHO} "done"
        else
                ${ECHO} "failed"
        fi
}


echo_sun()
{
	# this script comes from the man page of echo(1) on Solaris 9
	
	if [ "X$1" = "X-n" ]
	then
		shift
		printf "%s" "$*"
	else
		printf "%s\n" "$*"
	fi
}


detect_prod()
{
	if [ -x ${AVDIR}/avguard ]
	then
		INSTALLED_PRODUCTS="Guard"
	fi

	if [ -x ${AVDIR}/savapi ]
	then
		INSTALLED_PRODUCTS="$INSTALLED_PRODUCTS Scanner"
	fi

	if [ -x ${AVDIR}/avmailgate.bin ]
	then
		INSTALLED_PRODUCTS="$INSTALLED_PRODUCTS Mailgate"
	fi

	if [ -x ${AVDIR}/avwebgate.bin ]
	then
		INSTALLED_PRODUCTS="$INSTALLED_PRODUCTS Webgate"
	fi

	if [ -x ${AVDIR}/ium/ium ]
	then
		INSTALLED_PRODUCTS="$INSTALLED_PRODUCTS IUM"
	fi

	if [ -x ${AVDIR}/agent/agent ]
	then
		INSTALLED_PRODUCTS="$INSTALLED_PRODUCTS Agent"
	fi
}


root_check()
{
	ID=`id`
	CUT=`${ECHO} $ID | sed -e 's,uid=0(,,'`
	if [ "$CUT" = "$ID" ]
	then
		CUT=`${ECHO} $ID | sed -e 's,\euid=0(,,'`
		if [ "$CUT" = "$ID" ]
		then
			${ECHO} " "
			${ECHO} "This script must be run as root."
			${ECHO} " "
			exit 2
		fi
	fi
}


check_if_product_installed()
{
	if [ ${PRODUCT} = "all" ]
	then
		return 0
	fi

	TEMP1="`${ECHO} ${INSTALLED_PRODUCTS} | env LANG=C LC_ALL=C LC_CTYPE=C tr '[:upper:]' '[:lower:]'`"

	${ECHO} ${TEMP1} | grep ${PRODUCT} > /dev/null 2>&1
	if [ ${?} -ne 0 ]
	then
		${ECHO} "Not installed product: ${PRODUCT}"
		${ECHO} " "
		${ECHO} "Please run \"uninstall\" to view which products are installed"
		exit 3
	fi
}


detect_prod


if [ "$#" -eq 0 ]
then
	${ECHO} "uninstall [--product=productname] [--no-interactive] [--force] [--version] [--help]"
	${ECHO} " "
	${ECHO} "installed products:"
	
	if [ -z "${INSTALLED_PRODUCTS}" ]
	then
		${ECHO} "   no installed product found"
		exit 4
	else
		for ITEM in ${INSTALLED_PRODUCTS}
		do
			${ECHO} "   ${ITEM}"
		done
		exit 0
	fi
fi


# check the given parameters
for PARAM in "$@"
do
	case "${PARAM}" in
		--product=*)
			TEMP="`${ECHO} "${PARAM}" | sed -e 's,^--product=,,'`"
			PRODUCT="`${ECHO} "${TEMP}" | env LANG=C LC_ALL=C LC_CTYPE=C tr '[:upper:]' '[:lower:]'`"
			;;

		--no-interactive)
			BACKUP_CONF_FILES="n"
			BACKUP_LOG_FILES="n"
			REMOVE_CRONJOB="y"
			BACKUP_KEY_FILES="n"
			REMOVE_KEY_FILE_ANYWAY="n"
			REMOVE_REJECTED="y"
			REMOVE_HTTPROOT="y"
			FORCE_YES="y"
			;;

		 --inf=*)
			TEMP="`${ECHO} "${PARAM}" | sed -e 's,^--inf=,,'`"
			INF_FILE="${TEMP}"

			if [ -f "${INF_FILE}" ]
			then
# 				source inf_file for no interactive mode
				. ${INF_FILE}
			else
				${ECHO} "${INF_FILE} not found"
				exit 5
			fi
			;;

		--force)
			FORCE="1"
			;;

		--help|-help|help|-h)
			if [ -f ./README.uninstall ]
			then
				less ./README.uninstall
				exit 0

			elif [ -f ${AVDIR}/README.uninstall ]
			then
				less ${AVDIR}/README.uninstall
				exit 0
			else
				${ECHO} "README.uninstall not found"
				exit 6
			fi
			;;

		--version)
			${ECHO} "product:            Avira Product Uninstall"
			${ECHO} "product version:    1.0.4"
			exit 0
			;;

		*)
			${ECHO} "${PARAM} unknown option, read README for the available options"
			exit 1
			;;
	esac
done


root_check


# set variables for the products
if [ -n "${PRODUCT}" ]
then
	case "${PRODUCT}" in
		agent)
			ENTER_PATH="/usr/lib/AntiVir/smc-registry/hkey_local_machine/software/h+bedv/enterprise management console"
			FULLPRODUCTNAME="Avira SMC Agent"
			DAEMONNAME="${PRODUCT}"
			FILE_LIST="${FILE_AGENT}"
			DIR_LIST="${DIR_AGENT}"
			CONF_LIST="${FILE_AGENT_CONF}"
			LOG_LIST="${FILE_AGENT_LOG}"
			NO_SAVAPI_UNINSTALL="0"
			CRONJOB="Agent agent"
			if [ ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/ium/ium ]
			then
				CRONJOB="Agent agent"
				FILE_LIST="${FILE_AGENT} ${FILE_AVUPDATE}"
				DIR_LIST="${DIR_AGENT} ${DIR_SHARED_AGENT} ${DIR_AVUPDATE} ${DIR_SHARED}"
				CONF_LIST="${FILE_AGENT_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
				LOG_LIST="${FILE_AGENT_LOG} ${FILE_AVUPDATE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			;;

		scanner)
			FULLPRODUCTNAME="Avira AntiVir Savapi3"
			DAEMONNAME="savapi"
			START_STOP_SCRIPT=""
			FILE_LIST="${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE}"
			DIR_LIST="${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE}"
			CONF_LIST="${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} /etc/cron.d/avira_updater"
			LOG_LIST="${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG}"
			CRONJOB="Scanner scanner"

			if [ -x ${AVDIR}/avguard.bin -o -x ${AVDIR}/avwebgate.bin -o -x ${AVDIR}/avmailgate.bin ]
			then
				${ECHO} "Savapi3 is a necessary component for the installed products and can not be"
				${ECHO} "uninstalled. This component is automatically removed when uninstalling the"
				${ECHO} "Savapi3 based products."
				exit 9
			fi
			;;

		mailgate)
			FULLPRODUCTNAME="Avira AntiVir MailGate"
			DAEMONNAME="av${PRODUCT}.bin"
			SMC_PLUGIN="libuxmgt.so"
			FILE_LIST="${FILE_MAILGATE}"
			DIR_LIST="${DIR_MAILGATE}"
			CONF_LIST="${FILE_MAILGATE_CONF}"
			LOG_LIST="${FILE_MAILGATE_LOG}"
			PRODUCT_CONF_FILE="/etc/av${PRODUCT}.conf"
			CRONJOB="Mailgate mailgate"
			if [ -x ${AVDIR}/agent/agent -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/ium/ium ]
			then
				CRONJOB="Mailgate mailgate Scanner scanner"
				FILE_LIST="${FILE_MAILGATE} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_MAILGATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_TEMPLATES}"
				CONF_LIST="${FILE_MAILGATE_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF}"
				LOG_LIST="${FILE_MAILGATE_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			if [ ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/ium/ium -a ! -x ${AVDIR}/agent/agent ]
			then
				CRONJOB="Mailgate mailgate Scanner scanner"
				FILE_LIST="${FILE_MAILGATE} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_AVUPDATE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_MAILGATE} ${DIR_AVUPDATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_SMC} ${DIR_SHARED_AGENT} ${DIR_SHARED_TEMPLATES} ${DIR_SHARED}"
				CONF_LIST="${FILE_MAILGATE_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
				LOG_LIST="${FILE_MAILGATE_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG} ${FILE_AVUPDATE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			;;

		guard)
			FULLPRODUCTNAME="Avira AntiVir Guard"
			DAEMONNAME="av${PRODUCT}.bin"
			SMC_PLUGIN="libuxsrv.so libuxwks.so"
			FILE_LIST="${FILE_GUARD}"
			DIR_LIST="${DIR_GUARD}"
			CONF_LIST="${FILE_GUARD_CONF}"
			LOG_LIST="${FILE_GUARD_LOG}"
			PRODUCT_CONF_FILE="/etc/avira/av${PRODUCT}.conf"
			CRONJOB="Guard guard"
			REMOVE_DAZUKOFS="1"
			if [ -x ${AVDIR}/agent/agent -a ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/ium/ium ]
			then
				CRONJOB="Guard guard Scanner scanner"
				FILE_LIST="${FILE_GUARD} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_GUARD} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_TEMPLATES}"
				CONF_LIST="${FILE_GUARD_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF}"
				LOG_LIST="${FILE_GUARD_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			if [ ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/ium/ium -a ! -x ${AVDIR}/agent/agent ]
			then
				CRONJOB="Guard guard Scanner scanner"
				FILE_LIST="${FILE_GUARD} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_AVUPDATE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_GUARD} ${DIR_UPDATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_SMC} ${DIR_SHARED_AGENT} ${DIR_SHARED_TEMPLATES} ${DIR_SHARED}"
				CONF_LIST="${FILE_GUARD_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
				LOG_LIST="${FILE_GUARD_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG} ${FILE_AVUPDATE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			;;
	
		webgate)
			FULLPRODUCTNAME="Avira AntiVir WebGate"
			DAEMONNAME="av${PRODUCT}.bin"
			SMC_PLUGIN="libuxwgt.so"
			FILE_LIST="${FILE_WEBGATE}"
			DIR_LIST="${DIR_WEBGATE}"
			CONF_LIST="${FILE_WEBGATE_CONF}"
			LOG_LIST="${FILE_WEBGATE_LOG}"
			PRODUCT_CONF_FILE="/etc/av${PRODUCT}.conf"
			CRONJOB="Webgate webgate"
			if [ -x ${AVDIR}/agent/agent -a ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/ium/ium ]
			then
				CRONJOB="Webgate webgate Scanner scanner"
				FILE_LIST="${FILE_WEBGATE} ${FILE_SAVAPI} ${FILE_ENGINE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_WEBGATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_TEMPLATES}"
				CONF_LIST="${FILE_WEBGATE_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF}"
				LOG_LIST="${FILE_WEBGATE_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			if [ ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/ium/ium -a ! -x ${AVDIR}/agent/agent ]
			then
				CRONJOB="Webgate webgate Scanner scanner"
				FILE_LIST="${FILE_WEBGATE} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_AVUPDATE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_WEBGATE} ${DIR_UPDATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_SMC} ${DIR_SHARED_AGENT} ${DIR_SHARED_TEMPLATES} ${DIR_SHARED}"
				CONF_LIST="${FILE_WEBGATE_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
				LOG_LIST="${FILE_WEBGATE_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG} ${FILE_AVUPDATE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			;;

		ium)
			FULLPRODUCTNAME="Avira IUM"
			DAEMONNAME="${PRODUCT}"
			FILE_LIST="${FILE_IUM}"
			DIR_LIST="${DIR_IUM}"
			CONF_LIST="${FILE_IUM_CONF}"
			LOG_LIST="${FILE_IUM_LOG}"
			CRONJOB="IUM ium"
			if [ -x ${AVDIR}/agent/agent -a ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/avwebgate.bin ]
			then
				CRONJOB="IUM ium"
				FILE_LIST="${FILE_IUM} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_IUM} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_TEMPLATES}"
				CONF_LIST="${FILE_IUM_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF}"
				LOG_LIST="${FILE_IUM_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			if [ ! -x ${AVDIR}/avmailgate.bin -a ! -x ${AVDIR}/avguard.bin -a ! -x ${AVDIR}/avwebgate.bin -a ! -x ${AVDIR}/agent/agent ]
			then
				CRONJOB="IUM ium"
				FILE_LIST="${FILE_IUM} ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_AVUPDATE} ${FILE_SHARED_SMC}"
				DIR_LIST="${DIR_IUM} ${DIR_UPDATE} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_SHARED_SMC} ${DIR_SHARED_AGENT} ${DIR_SHARED_TEMPLATES} ${DIR_SHARED}"
				CONF_LIST="${FILE_IUM_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
				LOG_LIST="${FILE_IUM_LOG} ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG} ${FILE_AVUPDATE_LOG}"
				OTHER_PRODS_INSTALLED="0"
				NO_SAVAPI_UNINSTALL="0"
			fi
			;;
	
		all)
			FULLPRODUCTNAME="All installed Products"
			DAEMONNAME="avguard.bin avmailgate.bin avwebgate.bin agent ium"
			FILE_LIST="${FILE_AGENT} ${FILE_MAILGATE} ${FILE_WEBGATE} ${FILE_GUARD} ${FILE_IUM} \
				   ${FILE_SAVAPI} ${FILE_VDF} ${FILE_ENGINE} ${FILE_AVUPDATE} ${FILE_SHARED_SMC}"
			DIR_LIST="${DIR_AGENT} ${DIR_MAILGATE} ${DIR_WEBGATE} ${DIR_UPDATE} \
				  ${DIR_IUM} ${DIR_SAVAPI} ${DIR_VDF} ${DIR_ENGINE} ${DIR_GUARD} ${DIR_SHARED_SMC} ${DIR_SHARED_AGENT} 
				  ${DIR_SHARED_TEMPLATES} ${DIR_SHARED}"
			CONF_LIST="${FILE_AGENT_CONF} ${FILE_MAILGATE_CONF} ${FILE_WEBGATE_CONF} ${FILE_GUARD_CONF} \
				   ${FILE_IUM_CONF} ${FILE_SAVAPI_CONF} ${FILE_VDF_CONF} ${FILE_ENGINE_CONF} ${FILE_AVUPDATE_CONF} /etc/cron.d/avira_updater"
			LOG_LIST="${FILE_AGENT_LOG} ${FILE_MAILGATE_LOG} ${FILE_WEBGATE_LOG} ${FILE_GUARD_LOG} ${FILE_IUM_LOG} \
				  ${FILE_SAVAPI_LOG} ${FILE_VDF_LOG} ${FILE_ENGINE_LOG} ${FILE_AVUPDATE_LOG}"	
			PRODUCT_CONF_FILE="/etc/avmailgate.conf /etc/avwebgate.conf /etc/avira/avguard.conf"
			OTHER_PRODS_INSTALLED="0"
			NO_SAVAPI_UNINSTALL="0"
			REMOVE_DAZUKOFS="1"
			CRONJOB="Agent agent IUM ium Maiglate mailgate Guard guard Webgate webgate Scanner scanner"
			;;
	
		*)
			${ECHO} "Your specified product does not exist. Please read the README or --help for more informations."
			exit 8
			;;
	esac
else
	${ECHO} "You have to set --product to use this script"
	exit 8
fi


check_if_product_installed


testPROCCMD()
{
	$PROCCMD > /dev/null 2>&1
}


getPROCESSLIST()
{
	PROCESSLIST=""

	if [ -z "$PROCCMD" ]
	then
		testPROCCMD
		if [ "$?" -ne 0 ]
		then
			PROCCMD="ps -A -o pid,args"
			testPROCCMD
		fi
	fi

	if [ "$1" = "savapi" ]
	then
		for PROC in `$PROCCMD | grep "${1}" | grep "${2}" | grep -v uninstall | grep -v grep`
		do
			if [ -z "`${ECHO} ${PROC} | sed -e s/[0-9]//g`" ]
			then
				PROCESSLIST="${PROCESSLIST} ${PROC}"
			fi
		done
	else
		for PROC in `$PROCCMD | grep "${1}" | grep -v uninstall | grep -v grep`
		do
			if [ -z "`${ECHO} ${PROC} | sed -e s/[0-9]//g`" ]
			then
				PROCESSLIST="${PROCESSLIST} ${PROC}"
			fi
		done
	fi
}


stop_running_processes()
{
	${ECHO} " "
	${ECHO} "Looking for running processes ..."
	for ITEM in ${DAEMONNAME}
	do
		case ${ITEM} in
			agent)
				SSS="agent/smc-agent"
				;;

			avguard.bin)
				SSS="avguard"
				;;

			avmailgate.bin)
				SSS="avmailgate"
				;;

			avwebgate.bin)
				SSS="avwebgate"
				;;

			ium)
				SSS="ium/avium"
				;;
		esac

		getPROCESSLIST "${ITEM}"
		if [ -z "${PROCESSLIST}" ]
		then
			${ECHO} "   ${ITEM}: no process found"
		else
			${ECHO} "   ${ITEM}: process found"

			if [ -f ${AVDIR}/${SSS} ]
			then
				${ECHO} -n "      stopping ${ITEM} with the start/stop script ... "
				/bin/sh ${AVDIR}/${SSS} stop > /dev/null 2>&1
				ERR_SCRIPT="${?}"
			fi

			if [ "${ERR_SCRIPT}" -eq 0 ]
			then
				${ECHO} "done"
			else
				${ECHO} "failed"
				${ECHO} "      -> killing running "${ITEM}" process"
				for ITEM1 in ${PROCESSLIST}
				do
					kill -9 "${ITEM1}" > /dev/null 2>&1
				done
			fi
		fi
	done
}


make_backupdir()
{
	${ECHO} -n "   Looking for existing backupdir ..."

	if [ -d "${BACKUPDIR}" ]
	then
		${ECHO} " found"
	else
		${ECHO} " not found"
		${ECHO} "      -> mkdir backupdir: "${BACKUPDIR}""
		mkdir -p "${BACKUPDIR}"
		ERR=$?
		if [ "${ERR}" -eq 0 ]
		then
			return 0
		else
			return 1
		fi
	fi
}


handle_license_file()
{
	${ECHO} " "
	${ECHO} -n "Looking for existing key-files ..."
	if [ -d ${AVDIR} ]
	then
		for ITEM in `ls ${AVDIR} | grep -i "\.key$"`
		do
			if [ -f "${AVDIR}/${ITEM}" ]
			then
				KEY_FOUND=`expr ${KEY_FOUND} + 1`
			fi
			done
	fi

	if [ "${KEY_FOUND}" -eq 0 ]
	then
		${ECHO} " no key-file found"
	else
		${ECHO} " ${KEY_FOUND} key-file found"
		if [ $OTHER_PRODS_INSTALLED -eq 1 -a ${PRODUCT} != "all" -a ${FORCE} -eq 0 ]
		then
			${ECHO} -n "   Other products are installed, would you like to remove the key-file anyway? [n] "
			INPUT=${REMOVE_KEY_FILE_ANYWAY}

			if [ -z "${INPUT}" ]
			then
				read INPUT
			else
				${ECHO} "${INPUT}"
			fi

			REMOVE_KEY_FILE=0
			case ${INPUT} in
					y*|Y*|j*|J*)
					REMOVE_KEY_FILE=1
					;;
			esac
		fi

		if [ $REMOVE_KEY_FILE -eq 1 ]
		then
			${ECHO} -n "   Would you like to back-up these key-files? [n] "
			INPUT=${BACKUP_KEY_FILES}
		
			if [ -z "${INPUT}" ]
			then
				read INPUT
			else
				${ECHO} "${INPUT}"
				fi
		
			BACKUP=0
			case ${INPUT} in
					y*|Y*|j*|J*)
					BACKUP=1
					;;
			esac
	
			if [ ${REMOVE_KEY_FILE} -eq 1 ]
			then
				if [ "$BACKUP" -eq 1 ]
				then
					make_backupdir
		
					for ITEM in `ls ${AVDIR} | grep -i "\.key$"`
					do
						if [ -f "${AVDIR}/${ITEM}" ]
						then
							${ECHO} "      cp ${AVDIR}/${ITEM} ${BACKUPDIR}"
							cp ${AVDIR}/${ITEM} ${BACKUPDIR}
							${ECHO} -n "      -> "
							remove ${AVDIR}/${ITEM}
						fi
					done
				else
					for ITEM in `ls ${AVDIR} | grep -i "\.key$"`
					do
						if [ -f "${AVDIR}/${ITEM}" ]
						then
							${ECHO} -n "      -> "
							remove ${AVDIR}/${ITEM}
						fi
					done
				fi
			fi
		fi
	fi
}


handle_conf_file()
{
	${ECHO} " "
	${ECHO} -n "Looking for existing ${FULLPRODUCTNAME} conf-files ..."
	for ITEM in ${CONF_LIST}
	do
		if [ -f "${ITEM}" ]
		then
			CONF_FOUND=`expr ${CONF_FOUND} + 1`
		fi
	done

	if [ "${CONF_FOUND}" -eq 0 ]
	then
		${ECHO} " no conf-file found"
	else
		${ECHO} " ${CONF_FOUND} conf-file found"
		${ECHO} -n "   Would you like to back-up these conf-files? [n] "
		INPUT=${BACKUP_CONF_FILES}
		if [ -z "${INPUT}" ]
		then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi
	
		BACKUP=0
		case ${INPUT} in
			y*|Y*|j*|J*)
				BACKUP=1
				;;
		esac
	
		if [ "$BACKUP" -eq 1 ]
		then
			make_backupdir

			for ITEM in ${CONF_LIST}
			do
				if [ -f "${ITEM}" ]
				then
					${ECHO} "      cp ${ITEM} ${BACKUPDIR}"
					cp ${ITEM} ${BACKUPDIR}
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		else
			for ITEM in ${CONF_LIST}
			do
				if [ -f "${ITEM}" ]
				then
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		fi
	fi
}


handle_log_file()
{
	${ECHO} " "
	${ECHO} -n "Looking for existing ${FULLPRODUCTNAME} log-files ..."
	for ITEM in ${LOG_LIST}
	do
		if [ -f "${ITEM}" ]
		then
			LOG_FOUND=`expr ${LOG_FOUND} + 1`
		fi
	done

# 	check for custom logfiles
	for ITEM in ${PRODUCT_CONF_FILE}
	do
		if [ -f "${ITEM}" ]
		then
			CUSTOM_LOG_FILE="`grep '^LogFile' ${ITEM} | sed 's/LogFile[ \t][ \t]*//'`"
			if [ -f "${CUSTOM_LOG_FILE}" ]
			then
				LOG_LIST="${LOG_LIST} ${CUSTOM_LOG_FILE}"
				LOG_FOUND=`expr ${LOG_FOUND} + 1`
			fi
		fi
	done

	if [ "${LOG_FOUND}" -eq 0 ]
	then
		${ECHO} " no log-file found"
	else
		${ECHO} " ${LOG_FOUND} log-file found"
		${ECHO} -n "   Would you like to back-up these log-files? [n] "
		INPUT=${BACKUP_LOG_FILES}
		if [ -z "${INPUT}" ]
		then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi
	
		BACKUP=0
		case ${INPUT} in
			y*|Y*|j*|J*)
				BACKUP=1
				;;
		esac
	
		if [ "$BACKUP" -eq 1 ]
		then
			for ITEM in ${LOG_LIST}
			do
				if [ -f "${ITEM}" ]
				then
					${ECHO} "   cp ${ITEM} ${BACKUPDIR}"
					cp ${ITEM} ${BACKUPDIR}
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		else
			for ITEM in ${LOG_LIST}
			do
				if [ -f "${ITEM}" ]
				then
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		fi
	fi
}


handle_cronjob()
{
	${ECHO} " "
	${ECHO} -n "Looking for existing ${FULLPRODUCTNAME} cronjob ..."
	if [ -d /etc/cron.d ]
	then
		if [ -f /etc/cron.d/avira_updater ]
		then
			for ITEM in ${CRONJOB}
			do
				grep ${ITEM} /etc/cron.d/avira_updater > /dev/null 2>&1
				if [ $? -eq 0 ]
				then
					CRON_FOUND=`expr ${CRON_FOUND} + 1`
				fi
			done
		fi
	else
		for ITEM in ${CRONJOB}
		do
			crontab -l | grep "${ITEM}" > $AVDIR/avira_updater
			if [ $? -eq 0 ]
			then
				CRON_FOUND=`expr ${CRON_FOUND} + 1`
			fi
		done
	fi

	if [ "${CRON_FOUND}" -eq 0 ]
	then
		${ECHO} " no cronjob found"
	else
		${ECHO} " cronjob found"
		${ECHO} -n "   Would you like to remove the cronjob? [y] "
		INPUT=${REMOVE_CRONJOB}
		if [ -z "${INPUT}" ]
		then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi
	
		REMOVE=1
		case ${INPUT} in
			n*|N*)
				REMOVE=0
				;;
		esac
	
		if [ "${REMOVE}" -eq 1 ]
		then
			if [ -d /etc/cron.d ]
			then
				if [ -f /etc/cron.d/avira_updater ]
				then
					for ITEM in ${CRONJOB}
					do
						grep ${ITEM} /etc/cron.d/avira_updater > /dev/null 2>&1
						if [ ${?} -eq 0 ]
						then
							${ECHO} -n "      -> remove ${ITEM} cron job ... "
							cp -f /etc/cron.d/avira_updater /etc/cron.d/avira_updater.backup
							cat /etc/cron.d/avira_updater.backup | grep -v ${ITEM} > /etc/cron.d/avira_updater
							grep ${ITEM} /etc/cron.d/avira_updater > /dev/null 2>&1
							if [ ${?} -ne 0 ]
							then
								${ECHO} "done"
							else
								${ECHO} "failed"
							fi
						fi
					done

					rm /etc/cron.d/avira_updater.backup
				fi
			else
				for ITEM in ${CRONJOB}
				do
					${ECHO} "      -> remove ${ITEM} cron job ... "
					cp -f $AVDIR/avira_updater $AVDIR/avira_updater.backup
					crontab -l | grep -v "$AVDIR/$UPDATENAME --product=Scanner" > $AVDIR/avira_updater
					crontab $AVDIR/avira_updater

					crontab -l | grep "$AVDIR/$UPDATENAME --product=Scanner" > /dev/null 2>&1
					if [ ${?} -ne 0 ]
					then
						${ECHO} "done"
					else
						${ECHO} "failed"
					fi
				done
			fi
		fi
	fi
}


handle_agent()
{
	if [ "${PRODUCT}" = "agent" -o -z "${SMC_PLUGIN}" -o ! -x ${AVDIR}/agent/agent -a ! -x ${AVDIR}/agent/smc-agent -a ! -f /etc/avira/agent.ini ]
	then
		return 0
	fi

	${ECHO} -n "uninstall SMC plugin ${SMC_PLUGIN} ... "
	if [ -f uninstall_smcplugin.sh ]
	then
		/bin/sh uninstall_smcplugin.sh ${SMC_PLUGIN} &
	
	elif [ -f ${AVDIR}/uninstall_smcplugin.sh ]
	then
		/bin/sh ${AVDIR}/uninstall_smcplugin.sh ${SMC_PLUGIN} &
	
	else
		${ECHO} "no result"
		${ECHO} " "
		${ECHO} "SMC plugins will not be uninstalled"
	fi
	${ECHO} "done"
}


handle_dazukofs()
{
	if [ ${REMOVE_DAZUKOFS} -ne "1" ]
	then
		return 0
	fi

	${ECHO} "umount dazukofs protected directories"
	DAZUKOFS_MOUNT="`cat /etc/fstab | grep -v "#" | grep dazukofs | sed 's,\ .*,,'`"
	for a in ${DAZUKOFS_MOUNT}
	do
		${ECHO} -n "umount ${a} ... "
		umount ${a} > /dev/null 2>&1
		if [ ${?} -eq "0" ]
		then
			${ECHO} "done"
		else
			${ECHO} "fail"
		fi
	done

	${ECHO} -n "remove dazukofs entries from /etc/fstab ... "
	cp /etc/fstab /etc/fstab.orig
	grep -vi dazukofs /etc/fstab.orig > /etc/fstab
	rm /etc/fstab.orig
	${ECHO} "done"
}


handle_product()
{
	${ECHO} " "
	${ECHO} "starting to remove listed files and directories ..."
	for ITEM in `${ECHO} ${FILE_LIST}`
	do
		if [ -f "${ITEM}" -o -x "${ITEM}" -o -h "${ITEM}" ]
		then
			${ECHO} -n "      -> "
			remove ${ITEM}
		fi
	done

	for ITEM in `${ECHO} ${DIR_LIST}`
	do
		if [ -d "${ITEM}" ]
		then
			${ECHO} -n "      -> "
			remove ${ITEM}
		fi
	done

	if [ ${PRODUCT} = "mailgate" -a ${FORCE} -eq 0 -o ${PRODUCT} = "all" -a ${FORCE} -eq 0 -a -d /var/spool/avmailgate ]
	then
		${ECHO} " "
		${ECHO} -n "   Do you like to remove the rejected directory from mailgate? [y] "
		INPUT=${REMOVE_REJECTED}
		if [ -z "${INPUT}" ]
		then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi

		if [ -z "$INPUT" ]
		then
			INPUT="y"
		fi

		REMOVE_RE=0
		case ${INPUT} in
			y*|Y*|j*|J*)
				REMOVE_RE=1
				;;
		esac
	
		if [ "$REMOVE_RE" -eq 1 ]
		then
			for ITEM in `${ECHO} ${DIR_MAILGATE_REJECTED}`
			do
				if [ -d "${ITEM}" ]
				then
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		fi
	fi

	if [ ${PRODUCT} = "ium" -a ${FORCE} -eq 0 -o ${PRODUCT} = "all" -a ${FORCE} -eq 0 -a -d /var/avira/ium/HttpRoot ]
	then
		${ECHO} " "
		${ECHO} -n "   Do you like to remove the HttpRoot directory from ium? [y] "
		INPUT=${REMOVE_HTTPROOT}
		if [ -z "${INPUT}" ]
		then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi

		if [ -z "$INPUT" ]
		then
			INPUT="y"
		fi

		REMOVE_RE=0
		case ${INPUT} in
			y*|Y*|j*|J*)
				REMOVE_RE=1
				;;
		esac
	
		if [ "$REMOVE_RE" -eq 1 ]
		then
			for ITEM in `${ECHO} ${DIR_IUM_HTTPROOT}`
			do
				if [ -d "${ITEM}" ]
				then
					${ECHO} -n "      -> "
					remove ${ITEM}
				fi
			done
		fi
	fi

	if [ $NO_SAVAPI_UNINSTALL -eq 1 -a $FORCE -eq 0 ]
	then
		${ECHO} " "
		${ECHO} "   INFO: savapi dependency:"
		if [ -f "${AVDIR}/avmailgate.bin" ]
		then
			${ECHO} "      savapi is needed by (installed) mailgate and not uninstalled"
		fi
		if [ -f "${AVDIR}/avguard.bin" ]
		then
			${ECHO} "      savapi is needed by (installed) guard and not uninstalled"
		fi
		if [ -f "${AVDIR}/avwebgate.bin" ]
		then
			${ECHO} "      savapi is needed by (installed) webgate and not uninstalled"
		fi
	fi
}

# main ()
	if [ "${FORCE}" -eq "1" ]
	then
		${ECHO} "INFO: You are using --force. this option will remove the product"
		${ECHO} "without checking the dependencies on other products."
		${ECHO} -n "Would you like to continue? [n] "
		INPUT=${FORCE_YES}
		if [ -z "${INPUT}" ]
			then
			read INPUT
		else
			${ECHO} "${INPUT}"
		fi
	
		START_FORCE=0
		case ${INPUT} in
			y*|Y*|j*|J*)
				START_FORCE=1
				;;
		esac
		
		if [ "${START_FORCE}" -eq 0 ]
		then
			exit 0
		fi
	fi

# 	looking for running processes and kill them
	stop_running_processes

# 	looking for existing key files in /usr/lib/AntiVir and backup them
	handle_license_file

# 	looking for the product log files and backup them before remove
	handle_log_file

# 	looking for the product conf files and backup them before remove
	handle_conf_file

# 	looking for created cronjobs and remove them
	handle_cronjob

# 	looking for installed agent + plugins and un-register the product in smc
	handle_agent

# 	looking dazukofs mountpoints in /etc/fstab
	handle_dazukofs

# 	looking for installed products
	handle_product

	${ECHO} " "
	${ECHO} "${FULLPRODUCTNAME} successfully uninstalled"
