diff --git a/lib/reference-db.sh b/lib/reference-db.sh index a45026c..aa8ed13 100755 --- a/lib/reference-db.sh +++ b/lib/reference-db.sh @@ -402,27 +402,32 @@ build_domains_section() { # Also add aliases as separate entries if [ -n "$server_alias" ]; then # Convert space-separated aliases to newline-separated for safe iteration - echo "$server_alias" | tr ' ' '\n' | while IFS= read -r alias; do + # Use here-document instead of pipe to avoid subshell + while IFS= read -r alias; do [ -z "$alias" ] && continue [ -n "${seen_domains[$alias]:-}" ] && continue # Alias points to same document root and logs (inherit status from parent) echo "DOMAIN|$alias|$user|$doc_root|$log_path|$php_version|no|alias|$domain|$http_code|$https_code|alias_of_$status_summary" >> "$SYSREF_DB" seen_domains["$alias"]=1 - done + done <<< "$(echo "$server_alias" | tr ' ' '\n')" fi done else # Fallback for non-cPanel or if userdata not available - local primary_domain=$(get_user_domains "$user" | head -1) + local user_domains=$(get_user_domains "$user") + local primary_domain=$(echo "$user_domains" | head -1) - # Use while read to safely iterate over domains (handles spaces) - get_user_domains "$user" | while IFS= read -r domain; do + # Use here-document instead of pipe to avoid subshell (allows seen_domains updates to persist) + while IFS= read -r domain; do [ -z "$domain" ] && continue [ -n "${seen_domains[$domain]:-}" ] && continue local is_primary="no" - [ "$domain" = "$primary_domain" ] && is_primary="yes" + # Only mark as primary if primary_domain is not empty AND matches + if [ -n "$primary_domain" ] && [ "$domain" = "$primary_domain" ]; then + is_primary="yes" + fi # Find log path local log_path="${SYS_LOG_DIR}/${domain}" @@ -437,7 +442,7 @@ build_domains_section() { # Simple format for non-cPanel (with status codes) echo "DOMAIN|$domain|$user||$log_path||$is_primary|local||$http_code|$https_code|$status_summary" >> "$SYSREF_DB" seen_domains["$domain"]=1 - done + done <<< "$user_domains" fi done