update-serial.pl
branchhs12
changeset 48 04cefcf6f4ac
parent 41 3c10c45c6a59
child 50 3b469e9bda9e
equal deleted inserted replaced
44:8b487ebf8d99 48:04cefcf6f4ac
     1 #!/usr/bin/perl 
     1 #!/usr/bin/perl 
     2 
     2 
       
     3 use v5.10;
     3 use strict;
     4 use strict;
     4 use warnings;
     5 use warnings;
     5 use FindBin;
     6 use FindBin;
     6 use File::Basename;
     7 use File::Basename;
     7 
     8 
     8 sub del_double {
     9 sub uniq {
     9 
       
    10     # entfernt doppelte eintraege in einer liste
       
    11     my %all;
    10     my %all;
    12     grep { $all{$_} = 0 } @_;
    11     @all{@_} = ();
    13     return (keys %all);
    12     keys %all;
    14 }
    13 }
    15 
    14 
    16 sub read_conf {
    15 sub read_conf {
    17 
    16 
    18     # liest die Konfiguration ein
    17     # liest die Konfiguration ein
    83                              # signierung (siehe externe konfiguration)
    82                              # signierung (siehe externe konfiguration)
    84     our $master_dir;
    83     our $master_dir;
    85     our @new_serial;
    84     our @new_serial;
    86 
    85 
    87     # erzeugt $time (die zeit ab der neu signiert werden soll)
    86     # erzeugt $time (die zeit ab der neu signiert werden soll)
    88     chomp(my $unixtime = `date +%s`);
    87     my $unixtime = time + (3600 * $sign_alert_time);
    89     $unixtime = $unixtime + (3600 * $sign_alert_time);
       
    90     my $time = `date -d \@$unixtime +%Y%m%d%H`;
    88     my $time = `date -d \@$unixtime +%Y%m%d%H`;
    91 
    89 
    92     ## vergleicht fuer alle zonen im ordner $master_dir mit einer
    90     ## vergleicht fuer alle zonen im ordner $master_dir mit einer
    93     ## <zone>.signed-datei den zeitpunkt in $time mit dem ablaufdatum der
    91     ## <zone>.signed-datei den zeitpunkt in $time mit dem ablaufdatum der
    94     ## signatur, welcher aus der datei <zone>.signed ausgelesen wird.
    92     ## signatur, welcher aus der datei <zone>.signed ausgelesen wird.
   119     our @new_serial;
   117     our @new_serial;
   120     our $master_dir;
   118     our $master_dir;
   121     my $zone;
   119     my $zone;
   122     my $kc;
   120     my $kc;
   123 
   121 
   124     for (&del_double(@new_serial)) {
   122     for (uniq(@new_serial)) {
   125         $zone = $_;
   123         $zone = $_;
   126 
   124 
   127         unless (-e "$master_dir/$zone/.index.zsk") {
   125         unless (-e "$master_dir/$zone/.index.zsk") {
   128             next;
   126             next;
   129         }
   127         }
   157     my @new_content;
   155     my @new_content;
   158     my $sdate;
   156     my $sdate;
   159     my $scount;
   157     my $scount;
   160     my $serial;
   158     my $serial;
   161 
   159 
   162     for (&del_double(@new_serial)) {
   160     for (uniq(@new_serial)) {
   163 
   161 
   164         # erhoeht den serial
   162         # erhoeht den serial
   165         my $zone        = $_;
   163         my $zone        = $_;
   166         my $file        = "$master_dir/$zone/$zone";
   164         my $file        = "$master_dir/$zone/$zone";
   167         my @new_content = ();
   165         my @new_content = ();
   391     # anfang des key-rollovers
   389     # anfang des key-rollovers
   392     our @begin_ro_list;
   390     our @begin_ro_list;
   393     our $master_dir;
   391     our $master_dir;
   394     our @new_serial;
   392     our @new_serial;
   395 
   393 
   396     for (&del_double(@begin_ro_list)) {
   394     for (uniq(@begin_ro_list)) {
   397 
   395 
   398         #erzeugt zsks
   396         #erzeugt zsks
   399         my $zone = $_;
   397         my $zone = $_;
   400         my $zpf  = "$master_dir/$zone";
   398         my $zpf  = "$master_dir/$zone";
   401         my @index;
   399         my @index;
   524         &key_to_zonefile($zone);
   522         &key_to_zonefile($zone);
   525         push @new_serial, $zone;
   523         push @new_serial, $zone;
   526     }
   524     }
   527 }
   525 }
   528 
   526 
   529 &read_conf;
   527 MAIN: {
   530 
   528 
   531 our %config;
   529     read_conf;
   532 our @new_serial;       # liste fuer neuen serial
   530 
   533 our @begin_ro_list;    # liste mit zonen deren key-rollover beginnt
   531     our %config;
   534 our @end_ro_list;      # liste mit zonen deren key-rollover fertig ist
   532     our @new_serial;       # liste fuer neuen serial
   535 our $master_dir      = $config{master_dir};
   533     our @begin_ro_list;    # liste mit zonen deren key-rollover beginnt
   536 our $bind_dir        = $config{bind_dir};
   534     our @end_ro_list;      # liste mit zonen deren key-rollover fertig ist
   537 our $conf_dir        = $config{zone_conf_dir};
   535     our $master_dir      = $config{master_dir};
   538 our $sign_alert_time = $config{sign_alert_time};
   536     our $bind_dir        = $config{bind_dir};
   539 our $indexzone       = $config{indexzone};
   537     our $conf_dir        = $config{zone_conf_dir};
   540 our $key_counter_end = $config{key_counter_end};
   538     our $sign_alert_time = $config{sign_alert_time};
   541 our $ablauf_zeit     = $config{abl_zeit};
   539     our $indexzone       = $config{indexzone};
   542 
   540     our $key_counter_end = $config{key_counter_end};
   543 &add_argv;
   541     our $ablauf_zeit     = $config{abl_zeit};
   544 &changed_zone;
   542 
   545 &sign_end;
   543     add_argv;
   546 
   544     changed_zone;
   547 &to_begin_ro;    # prueft nach beginnenden rollover-verfahren
   545     sign_end;
   548 &to_end_ro;      # prueft nach endenden rollover-verfahren
   546 
   549 
   547     to_begin_ro;    # prueft nach beginnenden rollover-verfahren
   550 if (@begin_ro_list) {
   548     to_end_ro;      # prueft nach endenden rollover-verfahren
   551     &begin_ro;    # eine rollover-beginn-sequenz
   549 
   552 }
   550     if (@begin_ro_list) {
   553 
   551         begin_ro;    # eine rollover-beginn-sequenz
   554 if (@end_ro_list) {
   552     }
   555     &end_ro;      # eine rollover-end-squenz
   553 
   556 }
   554     if (@end_ro_list) {
   557 
   555         end_ro;      # eine rollover-end-squenz
   558 if (@new_serial) {
   556     }
   559     &update_index;     # index zone aktuallisieren
   557 
   560     &update_serial;    # serial aktuallisieren
   558     if (@new_serial) {
   561     &sign_zone;        # zone signieren
   559         update_index;     # index zone aktuallisieren
   562 }
   560         update_serial;    # serial aktuallisieren
   563 
   561         sign_zone;        # zone signieren
   564 &file_entry;           # bearbeitet die file-eintraege der konfigurations-datei
   562     }
   565 &mk_zone_conf;         # konfiguration zusammenfuegen
   563 
   566 &server_reload;        # server neu laden
   564     file_entry;       # bearbeitet die file-eintraege der konfigurations-datei
       
   565     mk_zone_conf;     # konfiguration zusammenfuegen
       
   566     server_reload;    # server neu laden
       
   567 
       
   568 }