changed a lot
authorHeiko Schlittermann <hs@schlittermann.de>
Mon, 02 Aug 2010 13:45:24 +0200
changeset 23 9dc00aa49452
parent 22 7229d1c95ea8
child 24 b1234b9824f0
changed a lot
zone-ls
--- a/zone-ls	Mon Aug 02 11:15:18 2010 +0200
+++ b/zone-ls	Mon Aug 02 13:45:24 2010 +0200
@@ -1,9 +1,12 @@
-#!/usr/bin/perl
+#! /usr/bin/perl
 
 use strict;
+use warnings;
+use File::Basename;
 
 my %config;
-open (CONFIG, "dnstools.conf");
+open (CONFIG, $_ = "<dnstools.conf") or die "Can't open $_: $!\n";
+
 while (<CONFIG>) {
         chomp;
         s/#.*//;
@@ -18,54 +21,58 @@
 
 my $master_dir = $config{master_dir};
 
-printf "%-25s %1s/%1s %3s %7s\n", "Domain", "ZSK", "KSK", "Used", "Sig-end";
-for (<$master_dir/*>) {
-	s#($master_dir/)(.*)#$2#;
-	my $zone = $_;
+die "$config{master_dir}: $!\n" 
+	if not -d $config{master_dir} or not -r $config{master_dir};
 
-	my $info_zsk;
-	my $info_ksk;
-	my $info_kc;
-	my $info_end;
-	my @temp;
+printf "%-25s %1s/%1s %3s %7s\n", "Domain", "ZSK", "KSK", "Used", "Sig-end";
+
+my $zone; 
+my ($info_zsk, $info_ksk, $info_kc, $info_end);
 
-	#prueft wie viele zsks genutzt werden
-	open(FILE, "$master_dir/$zone/.index.zsk");
-	@temp = <FILE>;
-	close(FILE);
-	$info_zsk = @temp;
+foreach my $dir (glob "$master_dir/*") {
+	
+	$zone = basename($dir);
 
-	#prueft wie viele ksks genutzt werden
-	open(FILE, "$master_dir/$zone/.index.ksk");
-	@temp = <FILE>;
-	close(FILE);
-	$info_ksk = @temp;
-
-	#prueft wie oft die schluessel zum signieren genutzt wurden
-	if (-e "$master_dir/$zone/.keycounter") {
-		open(FILE, "$master_dir/$zone/.keycounter");
-		chomp ($info_kc = <FILE>);
-		close(FILE);
-	} else {
-		$info_kc = "-";
+	if (not -f "$dir/.index.zsk") {
+		$info_zsk = $info_ksk = $info_kc = 0;
+		$info_end = "-";
+		next;
 	}
 
-	#prueft das ablaufdatum
-	if (-e "$master_dir/$zone/$zone.signed") {
-		open(FILE, "$master_dir/$zone/$zone.signed");
-		@temp = <FILE>;
-		close (FILE);
+	# prueft wie viele zsks genutzt werden
+	close(FILE);
+	open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n";
+	() = <FILE>;
+	$info_zsk = $.;
 
-		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";
-			}	
-		}
+	# prueft wie viele ksks genutzt werden
+	close(FILE);
+	open(FILE, $_ = "<$dir/.index.ksk") or die "Can't open $_: $!\n";
+	() = <FILE>;
+	$info_ksk = $.;
 
-	} else {
+	# prueft wie oft die schluessel zum signieren genutzt wurden
+	open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n";
+	chomp ($info_kc = <FILE>);
+
+	# prueft das ablaufdatum
+	if (!-f "$dir/$zone.signed") {
 		$info_end = "-";
+		next;
 	}
 	
-	printf "%-25s %1s/%1s %5s %19s\n", $zone, $info_zsk, $info_ksk, $info_kc, $info_end;
+	open(FILE, $_ = "<$dir/$zone.signed") or die "Can't open $_: $!\n";
+	while (<FILE>) {
+		$info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}"
+		if /RSIG.*SOA.*\s
+			(?<year>\d\d\d\d)
+			(?<mon>\d\d)
+			(?<day>\d\d)
+			(?<hour>\d\d)
+			(?<min>\d\d)\d+\s\(/ix;
+	}
+
+} continue {
+	printf "%-25s %1d/%1d %5d %19s\n", $zone, $info_zsk, $info_ksk, $info_kc, $info_end;
 }