This code was written for the use on network with an undersized internetconnection to redistribute antivirussignature-updates locally.
Probably buggy ;-) but it's just my 4th script....
#!/usr/bin/perl -w
use Net::FTP;
use Config::IniFiles;
use File::Temp qw/ :POSIX /;
my $host = "ftp.nai.com";
my $user = "anonymous";
my $pass = '-anonymous@';
my $remote_dir = "/virusdefs/4.x/";
my $destination_dir = '/data/AntiVir';
print "Connecting to McAfee\n";
my $ftp=Net::FTP->new($host);
print "Logging in\n";
$ftp->login($user, $pass);
$ftp->cwd($remote_dir);
$ftp->ascii();
print "getting update information\n";
$fh = tmpnam();
$ftp->get("update.ini", $fh);
print "reading update information\n";
$updateini = Config::IniFiles->new( -file => $fh);
if ($updateini->SectionExists("SuperDat-IA32")) {
$superdat=$updateini->val("SuperDat-IA32", "FileName");
}
if ($updateini->SectionExists("ZIP")) {
$dat=$updateini->val("ZIP", "FileName");
}
if ($updateini->SectionExists("Incremental")) {
$updateini->DeleteSection("Incremental");
}
if ($updateini->SectionExists("Engine-LINUX")) {
$updateini->DeleteSection("Engine-LINUX");
}
if ($updateini->SectionExists("Engine-NETWARE")) {
$updateini->DeleteSection("Engine-NETWARE");
}
$updateini->WriteConfig("$destination_dir/update.ini");
unlink($fh);
$ftp->binary();
if (! (-e $destination_dir."/".$superdat)) {
print "downloading $superdat\n";
$ftp->get("$superdat", $destination_dir."/".$superdat);
} else {
print "superdat is the newest version\n";
}
if (! (-e $destination_dir."/".$dat)) {
print "downloading $dat\n";
$ftp->get("$dat", $destination_dir."/".$dat);
} else {
print "dat is the newest version\n";
}
print "completed\n";
$ftp->quit;