#!/usr/bin/perl

use Sys::Syslog;

$AntiVirDir = shift || "/usr/lib/AntiVir";

$LockFile = "/tmp/AntiVirBusy.lock";

$LOCK_SH = 1;
$LOCK_EX = 2;
$LOCK_NB = 4;
$LOCK_UN = 8;

Sys::Syslog::openlog("AntiVir-autoupdate", 'pid, nowait', 'mail');

BailOut("Installation dir \"$AntiVirDir\" does not exist!")
  unless $AntiVirDir ne "" && -d $AntiVirDir;

&LockAntiVir();
system("$AntiVirDir/antivir --update");
&UnlockAntiVir();
Sys::Syslog::syslog('info', "AntiVir updated in $AntiVirDir");
Sys::Syslog::closelog();
exit 0;

sub BailOut {
	Sys::Syslog::syslog('err', @_);
	Sys::Syslog::closelog();
	warn "@_, $!";
	exit 1;
}

sub LockAntiVir {
	open(LOCK, ">$LockFile") or return;
	flock(LOCK, $LOCK_EX);
	print LOCK "Locked for updating AntiVir patterns by $$\n";
}

sub UnlockAntiVir {
	print LOCK "Unlocked after updating AntiVir patterns by $$\n";
	unlink $LockFile;
	flock(LOCK, $LOCK_UN);
	close LOCK;
}

