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"; # ordner fuer die einzelnen zonedateiordner |
5 my %config; |
6 my $ablauf_zeit="1"; # zeit fuer den key-rollover 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 $ablauf_zeit = $config{abl_zeit}; |
7 my $zone; |
21 my $zone; |
8 my @status; |
22 my @status; |
9 my @auto; |
23 my @auto; |
10 chomp (my $now_time=`date +%s`); # aktuelle unixzeit |
24 chomp (my $now_time=`date +%s`); # aktuelle unixzeit |
11 |
25 |
13 for (@ARGV) { |
27 for (@ARGV) { |
14 chomp ($zone = `idn --quiet $_`); |
28 chomp ($zone = `idn --quiet $_`); |
15 my $zdir = "$master_dir/$zone"; |
29 my $zdir = "$master_dir/$zone"; |
16 if (-e "$master_dir/$zone") { |
30 if (-e "$master_dir/$zone") { |
17 |
31 |
18 if (-e "$zdir/$zone.signed") { `rm $zdir/$zone.signed`} |
32 if (-e "$zdir/$zone.signed") { unlink $zdir/$zone.signed} |
19 if (-e "$zdir/.keycounter") { `rm $zdir/.keycounter`} |
33 if (-e "$zdir/.keycounter") { unlink $zdir/.keycounter} |
20 if (-e "$zdir/.index.ksk") { `rm $zdir/.index.ksk`} |
34 if (-e "$zdir/.index.ksk") { unlink $zdir/.index.ksk} |
21 if (-e "$zdir/.index.zsk") { `rm $zdir/.index.zsk`} |
35 if (-e "$zdir/.index.zsk") { unlink $zdir/.index.zsk} |
22 if (-e "$zdir/dsset-$zone.") { `rm $zdir/dsset-$zone.`} |
36 if (-e "$zdir/dsset-$zone.") { unlink $zdir/dsset-$zone.} |
23 if (-e "$zdir/keyset-$zone.") { `rm $zdir/keyset-$zone.`} |
37 if (-e "$zdir/keyset-$zone.") { unlink $zdir/keyset-$zone.} |
24 |
38 |
25 foreach (`ls $master_dir/$zone/K*[key,private]`){ `rm $_`} |
39 for (`ls $master_dir/$zone/K*[key,private]`){ unlink $_} |
26 |
40 |
27 } else { |
41 } else { |
28 print "$zone ist keine verwaltete zone \n"; |
42 print "$zone ist keine verwaltete zone \n"; |
29 } |
43 } |
30 } |
44 } |
78 } |
92 } |
79 |
93 |
80 # nach abgeschlossenem key-rollover werden fuer die entsprechende zone |
94 # nach abgeschlossenem key-rollover werden fuer die entsprechende zone |
81 # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die |
95 # unbenoetigte schluessel entfernt und die vorhandenen schluessel in die |
82 # zonedatei geschrieben. |
96 # zonedatei geschrieben. |
83 foreach (@auto) { |
97 for (@auto) { |
84 my $zone = $_; |
98 my $zone = $_; |
85 my @old_zone_content = (); |
99 my @old_zone_content = (); |
86 my @new_zone_content = (); |
100 my @new_zone_content = (); |
87 my @keylist = (); |
101 my @keylist = (); |
88 my $file; |
102 my $file; |
99 @old_zone_content = <ZONE>; |
113 @old_zone_content = <ZONE>; |
100 close (ZONE); |
114 close (ZONE); |
101 |
115 |
102 # kuerzt die schluessel-bezeichnung aus der indexdatei auf die |
116 # kuerzt die schluessel-bezeichnung aus der indexdatei auf die |
103 # id um sie besser vergleichen zu koennen. |
117 # id um sie besser vergleichen zu koennen. |
104 foreach (@keylist) { |
118 for (@keylist) { |
105 chomp; |
119 chomp; |
106 s#K.*\+.*\+(.*)#$1#; |
120 s#K.*\+.*\+(.*)#$1#; |
107 } |
121 } |
108 |
122 |
109 # filtert alle schluessel aus der zonedatei |
123 # filtert alle schluessel aus der zonedatei |
110 # old_zone_content ==> new_zone_content |
124 # old_zone_content ==> new_zone_content |
111 foreach (@old_zone_content) { |
125 for (@old_zone_content) { |
112 unless (/IN\sDNSKEY/) { |
126 unless (/IN\sDNSKEY/) { |
113 push @new_zone_content, $_; |
127 push @new_zone_content, $_; |
114 } |
128 } |
115 } |
129 } |
116 |
130 |
117 # prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen |
131 # prueft alle schluesseldateien (ksk, zsk) ob sie in der jeweiligen |
118 # indexdatei beschrieben sind. wenn nicht werden sie geloescht. |
132 # indexdatei beschrieben sind. wenn nicht werden sie geloescht. |
119 foreach (`ls $master_dir/$zone/K*[key,private]`){ |
133 for (`ls $master_dir/$zone/K*[key,private]`){ |
120 chomp; |
134 chomp; |
121 $file = $_; |
135 $file = $_; |
122 my $rm_count = 1; |
136 my $rm_count = 1; |
123 |
137 |
124 foreach (@keylist) { |
138 for (@keylist) { |
125 |
139 |
126 if ($file =~ /$_/) { |
140 if ($file =~ /$_/) { |
127 $rm_count = 0; |
141 $rm_count = 0; |
128 |
142 |
129 # schluessel die in der indexdatei standen, werden an die |
143 # schluessel die in der indexdatei standen, werden an die |