LittleDemon WebShell


Linux sh00002.bigrock.com 5.14.0-687.29.1.el9_8.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 23 16:18:48 EDT 2026 x86_64
Path : /scripts/
File Upload :
Command :
Current File : //scripts/buildeximconf

#!/usr/local/cpanel/3rdparty/bin/perl

# cpanel - scripts/buildeximconf                   Copyright 2022 cPanel, L.L.C.
#                                                           All rights reserved.
# copyright@cpanel.net                                         http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited

use strict;
use warnings;

use Cpanel::DKIM                 ();
use Cpanel::Logger               ();
use Cpanel::Exim::Config         ();
use Cpanel::Exception            ();
use Cpanel::FileUtils::Lines     ();
use Cpanel::Signal               ();
use Cpanel::StringFunc::Replace  ();
use Cpanel::Encoder::Tiny        ();
use Cpanel::FileUtils::Write     ();
use Cpanel::IP::Neighbors        ();
use Cpanel::IP::GreyList         ();
use Cpanel::IP::cPanelMail       ();
use Cpanel::Email::Perms::System ();
use Try::Tiny;

local $SIG{'HUP'} = 'IGNORE';

umask(0022);

my $logger = Cpanel::Logger->new();

require '/usr/local/cpanel/scripts/checkexim.pl';

Cpanel::IP::Neighbors::update_neighbor_netblocks_or_log();
Cpanel::IP::GreyList::update_trusted_netblocks_or_log();
Cpanel::IP::GreyList::update_common_mail_providers_or_log();
Cpanel::IP::cPanelMail::update_cpanel_mail_netblocks_or_log();
Cpanel::DKIM::setup_file_stores();
Cpanel::Email::Perms::System::ensure_system_perms();

my %OPTS           = ();
my $use_alt_config = @ARGV && grep( /--local/,          @ARGV ) ? 1 : 0;
my $acl_dry_run    = @ARGV && grep( /--acl_dry_run/,    @ARGV ) ? 1 : 0;
my $no_chown_spool = @ARGV && grep( /--no_chown_spool/, @ARGV ) ? 1 : 0;
my $debug          = @ARGV && grep( /--debug/,          @ARGV ) ? 1 : 0;
if ($use_alt_config) {
    foreach my $alt_config ( grep( /--local/, @ARGV ) ) {
        my ( $filetype, $file ) = $alt_config =~ /--([^=]+)=(.*)$/;
        $OPTS{$filetype} = $file;
    }
}
$OPTS{'acl_dry_run'} = 1 if $acl_dry_run;
$OPTS{'debug'}       = $debug;

# CPANEL-36167: Run hulkdsetup to ensure that keys for dovecot are present:
system '/usr/local/cpanel/bin/hulkdsetup';

my $exim_cfgobj = Cpanel::Exim::Config->new(%OPTS);

$exim_cfgobj->run_script('pre') if !$use_alt_config && !$acl_dry_run;

my %CFDATA = $exim_cfgobj->generate_config_file();

my $rawout = $CFDATA{'rawout'};

if ( $use_alt_config || $acl_dry_run ) {
    if ( !$CFDATA{'goodconf'} ) {
        print "Dry Run failed\n";
        print "Configuration file has an invalid syntax. " . ( $ENV{'WHM50'} ? "<a href='javascript:select_exim_advanced(1);'>" : '' ) . "Please try the edit again." . ( $ENV{'WHM50'} ? "</a>" : '' ) . "\n\n";
        print $ENV{'WHM50'} ? "<div id='broken_cfg_html' class='brush: plain; highlight: " . $exim_cfgobj->{'error_line'} . "'>" . Cpanel::Encoder::Tiny::safe_html_encode_str( $exim_cfgobj->{'broken_cfg_html'} ) . "</div>" : $exim_cfgobj->{'broken_cfg_text'};
        print $rawout;
        exit 1;
    }
    else {
        print "Dry Run ok\n";
        print $rawout;
        exit 0;
    }
}

