aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap/make-reverse4-files.pl
diff options
context:
space:
mode:
Diffstat (limited to 'bootstrap/make-reverse4-files.pl')
-rwxr-xr-xbootstrap/make-reverse4-files.pl93
1 files changed, 56 insertions, 37 deletions
diff --git a/bootstrap/make-reverse4-files.pl b/bootstrap/make-reverse4-files.pl
index be4ad99..3d8d993 100755
--- a/bootstrap/make-reverse4-files.pl
+++ b/bootstrap/make-reverse4-files.pl
@@ -26,23 +26,14 @@ $base .= "/" if not $base =~ m/\/$/ and not $base eq "";
my $bind_base = $base . "bind/";
my $dhcpd_base = $base . "dhcp/";
-my $dhcp_revzones_file = $dhcpd_base . "revzones.conf";
+my $dhcp_revzones_file = $dhcpd_base . "v4-revzones.conf";
my $bind_pri_revzones_file = $bind_base . "named.reverse4.conf";
my $bind_sec_revzones_file = $bind_base . "named.slave-reverse4.conf";
-my $pri_v4 = $nms::config::pri_v4;
-my $pri_v6 = $nms::config::pri_v6;
-
-my $sec_v4 = $nms::config::sec_v4;
-my $sec_v6 = $nms::config::sec_v6;
-
my $base_ipv4 = Net::IP->new($nms::config::base_ipv4net) or die ("base_v4 fail");
my ($p_oct, $s_oct, $t_oct) = ($nms::config::base_ipv4net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
-
-$pri_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/;
-my ( $pp_oct, $ps_oct, $pt_oct, $pf_oct) = ( $1, $2, $3, $4 );
-$sec_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/;
-my ( $sp_oct, $ss_oct, $st_oct, $sf_oct) = ( $1, $2, $3, $4 );
+my ($pp_oct, $ps_oct, $pt_oct, $pf_oct) = ($nms::config::pri_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/);
+my ($sp_oct, $ss_oct, $st_oct, $sf_oct) = ($nms::config::sec_v4 =~ m/^(\d+)\.(\d+)\.(\d+)\.(\d+).*/);
if ( $role eq "master" )
{
@@ -58,34 +49,40 @@ else
die ("WTF, role is neither 'master' or 'slave'");
}
-while (1)
-{
-
+sub add_zone{
my $block = $p_oct . "." . $s_oct . "." . $t_oct . ".0/24";
- my $current = new Net::IP( $block ) or die ("new Net::IP failed for " . $block);
-
my $rev_zone = $t_oct . "." . $s_oct . "." . $p_oct . ".in-addr.arpa";
-
+
if ( $role eq "master" )
{
# Generating IPv4-related reverse-stuff for
# both bind9 and dhcp on master.
- print DFILE "zone " . $rev_zone . " { primary " . $nms::config::ddns_to . "; key DHCP_UPDATER; }\n";
+ print DFILE <<"EOF";
+zone "$rev_zone" {
+ primary $nms::config::ddns_to;
+ key DHCP_UPDATER;
+}
+EOF
+
+ print NFILE <<"EOF";
+// $block
+zone "$rev_zone" {
+ type master;
+ allow-update { key DHCP_UPDATER; };
+ notify yes;
+ allow-transfer { ns-xfr; ext-xfr; };
+ file "reverse/$rev_zone.zone";
+};
- print NFILE "zone \"". $rev_zone ."\" {\n";
- print NFILE " type master;\n";
- print NFILE " allow-update { key DHCP_UPDATER; };\n";
- print NFILE " notify yes;\n";
- print NFILE " allow-transfer { ns-xfr; ext-xfr; };\n";
- print NFILE " file \"reverse/". $rev_zone .".zone\";\n";
- print NFILE "};\n\n";
+EOF
my $zfilename = $bind_base . "reverse/" . $rev_zone . ".zone";
open ZFILE, ">", $zfilename;
- print ZFILE "; " . $zfilename . "\n";
print ZFILE <<"EOF";
+; $zfilename
+; $block
; Base reverse zones are updated from dhcpd -- DO NOT TOUCH!
\$TTL 3600
@ IN SOA $nms::config::pri_hostname.$nms::config::tgname.gathering.org. abuse.gathering.org. (
@@ -100,6 +97,8 @@ while (1)
\$ORIGIN $rev_zone.
EOF
+
+ # add reverse if DNS-servers belong to zone
if ( ($pt_oct == $t_oct) && ($ps_oct == $s_oct) )
{
print ZFILE $pf_oct . " IN PTR $nms::config::pri_hostname.$nms::config::tgname.gathering.org.\n";
@@ -111,24 +110,44 @@ EOF
}
else
{
- # AKA "if not master", as in "is slave".
- # A lot less work: update the named.slave-reverse4.conf file..
- print SFILE "zone \"". $rev_zone ."\" {\n";
- print SFILE " type slave;\n";
- print SFILE " notify no;\n";
- print SFILE " file \"slave/". $rev_zone .".cache\";\n";
- print SFILE " masters { bootstrap; };\n";
- print SFILE " allow-transfer { ns-xfr; ext-xfr; };\n";
- print SFILE "};\n\n";
+ # if not master, aka slave
+ print SFILE <<"EOF";
+// $block
+zone "$rev_zone" {
+ type slave;
+ notify no;
+ file "slave/$rev_zone.cache";
+ masters { master_ns; };
+ allow-transfer { ns-xfr; ext-xfr; };
+};
+
+EOF
}
+}
+# for each /24 in the primary v4-net
+while (1){
+ my $current = Net::IP->new($block) or die ("Net::IP failed for " . $block);
+
+ add_zone();
+
if ( $current->last_int() == $base_ipv4->last_int() )
{
- print STDERR "Reached last IP network. Finished\n";
+ print STDERR "Reached last IP network. Finished.\n";
last;
}
$t_oct++;
}
+
+# for each specially defined /24
+foreach my $special_net (@nms::config::extra_nets){
+ # a.b.c.d/24
+ $base_ipv4 = Net::IP->new($special_net) or die ("base_v4 fail");
+ ($p_oct, $s_oct, $t_oct) = ($special_net =~ m/^(\d+)\.(\d+)\.(\d+)\..*/);
+
+ add_zone();
+}
+
# Close all files, even those that have never been opened ;)
close DFILE;
close NFILE;