You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.7 KiB
46 lines
1.7 KiB
#!/bin/bash
|
|
|
|
APISERVER="http://localhost:8081"
|
|
|
|
INVALIDARG=0
|
|
while getopts "d:" opt; do
|
|
case "$opt" in
|
|
d) ZONES="$OPTARG."
|
|
;;
|
|
*) INVALIDARG=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
if [ $INVALIDARG == 1 ]; then
|
|
echo "EXITING: Invalid argument!"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
if [ -z "$ZONES" ]; then
|
|
ZONES=`curl -s -X GET -H "X-API-Key: $PDNSCONF_API_KEY" $APISERVER/api/v1/servers/localhost/zones | jq -c '.[] | .id' | sed -e 's/"//g'`
|
|
fi
|
|
|
|
while read -r d; do
|
|
IFS='. ' read -r -a dcs <<< "$d"
|
|
NODCS="${#dcs[@]}"
|
|
if [ $NODCS -gt 3 ]; then
|
|
# $d is not a top domain
|
|
TOPDOM="${dcs[-3]}.${dcs[-2]}.${dcs[-1]}."
|
|
# get current DNS for $d
|
|
CURRDSRAW=`curl -s -f -X GET --data '{"rrsets": [ { "name": "'"$TOPDOM"'." } ] }' -H "X-API-Key: $PDNSCONF_API_KEY" $APISERVER/api/v1/servers/localhost/zones/$TOPDOM`
|
|
if [ $? -ne 0 ]; then
|
|
echo "Domain $TOPDOM does not exist in this server. Skipping $d.."
|
|
continue
|
|
fi
|
|
CURRDS=`echo $CURRDSRAW | jq -c '[ .rrsets[] | select( .type == "DS" ) | select ( .name == "'$d'"
|
|
) ][0]["records"][0]["content"]'`
|
|
# get DS that should have been configured
|
|
CORRDS=`curl -s -X GET -H "X-API-Key: $PDNSCONF_API_KEY" $APISERVER/api/v1/servers/localhost/zones/$d/cryptokeys | jq -c '.[] | select( .keytype == "csk") ["ds"][0] '`
|
|
if [ "$CURRDS" != "$CORRDS" ]; then
|
|
echo -n "INFO: Fixing $d DS records..."
|
|
curl -s -X PATCH --data '{"rrsets": [ {"name": "'$d'", "type": "DS", "changetype": "REPLACE", "ttl": "86400", "records": [ {"content": '"$CORRDS"', "disabled": false, "name": "'$d'", "ttl": 86400, "type": "DS", "priority": 0 } ] } ] }' -H "X-API-Key: $PDNSCONF_API_KEY" $APISERVER/api/v1/servers/localhost/zones/$TOPDOM | jq . && echo " OK."
|
|
fi
|
|
fi
|
|
done <<< "$ZONES"
|
|
|