diff -r 7229d1c95ea8 -r 9dc00aa49452 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, $_ = ") { 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 = ; - 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 = ; - 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 = ); - 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 = ; - close (FILE); + # prueft wie viele zsks genutzt werden + close(FILE); + open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n"; + () = ; + $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"; + () = ; + $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 = ); + + # 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 () { + $info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}" + if /RSIG.*SOA.*\s + (?\d\d\d\d) + (?\d\d) + (?\d\d) + (?\d\d) + (?\d\d)\d+\s\(/ix; + } + +} continue { + printf "%-25s %1d/%1d %5d %19s\n", $zone, $info_zsk, $info_ksk, $info_kc, $info_end; }