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: //proc/self/root/scripts.20110531.215904.25158/fixndc.new
#!/usr/bin/perl
# cpanel4 - scripts        Copyright(c) 1997-2002 DarkORB Communications Inc.
#                                 All rights Reserved.
# nick@darkorb.net      http://cpanel.net
# This code is subject to the cpanel license. Unauthorized copying is prohibited
die "This script is for bind 9 only" if (! -e "/etc/rndc.conf");

$resbind = 0;
$confwp = 0;
$keyname = 'key';

#system("chown","-R","named:named","/var/named");

open(RNDC,"/etc/rndc.conf");
while(<RNDC>) {
	if (/secret\s+\"([^\"]+)\"/) {
		$secret = $1;
	}
	if (/^key \"(\S+)\"/) {
		$keyname = $1;
		$inkey = 1;
	}
	if (/default-key\s*\"(\S+)\"/) {
		$defaultkey = $1;
	}
	if($inkey) {
		$key = $key . $_;
		if (/}/) {
			$inkey = 0;
		}
	}
}
close(RNDC);
#key is in $key
$needkey = 1;
$needcon = 1;

if ($keyname eq "rndckey" && $defaultkey eq "key") {
	system("/scripts/fixrh72ndckey");
}

open(NDC,"/etc/named.conf");
while(<NDC>) {
	if (/bind\.conf\.wp/) {
		$confwp = 1;
	}
	if (/^key/) { print "Found key in named.conf .. \n"; $needkey=0; }
	if (/^include/ && /key/) { print "Found key in (include) named.conf .. \n";  $needkey=0; }
	if (/^controls/) { print "Found controls in named.conf .. \n"; 
		$needcon=0; }
	if (/secret\s+\"([^\"]+)\"/) {
		if ($secret ne $1) {
			$needkey = 1;
			$delkey = 1;
		}
	}
	if (/^key\s+\"([^\"]+)\"/) {

		if ($keyname ne $1) {
			$needkey = 1;
			$delkey = 1;
			$needcon = 1;
			$delcon = 1;
		}		
	} 
#	if (/^zone/) {last;}
}
close(NDC);

if (! -e "/var/named/named.ca") {
	system("cp -f /scripts/named.ca /var/named/named.ca");
	$resbind=1;
}


open(NC,">/etc/rndc.key");
close(NC);

if($keyname eq "") { $keyname = 'key'; }

if (!($needkey || $needcon || $confwp)) {
	print "named.conf has already been fixed!\n";
	if ($resbind) {
		print "Restarting bind.....";
		system("/etc/rc.d/init.d/named stop");
		system("/etc/rc.d/init.d/named start");
		print "Done\n";
	}
	exit;
}


open(NDF,">/etc/named.conf.fixndc");
if ($needkey) {
	print "Adding key...\n";
	print NDF "$key\n\n";
}
if ($needcon) {
	print "Adding controls...\n";
	print NDF <<EOM;
controls {
    inet 127.0.0.1 allow { localhost; } keys { "${keyname}"; };
};


EOM
}

open(NDC,"/etc/named.conf");
$inc = 0;
while(<NDC>) { 
	next if /bind.conf.wp/;
	if ($delcon || $delkey) {
		if ( (/^controls/ && $delcon) ||
			(/^key/ && $delkey)  ) {
	                $numbrace = 0;
	                $numbrace += countchar($_,"{");
	                $numbrace -= countchar($_,"}");
	                $inc = 1;
	                $firstline = 1;
	        }
	        if (!$inc) {
	                print NDF $_;
	        } else {
	                if ($firstline) {
	                        $firstline = 0;
	                        next;
	                }
	                $numbrace += countchar($_,"{");  
	                $numbrace -= countchar($_,"}");
	                if ($numbrace == 0) {
	                        $inc = 0;
	                }
	        }

	} else {
		print NDF; 
	}
} 
close(NDC);

close(NDF);

$time = time();



system("cp -f /etc/named.conf /etc/named.conf.prefixndc.${time}");
system("cp -f /etc/named.conf.fixndc /etc/named.conf");

print "Restarting bind.....";
system("/etc/rc.d/init.d/named stop");
system("/etc/rc.d/init.d/named start");
print "Done\n";

print "All fixed\n";


sub countchar {
        my($chars,$match) = @_;
        my($count) = 0;
        my(@CHARS) = split(//, $chars);
        foreach my $char (@CHARS) {
                if ($char eq $match) {
                        $count++;
                }
        }
        return($count);
}