Viewing File: /usr/local/cpanel/whostmgr/etc/migscript


my $DOMAINS_PER_BATCH = 256;

my $domain_to_user_map = Cpanel::Config::LoadUserDomains::loaduserdomains( {}, 1 );
my @zones_to_process = sort keys %$domain_to_user_map;

my ( @all_results, @reload_list );
while ( my @zones = splice( @zones_to_process, 0, $DOMAINS_PER_BATCH ) ) {

    # First break down the domain list into a list of zones we need to fetch
    print "Fetching a block of zones...(@zones zones)..." . flush_buffer();

    my %ZONES = %{ Cpanel::DnsUtils::Fetch::fetch_zones( 'zones' => \@zones ) };
    print "Done." . line_break();

    js_scroll();

    my $SYNCZONES_request_data;

    foreach my $zone ( keys %ZONES ) {
        next if !$ZONES{$zone};

        my $zone_updated = 0;
        if ( !$ZONES{$zone} || $ZONES{$zone} =~ m/^[\r\s\n]*$/ ) {
            next;
        }
        $ZONES{$zone} =~ s/\b([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})/$IPS{$1} ? (($zone_updated = 1) ? $IPS{$1} : $IPS{$1}) : $1/ge;
        if ($zone_updated) {
            print qq{Updating $zone..} . flush_buffer();

            if ( !length $ZONES{$zone} ) {
                warn qq{Critical error the zone "$zone" was unexpectedly empty after modification.};
                next;
            }
            $ZONES{$zone} = Cpanel::DnsUtils::Stream::upsrnumstream( $ZONES{$zone} );    #increase serial number
            $ZONES{$zone} =~ s/([^\w\-\.\@])/sprintf("%%%2.2x",ord($1))/eg;

            $SYNCZONES_request_data .= "cpdnszone-$zone=$ZONES{$zone}&";

            push @reload_list, $zone;
            print "...done" . line_break();
        }
    }

    js_scroll();

    Cpanel::DnsUtils::AskDnsAdmin::askdnsadmin( 'SYNCZONES', 0, '', '', '', $SYNCZONES_request_data ) if $SYNCZONES_request_data;
}

print line_break();
if (@reload_list) {
    print "Reloading nameserver for zone changes..." . flush_buffer();
    print line_break();
    Cpanel::DnsUtils::AskDnsAdmin::askdnsadmin( 'RELOADZONES', 0, join( ',', @reload_list ) )
      unless !@reload_list;
}
else {
    print "No zone files were updated...." . flush_buffer();
}

print "Done.";
print line_break();

sub flush_buffer {
    $ENV{'WHM50'} ? " \n " : "";
}

sub line_break {
    $ENV{'WHM50'} ? "<br />\n" : "\n";
}

sub js_scroll {
    syswrite( STDOUT, '<script>window.setTimeout(function() { try { scrollend() } catch (e) { } },180);</script>' . "\n" ) if $ENV{'WHM50'};
}
Back to Directory File Manager