1 #!/usr/bin/perl -w |
1 #!/usr/bin/perl -w |
2 |
2 |
3 use strict; |
3 use strict; |
4 |
4 |
5 my $master_dir="/etc/bind/master" ; |
5 my %config; |
6 my $sign_alert_time="48"; # zeitraum zwischen signierung und ablauf in h |
6 open (CONFIG, "dnstools.conf"); |
|
7 while (<CONFIG>) { |
|
8 chomp; |
|
9 s/#.*//; |
|
10 s/\t//g; |
|
11 s/\s//g; |
|
12 |
|
13 next unless length; |
|
14 my ($cname, $ccont) = split (/\s*=\s*/, $_,2); |
|
15 $config{$cname} = $ccont; |
|
16 } |
|
17 close (CONFIG); |
|
18 |
|
19 my $master_dir=$config{master_dir} ; |
|
20 my $sign_alert_time=$config{sign_alert_time}; |
7 my $zone; |
21 my $zone; |
8 my (@manu, @auto); |
22 my (@manu, @auto); |
9 my @zone_sig_content; |
23 my @zone_sig_content; |
10 my $sig_date; |
24 my $sig_date; |
11 my $kc; |
25 my $kc; |
12 |
26 |
13 # prueft zonen aus ARGV und fuegt sie in die liste @manu ein |
27 # prueft zonen aus ARGV und fuegt sie in die liste @manu ein |
14 for (@ARGV) { |
28 for (@ARGV) { |
15 chomp ($zone = `idn --quiet $_`); |
29 chomp (my $zone = `idn --quiet "$_"`); |
|
30 |
16 if (-e "$master_dir/$zone") { |
31 if (-e "$master_dir/$zone") { |
17 push @manu, $zone; |
32 push @manu, $zone; |
18 } else { |
33 } else { |
19 print "$zone ist keine verwaltete zone \n"; |
34 print "$zone ist keine verwaltete zone \n"; |
20 } |
35 } |
21 } |
36 } |
22 |
37 |
23 # feststellen des aktuellen zeitpunktes, zuzueglich der $sign_alert_time |
|
24 # die ausgabe $time ist im selben format wie in der signed-datei und kann |
|
25 # verglichen werden. |
|
26 chomp (my $unixtime=`date +%s`); |
38 chomp (my $unixtime=`date +%s`); |
27 $unixtime = $unixtime + (3600 * $sign_alert_time); |
39 $unixtime = $unixtime + (3600 * $sign_alert_time); |
28 my $time = `date -d \@$unixtime +%Y%m%d%H`; |
40 my $time = `date -d \@$unixtime +%Y%m%d%H`; |
29 |
41 |
30 # vergleicht fuer alle zonen im ordner $master_dir mit einer |
42 # vergleicht fuer alle zonen im ordner $master_dir mit einer |
38 |
50 |
39 open (ZONE, "$master_dir/$zone/$zone.signed"); |
51 open (ZONE, "$master_dir/$zone/$zone.signed"); |
40 @zone_sig_content = <ZONE>; |
52 @zone_sig_content = <ZONE>; |
41 close (ZONE); |
53 close (ZONE); |
42 |
54 |
43 foreach (@zone_sig_content) { |
55 for (@zone_sig_content) { |
44 if (m#SOA.*[0-9]{14}#) { |
56 if (m#SOA.*[0-9]{14}#) { |
45 s#.*([0-9]{10})([0-9]{4}).*#$1#; |
57 s#.*([0-9]{10})([0-9]{4}).*#$1#; |
46 if ($_ < $time) { |
58 if ($_ < $time) { |
47 push @auto, $zone; |
59 push @auto, $zone; |
48 } |
60 } |
54 #gibt zonen mit schluessel aber ohne signatur in die liste @auto |
66 #gibt zonen mit schluessel aber ohne signatur in die liste @auto |
55 for (<$master_dir/*>) { |
67 for (<$master_dir/*>) { |
56 s#($master_dir/)(.*)#$2#; |
68 s#($master_dir/)(.*)#$2#; |
57 $zone = $_; |
69 $zone = $_; |
58 |
70 |
59 |
|
60 print $zone; |
|
61 if (-e "$master_dir/$zone/.keycounter") { |
71 if (-e "$master_dir/$zone/.keycounter") { |
62 |
72 |
63 open (KC, "$master_dir/$zone/.keycounter" ); |
73 open (KC, "$master_dir/$zone/.keycounter" ); |
64 $kc = <KC>; |
74 $kc = <KC>; |
65 close (KC); |
75 close (KC); |