#!/usr/bin/perl -w
#
# make-data
# jms1 2003-05-27
#
# builds a "data" file from one or more input files
# automatically injects a consistent serial number in all "Z" lines
# converts "." lines to "Z" lines with consistent serial numbers, along
# with "&" and "+" lines as appropriate.
#
# 2008-05-09 jms1 - making "Z" code more intelligent- detects missing fields
# at beginning of line, fills in any trailing time-related fields with djb's
# default values (to avoid ambiguity in the generated "data" lines.)
# thanks to Bruce McAlister for reporting a bug (even if it wasn't the bug
# he thought it was...)
# also cleaned up logic for "." lines while i was in there.
#
###############################################################################
#
# Copyright (C) 2003,2005,2008 John Simpson.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 2 or version 3 of the
# license, at your option.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
#
###############################################################################
require 5.003 ;
use strict ;
# djb's defaults for SOA records
my $ref = 16384 ; # refresh time (16384)
my $ret = 2048 ; # retry time (2048)
my $exp = 1048576 ; # expire time (1048576)
my $min = 2560 ; # minimum time (2560)
my $rcrypto = < )
{
next unless ( $line =~ /[^\s]/ ) ;
next if ( $line =~ /^#/ ) ;
if ( $line =~ /^Z/ )
{
chomp $line ;
my @w = split ( /\:/ , $line ) ;
die "ERROR: \"Z\" line missing \"fqdn\": $line\n$rcrypto"
unless ( $w[0] ) ;
die "ERROR: \"Z\" line missing \"mname\": $line\n$rcrypto"
unless ( $w[1] ) ;
die "ERROR: \"Z\" line missing \"rname\": $line\n$rcrypto"
unless ( $w[2] ) ;
$w[3] = $t ;
$w[4] ||= $ref ;
$w[5] ||= $ret ;
$w[6] ||= $exp ;
$w[7] ||= $min ;
$line = join ( ":" , @w ) . "\n" ;
}
if ( $line =~ s/^\.// )
{
chomp $line ;
my @w = split ( /\:/ , $line ) ;
push ( @w , "" , "" , "" , "" , "" ) ;
die "ERROR: \".\" line missing \"fqdn\": $line$rcrypto"
unless ( $w[0] ) ;
my $nsname = $w[2]
? ( ( $w[2] =~ /\./ ) ? $w[2] : "$w[2].ns.$w[0]" )
: "ns.$w[0]" ;
my $rname = "hostmaster.$w[0]" ;
makeline ( "Z$w[0]" , $nsname , $rname , $t ,
$ref , $ret , $exp , $min ,
$w[3] , $w[4] , $w[5] ) ;
makeline ( "&$w[0]" , $w[1] , $nsname ,
$w[3] , $w[4] , $w[5] ) ;
if ( $w[1] )
{
makeline ( "+$nsname" , $w[1] ,
$w[3] , $w[4] , $w[5] ) ;
}
next ;
}
print $line ;
}