Przeglądaj źródła

Spaceship: fix get_root

Meo597 6 miesięcy temu
rodzic
commit
e55a54f3d4
1 zmienionych plików z 21 dodań i 19 usunięć
  1. 21 19
      dnsapi/dns_spaceship.sh

+ 21 - 19
dnsapi/dns_spaceship.sh

@@ -132,47 +132,49 @@ _spaceship_init() {
 _get_root() {
   domain="$1"
 
-  # Check if user manually specified root domain
+  # Check manual override
   SPACESHIP_ROOT_DOMAIN="${SPACESHIP_ROOT_DOMAIN:-$(_readaccountconf_mutable SPACESHIP_ROOT_DOMAIN)}"
   if [ -n "$SPACESHIP_ROOT_DOMAIN" ]; then
     _domain="$SPACESHIP_ROOT_DOMAIN"
     _debug "Using manually specified or saved root domain: $_domain"
-    # Ensure it's saved (in case it was read from config but not saved previously)
     _saveaccountconf_mutable SPACESHIP_ROOT_DOMAIN "$SPACESHIP_ROOT_DOMAIN"
     return 0
   fi
 
-  # Split domain into parts and try from back to front
-  _debug "Detecting root zone for $domain from back to front"
-  _parts=$(echo "$domain" | tr '.' '\n' | wc -l)
-  if [ "$_parts" -lt 2 ]; then
-    _err "Invalid domain format for $domain"
-    return 1
-  fi
+  _debug "Detecting root zone for '$domain'"
 
-  # Start with the last 2 parts (e.g., example.com) and move forward
   i=2
-  max_attempts=$((_parts + 1))
-  while [ $i -le $max_attempts ]; do
-    _cutdomain=$(echo "$domain" | rev | cut -d . -f 1-$i | rev)
+  p=1
+  while true; do
+    _cutdomain=$(printf "%s" "$domain" | cut -d . -f "$i"-100)
+
+    _debug "Attempt i=$i: Checking if '$_cutdomain' is root zone (cut ret=$?)"
+
     if [ -z "$_cutdomain" ]; then
-      _debug "Reached end of domain parts."
+      _debug "Cut resulted in empty string, root zone not found."
       break
     fi
 
-    _debug "Checking if $_cutdomain is root zone"
+    # Call the API to check if this _cutdomain is a manageable zone
     if _spaceship_api_request "GET" "$SPACESHIP_API_BASE/dns/records/$_cutdomain?take=1&skip=0"; then
+      # API call succeeded (HTTP 200 OK for GET /dns/records)
       _domain="$_cutdomain"
-      _debug "Root zone found: $_domain"
-      # Save the detected root domain to configuration for future use
+      _debug "Root zone found: '$_domain'"
+
+      # Save the detected root domain
       _saveaccountconf_mutable SPACESHIP_ROOT_DOMAIN "$_domain"
-      _info "Root domain $_domain saved to configuration for future use."
+      _info "Root domain '$_domain' saved to configuration for future use."
+
       return 0
     fi
+
+    _debug "API check failed for '$_cutdomain'. Continuing search."
+
+    p=$i
     i=$((i + 1))
   done
 
-  _err "Could not detect root zone for $domain after $max_attempts attempts. Please set SPACESHIP_ROOT_DOMAIN manually."
+  _err "Could not detect root zone for '$domain'. Please set SPACESHIP_ROOT_DOMAIN manually."
   return 1
 }