if ( !$CFDATA{'goodconf'} ) {
    print "Configuration file has an invalid syntax. " . ( $ENV{'WHM50'} ? "<a href='javascript:select_exim_advanced(1);'>" : '' ) . "Please try the edit again." . ( $ENV{'WHM50'} ? "</a>" : '' ) . "\n\n";
    print $rawout;

    #
    # We go back 12 lines and forward 2 as this is enough
    # to show almost all transport and router name which
    # will make it much easier to determine the failure
    # point.
    #
    print "-= BEGIN exim.conf chunk -=\n";
    my @lines = split( /\n/, $exim_cfgobj->{'broken_cfg_text'} );
    print join( "\n", @lines[ $exim_cfgobj->{'error_line'} - 12 .. $exim_cfgobj->{'error_line'} + 2 ] ) . "\n";
    print "-= END exim.conf chunk -=\n";

    $exim_cfgobj->install_virgin_config_if_missing( $CFDATA{'config_template'} );
    $exim_cfgobj->run_script( 'post', 'fail' );

    exit 1;
}
else {
    if ( Cpanel::FileUtils::Write::overwrite_no_exceptions( '/etc/exim.conf', $CFDATA{'cfg'}, 0644 ) ) {
        Cpanel::FileUtils::Write::overwrite_no_exceptions( '/usr/local/etc/exim/configure', $CFDATA{'cfg'}, 0644 ) if -e '/usr/local/etc/exim/configure';

        # XXX ugly hack, because changes to files subject to .include or .include_if_exists can't do dry runs
        # SRS only gets away with it because it doesn't change, and if it does change, it's not the end of the world
        if ( $CFDATA{'settings'}->{'smarthost_routelist'} && $CFDATA{'settings'}->{'smarthost_auth_required'} ) {
            if (
                !Cpanel::FileUtils::Write::overwrite_no_exceptions(
                    $Cpanel::Exim::Config::SMARTHOST_AUTH_FILE,
                    <<~EOS,
                    smarthost_login:
                      driver = plaintext
                      public_name = LOGIN
                      hide client_send = : $CFDATA{'settings'}->{'smarthost_username'} : $CFDATA{'settings'}->{'smarthost_password'}
                    EOS
                    0600
                )
            ) {
                die "Unable to write $Cpanel::Exim::Config::SMARTHOST_AUTH_FILE: $!";
            }
        }
    }
    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->build_and_install_exim_pl();

    print $exim_cfgobj->{'rawout'};

    # SPF is required for KAM and other rulesets so enable by default
    my $sa_init_pre_file      = '/etc/mail/spamassassin/init.pre';
    my $sa_match_regex_string = '^\s*#loadplugin Mail::SpamAssassin::Plugin::SPF';
    if ( Cpanel::FileUtils::Lines::has_txt_in_file( $sa_init_pre_file, $sa_match_regex_string ) ) {
        Cpanel::StringFunc::Replace::regsrep( $sa_init_pre_file, $sa_match_regex_string, 'loadplugin Mail::SpamAssassin::Plugin::SPF' );
    }

    $exim_cfgobj->run_script( 'post', 'ok' );

    scripts::checkexim::checkeximperms($no_chown_spool);

    my $err;
    try {
        Cpanel::Exim::Config::configure_outgoing_spam_scanning();
    }
    catch {
        $err = $_;
        if ( -t STDERR ) {
            require Cpanel::Term::ANSIColor::Solarize;
            print STDERR Cpanel::Term::ANSIColor::Solarize::colored( ["bold black on_red"], Cpanel::Exception::get_string($err) ) . "\n";
        }
        else {
            print STDERR Cpanel::Exception::get_string($err) . "\n";
        }
    };

    system '/usr/local/cpanel/scripts/mailscannerupdate', '--force';
    system '/usr/local/cpanel/scripts/smtpmailgidonly',   '--refresh';
    system '/usr/local/cpanel/scripts/update_exim_rejects';

    my $exim_caps                    = $exim_cfgobj->{'exim_caps'};
    my $needs_mail_gid_shadow        = 0;
    my $configured_for_external_auth = 1;                             # dovecot always enabled

    # Signal cpsrvd to reload its config. Active page hits will not be killed.
    # do not restart cpsrvd on a fresh install ( cpsrvd is running but is restarted later )
    #   this avoids to solve continuously "perl dependencies issues" in the exim rpm
    Cpanel::Signal::send_hup_cpsrvd() if !$ENV{'CPANEL_BASE_INSTALL'};

    exit 0;
}

LittleDemon - FACEBOOK
[ KELUAR ]
Page not found – Sparkplug Films
Small totara tree on ridge above Long Point

Page not found

The page you are looking for doesn't exist, or it has been moved. Please try searching using the form below.