#!/bin/sh
# vim:syntax=awk:

prog=`basename $0`
if [ X$1 = "X" ]; then
    echo "Usage: $prog <zone-file>" 1>&2
    exit 1
fi

awk -vdate=`date +%Y%m%d00` 'BEGIN {
	in_soa = 0;
	bumped = 0;
    }
    $1 == "@" && $3 == "SOA" && $6 == "(" {soa = 1; print; next;}
    soa && !bumped && $1 ~ /^[[:digit:]]+$/ && $2 == ";" {
	serial = oserial = $1;
	spc = substr($0, 0, index($0, serial) - 1);
	end = substr($0, index($0, serial) + length(serial));
	if (serial < date) {serial = date;} else {++serial;}
	print spc serial end;
	bumped = 1;
	next;
    }
    {print;}
    END {
	if (!soa)
	    {print "Error: SOA record not found in input" > /dev/stderr;}
	else if (!bumped)
	    {print "Error serial not found in SOA record" > /dev/stderr;}
}' < $1 > /tmp/$prog.$$
[ $? -ne 0 ] && exit 1

diff $1 /tmp/$prog.$$ > /tmp/$prog-patch.$$
[ $? -eq 0 ] && exit 1
cat /tmp/$prog-patch.$$
echo ""
echo -n "Apply this change to $1 ([y]/n) ===> "
read ans
if [ X$ans = "X" -o X$ans = X"y" ]; then
    echo ""
    echo "Backing up to $1.bak"
    cp -p $1 $1.bak
    patch -s $1 < /tmp/$prog-patch.$$
fi
rm /tmp/$prog.$$
rm /tmp/$prog-patch.$$


