split out local.pm
authorMatthias Förste foerste@schlittermann.de
Mon, 15 Aug 2011 14:48:04 +0200
changeset 24 6c4ec099c4a8
parent 23 1c208b4d0a79
child 25 2a7ec071b455
split out local.pm
ius/local.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ius/local.pm	Mon Aug 15 14:48:04 2011 +0200
@@ -0,0 +1,61 @@
+# Example
+# $Id$
+# $URL$
+
+# remove the next line if you know, what you're doing
+die "Sure?  You should adapt this file to your needs!";
+
+package local;
+
+# in:	zone name
+#       src ip
+# out:  0 failure ($@ contains message)
+#      !0 ok      ($@ may contain message)
+sub addZone($$) {
+    my ($zone, $src) = @_;
+
+    # Filename ist für das File selbst und auch für die Konfig
+    (my $file = $zone) =~ s/[\/&|]/_/g;
+
+    my $txt = <<__;
+// Autoadded %time by $0
+zone "$zone" IN {
+    type slave;
+    file "/etc/bind/s/$file";
+    masters { %masters; };
+    allow-query { any; };
+    allow-transfer { none; };
+};
+
+__
+
+    $txt =~ s/%time/scalar localtime/eg;
+    $txt =~ s/%masters/$src/g;
+
+    if (-f ($_ = "/etc/bind/zones.d/$file")) {
+	$@ = "$_ already exists";
+	return 0;
+    }
+
+    open(OUT, $_ = ">$_") or die "Can't open $_: $!\n";
+    print OUT $txt;
+
+    open(OUT, $_ = ">>/etc/bind/zones.all") or die "Can't open $_: $!\n";
+    print OUT $txt;
+
+    close OUT;
+
+    # return 0 == system("rndc reload");
+    local @ARGV = qw(/var/run/bind/run/named.pid);
+    chomp($_ = <>);
+    warn "Sending HUP to $_\n";
+    $@ = "Nameserver reloaded (HUP sent)";
+    kill "HUP", $_ and return 1;
+
+    $@ = "No process $_";
+    return 0;
+}
+	
+
+1;
+# vim:sts=4 sw=4 aw ai sm: