#!/bin/sh
#
# $NetBSD: update_dat,v 1.4 2001/12/13 06:42:48 jlam Exp $
#
# Script to update the VirusScan data files.

UVSCANDIR=@PREFIX@/libexec/uvscan
DAT_SITE=ftp://ftp.nai.com/pub/datfiles/english/
DAT_FILES="@DATFILES@"
TMPDIR=${TMPDIR:-/tmp}/$$

BASENAME="@BASENAME@"
CP="@CP@"
ECHO="@ECHO@"
GREP="@GREP@"
GTAR="@GTAR@"
HEAD="@HEAD@"
MKDIR="@MKDIR@"
MV="@MV@"
RM="@RM@"
SED="@SED@"

progname=`${BASENAME} $0`

if [ "$1" = "-v" ]; then
	verbose=1
	shift
fi

[ -z "$1" ] || DAT_SITE="$1"

# Ensure that ${DAT_SITE} has a trailing slash (it may be a directory).
case ${DAT_SITE} in
*/)	;;
*)	DAT_SITE="${DAT_SITE}/" ;;
esac

${MKDIR} ${TMPDIR}
${MKDIR} ${UVSCANDIR}
cd ${TMPDIR}

# Fetch the ReadMe file to read the latest version of the DAT files.
if ! ( ftp ${DAT_SITE}readme.txt >/dev/null )
then
	${ECHO} "${progname}: unable to fetch ${DAT_SITE}readme.txt"
	${RM} -rf ${TMPDIR}
	exit 1
fi

CURVER=`${HEAD} -n 2 readme.txt | ${GREP} DAT | ${SED} -e 's/^.*\([0-9][0-9][0-9][0-9]\).*$/\1/'`
OLDVER=`${HEAD} -n 2 ${UVSCANDIR}/readme.txt | ${GREP} DAT | ${SED} -e 's/^.*\([0-9][0-9][0-9][0-9]\).*$/\1/'`
exitcode=0
if [ "${CURVER}" = "${OLDVER}" ]
then
	[ -z "$verbose" ] || ${ECHO} "${progname}: VirusScan DAT files are current (${CURVER})"
else
	DAT_TAR=dat-${CURVER}.tar
	if ftp ${DAT_SITE}${DAT_TAR} >/dev/null
	then
		if ${GTAR} xf ${DAT_TAR} ${DAT_FILES}
		then
			# Backup old dat-* tar files.
			if [ "`${ECHO} ${UVSCANDIR}/*.tar`" != "${UVSCANDIR}/*.tar" ]
			then
				for file in ${UVSCANDIR}/*.tar
				do
					${RM} -f ${file}.old
					${MV} ${file} ${file}.old
				done
			fi

			# Backup old DAT files.
			for file in ${DAT_FILES}
			do
				file=${UVSCANDIR}/${file}
				if [ -f ${file} ]
				then
					${RM} -f ${file}.bak
					${MV} ${file} ${file}.bak
				fi
			done

			# Copy new DAT files into place.
			for file in ${DAT_FILES}
			do
				${CP} -p ${file} ${UVSCANDIR}/${file}
			done
			${CP} -p ${DAT_TAR} ${UVSCANDIR}/${DAT_TAR}
			${RM} -f ${UVSCANDIR}/*.old
			${ECHO} `date` Successfully updated VirusScan DAT files to ${CURVER}.
		else
			${ECHO} "${progname}: unable to update VirusScan DAT files"
			exitcode=1
		fi
	else
		${ECHO} "${progname}: unable to fetch ${DAT_SITE}${DAT_TAR}"
		exitcode=1
	fi
fi

cd /
${RM} -rf ${TMPDIR}
exit ${exitcode}
