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`; |