geht vielleicht.
--- a/master_watcher Mon Dec 23 10:00:55 2002 +0000
+++ b/master_watcher Mon Dec 23 11:16:58 2002 +0000
@@ -13,7 +13,7 @@
# Diese ganzen Konfigurationsdateien werden dann zusammengefaßt
# und diese zusammengefaßte wird dem bind per "include" mitgeteilt.
-use strict;
+#use strict;
use File::Basename;
use IO::Handle;
use File::Path;
@@ -61,6 +61,8 @@
"help" => \$opt_help,
"logfile=s" => \$opt_logfile,
"follow!" => \$opt_follow,
+ "update!" => \$opt_update,
+ "create!" => \$opt_create,
"dir=s" => \$opt_zonesdir)
or die "$ME: Bad Usage\n";
@@ -121,40 +123,59 @@
{
local $_;
my $domain = shift;
- my $masters = join "; ", @_;
+ my %masters = map { $_, 1 } @_;
my $file = "$opt_zonesdir/$domain";
- syslog(LOG_NOTICE, "Updating/Creating $file ($masters)\n");
- return;
-
if (-f $file) {
- open (IN, $_ = "<$file") or die "Can't open $_: $!\n";
+ return if not $opt_update;
+ syslog(LOG_NOTICE, "Updating $file for $domain");
+ open (F, $_ = "+<$file") or die "Can't open $_: $!\n";
# ein etwas anderer Versuch - noch nicht fertig
- $_ = join "", <IN>;
- close(IN); open(OUT, ">&STDOUT"); # Wenn's geht, dann in's File
- s/(masters\s*{)(.*?)(};)/$1$2; $masters; $3/;
- print OUT;
- }
-
- else {
- open(OUT, $_ = ">$file") or die "Can't open $_: $!\n";
-
- print OUT <<_EOF_;
-// Autogenerated
+ $_ = join "", <F>;
+
+ # Liste der Master raussuchen
+ /^(\s*masters\s*{\s*)(.*?);(\s*}\s*;)/ims;
+
+ foreach (split /\s*;\s*/, $2) {
+ $masters{$_} = 1;
+ }
+ $masters = join "; ", keys %masters;
+ s/^(\s*masters\s*{\s*)(.*?);(\s*}\s*;)/$1$masters;$3/ims;
+
+ truncate(F, 0);
+ seek(F, 0, 0);
+ print F;
+ close F;
+
+ return;
+ }
+
+ return if not $opt_create;
+
+ my $date = localtime();
+ my $masters = join "; ", keys %masters;
+
+ -d $opt_zonesdir or mkpath($opt_zonesdir, 0, 0755);
+
+ syslog(LOG_NOTICE, "Creating $file for $domain");
+ open(OUT, $_ = ">$file") or die "Can't open $_: $!\n";
+
+ print OUT <<_EOF_;
+// Autogenerated by $ME: $date
zone "$domain" {
type slave;
- masters { $masters; };
+ masters { $masters; }; // $date
file "/etc/bind/slave/$domain";
allow-query { any; };
allow-transfer { none; };
allow-update { none; };
};
+
_EOF_
close OUT;
- }
-
+
return;
}
-
+
# vim:sts=4 sw=4 aw ai sm:
--- a/syslog Mon Dec 23 10:00:55 2002 +0000
+++ b/syslog Mon Dec 23 11:16:58 2002 +0000
@@ -20876,6 +20876,8 @@
Dec 17 10:12:53 hh named-xfer[32206]: [62.144.175.34] not authoritative for tauchreisefuehrer-deutschland.de, SOA query got rcode 0, aa 0, ancount 0, aucount 11
Dec 17 10:12:53 hh named[8814]: rcvd NOTIFY(zoolieferant.de, IN, SOA) from [212.172.233.34].53
Dec 17 10:12:53 hh named[8814]: rcvd NOTIFY for "zoolieferant.de", name not one of our zones
+Dec 17 10:12:53 hh named[8814]: rcvd NOTIFY(zoolieferant.de, IN, SOA) from [212.172.127.34].53
+Dec 17 10:12:53 hh named[8814]: rcvd NOTIFY for "zoolieferant.de", name not one of our zones
Dec 17 10:12:54 hh named[8814]: Err/TO getting serial# for "herrrossoundseinhund.de"
Dec 17 10:12:54 hh named-xfer[32207]: [62.144.175.34] not authoritative for herrrossoundseinhund.de, SOA query got rcode 0, aa 0, ancount 0, aucount 11
Dec 17 10:12:54 hh named[8814]: rcvd NOTIFY(mexxx.de, IN, SOA) from [212.172.233.34].53