geht vielleicht.
authorheiko
Mon, 23 Dec 2002 11:16:58 +0000
changeset 3 2699119ec0ea
parent 2 e126ffccfc87
child 4 9665d5582b40
geht vielleicht.
master_watcher
syslog
--- 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