From bbc4ad958491b91fd1c7bf49c82ab92b18ad2155 Mon Sep 17 00:00:00 2001
From: Carsten Schoene <ispconfig-dev@j0ke.net>
Date: Sat, 28 Dec 2013 07:59:29 -0500
Subject: [PATCH] pdns slave, zone cleanup script
---
helper_scripts/pdns-slave-zone-cleanup.sh | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 57 insertions(+), 0 deletions(-)
diff --git a/helper_scripts/pdns-slave-zone-cleanup.sh b/helper_scripts/pdns-slave-zone-cleanup.sh
new file mode 100755
index 0000000..0e64a50
--- /dev/null
+++ b/helper_scripts/pdns-slave-zone-cleanup.sh
@@ -0,0 +1,57 @@
+#!/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
--
Gitblit v1.9.1