#!/usr/bin/perl
use Sys::Syslog;
$Nod32Root = shift || "/usr/local/nod32";
$Nod32Auth = "nod32.auth";
$LockFile = "/tmp/Nod32Busy.lock";
$LOCK_SH = 1;
$LOCK_EX = 2;
$LOCK_NB = 4;
$LOCK_UN = 8;
Sys::Syslog::openlog("Nod32-autoupdate", 'pid, nowait', 'mail');
# Check the auth file exists and has a username/password in it
if ($Nod32Root eq '/usr/sbin' && -f "/etc/nod32/$Nod32Auth") {
$Nod32Auth = undef;
$Update = "$Nod32Root/nod32_update";
} else {
$Nod32Auth = "$Nod32Root/$Nod32Auth";
$Update = "$Nod32Root/update";
}
if ($Nod32Auth) {
open(AUTH, $Nod32Auth) or
&BailOut("Authentication file $Nod32Auth does not exist");
$password = "";
$username = "";
while(<AUTH>) {
chomp;
($key, $value) = split(/\s*=\s*/, $_, 2);
$password = $value if $key eq "password";
$username = $value if $key eq "username";
}
close(AUTH);
&BailOut("Authentication file $Nod32Auth does not contain Nod32 username" .
" and password") if $password eq "" || $username eq "";
}
# Do the actual update
&Lock();
mkdir "$Nod32Root/mirror", 0755 if $Nod32Auth;
$result = system($Update) >>8;
&Unlock();
Sys::Syslog::syslog('info', $result==1?"Nod32 already up to date":"Nod32 updated");
Sys::Syslog::closelog();
exit 0;
sub BailOut {
Sys::Syslog::syslog('err', @_);
Sys::Syslog::closelog();
warn "@_, $!";
exit 1;
}
sub Lock {
open(LOCK, ">$LockFile") or return;
flock(LOCK, $LOCK_EX);
print LOCK "Locked for updating virus definitions by $$\n";
}
sub Unlock {
print LOCK "Unlocked after updating virus definitions by $$\n";
unlink $LockFile;
flock(LOCK, $LOCK_UN);
close LOCK;
}
syntax highlighted by Code2HTML, v. 0.9.1