-#!/bin/sh
+#!/bin/bash
+# NSC -- Zone file generator
+# (c) 1997--2019 Martin Mares <mj@ucw.cz>
+
set -e
. bin/shell-env
+
+if [ $# -lt 2 ] ; then
+ echo >&2 "Usage: $0 <domain> <source files>"
+ exit 1
+fi
Z=$1
shift
-mkdir -p $HASHDIR
+
CURRENT_HASH=$($M4 -DHASHING m4/nsc.m4 "$@" | md5sum | cut -d " " -f1)
-PREV_HASH=$(if [ -s $HASHDIR/$Z ] ; then cat $HASHDIR/$Z ; fi)
+if [ -f keys/$Z.hash ] ; then
+ CURRENT_HASH=$CURRENT_HASH:$(cat keys/$Z.hash)
+ if [ -f keys/resign-stamp ] ; then
+ CURRENT_HASH=$CURRENT_HASH:$(stat -c '%Y' keys/resign-stamp)
+ fi
+fi
+
+PREV_HASH=$(if [ -s hash/$Z ] ; then cat hash/$Z ; fi)
if [ "X$CURRENT_HASH" = "X$PREV_HASH" ] ; then
echo "-- $Z: No changes"
- touch $ZONEDIR/$Z $HASHDIR/$Z
+ touch zone/$Z hash/$Z
else
- $M4 -DVERS=$VERSDIR/$Z m4/nsc.m4 "$@" >$ZONEDIR/$Z.new
- mv $ZONEDIR/$Z.new $ZONEDIR/$Z
- echo "** $Z: New version $(sed -e "s/^;;; VERSION: //; t; d" $ZONEDIR/$Z)"
- echo $CURRENT_HASH >$HASHDIR/$Z
+ $M4 -DVERS=ver/$Z m4/nsc.m4 "$@" >zone/$Z.new
+ NEWVER="$(sed -e "s/^;;; VERSION: //; t; d" zone/$Z.new)"
+ if [ -f keys/$Z.hash ] ; then
+ if ! dnssec-signzone -a -d dss -g -K keys/$Z $SIGNZONE_OPTIONS -f zone/$Z.signed -o $Z -S -3 - zone/$Z.new &>zone/$Z.tmp ; then
+ cat zone/$Z.tmp
+ echo >&2 "FATAL: Signing failed"
+ exit 1
+ fi
+ rm -f zone/$Z.tmp
+ mv zone/$Z.signed zone/$Z
+ SIGNED=" (signed)"
+ else
+ mv zone/$Z.new zone/$Z
+ SIGNED=
+ fi
+ echo "** $Z: New version $NEWVER$SIGNED"
+ echo $CURRENT_HASH >hash/$Z
fi