#!/bin/bash

NS="$1"
NSuser="bind"
NSdir="/etc/bind"
KEY="/etc/xsltzone/Knsdiff-ddns.+163+16361"

shift

echo "$0: syncing DNS data to '$NS'"
cd /var/cache/xsltzone/dns

rsync -a "named.conf.$NS" "${NSuser}@${NS}:${NSdir}/named.conf"
rsync -a "tsig.conf" "${NSuser}@${NS}:${NSdir}/keys/tsig.conf"
if [ $# -gt 0 ]; then
	{
		for i in "$@" ; do
			echo -ne "--include\0"
			echo -ne "$i\0"
		done
		echo -ne '--exclude\0'
		echo -ne '*\0'
		echo -ne '.\0'
		echo -ne "${NSuser}@${NS}:${NSdir}/zones/\0"
	} | xargs -x0 rsync -rtO --ignore-existing --delete --delete-excluded --filter 'protect *.jnl'
fi

echo -n "updating zones..."
TMPFILE="$(mktemp /tmp/nsupdate-log.XXXXXXXXXX)"
START=$(date +%s)
{
	echo "server ${NS}"
	for i in "$@" ; do
		nsdiff -0 -S date -@ "${NS}" "$i" || echo "Failed diff for $i  please run: cd /var/cache/xsltzone/dns ; named-compilezone -i local -k warn -n warn -o - -j ${i#db.} $i" >&2
	done
} | tee "$TMPFILE" | nsupdate -vk "$KEY"
echo " "$(( $(date +%s) - $START ))"s"

UPDATED="$(awk '$6 == "SOA" {print $3}' "$TMPFILE")"

if [ -n "$UPDATED" ]; then
	cat "$TMPFILE" | mail -s "NS-Update: $UPDATED" root
fi

rm -f "$TMPFILE"

exit 0
