--- 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;
}