60 lines
1.4 KiB
Bash
Executable File
60 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# pdns-tools
|
|
# https://git.stack-source.com/msb/pdns-tools
|
|
# Copyright (c) 2022 Matthew Saunders Brown <matthewsaundersbrown@gmail.com>
|
|
# 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 "Export full DNS zone in AXFR format."
|
|
echo ""
|
|
echo "usage: $thisfilename -z <zone> [-h]"
|
|
echo ""
|
|
echo " -h Print this help."
|
|
echo " -z <zone> 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
|