#!/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() { echo "Export full DNS zone in AXFR format." echo "" echo "usage: $thisfilename -z [-h]" echo "" echo " -h Print this help." echo " -z Zone to export." echo " -c Output in csv format instead of columns." } pdns:getoptions "$@" # check for zone if [[ -z $zone ]]; then echo "zone is required" exit fi tmpfile=$(mktemp) echo "name,ttl,class,type,value" > $tmpfile.csv # export zone and check http status zone_status=$(/usr/bin/curl --silent --output "$tmpfile" --write-out "%{http_code}" -H "X-API-Key: $api_key" $api_base_url/zones/$zone/export) if [[ $zone_status = 200 ]]; then # convert tabs to commas sed -i 's/\t/,/g' $tmpfile # zone level records grep ^$zone. $tmpfile >> $tmpfile.csv # subdomain records grep -v ^$zone. $tmpfile >> $tmpfile.csv if [[ $csv ]]; then cat $tmpfile.csv else column -t -s , $tmpfile.csv fi elif [[ $zone_status = 404 ]]; then echo 404 Not Found, $zone does not exist else echo Unexecpted http response checking for existence of zone $zone: $zone_status fi rm $tmpfile.csv rm $tmpfile