#!/bin/bash
#
# A small script to clean out the DNS records from a PowerDNS server
#  Needed commands: mysql, host, sed, echo, cat
#  By: Tim Bracquez <tim@fusa.be>
#

#### START SETTINGS ####

# MySQL settings
MYSQL_HOST=localhost
MYSQL_USER=pdnsuser
MYSQL_PASS=pdnspassword
MYSQL_DB=powerdns

# Just show (1) or delete records (0)? [0-1]
SHOWTIME=1

# Working directory [/the/dir/]
WORK_DIR=/var/run/pdns/

# Delete after xx checks [0-9999]
TRY_IT=5


#### DONE SETTINGS ####
mkdir -p $WORK_DIR

for DOMAIN in $(mysql --batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e "SELECT name FROM domains"); do

        DOMAIN=$(echo $DOMAIN | sed 's/ //g')

        if [ "$DOMAIN" != "name" -a "$DOMAIN" != "" ]; then

                SQL_MASTER=$(mysql --batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e "SELECT master FROM domains WHERE name='"$DOMAIN"'  AND type='SLAVE'")
                SQL_MASTER=$(echo $SQL_MASTER | sed 's/master //g')

                if [ "$SQL_MASTER" != "master" -a "$SQL_MASTER" != "" -a "$SQL_MASTER" != "NULL" ]; then

                        CHECK_DNS=$(host $DOMAIN $SQL_MASTER)
                        CHECK_DNS_GREP=$(echo $CHECK_DNS | grep "$DOMAIN has address")
                        CHECK_DNS_EXEPT=$(echo $DOMAIN | grep "in-addr.arpa")
		
			# DNS COMMAND = OK ; DNS RESULT = OK
                        if [ "$CHECK_DNS" != "" -a "$CHECK_DNS_GREP" != "" -o "$CHECK_DNS_EXEPT" != "" ]; then
				echo 0 > "$WORK_DIR$DOMAIN"

			# DNS COMMAND = OK ; DNS RESULT = NOK
                        elif [ "$CHECK_DNS" != "" ]; then

                                if [ -e "$WORK_DIR$DOMAIN" ]; then

                                        NUM=$(cat "$WORK_DIR$DOMAIN")

					# MAX ATTEMPTS? 
					if [ $NUM -ge $TRY_IT ]; then

						if [ "$SHOWTIME" = "0" ]; then
							rm -rf "$WORK_DIR$DOMAIN"
							SQL_DID=$(mysql --batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e "SELECT id FROM domains WHERE name='"$DOMAIN"'")
							SQL_DID=$(echo $SQL_DID | sed 's/id //g')
							
							if [ "$SQL_DID" != "" ]; then
								mysql --batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e "DELETE FROM records WHERE domain_id='"$SQL_DID"'"
								mysql --batch -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS -D $MYSQL_DB -e "DELETE FROM domains WHERE id='"$SQL_DID"'"
							fi
						else
							echo "TO DELETE: $DOMAIN"	
						fi

					else
	                                        NUM=$((NUM+1))
        	                                echo $NUM > "$WORK_DIR$DOMAIN"
					fi

				else
					echo 1 > "$WORK_DIR$DOMAIN"
                                fi

                        fi

                fi

        fi

	# DNS requests overflow!? 
	#sleep 5

done

