dnssec-sign
changeset 22 7229d1c95ea8
parent 21 6715f8f9d04c
child 24 b1234b9824f0
equal deleted inserted replaced
21:6715f8f9d04c 22:7229d1c95ea8
     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);