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