From 9333929d921749a835f41431a1ad11a4e907d259 Mon Sep 17 00:00:00 2001 From: Jonah Aragon Date: Sun, 24 Mar 2019 17:00:25 -0500 Subject: [PATCH] Add automatic domain checks This will automatically check whether or not a new zonefile is valid, and if it contains the appropriate domain records on every commit (and Pull Request!) --- .travis.yml | 9 ++++++++ test_zones.sh | 58 +++++++++++++++++++++++++++++++++++++++++++++++ verify_domains.sh | 17 ++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 .travis.yml create mode 100644 test_zones.sh create mode 100644 verify_domains.sh diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 00000000..e4926db1 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,9 @@ +dist: xenial +language: minimal +addons: + apt: + packages: + - bind9 +script: +- /bin/bash verify_domains.sh +- /bin/bash test_zones.sh diff --git a/test_zones.sh b/test_zones.sh new file mode 100644 index 00000000..ce1c25fc --- /dev/null +++ b/test_zones.sh @@ -0,0 +1,58 @@ +#!/bin/bash +#Update script for ".o" on BIND9/Ubuntu 18.04 + +#Variables +TLD='o' +NS='ns11.opennic.glue.' +EMAIL='jonah.opennic.org.' +CHECKZONE=/usr/sbin/named-checkzone +TMP_DEST='db.o-tmp' +WORK_DIR='' +FILE_NAME='db.o' +FILES=${WORK_DIR}zone/* + +# ADD NEW SOA! +{ echo "@ IN SOA $NS $EMAIL (" + echo " `date +%s` ; serial" + echo " 4H ; refresh (4 hours)" + echo " 1H ; retry (1 hour)" + echo " 1W ; expire (1 week)" + echo " 1H ; minimum (1 hour)" + echo " )" +} >> $WORK_DIR$FILE_NAME + +# ADD NAMESERVERS! +{ echo "; TLD information" + echo " IN NS ns11.opennic.glue." + echo " IN NS ns2.opennic.glue." + echo " IN NS ns6.opennic.glue." + echo " IN NS ns8.opennic.glue." + echo ";" + echo "; Additional zones" + echo ";" +} >> $WORK_DIR$FILE_NAME + + +for f in $FILES +do + cp $WORK_DIR$FILE_NAME $TMP_DEST + cat $f >> $TMP_DEST + + TEST=$($CHECKZONE $TLD "$TMP_DEST" | tail -n 1) + if [ "$TEST" != "OK" ]; then + echo "Failed to add ${f}.o to the main zone!" + exit 1 + else + echo "Processed ${f}.o Successfully" + echo "; `git log --oneline -- $f | tail -n 1`" >> $FILE_NAME + cat $f >> $FILE_NAME + fi + + VERIFY=$($CHECKZONE $TLD "$WORK_DIR$FILE_NAME" | tail -n 1) + if [ "$VERIFY" != "OK" ]; then + echo "Some unknown error occured: $WORK_DIR$FILE_NAME" + exit 1 + fi +done + +exit 0 diff --git a/verify_domains.sh b/verify_domains.sh new file mode 100644 index 00000000..8de03e2b --- /dev/null +++ b/verify_domains.sh @@ -0,0 +1,17 @@ +cd zone + +for f in * +do + while read domain; do + FIRST=`echo "$domain" | awk '{print $1;}'` + if [[ $FIRST == *$f ]]; then + echo $FIRST > /dev/null + else + echo $FIRST + echo "A line in ${f} does not match the domain name!" + exit 1 + fi + done <$f +done + +exit 0