mkready
changeset 27 d5337081ed02
parent 25 c02caf4e0eb6
equal deleted inserted replaced
26:0342c09abf97 27:d5337081ed02
     1 #!/usr/bin/perl
     1 #!/usr/bin/perl
     2 
     2 
     3 use strict;
     3 use strict;
     4 use FindBin;
     4 use FindBin;
     5 
     5 
     6 
       
     7 # liest die Konfiguration ein
     6 # liest die Konfiguration ein
     8 my @configs = ("$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf");
     7 my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" );
     9 my %config;
     8 my %config;
    10 
     9 
    11 foreach (grep {-f} @configs) {
    10 foreach ( grep {-f} @configs ) {
    12         open(CONFIG, $_) or die "Can't open $_: $!\n";
    11     open( CONFIG, $_ ) or die "Can't open $_: $!\n";
    13 }
    12 }
    14 
    13 
    15 unless (seek(CONFIG,0 ,0 )) {
    14 unless ( seek( CONFIG, 0, 0 ) ) {
    16         die "Can't open config (searched: @configs)\n"
    15     die "Can't open config (searched: @configs)\n";
    17 }
    16 }
    18 
    17 
    19 while (<CONFIG>) {
    18 while (<CONFIG>) {
    20         chomp;
    19     chomp;
    21         s/#.*//;
    20     s/#.*//;
    22         s/\t//g;
    21     s/\t//g;
    23         s/\s//g;
    22     s/\s//g;
    24         next unless length;
    23     next unless length;
    25         my ($cname, $ccont) = split (/\s*=\s*/, $_,2);
    24     my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 );
    26         $config{$cname} = $ccont;
    25     $config{$cname} = $ccont;
    27 }
    26 }
    28 close (CONFIG);
    27 close(CONFIG);
    29 
    28 
    30 my $bind_dir = $config{bind_dir};
    29 my $bind_dir   = $config{bind_dir};
    31 my $conf_dir = $config{zone_conf_dir};
    30 my $conf_dir   = $config{zone_conf_dir};
    32 my $master_dir = $config{master_dir};
    31 my $master_dir = $config{master_dir};
    33 
    32 
    34 unless (-d $master_dir and -r $master_dir) {
    33 unless ( -d $master_dir and -r $master_dir ) {
    35         die "$master_dir: $!\n";
    34     die "$master_dir: $!\n";
    36 }
    35 }
    37 
    36 
    38 unless (-d $bind_dir and -r $bind_dir) {
    37 unless ( -d $bind_dir and -r $bind_dir ) {
    39         die "$bind_dir: $!\n";
    38     die "$bind_dir: $!\n";
    40 }
    39 }
    41 
    40 
    42 # prueft jede domain, die ein verzeichnis in $master_dir hat, ob es eine
    41 # prueft jede domain, die ein verzeichnis in $master_dir hat, ob es eine
    43 # datei $zone_file.signed gibt und ob diese datei in $config_file eingetragen 
    42 # datei $zone_file.signed gibt und ob diese datei in $config_file eingetragen
    44 # ist.
    43 # ist.
    45 # passt die eintraege in $config_file falls noetig an.
    44 # passt die eintraege in $config_file falls noetig an.
    46 while (<$master_dir/*>) {
    45 while (<$master_dir/*>) {
    47 	s#($master_dir/)(.*)#$2#;
    46     s#($master_dir/)(.*)#$2#;
    48 	my $zone = $_;
    47     my $zone = $_;
    49 
    48 
    50 	my $zone_file = "$master_dir/$zone/$zone";
    49     my $zone_file = "$master_dir/$zone/$zone";
    51 	my $conf_file = "$conf_dir/$zone";
    50     my $conf_file = "$conf_dir/$zone";
    52 	my @c_content;
    51     my @c_content;
    53 
    52 
    54 	unless (-f "$conf_file" ) {
    53     unless ( -f "$conf_file" ) {
    55 		die "$conf_file: $! \n";	
    54         die "$conf_file: $! \n";
    56 	}
    55     }
    57 
    56 
    58 	if (-f "$zone_file.signed") {
    57     if ( -f "$zone_file.signed" ) {
    59 
    58 
    60 		open (FILE, "<$conf_file") or die "$conf_file: $!\n";
    59         open( FILE, "<$conf_file" ) or die "$conf_file: $!\n";
    61 		@c_content = <FILE>;
    60         @c_content = <FILE>;
    62 		close (FILE);
    61         close(FILE);
    63 
    62 
    64 		for (@c_content) {
    63         for (@c_content) {
    65 			if (m{(.*)($zone_file)(";)}) {
    64             if (m{(.*)($zone_file)(";)}) {
    66 				print "$2 ==> $2.signed\n";
    65                 print "$2 ==> $2.signed\n";
    67 				$_ = "$1$2.signed$3\n";
    66                 $_ = "$1$2.signed$3\n";
    68 			}
    67             }
    69 
    68 
    70 		open (FILE, ">$conf_file") or die "$conf_file: $!\n";
    69             open( FILE, ">$conf_file" ) or die "$conf_file: $!\n";
    71 		print FILE @c_content;
    70             print FILE @c_content;
    72 		close (FILE);
    71             close(FILE);
    73 
    72 
    74 		}
    73         }
    75 	}
    74     }
    76 	else {
    75     else {
    77 
    76 
    78 		open (FILE, "<$conf_file") or die "$conf_file: $!\n";
    77         open( FILE, "<$conf_file" ) or die "$conf_file: $!\n";
    79 		@c_content = <FILE>;
    78         @c_content = <FILE>;
    80 		close (FILE);
    79         close(FILE);
    81 		
       
    82 		for (@c_content) {
       
    83 			if (m{(.*)($zone_file)\.signed(.*)}) {
       
    84 				print "$2.signed ==> $2\n";
       
    85 				$_ = "$1$2$3\n";
       
    86 			}
       
    87 		}
       
    88 
    80 
    89 		open (FILE, ">$conf_file") or die "$conf_file: $!\n";
    81         for (@c_content) {
    90 		print FILE @c_content;
    82             if (m{(.*)($zone_file)\.signed(.*)}) {
    91 		close (FILE);
    83                 print "$2.signed ==> $2\n";
    92 	}
    84                 $_ = "$1$2$3\n";
       
    85             }
       
    86         }
       
    87 
       
    88         open( FILE, ">$conf_file" ) or die "$conf_file: $!\n";
       
    89         print FILE @c_content;
       
    90         close(FILE);
       
    91     }
    93 }
    92 }
    94 
    93 
    95 # erzeugt eine named.conf-datei aus den entsprechenden vorlagen.
    94 # erzeugt eine named.conf-datei aus den entsprechenden vorlagen.
    96 open( TO, ">$bind_dir/named.conf.zones") or die "$bind_dir/named.conf.zones: $!\n";
    95 open( TO, ">$bind_dir/named.conf.zones" )
       
    96     or die "$bind_dir/named.conf.zones: $!\n";
    97 while (<$conf_dir/*>) {
    97 while (<$conf_dir/*>) {
    98 	open (FROM, "$_") or die "$_: $! \n";
    98     open( FROM, "$_" ) or die "$_: $! \n";
    99 	print TO <FROM>;
    99     print TO <FROM>;
   100 	close (FROM);
   100     close(FROM);
   101 }
   101 }
   102 close(TO);
   102 close(TO);
   103 
       
   104 
   103 
   105 system "named-checkconf";
   104 system "named-checkconf";
   106 system "named-checkconf -z";
   105 system "named-checkconf -z";
   107 system "rndc reload";
   106 system "rndc reload";