MOON
Server: Apache/2.2.31 (Unix) mod_ssl/2.2.31 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
System: Linux csr818.wilogic.com 2.6.18-419.el5xen #1 SMP Fri Feb 24 22:50:37 UTC 2017 x86_64
User: digitals (531)
PHP: 5.4.45
Disabled: NONE
Upload Files
File: //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;
}