diff -r 0342c09abf97 -r d5337081ed02 zone-ls --- 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 () { - 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"; - () = ; - $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"; - () = ; - $info_ksk = $.; + # prueft wie viele zsks genutzt werden + close(FILE); + open( FILE, $_ = "<$dir/.index.zsk" ) or die "Can't open $_: $!\n"; + () = ; + $info_zsk = $.; - # prueft wie oft die schluessel zum signieren genutzt wurden - open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n"; - chomp ($info_kc = ); + # prueft wie viele ksks genutzt werden + close(FILE); + open( FILE, $_ = "<$dir/.index.ksk" ) or die "Can't open $_: $!\n"; + () = ; + $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 () { - $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 = ); + + # prueft das ablaufdatum + if ( !-f "$dir/$zone.signed" ) { + $info_end = "-"; + next; + } + + 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; +} +continue { + printf "%-25s %-8s %1d/%1d %5d %19s\n", $zone, $info_status, $info_zsk, $info_ksk, $info_kc, + $info_end; }