Current Path : /proc/3/cwd/scripts/ |
|
Current File : //proc/3/cwd/scripts/exportmydnsdb |
#!/usr/local/cpanel/3rdparty/bin/perl
# cpanel - exportmydnsdb Copyright 2011 cPanel, Inc.
# All Rights Reserved.
# copyright@cpanel.net http://cpanel.net
# This code is subject to the cPanel license. Unauthorized copying is prohibited
use strict;
use Cpanel::MysqlUtils::Connect ();
use Cpanel::NameServer::Conf::Mydns ();
use Cpanel::PID ();
use Cpanel::SafeRun::Errors ();
use Cpanel::SafeFile ();
use Cpanel::Usage ();
use Try::Tiny;
my ( $force, $debug );
Cpanel::Usage::wrap_options( \@ARGV, \&usage, { 'force' => \$force, 'debug' => \$debug } );
if ( $> != 0 ) {
die "Insufficient permission to update zone files\n";
}
my $pid_obj = Cpanel::PID->new( { 'pid_file' => '/var/run/exportmydnsdb.pid' } );
unless ( $pid_obj->create_pid_file() > 0 ) {
die "Exportmydnsdb appears to be running already. Please wait for the export to finish before attempting another.\n";
}
my $namedconf_obj = Cpanel::NameServer::Conf::Mydns->new();
$namedconf_obj->initialize();
$namedconf_obj->check_zonedir_cache();
my $bind_dir = $namedconf_obj->{'config'}->{'zonedir'};
my $mydnsexpbin = $namedconf_obj->{'mydnsexpbin'};
die "mydnsexport is missing from your system.\n" unless ( -x $mydnsexpbin );
my $dbh;
try {
$dbh = Cpanel::MysqlUtils::Connect::get_dbi_handle();
}
catch {
die "Error while connecting to MySQL database: $_";
};
my $settings_ref = $namedconf_obj->{'dns_settings'};
my $soa_table = $settings_ref->{'database'} . '.' . $settings_ref->{'soa-table'};
my $get_zones_query = qq {
SELECT origin FROM $soa_table
};
my $sth = $dbh->prepare($get_zones_query);
unless ($sth) {
die "Database error, unable to get zones from MyDNS " . $dbh->errstr;
}
unless ( $sth->execute() ) {
die "Database error, unable to get zones from MyDNS " . $dbh->errstr;
}
my @database_zones = ();
while ( my $data = $sth->fetchrow_hashref() ) {
$data->{'origin'} =~ s/\.$//;
push @database_zones, $data->{'origin'};
}
$sth->finish;
print "Exporting zones from MyDNS database\n";
my $counter = 0;
foreach my $zone (@database_zones) {
my ( $zonefile, $zonedata );
$zonefile = $bind_dir . '/' . $zone . '.db';
if ( !$force && -e $zonefile ) {
if ($debug) {
print "$zonefile already exists, not updated\n";
}
next;
}
$zonedata = Cpanel::SafeRun::Errors::saferunnoerror( $mydnsexpbin, $zone );
unless ( $zonedata =~ /mydnsexport\s+$zone/i ) {
print "Error exporting $zone\n";
next;
}
my ( $zonelock, $zone_fh );
unless ( $zonelock = Cpanel::SafeFile::safeopen( $zone_fh, '>', $zonefile ) ) {
print "Unable to write $zonefile\n";
next;
}
print $zone_fh $zonedata;
Cpanel::SafeFile::safeclose( $zone_fh, $zonelock );
$counter++;
if ($debug) {
print "$zone is successfully saved\n";
}
}
print "$counter zones have been successfully exported\n";
if ( $counter > 0 ) {
print "Rebuilding named.conf file\n";
system('/usr/local/cpanel/scripts/rebuilddnsconfig');
}
print "Exportmydnsdb has completed\n";
$pid_obj->remove_pid_file();
exit 0;
sub usage {
print <<EO_USAGE;
Usage: exportmydnsdb [options]
Options:
--help Brief help message
--force Overwrite existing zone files
--debug Prints extra processing information
EO_USAGE
exit 0;
}
Copyright 2K16 - 2K18 Indonesian Hacker Rulez