New file |
| | |
| | | #!/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 |