diff --git a/dnsapi/dns_aws.sh b/dnsapi/dns_aws.sh
index 376936f5..1fcdb149 100755
--- a/dnsapi/dns_aws.sh
+++ b/dnsapi/dns_aws.sh
@@ -155,29 +155,18 @@ _get_root() {
i=1
p=1
- if aws_rest GET "2013-04-01/hostedzone"; then
- while true; do
- h=$(printf "%s" "$domain" | cut -d . -f $i-100)
- _debug2 "Checking domain: $h"
- if [ -z "$h" ]; then
- if _contains "$response" "true" && _contains "$response" ""; then
- _debug "IsTruncated"
- _nextMarker="$(echo "$response" | _egrep_o ".*" | cut -d '>' -f 2 | cut -d '<' -f 1)"
- _debug "NextMarker" "$_nextMarker"
- if aws_rest GET "2013-04-01/hostedzone" "marker=$_nextMarker"; then
- _debug "Truncated request OK"
- i=2
- p=1
- continue
- else
- _err "Truncated request error."
- fi
- fi
- #not valid
- _err "Invalid domain"
- return 1
- fi
+ # iterate over names (a.b.c.d -> b.c.d -> c.d -> d)
+ while true; do
+ h=$(printf "%s" "$domain" | cut -d . -f $i-100)
+ _debug "Checking domain: $h"
+ if [ -z "$h" ]; then
+ _error "invalid domain"
+ return 1
+ fi
+ # iterate over paginated result for list_hosted_zones
+ aws_rest GET "2013-04-01/hostedzone"
+ while true; do
if _contains "$response" "$h."; then
hostedzone="$(echo "$response" | sed 's//#&/g' | tr '#' '\n' | _egrep_o "[^<]*<.Id>$h.<.Name>.*false<.PrivateZone>.*<.HostedZone>")"
_debug hostedzone "$hostedzone"
@@ -192,10 +181,19 @@ _get_root() {
return 1
fi
fi
- p=$i
- i=$(_math "$i" + 1)
+ if _contains "$response" "true" && _contains "$response" ""; then
+ _debug "IsTruncated"
+ _nextMarker="$(echo "$response" | _egrep_o ".*" | cut -d '>' -f 2 | cut -d '<' -f 1)"
+ _debug "NextMarker" "$_nextMarker"
+ else
+ break
+ fi
+ _debug "Checking domain: $h - Next Page "
+ aws_rest GET "2013-04-01/hostedzone" "marker=$_nextMarker"
done
- fi
+ p=$i
+ i=$(_math "$i" + 1)
+ done
return 1
}