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: