mkready
changeset 17 05132262d212
parent 16 a31edb6b728c
child 18 8715e7b706db
equal deleted inserted replaced
16:a31edb6b728c 17:05132262d212
     1 #!/bin/bash
     1 #!/usr/bin/perl
     2 
     2 
     3 set -e
     3 use strict;
     4 source dnstools.conf
       
     5 
     4 
     6 domain="eins.lan"
     5 my $bind_dir = "/etc/bind";
     7 master_dir="$MASTER_DIR"
     6 my $conf_dir = "/etc/bind/zones.d";
     8 conf_dir="$ZONE_CONF_DIR"
     7 my $master_dir = "/etc/bind/master";
     9 bind_dir="$BIND_DIR"
     8 chomp (my @domains = `ls $master_dir`);
       
     9 chomp (my @conf_dir_files = `ls $conf_dir`);
    10 
    10 
    11 tmpfile=`mktemp`
    11 # prueft jede domain die einen verzeichniss in $master_dir hat, ob es eine
    12 trap "rm -f $tmpfile" EXIT QUIT INI
    12 # datei <$domain>.signed gibt und ob der eintrag in $conf_dir/$domain dem
       
    13 # ergebniss entspricht.
       
    14 # passt die eintraeg in der config-datei falls noetig an.
       
    15 foreach (@domains) {
       
    16 	my $domain = $_;
       
    17 	my $zone_file = "$master_dir/$domain/$domain";
       
    18 	my $conf_file = "$conf_dir/$domain";
       
    19 	my @c_content;
    13 
    20 
    14 for zone_domain in $master_dir/*
    21 	if (-e "$zone_file.signed") {
    15 do
       
    16         domain=${zone_domain##/*/}
       
    17         zone_dir="$master_dir/$domain"
       
    18         conf_file="$conf_dir/$domain"
       
    19         zone="$master_dir/$domain/$domain"
       
    20         zone_signed="$master_dir/$domain/$domain.signed"
       
    21 
    22 
    22 	# schreibt den eintrag ueber das zonefile um. ist ein signiertes zonefile vorhanden
    23 		open (FILE, $conf_file);
    23 	# wird es in der configdatei der zone im abschnitt file verlinkt. ist das zone-file
    24 		@c_content = <FILE>;
    24 	# nicht signiert wird die standard-zonedatei eingetragen.
    25 		close (FILE);
    25         if [ -f $master_dir/$domain/$domain.signed ]
       
    26         then
       
    27                 if ! grep -q "file.*signed\"" $conf_file 
       
    28                 then
       
    29                         sed -e "s\\$zone\\$zone_signed\\g" <$conf_file >$tmpfile
       
    30 			mv $tmpfile $conf_file
       
    31                         echo $zone '-->' $zone_signed
       
    32                 fi
       
    33         else
       
    34                 if grep -q "file.*signed\"" $conf_file
       
    35                 then
       
    36                         sed -e "s\\$zone_signed\\$zone\\g" <$conf_file >$tmpfile
       
    37 			mv $tmpfile $conf_file
       
    38                         echo $zone_signed '-->' $zone
       
    39                 fi
       
    40         fi
       
    41 done
       
    42 
    26 
    43 cat $conf_dir/* > $bind_dir/named.conf.zones
    27 		foreach (@c_content) {
    44 named-checkconf
    28 			if (m{(.*)($zone_file)(";)}) {
    45 named-checkconf -z
    29 				print "$2 ==> $2.signed\n";
    46 rndc reload
    30 				$_ = "$1$2.signed$3\n";
       
    31 			}
       
    32 
       
    33 		open (FILE, ">test");
       
    34 		print FILE @c_content;
       
    35 		close (FILE);
       
    36 
       
    37 		}
       
    38 
       
    39 	} else {
       
    40 
       
    41 		open (FILE, $conf_file);
       
    42 		@c_content = <FILE>;
       
    43 		close (DATEI);
       
    44 		
       
    45 		foreach (@c_content) {
       
    46 			if (m{(.*)($zone_file)\.signed(.*)}) {
       
    47 				print "$2.signed ==> $2\n";
       
    48 				$_ = "$1$2$3\n";
       
    49 			}
       
    50 		}
       
    51 
       
    52 		open (FILE, ">$conf_file");	
       
    53 		print FILE @c_content;
       
    54 		close (FILE);
       
    55 	}
       
    56 }
       
    57 
       
    58 # erzeugt eine named.conf-datei aus den entsprechenden vorlagen.
       
    59 open( TO, ">$bind_dir/named.conf.zones");
       
    60 foreach (@conf_dir_files) {
       
    61 	open (FROM, "$conf_dir/$_");
       
    62 	print TO <FROM>;
       
    63 	close (FROM);
       
    64 }
       
    65 close(TO);
       
    66 
       
    67 
       
    68 print `named-checkconf`;
       
    69 print `named-checkconf -z`;
       
    70 print `rndc reload`;