# HG changeset patch # User heiko # Date 1040642218 0 # Node ID 2699119ec0ea3e5eda65c9b154192a652f26080d # Parent e126ffccfc8768d85d5e011d09cbef68705ae114 geht vielleicht. diff -r e126ffccfc87 -r 2699119ec0ea master_watcher --- 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 "", ; - 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 "", ; + + # 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: diff -r e126ffccfc87 -r 2699119ec0ea syslog --- 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