#!/bin/bash # # pdns-tools # https://git.stack-source.com/msb/pdns-tools # Copyright (c) 2022 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() { thisfilename=$(basename -- "$0") echo "$thisfilename" echo "Delete Resource Record set in zone." echo "" echo "usage: $thisfilename -z -n -t [-h]" echo "" echo " -h Print this help." echo " -z Zone (domain name) to modify." echo " -n Hostname for the record(s) to delete." echo " -t Type of record(s) to del (A, CNAME, TXT, etc.)." echo echo " Record Sets are matched against zone, name & type. This tool deletes all records" echo " that match the specified name & type for the given zone." echo " Can be a FQDN, or just the subdomain part (zone will be appended) or @ which will be replaced by the zone." } pdns:getoptions "$@" # check for zone, make sure it ends with a . if [[ -z $zone ]]; then echo "zone is required" exit elif [[ $zone != *\. ]]; then zone="$zone." fi # check for name, make sure it ends with a . if [[ -z $name ]]; then echo "name is required" exit elif [[ $name = "@" ]]; then name=$zone elif [[ $name != *\. ]]; then name="$name." fi # make sure name is equal to or part of zone if [[ $name != $zone ]] && [[ $name != *\.$zone ]]; then name="$name$zone" fi # check for type if [[ -z $type ]]; then echo "type is required" exit fi data="{\"rrsets\":[{\"name\":\"$name\",\"type\":\"$type\",\"changetype\":\"DELETE\",\"records\":[]}]}" # delete record(s) zone_status=$(/usr/bin/curl --silent --request PATCH --output /dev/null --write-out "%{http_code}" --header "X-API-Key: $api_key" --data "$data" "$api_base_url/zones/$zone") if [[ $zone_status = 204 ]]; then echo "Success. Record(s) for $zone deleted." elif [[ $zone_status = 404 ]]; then echo "Zone $zone does not exist, can't delete record." else echo "Error. http response deleting record(s) for $zone was: $zone_status" fi