zone-ls
changeset 27 d5337081ed02
parent 25 c02caf4e0eb6
child 28 4807ad9b8d19
--- a/zone-ls	Thu Aug 05 10:49:36 2010 +0200
+++ b/zone-ls	Mon Aug 09 11:45:43 2010 +0200
@@ -5,86 +5,94 @@
 use File::Basename;
 use FindBin;
 
-
 # liest die Konfiguration ein
-my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
+my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" );
 my %config;
 
-for (grep {-f} @configs) {
-	open(CONFIG, $_) or die "Can't open $_: $!\n";
+for ( grep {-f} @configs ) {
+    open( CONFIG, $_ ) or die "Can't open $_: $!\n";
 }
 
-unless (seek(CONFIG,0 ,0 )) {
-	die "Can't open config (searched: @configs)\n"
+unless ( seek( CONFIG, 0, 0 ) ) {
+    die "Can't open config (searched: @configs)\n";
 }
 
 while (<CONFIG>) {
-	chomp;
-	s/#.*//;
-	s/\t//g;
-	s/\s//g;
-	next unless length;
-	my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
-	$config{$cname} = $ccont;
+    chomp;
+    s/#.*//;
+    s/\t//g;
+    s/\s//g;
+    next unless length;
+    my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 );
+    $config{$cname} = $ccont;
 }
-close (CONFIG);
-
+close(CONFIG);
 
 my $master_dir = $config{master_dir};
-my $zone; 
-my ($info_zsk, $info_ksk, $info_kc, $info_end);
+my $zone;
+my ( $info_zsk, $info_ksk, $info_kc, $info_end, $info_status );
 
-unless (-d $master_dir and -r $master_dir) {
-	die "$master_dir: $!\n";
+unless ( -d $master_dir and -r $master_dir ) {
+    die "$master_dir: $!\n";
 }
 
-
-printf "%-25s %1s/%1s %3s %7s\n", "Domain", "ZSK", "KSK", "Used", "Sig-end";
+printf "%-25s %-8s %1s/%1s %3s %7s\n", "Domain", "Status", "ZSK", "KSK", "Used", "Sig-end";
 
-foreach my $dir (glob "$master_dir/*") {
-	
-	$zone = basename($dir);
+for my $dir ( glob "$master_dir/*" ) {
+
+    $zone = basename($dir);
 
-	if (not -f "$dir/.index.zsk") {
-		$info_zsk = $info_ksk = $info_kc = 0;
-		$info_end = "-";
-		next;
+    # prueft mit dig nach der zone
+    $info_status = "OK";
+    for (`dig \@localhost $zone`) {
+        if (/root-servers/) {
+            $info_status = "FAILD";
+            last;
 	}
+    }
 
-	# prueft wie viele zsks genutzt werden
-	close(FILE);
-	open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n";
-	() = <FILE>;
-	$info_zsk = $.;
+    if ( not -f "$dir/.index.zsk" ) {
+        $info_zsk = $info_ksk = $info_kc = 0;
+        $info_end = "-";
+        next;
+    }
 
-	# prueft wie viele ksks genutzt werden
-	close(FILE);
-	open(FILE, $_ = "<$dir/.index.ksk") or die "Can't open $_: $!\n";
-	() = <FILE>;
-	$info_ksk = $.;
+    # prueft wie viele zsks genutzt werden
+    close(FILE);
+    open( FILE, $_ = "<$dir/.index.zsk" ) or die "Can't open $_: $!\n";
+    () = <FILE>;
+    $info_zsk = $.;
 
-	# prueft wie oft die schluessel zum signieren genutzt wurden
-	open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n";
-	chomp ($info_kc = <FILE>);
+    # prueft wie viele ksks genutzt werden
+    close(FILE);
+    open( FILE, $_ = "<$dir/.index.ksk" ) or die "Can't open $_: $!\n";
+    () = <FILE>;
+    $info_ksk = $.;
 
-	# prueft das ablaufdatum
-	if (!-f "$dir/$zone.signed") {
-		$info_end = "-";
-		next;
-	}
-	
-	open(FILE, $_ = "<$dir/$zone.signed") or die "Can't open $_: $!\n";
-	while (<FILE>) {
-		$info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}"
-		if /RSIG.*SOA.*\s
+    # 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;
+    }
+
+    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;
+}
+continue {
+    printf "%-25s %-8s %1d/%1d %5d %19s\n", $zone, $info_status, $info_zsk, $info_ksk, $info_kc,
+        $info_end;
 }