浏览代码

zone-add: Try 1 => 3 name servers

Miraty 1 年之前
父节点
当前提交
c40f52a21e
共有 1 个文件被更改,包括 11 次插入1 次删除
  1. 11 1
      pg-act/ns/zone-add.php

+ 11 - 1
pg-act/ns/zone-add.php

@@ -12,7 +12,17 @@ if ($parent_authoritatives === [])
 foreach ($parent_authoritatives as $parent_authoritative)
 	checkAbsoluteDomainFormat($parent_authoritative);
 
-$ns_records = array_column(kdig(name: $domain, type: 'NS', server: (CONF['ns']['local_only_check'] ? CONF['reg']['address'] : $parent_authoritatives[0]))['authorityRRs'], 'rdataNS');
+foreach ($parent_authoritatives as $i => $parent_authoritative) {
+	if ($i === 3)
+		output(403, sprintf(_('The %s first tried name servers failed to answer.'), $i));
+	try {
+		$results = kdig(name: $domain, type: 'NS', server: (CONF['ns']['local_only_check'] ? CONF['reg']['address'] : $parent_authoritative));
+	} catch (KdigException) {
+		continue;
+	}
+	break;
+}
+$ns_records = array_column($results['authorityRRs'] ?? [], 'rdataNS');
 if (preg_match('/^(?<salt>[0-9a-f]{8})-(?<hash>[0-9a-f]{32})\._domain-verification\.' . preg_quote(SERVER_NAME, '/') . '\.$/Dm', implode(LF, $ns_records), $matches) !== 1)
 	output(403, _('NS authentication record not found.'));