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