File: //scripts.20110531.215904.25158/fixspamassassinfailedupdate
#!/usr/bin/perl
# cpanel - fixspamassassinfailedupdate Copyright(c) 2010 cPanel, Inc.
# All rights Reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
BEGIN { unshift @INC, '/usr/local/cpanel', '/scripts'; }
use RestartSrv;
use Cpanel::SafeRun::Errors ();
use Cpanel::FindBin ();
if ( -e '/etc/spamddisable' || -e '/etc/spamdisable' ) {
print "SpamAssassin disabled in Service Manager\n";
exit;
}
my $spamassassin_bin = Cpanel::FindBin::findbin( 'spamassassin', 'path' => [ '/usr/sbin', '/usr/local/sbin', '/usr/bin', '/usr/local/bin' ] );
my $has_rules = 1;
my @FILES;
if ( -x $spamassassin_bin ) {
my @testout = Cpanel::SafeRun::Errors::saferunallerrors( $spamassassin_bin, '--lint', '-D' );
if ( grep ( /no rules were found/, @testout ) ) {
$has_rules = 0;
}
@FILES = grep( /read\s+file/, @testout );
}
if ( !$has_rules ) {
print "spamassassin rule update has not yet run.\n";
my $saupdate = Cpanel::FindBin::findbin( 'sa-update', 'path' => [ '/usr/sbin', '/usr/local/sbin', '/usr/bin', '/usr/local/bin' ] );
if ( !$saupdate || !-e $saupdate || !-x $saupdate ) {
print "$app: sa-update is missing!\n";
exit 1;
}
print "Running sa-update ($saupdate).....";
system( $saupdate, '-D' );
print "Done\n";
}
my $spamd_check = spamdcheck();
if ( !$spamd_check ) {
$spamd_check = undef;
print "Restarting spamd\n";
system '/scripts/restartsrv_spamd';
}
my @BINS = ( "spamd", "sa-learn", "spamc", "spamassassin" );
$spamd_check = spamdcheck() if ( !defined $spamd_check );
if ( !@FILES || !$spamd_check ) {
print "Config File Count: " . scalar @FILES . "\n";
print "Spamassassin Update Failed, reinstalling!\n";
system( "rm", "-rf", "/usr/local/share/spamassassin", "/usr/share/spamassassin" );
foreach my $bin (@BINS) {
unlink( "/usr/local/bin/${bin}", "/usr/bin/${bin}" );
}
system( "/scripts/perlinstaller", "--force", "Mail::SpamAssassin" );
$spamd_check = undef;
update_rules();
}
foreach my $bin (@BINS) {
if ( !-e "/usr/bin/${bin}" && -e "/usr/local/bin/${bin}" ) {
symlink( "../local/bin/${bin}", "/usr/bin/${bin}" );
}
}
$spamd_check = spamdcheck() if ( !defined $spamd_check );
system("/scripts/restartsrv_spamd") if !$spamd_check;
sub update_rules {
print "Running sa-update ($saupdate).....";
system('/scripts/sa-update_wrapper');
print "Done\n";
}