diff --git a/sbin/pdns-zone-asc.sh b/sbin/pdns-zone-asc.sh new file mode 100755 index 0000000..3e0db52 --- /dev/null +++ b/sbin/pdns-zone-asc.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# +# pdns-tools +# https://git.stack-source.com/msb/pdns-tools +# Copyright (c) 2024 Matthew Saunders Brown +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +# load include file +source $(dirname $0)/pdns.sh + +help() +{ + echo "Associate zone in DNS with this server." + echo "" + echo "usage: $thisfilename -z [-x] [-h]" + echo "" + echo " -h Print this help." + echo " -z Zone (domain name) to associate." + echo " -x Execute (force) - don't prompt for confirmation." +} + +pdns:getoptions "$@" + +# check for zone +if [[ -z $zone ]]; then + echo "zone is required" + exit +fi + +# check if zone already assocated with this server +zone_associated=$(/usr/local/bin/vdns-zone-ext.sh -z $zone) +if [[ $zone_associated = "true" ]]; then + echo "Zone $zone already associated with this server." + exit +fi + +# make sure zone exists in DNS +zone_exists=$(/usr/local/sbin/pdns-zone-ext.sh -z $zone) +if [[ $zone_exists = "true" ]]; then + # check if zone is already associated with any (a different) server + SEARCH=($(/usr/local/sbin/pdns-search.sh -q hostname=*/$zone -c)) + # check for header row output, this indicates one or more results were found + if [[ "${SEARCH[0]}" = "content,name,object_type,type,zone,zone_id" ]]; then + if [[ -z $execute ]]; then + existing=$(echo ${SEARCH[1]}|cut -d , -f 1|cut -d = -f 2 |cut -d / -f 1) + echo Zone $zone is currently associated with server $existing + if pdns::yesno "Change $zone association to this server ($hostname)?"; then + # return newline + echo + else + echo + echo "Update canceled, zone association for $zone unchanged." + exit + fi + fi + fi + # get current SOA + soa=$(/usr/local/sbin/pdns-zone-exp.sh -z stack-source.com -c|grep ',SOA,'|cut -d , -f 5) + # get/set account + if [[ -z $account ]]; then + account=$hostname + fi + pdns-rr-rep.sh -z $zone -n $zone -t SOA -r "$soa" -w "hostname=$hostname/$zone" -a $account +else + echo "Zone $zone does not exist in DNS." + exit +fi