mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2026-08-13 12:33:30 +02:00
dns_gd: fix root zone detection for API-restricted accounts https://github.com/acmesh-official/acme.sh/issues/4487
This commit is contained in:
parent
b974bbd6d6
commit
ac5624536b
1 changed files with 32 additions and 8 deletions
|
|
@ -150,8 +150,8 @@ dns_gd_rm() {
|
|||
# _domain=domain.com
|
||||
_get_root() {
|
||||
domain=$1
|
||||
i=2
|
||||
p=1
|
||||
i=1
|
||||
p=0
|
||||
while true; do
|
||||
h=$(printf "%s" "$domain" | cut -d . -f "$i"-100)
|
||||
if [ -z "$h" ]; then
|
||||
|
|
@ -159,17 +159,41 @@ _get_root() {
|
|||
return 1
|
||||
fi
|
||||
|
||||
if ! _gd_rest GET "domains/$h"; then
|
||||
return 1
|
||||
# The record name is whatever precedes the candidate zone. Do not assume
|
||||
# _acme-challenge here: with DNS alias mode it can be any name, and the
|
||||
# record may even sit at the zone apex (name "@").
|
||||
if [ "$p" = "0" ]; then
|
||||
_probe_sub="@"
|
||||
else
|
||||
_probe_sub=$(printf "%s" "$domain" | cut -d . -f 1-"$p")
|
||||
fi
|
||||
|
||||
if _contains "$response" '"code":"NOT_FOUND"'; then
|
||||
_debug "$h not found"
|
||||
else
|
||||
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-"$p")
|
||||
# Probe with the records endpoint instead of "GET domains/$h": since
|
||||
# 2024-05 GoDaddy rejects the domain details call for accounts with
|
||||
# fewer than 10 domains, while record-level calls keep working.
|
||||
# https://github.com/acmesh-official/acme.sh/issues/4487
|
||||
if ! _gd_rest GET "domains/$h/records/TXT/$_probe_sub"; then
|
||||
return 1
|
||||
fi
|
||||
if _startswith "$response" '\['; then
|
||||
_sub_domain="$_probe_sub"
|
||||
_domain="$h"
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Some accounts get UNKNOWN_DOMAIN when reading records of a valid zone
|
||||
# even though writes succeed (see issue #6517); fall back to the domain
|
||||
# details call for them.
|
||||
if ! _gd_rest GET "domains/$h"; then
|
||||
return 1
|
||||
fi
|
||||
if _contains "$response" '"domainId"'; then
|
||||
_sub_domain="$_probe_sub"
|
||||
_domain="$h"
|
||||
return 0
|
||||
fi
|
||||
|
||||
_debug "$h not found"
|
||||
p="$i"
|
||||
i=$(_math "$i" + 1)
|
||||
done
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue