From 45587f5fb67f1f13b12a36f74cf33c2fa271633b Mon Sep 17 00:00:00 2001 From: root Liz Date: Thu, 5 Jan 2017 17:00:45 +0100 Subject: [PATCH] Adding check-zones --- check-zones | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100755 check-zones diff --git a/check-zones b/check-zones new file mode 100755 index 0000000..cbc7f50 --- /dev/null +++ b/check-zones @@ -0,0 +1,123 @@ +#!/bin/bash + +set -e +set -u + +# console colors: +RED="" +YELLOW="" +GREEN="" +BLUE="" +NORMAL="" + +HAS_TTY='y' + +detect_color() { + + local safe_term="${TERM//[^[:alnum:]]/?}" + local match_lhs="" + local use_color="false" + [[ -f ~/.dir_colors ]] && match_lhs="${match_lhs}$(<~/.dir_colors)" + [[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(/dev/null \ + && match_lhs=$(dircolors --print-database) + [[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color="true" + + # console colors: + if [ "${use_color}" = "true" ] ; then + RED="\033[38;5;196m" + YELLOW="\033[38;5;226m" + GREEN="\033[38;5;46m" + BLUE="\033[38;5;27m" + NORMAL="\033[39m" + else + RED="" + YELLOW="" + GREEN="" + BLUE="" + NORMAL="" + fi + + local my_tty=$(tty) + if [[ "${my_tty}" =~ 'not a tty' ]] ; then + my_tty='-' + fi + + if [[ "${my_tty}" = '-' || "${safe_term}" = "dump" ]] ; then + HAS_TTY='n' + fi + +} +detect_color + + +BIND_DIR="/etc/bind" +ZONES_DIR="${BIND_DIR}/zones" +NAMED_PI_CONF="${BIND_DIR}/named-pri.conf" +if [[ "$#" -gt "0" ]] ; then + NAMED_PI_CONF="$1" +fi + +if [[ ! -f "${NAMED_PI_CONF}" ]] ; then + echo "File '${NAMED_PI_CONF}' not found." >&2 + exit 4 +fi + +if [[ ! -d "${ZONES_DIR}" ]] ; then + echo "Directory '${ZONES_DIR}' not found." >&2 + exit 5 +fi + +declare -a ZONES=() +declare -A ZONE_FILES=() + +echo +echo "====================================================================" +echo -e "Checking Bind (named) ${GREEN}configuration${NORMAL} ..." +named-checkconf + +for zone in $(cat "${NAMED_PI_CONF}" | \ + egrep '^[[:space:]]*zone[[:space:]]' | \ + sed -e 's/^[^"]*"//' -e 's/".*//' ) ; do + + zone_type=$( cat "${NAMED_PI_CONF}" | \ + egrep -w -A 5 "${zone}" | \ + egrep -w 'type' | \ + head -n 1 | \ + sed -e 's/.*type[[:space:]]*//' -e 's/[[:space:]]*;.*//' | \ + tr '[[:upper:]]' '[[:lower:]]' ) + if [[ "${zone_type}" != 'master' ]] ; then + continue + fi + + zone_file=$( cat "${NAMED_PI_CONF}" | \ + egrep -w -A 5 "${zone}" | \ + egrep -w 'file' | \ + head -n 1 | \ + sed -e 's/^[^"]*"//' -e 's/".*//' ) + + #echo "Found zone '${zone}', type '${zone_type}', zone file: '${zone_file}'." + ZONES+=("${zone}") + ZONE_FILES["${zone}"]="${zone_file}" +done + + +if [[ "${#ZONES[@]}" -lt "1" ]] ; then + echo "No zones to check found." + exit 0 +fi + +echo +echo "====================================================================" +echo "Checking primary zones:" +for zone in "${ZONES[@]}" ; do + zone_file=${ZONE_FILES["${zone}"]} + echo + echo "-------------------------" + echo -e "Checking '${GREEN}${zone}${NORMAL}' -> '${GREEN}${zone_file}${NORMAL}'" + named-checkzone "${zone}" "${zone_file}" || true +done + + +# vim: ts=4 et softtabstop=4 shiftwidth=4 -- 2.39.5