93 lines
2.5 KiB
Makefile
93 lines
2.5 KiB
Makefile
|
|
CHANGED = $(shell git diff --name-only --relative -- '*.zone' )
|
|
|
|
export GIT_AUTHOR_NAME = "Bind Makefile"
|
|
#export GIT_AUTHOR_EMAIL = "$(shell whoami)@$(shell hostname -f)"
|
|
#export GIT_COMMITTER_NAME = $(GIT_AUTHOR_NAME)
|
|
#export GIT_COMMITTER_EMAIL = $(GIT_AUTHOR_EMAIL)
|
|
|
|
all: rollover
|
|
install: rollover
|
|
|
|
rollover: autoserial diff check reload eof
|
|
|
|
|
|
diff:
|
|
@echo "Diff Zones... "
|
|
@git diff -U0 -- $(CHANGED) \
|
|
| grep -a -v -E '^(diff |index |---|@@)' \
|
|
| sed -e 's/^[+]* .\/\([^ ]*\).*/=> \1/'
|
|
|
|
autoserial:
|
|
@for file in $(CHANGED); do \
|
|
perl -p -i -e 'if ($$p =~ /[\t\s]+IN[\t\s]+SOA[\t\s]+/) { $$stamp = sprintf("%4.4d%02.2d%02.2d", (localtime)[5]+1900, (localtime)[4]+1, (localtime)[3]); $$count = (/$$stamp([0-9]{2})/)? $$1 + 1: 1; s/[0-9]+/sprintf("%s%02.2d", $$stamp, $$count)/e; } $$p = $$_;' $$file; \
|
|
done
|
|
|
|
check:
|
|
@echo "Checking Configs... "
|
|
@if ! named-checkconf /etc/bind/named.conf; then \
|
|
echo "FIX THE ERROR AND TRY AGAIN"; \
|
|
exit 1 ; \
|
|
fi
|
|
|
|
@echo "Checking Zones... "
|
|
@named-checkconf -j -p /etc/bind/named.conf \
|
|
| perl -e 'my $$zone = ""; while (<>) { if (/^\s+zone\s+\"(.*)\"/) { $$zone = $$1; } elsif (($$zone ne "") && /^\s+file\s+\"(.*?)\"/) { print "$$zone $$1\n"; $$zone = ""; } }' \
|
|
| sort \
|
|
| uniq \
|
|
| while read zone file; do \
|
|
echo "FOO: zone: $$zone file: $$file"; \
|
|
if [ -z "$$file" -o "$$zone" = "key" ] ; then \
|
|
continue ; \
|
|
fi ; \
|
|
if echo -n "$$zone" | grep -q -E '(sc-eur.com|db.root|named.dump|named.stats)'; then \
|
|
continue; \
|
|
fi; \
|
|
if ! named-checkzone -q -i "full" $$zone $$file; then \
|
|
named-checkzone -i "full" $$zone $$file; \
|
|
echo "FIX THE ERROR AND TRY AGAIN"; \
|
|
exit 1 ; \
|
|
fi; \
|
|
done
|
|
|
|
#@echo "Checking CNAMEs and PTRs... "
|
|
#@grep -l -E '.*(PTR|CNAME).*[^.]*[.][^.]*[^.]$$' *.* \
|
|
#| grep -v '\.sh$$' \
|
|
#| while read file; do \
|
|
# echo "$$file: DO NOT FORGET THE LAST DOT"; \
|
|
# grep -E '.*(PTR|CNAME).*[^.]*[.][^.]*[^.]$$' $$file; \
|
|
# exit 1 ; \
|
|
#done
|
|
|
|
reload:
|
|
@while [ "$$answer" = "" ]; do \
|
|
echo -n "Do you want to reload all zones ? [yes] "; \
|
|
read answer; \
|
|
case $$answer in \
|
|
[Yy]|[Yy][Ee][Ss]) \
|
|
answer="yes"; \
|
|
break; \
|
|
;; \
|
|
[Nn]|[Nn][Oo]) \
|
|
answer="no"; \
|
|
break; \
|
|
;; \
|
|
"") \
|
|
answer="yes"; \
|
|
break; \
|
|
;; \
|
|
*) \
|
|
answer=""; \
|
|
;; \
|
|
esac; \
|
|
done; \
|
|
if [ "$$answer" = "yes" ]; then \
|
|
etckeeper commit "Changed DNS Zones: $(CHANGED)" ; \
|
|
rndc reload; \
|
|
else \
|
|
echo "Server reload aborted"; \
|
|
exit 1 ; \
|
|
fi
|
|
|
|
eof:
|
|
@echo "DONE -- That's all folks!"
|