master_watcher
changeset 3 2699119ec0ea
parent 1 f1a025736621
child 4 9665d5582b40
equal deleted inserted replaced
2:e126ffccfc87 3:2699119ec0ea
    11 # Es wird ein Verzeichnis geben, in diesem Verzeichnis liegt für 
    11 # Es wird ein Verzeichnis geben, in diesem Verzeichnis liegt für 
    12 # *jede* Zone eine eigene Konfigurations-Datei.
    12 # *jede* Zone eine eigene Konfigurations-Datei.
    13 # Diese ganzen Konfigurationsdateien werden dann zusammengefaßt
    13 # Diese ganzen Konfigurationsdateien werden dann zusammengefaßt
    14 # und diese zusammengefaßte wird dem bind per "include" mitgeteilt.
    14 # und diese zusammengefaßte wird dem bind per "include" mitgeteilt.
    15 
    15 
    16 use strict;
    16 #use strict;
    17 use File::Basename;
    17 use File::Basename;
    18 use IO::Handle;
    18 use IO::Handle;
    19 use File::Path;
    19 use File::Path;
    20 use Getopt::Long;
    20 use Getopt::Long;
    21 use Unix::Syslog qw/:macros :subs/;
    21 use Unix::Syslog qw/:macros :subs/;
    59 
    59 
    60     GetOptions(
    60     GetOptions(
    61 	"help" => \$opt_help,
    61 	"help" => \$opt_help,
    62 	"logfile=s" => \$opt_logfile,
    62 	"logfile=s" => \$opt_logfile,
    63 	"follow!" => \$opt_follow,
    63 	"follow!" => \$opt_follow,
       
    64 	"update!" => \$opt_update,
       
    65 	"create!" => \$opt_create,
    64 	"dir=s" => \$opt_zonesdir)
    66 	"dir=s" => \$opt_zonesdir)
    65     or die "$ME: Bad Usage\n";
    67     or die "$ME: Bad Usage\n";
    66 
    68 
    67     if ($opt_help) {
    69     if ($opt_help) {
    68 	print eval "\"$USAGE\"";
    70 	print eval "\"$USAGE\"";
   119 
   121 
   120 sub updateFile($@)
   122 sub updateFile($@)
   121 {
   123 {
   122     local $_;
   124     local $_;
   123     my $domain = shift;
   125     my $domain = shift;
   124     my $masters = join "; ", @_;
   126     my %masters = map { $_, 1 } @_;
   125     my $file = "$opt_zonesdir/$domain";
   127     my $file = "$opt_zonesdir/$domain";
   126 
   128 
   127     syslog(LOG_NOTICE, "Updating/Creating $file ($masters)\n");
   129     if (-f $file) {
   128     return;
   130 	return if not $opt_update;
       
   131 	syslog(LOG_NOTICE, "Updating $file for $domain");
       
   132 	open (F, $_ = "+<$file") or die "Can't open $_: $!\n";
       
   133 	# ein etwas anderer Versuch - noch nicht fertig
       
   134 	$_ = join "", <F>;
   129 
   135 
   130     if (-f $file) {
   136 	# Liste der Master raussuchen
   131 	open (IN, $_ = "<$file") or die "Can't open $_: $!\n";
   137 	/^(\s*masters\s*{\s*)(.*?);(\s*}\s*;)/ims;
   132 	# ein etwas anderer Versuch - noch nicht fertig
   138 
   133 	$_ = join "", <IN>;
   139 	foreach (split /\s*;\s*/, $2) {
   134 	close(IN); open(OUT, ">&STDOUT"); # Wenn's geht, dann in's File
   140 	    $masters{$_} = 1;
   135 	s/(masters\s*{)(.*?)(};)/$1$2; $masters; $3/;
   141 	}
   136 	print OUT;
   142 	$masters = join "; ", keys %masters;
   137     }
   143 	s/^(\s*masters\s*{\s*)(.*?);(\s*}\s*;)/$1$masters;$3/ims;
   138     
   144 
   139     else {
   145 	truncate(F, 0);
   140 	open(OUT, $_ = ">$file") or die "Can't open $_: $!\n";
   146 	seek(F, 0, 0);
   141     
   147 	print F;
   142 	    print OUT <<_EOF_;
   148 	close F;
   143 // Autogenerated
   149 
       
   150 	return;
       
   151     } 
       
   152 
       
   153     return if not $opt_create;
       
   154 
       
   155     my $date = localtime();
       
   156     my $masters = join "; ", keys %masters;
       
   157 
       
   158     -d $opt_zonesdir or mkpath($opt_zonesdir, 0, 0755);
       
   159 
       
   160     syslog(LOG_NOTICE, "Creating $file for $domain");
       
   161     open(OUT, $_ = ">$file") or die "Can't open $_: $!\n";
       
   162 
       
   163 	print OUT <<_EOF_;
       
   164 // Autogenerated by $ME: $date
   144 zone "$domain" {
   165 zone "$domain" {
   145     type slave;
   166     type slave;
   146     masters { $masters; };
   167     masters { $masters; };  // $date
   147     file "/etc/bind/slave/$domain";
   168     file "/etc/bind/slave/$domain";
   148     allow-query { any; };
   169     allow-query { any; };
   149     allow-transfer { none; };
   170     allow-transfer { none; };
   150     allow-update { none; };
   171     allow-update { none; };
   151 };
   172 };
       
   173 
   152 _EOF_
   174 _EOF_
   153     close OUT;
   175     close OUT;
   154     }
   176 
   155     
       
   156     return;
   177     return;
   157 }
   178 }
   158 	    
   179 	
   159 
   180 
   160 # vim:sts=4 sw=4 aw ai sm:
   181 # vim:sts=4 sw=4 aw ai sm: