From eecd9b1017a63651d1dc782feaa224111cdee8b6 Mon Sep 17 00:00:00 2001 From: Eli Bosley Date: Tue, 15 Jul 2025 11:33:21 -0400 Subject: [PATCH] fix(my.servers): improve DNS resolution robustness for backup server (#1518) Add multiple fallback methods for DNS resolution when checking backup.unraid.net ## Summary by CodeRabbit * **Bug Fixes** * Improved reliability of DNS resolution checks for backup services, reducing false error reports. * Enhanced error messages to provide clearer guidance if DNS resolution fails, including advice to check DNS settings in network configuration. --- .../include/UpdateFlashBackup.php | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php index cd30c5650..32222e431 100644 --- a/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php +++ b/plugin/source/dynamix.unraid.net/usr/local/emhttp/plugins/dynamix.my.servers/include/UpdateFlashBackup.php @@ -594,9 +594,31 @@ set_git_config('user.email', 'gitbot@unraid.net'); set_git_config('user.name', 'gitbot'); // ensure dns can resolve backup.unraid.net -if (! checkdnsrr("backup.unraid.net","A") ) { +$dnsResolved = false; + +// Try multiple DNS resolution methods +if (function_exists('dns_get_record')) { + $dnsRecords = dns_get_record("backup.unraid.net", DNS_A); + $dnsResolved = !empty($dnsRecords); +} + +// Fallback to gethostbyname if dns_get_record fails +if (!$dnsResolved) { + $ip = gethostbyname("backup.unraid.net"); + $dnsResolved = ($ip !== "backup.unraid.net"); +} + +// Final fallback to system nslookup +if (!$dnsResolved) { + $output = []; + $return_var = 0; + exec('nslookup backup.unraid.net 2>/dev/null', $output, $return_var); + $dnsResolved = ($return_var === 0 && !empty($output)); +} + +if (!$dnsResolved) { $arrState['loading'] = ''; - $arrState['error'] = 'DNS is unable to resolve backup.unraid.net'; + $arrState['error'] = 'DNS resolution failed for backup.unraid.net - PHP DNS functions (checkdnsrr, dns_get_record, gethostbyname) and system nslookup all failed to resolve the hostname. This indicates a DNS configuration issue on your Unraid server. Check your DNS settings in Settings > Network Settings.'; response_complete(406, array('error' => $arrState['error'])); }