|      1 #!/usr/bin/perl -w |         | 
|      2  |         | 
|      3 use strict; |         | 
|      4 use FindBin; |         | 
|      5  |         | 
|      6 if ( @ARGV < 2 ) { |         | 
|      7     print "usage: zone-mk kundennummer domain ... \n"; |         | 
|      8     exit 1; |         | 
|      9 } |         | 
|     10  |         | 
|     11 # oeffnet Konfigurations- und Templatefiles - relativ oder absolut |         | 
|     12 my @configs = ( "$FindBin::Bin/dnstools.conf", "/etc/dnstools.conf" ); |         | 
|     13 my @templc = ( |         | 
|     14     "$FindBin::Bin/templates/named.config", |         | 
|     15     "/etc/dnstools/templates/named.config" |         | 
|     16 ); |         | 
|     17 my @templz = ( |         | 
|     18     "$FindBin::Bin/templates/named.zone", |         | 
|     19     "/etc/dnstools/templates/named.zone" |         | 
|     20 ); |         | 
|     21 my %config; |         | 
|     22  |         | 
|     23 for ( grep {-f} @configs ) { |         | 
|     24     open( CONFIG, $_ ) or die "Can't open $_: $!\n"; |         | 
|     25 } |         | 
|     26 unless ( seek( CONFIG, 0, 0 ) ) { |         | 
|     27     die "Can't open config (searched: @configs)\n"; |         | 
|     28 } |         | 
|     29  |         | 
|     30 for ( grep {-f} @templc ) { |         | 
|     31     open( TEMPCONF, $_ ) or die "Can't open $_: $!\n"; |         | 
|     32 } |         | 
|     33 unless ( seek( TEMPCONF, 0, 0 ) ) { |         | 
|     34     die "Can't open template (searched: @templc)\n"; |         | 
|     35 } |         | 
|     36  |         | 
|     37 for ( grep {-f} @templz ) { |         | 
|     38     open( TEMPZONE, $_ ) or die "Can't open $_: $!\n"; |         | 
|     39 } |         | 
|     40 unless ( seek( TEMPZONE, 0, 0 ) ) { |         | 
|     41     die "Can't open template (searched: @templz)\n"; |         | 
|     42 } |         | 
|     43  |         | 
|     44 while (<CONFIG>) { |         | 
|     45     chomp; |         | 
|     46     s/#.*//; |         | 
|     47     s/\t//g; |         | 
|     48     s/\s//g; |         | 
|     49     next unless length; |         | 
|     50     my ( $cname, $ccont ) = split( /\s*=\s*/, $_, 2 ); |         | 
|     51     $config{$cname} = $ccont; |         | 
|     52 } |         | 
|     53 close(CONFIG); |         | 
|     54  |         | 
|     55 my $primary       = $config{primary}; |         | 
|     56 my $secondary     = $config{secondary}; |         | 
|     57 my $zone_conf_dir = $config{zone_conf_dir}; |         | 
|     58 my $master_dir    = $config{master_dir}; |         | 
|     59 my $customer      = shift @ARGV; |         | 
|     60 chomp( my $primary_ip   = `dig +short $primary` ); |         | 
|     61 chomp( my $secondary_ip = `dig +short $secondary` ); |         | 
|     62 chomp( my $this_host    = `hostname -f` ); |         | 
|     63 chomp( my $this_ip      = `hostname -i` ); |         | 
|     64 chomp( my $this_domain  = `hostname -d` ); |         | 
|     65 chomp( my $time         = `date +%Y%m%d00` ); |         | 
|     66 chomp( my $start        = `date -I` ); |         | 
|     67 my $hostmaster = "hostmaster.$this_domain"; |         | 
|     68  |         | 
|     69 unless ( -d $master_dir and -r $master_dir ) { |         | 
|     70     die "$master_dir: $!\n"; |         | 
|     71 } |         | 
|     72  |         | 
|     73 unless ( -d $zone_conf_dir and -r $zone_conf_dir ) { |         | 
|     74     die "$master_dir: $!\n"; |         | 
|     75 } |         | 
|     76  |         | 
|     77 # legt fuer jede domain in @ARGV ein verzeichnis in $master_dir an. |         | 
|     78 # schreibt aus den angegebenen templates die dateien $zonefile und $config |         | 
|     79 # in die entsprechenden verzeichnisse. |         | 
|     80 for (@ARGV) { |         | 
|     81  |         | 
|     82     chomp( my $domain = `idn --quiet "$_"` ); |         | 
|     83     my $zonefile   = "$master_dir/$domain/$domain"; |         | 
|     84     my $config     = "$zone_conf_dir/$domain"; |         | 
|     85     my $utf8domain = "$_"; |         | 
|     86  |         | 
|     87     unless ( -d "$master_dir/$domain" ) { |         | 
|     88         `mkdir $master_dir/$domain`; |         | 
|     89     } |         | 
|     90  |         | 
|     91     if ( -f $zonefile ) { |         | 
|     92         $zonefile =~ s#/.*/##; |         | 
|     93         print "$zonefile exists. Skipping $domain\n"; |         | 
|     94         next; |         | 
|     95     } |         | 
|     96     if ( -f $config ) { |         | 
|     97         $config =~ s#/.*/##; |         | 
|     98         print "$config exists. Skipping $domain\n"; |         | 
|     99         next; |         | 
|    100     } |         | 
|    101  |         | 
|    102     print "$domain ($_) for $customer \n"; |         | 
|    103  |         | 
|    104     my @tempzone = <TEMPZONE>; |         | 
|    105     for (@tempzone) { |         | 
|    106         s#<start>#$start#; |         | 
|    107         s#<domain>#$domain#; |         | 
|    108         s#<time>#$time#; |         | 
|    109         s#<primary>#$primary#; |         | 
|    110         s#<secondary>#$secondary#; |         | 
|    111         s#<hostmaster>#$hostmaster#; |         | 
|    112         s#<customer>#$customer#; |         | 
|    113         s#<utf8domain>#$utf8domain#; |         | 
|    114     } |         | 
|    115  |         | 
|    116     open( ZONEOUT, ">$zonefile" ); |         | 
|    117     print ZONEOUT @tempzone; |         | 
|    118     close(ZONEOUT); |         | 
|    119  |         | 
|    120     my @tempconf = <TEMPCONF>; |         | 
|    121     for (@tempconf) { |         | 
|    122         s#<domain>#$domain#; |         | 
|    123         s#<start>#$start#; |         | 
|    124         s#<customer>#$customer#; |         | 
|    125         s#<utf8domain>#$utf8domain#; |         | 
|    126         s#<file>#$master_dir/$domain/$domain#; |         | 
|    127         s#<primary_ip>#$primary_ip#; |         | 
|    128         s#<secondary_ip>#$secondary_ip#; |         | 
|    129     } |         | 
|    130  |         | 
|    131     open( CONFOUT, ">$config" ); |         | 
|    132     print CONFOUT @tempconf; |         | 
|    133     close(CONFOUT); |         | 
|    134 } |         |