--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bin/zone-mk Thu Jan 13 00:20:26 2011 +0100
@@ -0,0 +1,120 @@
+#!/usr/bin/perl
+
+use warnings;
+use strict;
+use FindBin;
+use DNStools::Config qw(get_config);
+
+my %config;
+
+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");
+
+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";
+}
+
+
+%config = get_config(@configs);
+
+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 = <TEMPZONE>;
+ for (@tempzone) {
+ s#<start>#$start#;
+ s#<domain>#$domain#;
+ s#<time>#$time#;
+ s#<primary>#$primary#;
+ s#<secondary>#$secondary#;
+ s#<hostmaster>#$hostmaster#;
+ s#<customer>#$customer#;
+ s#<utf8domain>#$utf8domain#;
+ }
+
+ open(ZONEOUT, ">$zonefile");
+ print ZONEOUT @tempzone;
+ close(ZONEOUT);
+
+ my @tempconf = <TEMPCONF>;
+ for (@tempconf) {
+ s#<domain>#$domain#;
+ s#<start>#$start#;
+ s#<customer>#$customer#;
+ s#<utf8domain>#$utf8domain#;
+ s#<file>#$master_dir/$domain/$domain#;
+ s#<primary_ip>#$primary_ip#;
+ s#<secondary_ip>#$secondary_ip#;
+ }
+
+ open(CONFOUT, ">$config");
+ print CONFOUT @tempconf;
+ close(CONFOUT);
+}