#!@l_prefix@/lib/openpkg/bash @l_prefix@/etc/rc ## ## rc.uvscan -- Run-Commands ## %config uvscan_enable="$openpkg_rc_def" uvscan_dat="ftp://ftp.nai.com/pub/antivirus/datfiles/4.x/" uvscan_update="daily" %common uvscan_update () { # determine information i=0 while [ $i -lt 3 ]; do uvscan_datfile=`@l_prefix@/bin/curl -s "${uvscan_dat}" 2>/dev/null |\ grep 'dat-[0-9][0-9]*\.tar' | sort | tail -1 |\ sed -e 's;^.*\(dat-[0-9][0-9]*\.tar\).*$;\1;'` if [ ".${uvscan_datfile}" != . ]; then break else sleep 10 fi i=$(($i + 1)) done if [ ".${uvscan_datfile}" = . ]; then echo "rc:uvscan:ERROR: unable to determine latest DAT file version" 1>&2 return 1 fi uvscan_tmpdir=`echo "${uvscan_datfile}" | sed -e 's;\.tar$;;'` uvscan_datadir="@l_prefix@/var/uvscan/data" # determine old (installed) and new (available) versions uvscan_version_new=`echo "${uvscan_datfile}" | sed -e 's;^dat-;;' -e 's;\.tar$;;'` uvscan_version_old=`(cat "${uvscan_datadir}/VERSION") 2>/dev/null` if [ ".${uvscan_version_new}" = ".${uvscan_version_old}" ]; then # still no need for updating return 0 fi # download and unpack latest DATs umask 077 cd ${uvscan_datadir} || return 1 rm -f ${uvscan_datfile} >/dev/null 2>&1 || true i=0 while [ $i -lt 3 ]; do @l_prefix@/bin/curl -s -o ${uvscan_datfile} \ ${uvscan_dat}/${uvscan_datfile} || return 1 if [ $? -eq 0 ]; then break else rm -f ${uvscan_datfile} >/dev/null 2>&1 || true sleep 10 fi i=$(($i + 1)) done if [ ! -f ${uvscan_datfile} ]; then echo "rc:uvscan:ERROR: unable to download latest DAT file" 1>&2 return 1 fi rm -rf ${uvscan_tmpdir} >/dev/null 2>&1 || true mkdir ${uvscan_tmpdir} ( cd ${uvscan_tmpdir} && \ @l_prefix@/bin/tar -xf ../${uvscan_datfile} ) || return 1 # update DAT repository by installing updated DAT files @l_prefix@/lib/openpkg/shtool install -m 644 -o @l_musr@ -g @l_mgrp@ \ ${uvscan_tmpdir}/*.dat . echo "${uvscan_version_new}" >VERSION # cleanup rm -f ${uvscan_datfile} >/dev/null 2>&1 || true rm -rf ${uvscan_tmpdir} >/dev/null 2>&1 || true } %quarterly -u @l_musr@ rcService uvscan enable yes || exit 0 if [ ".$uvscan_update" = .quarterly ]; then uvscan_update || exit $? fi %hourly -u @l_musr@ rcService uvscan enable yes || exit 0 if [ ".$uvscan_update" = .hourly ]; then uvscan_update || exit $? fi %daily -u @l_musr@ rcService uvscan enable yes || exit 0 if [ ".$uvscan_update" = .daily ]; then uvscan_update || exit $? fi %weekly -u @l_musr@ rcService uvscan enable yes || exit 0 if [ ".$uvscan_update" = .weekly ]; then uvscan_update || exit $? fi