Browse Source

Propagate _get errors from _cpanel_uapi_request to callers

_cpanel_uapi_request silently swallowed transport failures from _get,
causing misleading errors like "No matching root domain" when the real
problem was a network or auth failure. Return the _get exit status and
check it at every call site with context-specific error messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
pull/6878/head
Adam Bodnar 6 days ago
committed by neil
parent
commit
8726744775
  1. 31
      dnsapi/dns_cpanel_uapi.sh

31
dnsapi/dns_cpanel_uapi.sh

@ -50,7 +50,10 @@ dns_cpanel_uapi_add() {
_add_json="%7B%22dname%22%3A%22${_record_name}%22%2C%22ttl%22%3A14400%2C%22record_type%22%3A%22TXT%22%2C%22data%22%3A%5B%22${txtvalue}%22%5D%7D"
_debug "add_json (encoded): $_add_json"
_cpanel_uapi_request "execute/DNS/mass_edit_zone?zone=${_domain}&serial=${_serial}&add=${_add_json}"
if ! _cpanel_uapi_request "execute/DNS/mass_edit_zone?zone=${_domain}&serial=${_serial}&add=${_add_json}"; then
_err "Request to add TXT record failed for zone $_domain"
return 1
fi
_debug "_result: $_result"
if _contains "$_result" '"status":1'; then
@ -91,7 +94,10 @@ dns_cpanel_uapi_rm() {
_err "Failed to get zone serial for $_domain"
return 1
fi
_cpanel_uapi_request "execute/DNS/mass_edit_zone?zone=${_domain}&serial=${_serial}&remove=${_line_index}"
if ! _cpanel_uapi_request "execute/DNS/mass_edit_zone?zone=${_domain}&serial=${_serial}&remove=${_line_index}"; then
_err "Request to remove TXT record failed for zone $_domain"
return 1
fi
_debug "_result: $_result"
if _contains "$_result" '"status":1'; then
@ -130,7 +136,10 @@ _cpanel_uapi_checkcredentials() {
_cpanel_uapi_login() {
if ! _cpanel_uapi_checkcredentials; then return 1; fi
_cpanel_uapi_request "execute/DomainInfo/list_domains"
if ! _cpanel_uapi_request "execute/DomainInfo/list_domains"; then
_err "Request to cPanel API failed during login check"
return 1
fi
if _contains "$_result" '"status":1'; then
_debug "UAPI login check successful"
return 0
@ -143,10 +152,14 @@ _cpanel_uapi_login() {
_cpanel_uapi_request() {
export _H1="Authorization: cpanel $cPanel_Username:$cPanel_Apitoken"
_result=$(_get "$cPanel_Hostname/$1")
return $?
}
_cpanel_uapi_get_root() {
_cpanel_uapi_request "execute/DomainInfo/list_domains"
if ! _cpanel_uapi_request "execute/DomainInfo/list_domains"; then
_err "Request to cPanel API failed while listing domains"
return 1
fi
_debug "DomainInfo response length: ${#_result}"
# Extract main_domain
@ -185,7 +198,10 @@ _cpanel_uapi_get_root() {
_cpanel_uapi_get_serial() {
_zone="$1"
_cpanel_uapi_request "execute/DNS/parse_zone?zone=${_zone}"
if ! _cpanel_uapi_request "execute/DNS/parse_zone?zone=${_zone}"; then
_err "Request to parse zone failed for $_zone"
return 1
fi
# Split JSON records onto separate lines using a POSIX-portable sed literal newline
# (\\n in sed replacement is a GNU/BusyBox extension; a backslash-newline works everywhere)
@ -222,7 +238,10 @@ _cpanel_uapi_get_serial() {
_cpanel_uapi_findentry() {
_debug "Finding TXT entry for $fulldomain with value $txtvalue"
_cpanel_uapi_request "execute/DNS/parse_zone?zone=${_domain}"
if ! _cpanel_uapi_request "execute/DNS/parse_zone?zone=${_domain}"; then
_err "Request to parse zone failed for $_domain"
return 1
fi
_debug "parse_zone result length: ${#_result}"
# Base64-encode the txtvalue to match against data_b64 in the response

Loading…
Cancel
Save