#!/bin/bash
|
#### Config ################################
|
|
DBHOST="localhost"
|
DBUSER="powerdns"
|
DBPASS="password"
|
DATABASE="powerdns"
|
|
DEBUG="no"
|
|
#### End of Config #########################
|
|
REQUIRED_COMMANDS="
|
mysql
|
host
|
grep
|
awk
|
tail
|
"
|
|
# print debug messages to STDERR
|
function debug {
|
if [ "${DEBUG}" == "yes" ] ; then
|
echo "DEBUG: $@" >&2
|
fi
|
}
|
|
for CMD in ${REQUIRED_COMMANDS} ; do
|
CMDNAME=`echo ${CMD} | awk '{print toupper($1) }' | sed -e s@"-"@""@g`
|
export $(eval "echo ${CMDNAME}")=`which ${CMD} 2>/dev/null`
|
if [ -z "${!CMDNAME}" ] ; then
|
debug "Command: ${CMD} not found!"
|
exit 1
|
else
|
debug "Found command $(echo $CMDNAME) in ${!CMDNAME}"
|
fi
|
done
|
|
MYSQLCMD="${MYSQL} -h ${DBHOST} -u ${DBUSER} -p${DBPASS} --skip-column-name --silent -e"
|
|
check() {
|
AUTH=`${HOST} -t SOA ${2} ${1} | ${TAIL} -n1 | ${GREP} "has no SOA record"`
|
if [ "${AUTH}" == "${2} has no SOA record" ]; then
|
debug "Server ${1} has no SOA for ${2} - removing zone..."
|
DOMAIN_ID=`${MYSQLCMD} "USE ${DATABASE}; SELECT id FROM domains WHERE name='${2}' AND type='SLAVE' AND master='${1}' LIMIT 1;"`
|
${MYSQLCMD} "USE ${DATABASE}; DELETE FROM records WHERE domain_id='${DOMAIN_ID}';"
|
${MYSQLCMD} "USE ${DATABASE}; DELETE FROM domains WHERE id='${DOMAIN_ID}';"
|
fi
|
}
|
|
MASTERS=(`${MYSQLCMD} "USE ${DATABASE}; SELECT DISTINCT ip FROM supermasters;"`)
|
for m in "${MASTERS[@]}"; do
|
NAMES=(`${MYSQLCMD} "USE ${DATABASE}; SELECT name FROM domains WHERE type = 'SLAVE' AND master = '${m}';"`)
|
for d in "${NAMES[@]}"; do
|
check ${m} ${d}
|
done
|
done
|