3 use strict; |
3 use strict; |
4 use warnings; |
4 use warnings; |
5 use File::Basename; |
5 use File::Basename; |
6 use FindBin; |
6 use FindBin; |
7 |
7 |
8 |
|
9 # liest die Konfiguration ein |
8 # liest die Konfiguration ein |
10 my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf"); |
9 my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" ); |
11 my %config; |
10 my %config; |
12 |
11 |
13 for (grep {-f} @configs) { |
12 for ( grep {-f} @configs ) { |
14 open(CONFIG, $_) or die "Can't open $_: $!\n"; |
13 open( CONFIG, $_ ) or die "Can't open $_: $!\n"; |
15 } |
14 } |
16 |
15 |
17 unless (seek(CONFIG,0 ,0 )) { |
16 unless ( seek( CONFIG, 0, 0 ) ) { |
18 die "Can't open config (searched: @configs)\n" |
17 die "Can't open config (searched: @configs)\n"; |
19 } |
18 } |
20 |
19 |
21 while (<CONFIG>) { |
20 while (<CONFIG>) { |
22 chomp; |
21 chomp; |
23 s/#.*//; |
22 s/#.*//; |
24 s/\t//g; |
23 s/\t//g; |
25 s/\s//g; |
24 s/\s//g; |
26 next unless length; |
25 next unless length; |
27 my ($cname, $ccont) = split (/\s*=\s*/, $_,2); |
26 my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 ); |
28 $config{$cname} = $ccont; |
27 $config{$cname} = $ccont; |
29 } |
28 } |
30 close (CONFIG); |
29 close(CONFIG); |
31 |
|
32 |
30 |
33 my $master_dir = $config{master_dir}; |
31 my $master_dir = $config{master_dir}; |
34 my $zone; |
32 my $zone; |
35 my ($info_zsk, $info_ksk, $info_kc, $info_end); |
33 my ( $info_zsk, $info_ksk, $info_kc, $info_end, $info_status ); |
36 |
34 |
37 unless (-d $master_dir and -r $master_dir) { |
35 unless ( -d $master_dir and -r $master_dir ) { |
38 die "$master_dir: $!\n"; |
36 die "$master_dir: $!\n"; |
39 } |
37 } |
40 |
38 |
|
39 printf "%-25s %-8s %1s/%1s %3s %7s\n", "Domain", "Status", "ZSK", "KSK", "Used", "Sig-end"; |
41 |
40 |
42 printf "%-25s %1s/%1s %3s %7s\n", "Domain", "ZSK", "KSK", "Used", "Sig-end"; |
41 for my $dir ( glob "$master_dir/*" ) { |
43 |
42 |
44 foreach my $dir (glob "$master_dir/*") { |
43 $zone = basename($dir); |
45 |
|
46 $zone = basename($dir); |
|
47 |
44 |
48 if (not -f "$dir/.index.zsk") { |
45 # prueft mit dig nach der zone |
49 $info_zsk = $info_ksk = $info_kc = 0; |
46 $info_status = "OK"; |
50 $info_end = "-"; |
47 for (`dig \@localhost $zone`) { |
51 next; |
48 if (/root-servers/) { |
|
49 $info_status = "FAILD"; |
|
50 last; |
52 } |
51 } |
|
52 } |
53 |
53 |
54 # prueft wie viele zsks genutzt werden |
54 if ( not -f "$dir/.index.zsk" ) { |
55 close(FILE); |
55 $info_zsk = $info_ksk = $info_kc = 0; |
56 open(FILE, $_ = "<$dir/.index.zsk") or die "Can't open $_: $!\n"; |
56 $info_end = "-"; |
57 () = <FILE>; |
57 next; |
58 $info_zsk = $.; |
58 } |
59 |
59 |
60 # prueft wie viele ksks genutzt werden |
60 # prueft wie viele zsks genutzt werden |
61 close(FILE); |
61 close(FILE); |
62 open(FILE, $_ = "<$dir/.index.ksk") or die "Can't open $_: $!\n"; |
62 open( FILE, $_ = "<$dir/.index.zsk" ) or die "Can't open $_: $!\n"; |
63 () = <FILE>; |
63 () = <FILE>; |
64 $info_ksk = $.; |
64 $info_zsk = $.; |
65 |
65 |
66 # prueft wie oft die schluessel zum signieren genutzt wurden |
66 # prueft wie viele ksks genutzt werden |
67 open(FILE, $_ = "<$dir/.keycounter") or die "Can't open $_: $!\n"; |
67 close(FILE); |
68 chomp ($info_kc = <FILE>); |
68 open( FILE, $_ = "<$dir/.index.ksk" ) or die "Can't open $_: $!\n"; |
|
69 () = <FILE>; |
|
70 $info_ksk = $.; |
69 |
71 |
70 # prueft das ablaufdatum |
72 # prueft wie oft die schluessel zum signieren genutzt wurden |
71 if (!-f "$dir/$zone.signed") { |
73 open( FILE, $_ = "<$dir/.keycounter" ) or die "Can't open $_: $!\n"; |
72 $info_end = "-"; |
74 chomp( $info_kc = <FILE> ); |
73 next; |
75 |
74 } |
76 # prueft das ablaufdatum |
75 |
77 if ( !-f "$dir/$zone.signed" ) { |
76 open(FILE, $_ = "<$dir/$zone.signed") or die "Can't open $_: $!\n"; |
78 $info_end = "-"; |
77 while (<FILE>) { |
79 next; |
78 $info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}" |
80 } |
79 if /RSIG.*SOA.*\s |
81 |
|
82 open( FILE, $_ = "<$dir/$zone.signed" ) or die "Can't open $_: $!\n"; |
|
83 while (<FILE>) { |
|
84 $info_end = "$+{day}.$+{mon}.$+{year} $+{hour}:$+{min}" |
|
85 if /RSIG.*SOA.*\s |
80 (?<year>\d\d\d\d) |
86 (?<year>\d\d\d\d) |
81 (?<mon>\d\d) |
87 (?<mon>\d\d) |
82 (?<day>\d\d) |
88 (?<day>\d\d) |
83 (?<hour>\d\d) |
89 (?<hour>\d\d) |
84 (?<min>\d\d)\d+\s\(/ix; |
90 (?<min>\d\d)\d+\s\(/ix; |
85 } |
91 } |
86 |
92 |
87 } continue { |
93 } |
88 printf "%-25s %1d/%1d %5d %19s\n", $zone, $info_zsk, $info_ksk, $info_kc, $info_end; |
94 continue { |
|
95 printf "%-25s %-8s %1d/%1d %5d %19s\n", $zone, $info_status, $info_zsk, $info_ksk, $info_kc, |
|
96 $info_end; |
89 } |
97 } |
90 |
98 |