diff -r d50f6874b7ab -r 8b46e7c48995 zone-mk.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/zone-mk.pl Tue Dec 21 13:53:39 2010 +0100 @@ -0,0 +1,134 @@ +#!/usr/bin/perl -w + +use strict; +use FindBin; + +if ( @ARGV < 2 ) { + print "usage: zone-mk kundennummer domain ... \n"; + exit 1; +} + +# oeffnet Konfigurations- und Templatefiles - relativ oder absolut +my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" ); +my @templc = ( + "$FindBin::Bin/templates/named.config", + "/etc/dnstools/templates/named.config" +); +my @templz = ( + "$FindBin::Bin/templates/named.zone", + "/etc/dnstools/templates/named.zone" +); +my %config; + +for ( grep {-f} @configs ) { + open( CONFIG, $_ ) or die "Can't open $_: $!\n"; +} +unless ( seek( CONFIG, 0, 0 ) ) { + die "Can't open config (searched: @configs)\n"; +} + +for ( grep {-f} @templc ) { + open( TEMPCONF, $_ ) or die "Can't open $_: $!\n"; +} +unless ( seek( TEMPCONF, 0, 0 ) ) { + die "Can't open template (searched: @templc)\n"; +} + +for ( grep {-f} @templz ) { + open( TEMPZONE, $_ ) or die "Can't open $_: $!\n"; +} +unless ( seek( TEMPZONE, 0, 0 ) ) { + die "Can't open template (searched: @templz)\n"; +} + +while () { + chomp; + s/#.*//; + s/\t//g; + s/\s//g; + next unless length; + my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 ); + $config{$cname} = $ccont; +} +close(CONFIG); + +my $primary = $config{primary}; +my $secondary = $config{secondary}; +my $zone_conf_dir = $config{zone_conf_dir}; +my $master_dir = $config{master_dir}; +my $customer = shift @ARGV; +chomp( my $primary_ip = `dig +short $primary` ); +chomp( my $secondary_ip = `dig +short $secondary` ); +chomp( my $this_host = `hostname -f` ); +chomp( my $this_ip = `hostname -i` ); +chomp( my $this_domain = `hostname -d` ); +chomp( my $time = `date +%Y%m%d00` ); +chomp( my $start = `date -I` ); +my $hostmaster = "hostmaster.$this_domain"; + +unless ( -d $master_dir and -r $master_dir ) { + die "$master_dir: $!\n"; +} + +unless ( -d $zone_conf_dir and -r $zone_conf_dir ) { + die "$master_dir: $!\n"; +} + +# legt fuer jede domain in @ARGV ein verzeichnis in $master_dir an. +# schreibt aus den angegebenen templates die dateien $zonefile und $config +# in die entsprechenden verzeichnisse. +for (@ARGV) { + + chomp( my $domain = `idn --quiet "$_"` ); + my $zonefile = "$master_dir/$domain/$domain"; + my $config = "$zone_conf_dir/$domain"; + my $utf8domain = "$_"; + + unless ( -d "$master_dir/$domain" ) { + `mkdir $master_dir/$domain`; + } + + if ( -f $zonefile ) { + $zonefile =~ s#/.*/##; + print "$zonefile exists. Skipping $domain\n"; + next; + } + if ( -f $config ) { + $config =~ s#/.*/##; + print "$config exists. Skipping $domain\n"; + next; + } + + print "$domain ($_) for $customer \n"; + + my @tempzone = ; + for (@tempzone) { + s##$start#; + s##$domain#; + s#