--- a/update-serial.pl Tue Dec 28 15:23:35 2010 +0100
+++ b/update-serial.pl Tue Dec 28 15:35:05 2010 +0100
@@ -17,14 +17,14 @@
sub changed_zones();
sub update_index($);
sub sign_expired($);
+sub need_rollover();
+sub done_rollover();
sub sign_zone;
sub update_serial;
sub mk_zone_conf;
sub file_entry;
sub server_reload;
-sub to_begin_ro;
-sub to_end_ro;
sub begin_ro;
sub key_to_zonefile;
sub kill_useless_keys;
@@ -54,23 +54,23 @@
);
our @new_serial; # DO NOT USE
- our @begin_ro_list; # liste mit zonen deren key-rollover beginnt
our @end_ro_list; # liste mit zonen deren key-rollover fertig ist
our $bind_dir = $config{bind_dir};
our $conf_dir = $config{zone_conf_dir};
- our $key_counter_end = $config{key_counter_end};
- our $ablauf_zeit = $config{abl_zeit};
my @candidates = @ARGV ? zones(@ARGV) : changed_zones;
push @candidates, update_index($config{indexzone});
push @candidates, sign_expired($config{sign_alert_time});
+
+ my @need_rollover = need_rollover;
+ my @done_rollover = done_rollover;
### @candidates
+ ### @need_rollover
+ ### @done_rollover
exit;
- to_begin_ro; # prueft nach beginnenden rollover-verfahren
- to_end_ro; # prueft nach endenden rollover-verfahren
- if (@begin_ro_list) {
+ if (@need_rollover) {
begin_ro; # eine rollover-beginn-sequenz
}
@@ -374,72 +374,57 @@
if (`rndc reload`) { print "** reload dns-server \n" }
}
-sub to_begin_ro {
+sub need_rollover() {
- # gibt alle zonen mit abgelaufenen keycounter in die liste @begin_ro_list
- our @begin_ro_list;
- our $key_counter_end;
- our @new_serial;
- my $zone;
+ # gibt alle zonen mit abgelaufenen keycounter
+ my @r;
- while (glob "$config{master_dir}/*") {
- chomp($zone = $_);
+ while (my $kc = glob "$config{master_dir}/*/.keycounter") {
+ my $zone = basename dirname $kc;
my $key;
- unless (-f "$zone/.keycounter") { next; }
-
- open(KEY, "$zone/.keycounter") or die "$zone/.keycounter: $!\n";
- $key = <KEY>;
- close(KEY);
+ {
+ open(my $fh, $kc) or die "$kc: $!\n";
+ chomp($key = <$fh>);
+ }
- # vergleicht den wert aus der keycount-datei mit dem wert aus der
- #dnstools.conf (key_counter_end)
- if ($key_counter_end <= $key) {
- $zone =~ s#($config{master_dir}/)(.*)#$2#;
- push @begin_ro_list, $zone;
- }
+ push @r, $zone if $config{key_counter_end} <= $key;
}
+
+ return @r;
}
-sub to_end_ro {
+sub done_rollover() {
# funktion ueberprueft ob ein keyrollover fertig ist
# die bedingung dafuer ist das:
# - eine datei .index.zsk vorhanden ist
- # - die datei .index.zsk vor mehr x stunden geaendert wurde
- # - die datei .index.zsk ueber mehr als zwei zeilen gross ist
- our @end_ro_list;
- our $ablauf_zeit;
- chomp(my $now_time = `date +%s`);
+ # - die datei .index.zsk älter ist, als die rollover-Zeit
+ # - die datei .index.zsk ueber mehr als eine zeile gross ist
+ # (also mehr als einen Schlüssel enthält)
+ my @r;
+ my $now = time;
- while (glob "$config{master_dir}/*") {
- my $zone = $_;
- $zone =~ s#($config{master_dir}/)(.*)#$2#;
+ while (my $dir = glob "$config{master_dir}/*") {
+ my $zone = basename $dir;
my @index = ();
my $index_wc;
- my @status;
# prueft nach der ".index.zsk"-datei und erstellt den zeitpunkt
- # an dem das key-rollover endet. - $status[9]
- if (-e "$config{master_dir}/$zone/.index.zsk") {
- @status = stat("$config{master_dir}/$zone/.index.zsk");
- $status[9] += (3600 * $ablauf_zeit);
- }
- else { next; }
-
- # $status[9] ist der zeitpunkt an dem der key-rollover endet
- # prueft ob das key-rollover-ende erreicht ist
- unless ($status[9] < $now_time) { next; }
+ # an dem das key-rollover endet.
+ # rollover is done when mtime of the .index.zsk + abl_zeit is
+ # in the past
+ next if not -e "$dir/.index.zsk";
+ next if (stat _)[9] + 3600 * $config{abl_zeit} >= $now;
# prueft die anzahl der schluessel in der .index.zsk
- open(INDEX, "$config{master_dir}/$zone/.index.zsk")
- or die "$config{master_dir}/$zone/.index.zsk: $!\n";
- @index = <INDEX>;
- $index_wc = @index;
- close(INDEX);
- if ($index_wc > 1) { push @end_ro_list, $zone; }
+ open(my $fh, "$dir/.index.zsk") or die "$dir/.index.zsk: $!\n";
+ (<$fh>);
+ push @r, $zone if $. > 1;
}
+
+ return @r;
}
sub begin_ro {