dnstools.conf mit perl
authorasuess@dns.net.schlittermann.de
Mon, 02 Aug 2010 11:15:18 +0200
changeset 22 7229d1c95ea8
parent 21 6715f8f9d04c
child 23 9dc00aa49452
dnstools.conf mit perl
dnssec-creatkey
dnssec-killkey
dnssec-sign
dnstools.conf
mkready
zone-ls
zone-mk
zone-rm
--- a/dnssec-creatkey	Thu Jul 29 14:19:56 2010 +0200
+++ b/dnssec-creatkey	Mon Aug 02 11:15:18 2010 +0200
@@ -2,17 +2,32 @@
 
 use strict;
 
-my $master_dir="/etc/bind/master";	# verzeichnis fuer bind
-my $key_counter_end="10";		# ablauf des schluessels
-my @change;			# liste abgelaufener zonen
-my @manu;			# liste manuell eingegebener zonen aus ARGV
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+
+my $master_dir= $config{master_dir};
+my $key_counter_end=$config{key_counter_end};
+my @change;
+my @manu;
 my @index;
 my $zone;
 my $keyname;
 
 # prueft ob eingaben in ARGV domains sind und gibt sie in die liste @manu
 for (@ARGV) {
-	chomp ($zone = `idn --quiet "$_"`);
+	chomp (my $zone = `idn --quiet "$_"`);
 
 	if (-e "$master_dir/$zone") {
 		push (@manu, $zone);
--- a/dnssec-killkey	Thu Jul 29 14:19:56 2010 +0200
+++ b/dnssec-killkey	Mon Aug 02 11:15:18 2010 +0200
@@ -2,8 +2,22 @@
 
 use strict;
 
-my $master_dir="/etc/bind/master";	# ordner fuer die einzelnen zonedateiordner
-my $ablauf_zeit="1";			# zeit fuer den key-rollover in h
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+my $master_dir = $config{master_dir};
+my $ablauf_zeit = $config{abl_zeit};
 my $zone;
 my @status;
 my @auto;
@@ -15,14 +29,14 @@
 	my $zdir = "$master_dir/$zone";
         if (-e "$master_dir/$zone") {
 
-		if (-e "$zdir/$zone.signed") { `rm $zdir/$zone.signed`}
-		if (-e "$zdir/.keycounter") { `rm $zdir/.keycounter`}
-		if (-e "$zdir/.index.ksk") { `rm $zdir/.index.ksk`}
-		if (-e "$zdir/.index.zsk") { `rm $zdir/.index.zsk`}
-		if (-e "$zdir/dsset-$zone.") { `rm $zdir/dsset-$zone.`}
-		if (-e "$zdir/keyset-$zone.") { `rm $zdir/keyset-$zone.`}
+		if (-e "$zdir/$zone.signed") { unlink $zdir/$zone.signed}
+		if (-e "$zdir/.keycounter") { unlink $zdir/.keycounter}
+		if (-e "$zdir/.index.ksk") { unlink $zdir/.index.ksk}
+		if (-e "$zdir/.index.zsk") { unlink $zdir/.index.zsk}
+		if (-e "$zdir/dsset-$zone.") { unlink $zdir/dsset-$zone.}
+		if (-e "$zdir/keyset-$zone.") { unlink $zdir/keyset-$zone.}
 
-		foreach (`ls $master_dir/$zone/K*[key,private]`){ `rm $_`}
+		for (`ls $master_dir/$zone/K*[key,private]`){ unlink $_}
 
         } else {
                 print "$zone ist keine verwaltete zone \n";
@@ -80,7 +94,7 @@
 # nach abgeschlossenem key-rollover werden fuer die entsprechende zone
 # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die
 # zonedatei geschrieben.
-foreach (@auto) {
+for (@auto) {
 	my $zone = $_;
 	my @old_zone_content = ();
 	my @new_zone_content = ();
@@ -101,14 +115,14 @@
 
 	# kuerzt die schluessel-bezeichnung aus der indexdatei auf die
 	# id um sie besser vergleichen zu koennen.
-	foreach (@keylist) {
+	for (@keylist) {
 		chomp;
 		s#K.*\+.*\+(.*)#$1#;
 	}
 
 	# filtert alle schluessel aus der zonedatei
 	# old_zone_content ==> new_zone_content
-	foreach (@old_zone_content) {
+	for (@old_zone_content) {
 		unless (/IN\sDNSKEY/) {
 			push @new_zone_content, $_;
 		}
@@ -116,12 +130,12 @@
 
 	# prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen
 	# indexdatei beschrieben sind. wenn nicht werden sie geloescht.
-	foreach (`ls $master_dir/$zone/K*[key,private]`){
+	for (`ls $master_dir/$zone/K*[key,private]`){
 		chomp;
 		$file = $_;
 		my $rm_count = 1;
 
-		foreach (@keylist) {
+		for (@keylist) {
 
 			if ($file =~ /$_/) {
 				$rm_count = 0;
--- a/dnssec-sign	Thu Jul 29 14:19:56 2010 +0200
+++ b/dnssec-sign	Mon Aug 02 11:15:18 2010 +0200
@@ -2,8 +2,22 @@
 
 use strict;
 
-my $master_dir="/etc/bind/master" ;
-my $sign_alert_time="48";		# zeitraum zwischen signierung und ablauf in h
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+my $master_dir=$config{master_dir} ;
+my $sign_alert_time=$config{sign_alert_time};
 my $zone;
 my (@manu, @auto);
 my @zone_sig_content;
@@ -12,7 +26,8 @@
 
 # prueft zonen aus ARGV und fuegt sie in die liste @manu ein
 for (@ARGV) {
-	chomp ($zone = `idn --quiet $_`);
+	chomp (my $zone = `idn --quiet "$_"`);
+
 	if (-e "$master_dir/$zone") {
 		push @manu, $zone;
 	} else {
@@ -20,9 +35,6 @@
 	}
 }
 
-# feststellen des aktuellen zeitpunktes, zuzueglich der $sign_alert_time
-# die ausgabe $time ist im selben format wie in der signed-datei und kann
-# verglichen werden.
 chomp (my $unixtime=`date +%s`);
 $unixtime = $unixtime + (3600 * $sign_alert_time);
 my $time = `date -d \@$unixtime +%Y%m%d%H`;
@@ -40,7 +52,7 @@
 		@zone_sig_content = <ZONE>;
 		close (ZONE);
 
-		foreach (@zone_sig_content) {
+		for (@zone_sig_content) {
 			if (m#SOA.*[0-9]{14}#) {
 				s#.*([0-9]{10})([0-9]{4}).*#$1#;
 				if ($_ < $time) {
@@ -56,8 +68,6 @@
 	s#($master_dir/)(.*)#$2#;
 	$zone = $_;
 
-
-	print $zone;
 	if (-e "$master_dir/$zone/.keycounter") {
 
 		open (KC, "$master_dir/$zone/.keycounter" );
--- a/dnstools.conf	Thu Jul 29 14:19:56 2010 +0200
+++ b/dnstools.conf	Mon Aug 02 11:15:18 2010 +0200
@@ -1,15 +1,13 @@
-ABL_ZEIT=1440				# Dauer des Key-Rollover
-BIND_DIR=/etc/bind
-SECONDARY=hh.schlittermann.de
-PRIMARY=pu.schlittermann.de
-THIS_HOST=
-THIS_IP=
-THIS_DOMAIN=
-SECONDARY_IP=
-HOSTMASTER=
-MASTER_DIR=/etc/bind/master
-ZONE_CONF_DIR=/etc/bind/zones.d
-ZSKLIVE=60				# ZSK-Schluessellebensdauer in Tagen
-KSKLIVE=360				# KSK-Schluessellebensdauer in Tagen
-KEY_COUNTER_END=5			# Anzahl der maximalen Signierungen bis zum Key-Rollover
-SIGN_ALERT_TIME=48			# Warn-Zeitraum vor dem ablauf einer Zone-Signatur in Stunden
+bind_dir = /etc/bind
+master_dir = /etc/bind/master
+zone_conf_dir = /etc/bind/zones.d
+key_counter_end = 5			# Anzahl der maximalen Signierungen bis zum Key-Rollover
+sign_alert_time = 48			# Warn-Zeitraum vor dem ablauf einer Zone-Signatur in h
+abl_zeit = 48				# Dauer des Key-Rollover in h
+secondary = hh.schlittermann.de
+primary = pu.schlittermann.de
+#this_host
+#this_ip
+#this_domain
+#secondary_ip
+#hostmaster
--- a/mkready	Thu Jul 29 14:19:56 2010 +0200
+++ b/mkready	Mon Aug 02 11:15:18 2010 +0200
@@ -2,9 +2,24 @@
 
 use strict;
 
-my $bind_dir = "/etc/bind";
-my $conf_dir = "/etc/bind/zones.d";
-my $master_dir = "/etc/bind/master";
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+
+my $bind_dir = $config{bind_dir};
+my $conf_dir = $config{zone_conf_dir};
+my $master_dir = $config{master_dir};
 chomp (my @conf_dir_files = `ls $conf_dir`);
 
 # prueft jede domain, die ein verzeichnis in $master_dir hat, ob es eine
@@ -25,7 +40,7 @@
 		@c_content = <FILE>;
 		close (FILE);
 
-		foreach (@c_content) {
+		for (@c_content) {
 			if (m{(.*)($zone_file)(";)}) {
 				print "$2 ==> $2.signed\n";
 				$_ = "$1$2.signed$3\n";
@@ -43,7 +58,7 @@
 		@c_content = <FILE>;
 		close (FILE);
 		
-		foreach (@c_content) {
+		for (@c_content) {
 			if (m{(.*)($zone_file)\.signed(.*)}) {
 				print "$2.signed ==> $2\n";
 				$_ = "$1$2$3\n";
@@ -58,7 +73,7 @@
 
 # erzeugt eine named.conf-datei aus den entsprechenden vorlagen.
 open( TO, ">$bind_dir/named.conf.zones");
-foreach (@conf_dir_files) {
+for (@conf_dir_files) {
 	open (FROM, "$conf_dir/$_");
 	print TO <FROM>;
 	close (FROM);
--- a/zone-ls	Thu Jul 29 14:19:56 2010 +0200
+++ b/zone-ls	Mon Aug 02 11:15:18 2010 +0200
@@ -2,10 +2,24 @@
 
 use strict;
 
-my $master_dir = "/etc/bind/master";
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+my $master_dir = $config{master_dir};
 
 printf "%-25s %1s/%1s %3s %7s\n", "Domain", "ZSK", "KSK", "Used", "Sig-end";
-foreach (<$master_dir/*>) {
+for (<$master_dir/*>) {
 	s#($master_dir/)(.*)#$2#;
 	my $zone = $_;
 
@@ -42,7 +56,7 @@
 		@temp = <FILE>;
 		close (FILE);
 
-		foreach (@temp) {
+		for (@temp) {
 			if (m/RSIG.*SOA.*\s(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)\d+\s\(/i) {
 			$info_end = "$3.$2.$1 $4:$5";
 			}	
--- a/zone-mk	Thu Jul 29 14:19:56 2010 +0200
+++ b/zone-mk	Mon Aug 02 11:15:18 2010 +0200
@@ -2,16 +2,30 @@
 
 use strict;
 
-
 if (@ARGV < 2) {
 	print "usage: zone-mk kundennummer domain ... \n";
 	exit 1;
 }
 
-my $primary = "pu.schlittermann.de";
-my $secondary= "hh.schlittermann.de";
-my $zone_conf_dir= "/etc/bind/zones.d";
-my $master_dir = "/etc/bind/master";
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+        chomp;
+        s/#.*//;
+        s/\t//g;
+        s/\s//g;
+
+        next unless length;
+        my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+        $config{$cname} = $ccont;
+}
+close (CONFIG);
+
+
+my $primary = $config{primary};
+my $secondary= $config{secondary};
+my $zone_conf_dir= $config{zone_conf_dir};
+my $master_dir = $config{master_dir};
 my $customer = shift @ARGV;
 chomp (my $primary_ip = `dig +short $primary`);
 chomp (my $secondary_ip = `dig +short $secondary`);
@@ -22,11 +36,11 @@
 chomp (my $start= `date -I`);
 my $hostmaster = "hostmaster.$this_domain";
 
-if (! -e $master_dir) {
+unless (-e $master_dir) {
 	print "$master_dir nicht vorhanden \n";
 	exit 1;
 }
-if (! -e $zone_conf_dir) {
+unless (-e $zone_conf_dir) {
 	print "$zone_conf_dir nicht vorhanden \n";
 	exit 1;
 }
@@ -36,14 +50,14 @@
 # schreibt aus den angegebenen templates die dateien $zonefile und $config
 # in die entsprechenden verzeichnisse.
 
-foreach (@ARGV) {
+for (@ARGV) {
 
 	chomp (my $domain = `idn --quiet "$_"`);
 	my $zonefile = "$master_dir/$domain/$domain";
 	my $config = "$zone_conf_dir/$domain";
 	my $utf8domain = "$_";
 
-	if (! -e "$master_dir/$domain") {
+	unless ( -e "$master_dir/$domain") {
 		`mkdir $master_dir/$domain`;
 	}
 
@@ -64,7 +78,7 @@
 	my @tempzone = <TEMPZONE>;
 	close (TEMPZONE);
 
-	foreach (@tempzone) {
+	for (@tempzone) {
 		s#<start>#$start#;
 		s#<domain>#$domain#;
 		s#<time>#$time#;
@@ -83,7 +97,7 @@
 	my @tempconf = <TEMPCONF>;
 	close (TEMPCONF);
 
-	foreach (@tempconf) {
+	for (@tempconf) {
 		s#<domain>#$domain#;
 		s#<start>#$start#;
 		s#<customer>#$customer#;
--- a/zone-rm	Thu Jul 29 14:19:56 2010 +0200
+++ b/zone-rm	Mon Aug 02 11:15:18 2010 +0200
@@ -1,20 +1,40 @@
 #!/usr/bin/perl -w
 
 use strict;
+use File::Path;
 
-my $master_dir = "/etc/bind/master";
-my $conf_dir = "/etc/bind/zones.d";
+my %config;
+open (CONFIG, "dnstools.conf");
+while (<CONFIG>) {
+	chomp;
+	s/#.*//;
+	s/\t//g;
+	s/\s//g;
+	next unless length;
 
-foreach (@ARGV) {
-	chomp (my $domain = `idn --quiet $_`);
+	my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
+	$config{$cname} = $ccont;
+}
+close (CONFIG);
+
+my $master_dir = $config{"master_dir"};
+my $conf_dir = $config{"zone_conf_dir"};
+
 
-	if (-e "$master_dir/$domain") {
-		`rm -rf $master_dir/$domain`;
-		print "zone-dir for $domain removed\n";
+for (@ARGV) {
+	chomp (my $zone = `idn --quiet "$_"`);
+
+	if (-e "$master_dir/$zone") {
+		rmtree "$master_dir/$zone/" and
+		print "zone-dir for $zone removed\n";
+	} else {
+		print "$master_dir/$zone: no such file or directory\n";
 	}
 	
-	if (-e "$conf_dir/$domain") {
-		`rm -f $conf_dir/$domain`;
-		print "configuration-file for $domain removed\n";
+	if (-e "$conf_dir/$zone") {
+		unlink "$conf_dir/$zone" and
+		print "configuration-file for $zone removed\n";
+	} else {
+		print "$conf_dir/$zone: no such file or directory\n";
 	}
 }