File: //proc/self/root/proc/self/root/scripts.20110531.215904.25158/buildeximconf
#!/usr/bin/perl
# cpanel - buildeximconf 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'; }
use strict;
use Cpanel::Logger ();
use Cpanel::Exim::Config ();
use Cpanel::StringFunc ();
use Cpanel::FindBin ();
my $logger = Cpanel::Logger->new();
require '/scripts/checkexim.pl';
my $exim_cfgobj = Cpanel::Exim::Config->new();
$exim_cfgobj->run_script('pre');
my %CFDATA = $exim_cfgobj->generate_config_file();
my $rawout = $CFDATA{'rawout'};
if ( !$CFDATA{'goodconf'} ) {
print "Configuration file has an invalid syntax. Please try again.\n\n";
print $rawout;
$exim_cfgobj->install_virgin_config_if_missing( $CFDATA{'config_template'} );
$exim_cfgobj->run_script( 'post', 'fail' );
exit 1;
}
else {
if ( open my $cfg_fh, '>', '/etc/exim.conf' ) {
print {$cfg_fh} $CFDATA{'cfg'};
close $cfg_fh;
if ( -e '/usr/local/etc/exim/configure' ) {
system 'cp', '-f', '/etc/exim.conf', '/usr/local/etc/exim/configure';
}
}
else {
die "Unable to write /etc/exim.conf: $!";
}
print "Configuration file passes test! New configuration file was installed.\n\n";
$exim_cfgobj->setup_spamassassin_handling( $CFDATA{'acl_spam_handler'} );
$exim_cfgobj->set_domain_keys_status();
$exim_cfgobj->build_and_install_exim_pl();
print $exim_cfgobj->{'rawout'};
if ( eval { require Razor2::Client::Agent; } ) {
print "razor2 is installed, enabled in SpamAssassin!\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/v310.pre', '^\s*#\s*loadplugin Mail::SpamAssassin::Plugin::Razor2', 'loadplugin Mail::SpamAssassin::Plugin::Razor2' );
}
else {
print "razor2 is not installed, disabling it in SpamAssassin to save memory\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/v310.pre', '^\s*loadplugin Mail::SpamAssassin::Plugin::Razor2', '#loadplugin Mail::SpamAssassin::Plugin::Razor2' );
}
my $pyzor_bin = Cpanel::FindBin::findbin('pyzor');
if ($pyzor_bin) {
print "pyzor is installed, enabled in SpamAssassin!\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/v310.pre', '^\s*#\s*loadplugin Mail::SpamAssassin::Plugin::Pyzor', 'loadplugin Mail::SpamAssassin::Plugin::Pyzor' );
}
else {
print "pyzor is not installed, disabling it in SpamAssassin to save memory\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/v310.pre', '^\s*loadplugin Mail::SpamAssassin::Plugin::Pyzor', '#loadplugin Mail::SpamAssassin::Plugin::Pyzor' );
}
if ( $CFDATA{'acls'}->{'spf_bl'} ) {
print "SPF is enabled in exim, disabling SPF for SpamAssassin to save cpu/memory\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/init.pre', '^\s*loadplugin Mail::SpamAssassin::Plugin::SPF', '#loadplugin Mail::SpamAssassin::Plugin::SPF' );
}
else {
print "SPF is disabled in exim or unavailable, enabling SPF for SpamAssassin\n";
Cpanel::StringFunc::regsrep( '/etc/mail/spamassassin/init.pre', '^\s*#loadplugin Mail::SpamAssassin::Plugin::SPF', 'loadplugin Mail::SpamAssassin::Plugin::SPF' );
}
$exim_cfgobj->run_script( 'post', 'ok' );
checkeximperms();
system '/scripts/mailscannerupdate', '--force';
system '/usr/local/cpanel/bin/updateauthtab';
system '/scripts/eximcron';
if ( update_exim_initscript() ) {
#not restarted auto because may be called from restart script??
print "You should restart exim to use the updated init script.\n";
}
exit 0;
}
sub update_exim_initscript {
require Cpanel::SafeFile;
my $need_restart = 0;
foreach my $initscript ( '/etc/init.d/exim', '/etc/rc.d/init.d/exim' ) {
next if !-e $initscript;
my $sl = Cpanel::SafeFile::safeopen( \*EXL, '+<', $initscript );
if ( !$sl ) {
$logger->warn("Failed to open $initscript for update: $!");
next;
}
my @SCRIPT = <EXL>;
if ( grep( /(?:daemon_smtp_port|0DEPRCATE0)/, @SCRIPT ) ) {
Cpanel::SafeFile::safeclose( \*EXL, $sl );
next;
}
seek( EXL, 0, 0 );
foreach my $line (@SCRIPT) {
if ( $line =~ /^\s*#/ ) {
#trap comments so we do not process
}
elsif ( $line =~ /\-tls\-on\-connect/ ) {
chomp $line;
$line = qq{\t\t\t} . q{if [ "`grep \"daemon_smtp_port.* 465\" /etc/exim.conf`" = "" ]; then } . "\n\t" . $line . "\n\t\t\t" . 'fi' . "\n";
}
elsif ( $line =~ /\[\s+\!?\s*\"\$ALTPORT\"\s+=\s+\"+\s*\"+\s*\]/ ) {
$line =~ s/\[\s+\!?\s*\"\$ALTPORT\"\s+=\s+\"+\s*\"+\s*\]/\[ "\$ALTPORT" != "" -a "`grep \\\"daemon_smtp_port.* \$ALTPORT\\\" \/etc\/exim.conf`" = "" \]/g;
}
print EXL $line;
}
truncate( EXL, tell(EXL) );
Cpanel::SafeFile::safeclose( \*EXL, $sl );
$need_restart = 1;
}
return $need_restart;
}