mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #49277 from nextcloud/backport/48675/stable30
[stable30] DNS: do not query CNAME if A succeeded already
This commit is contained in:
commit
23117a0a04
2 changed files with 8 additions and 4 deletions
|
|
@ -57,17 +57,21 @@ class DnsPinMiddleware {
|
|||
|
||||
$soaDnsEntry = $this->soaRecord($target);
|
||||
$dnsNegativeTtl = $soaDnsEntry['minimum-ttl'] ?? null;
|
||||
$canHaveCnameRecord = true;
|
||||
|
||||
$dnsTypes = \defined('AF_INET6') || @inet_pton('::1')
|
||||
? [DNS_A, DNS_AAAA, DNS_CNAME]
|
||||
: [DNS_A, DNS_CNAME];
|
||||
foreach ($dnsTypes as $dnsType) {
|
||||
if ($canHaveCnameRecord === false && $dnsType === DNS_CNAME) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($this->negativeDnsCache->isNegativeCached($target, $dnsType)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$dnsResponses = $this->dnsGetRecord($target, $dnsType);
|
||||
$canHaveCnameRecord = true;
|
||||
if ($dnsResponses !== false && count($dnsResponses) > 0) {
|
||||
foreach ($dnsResponses as $dnsResponse) {
|
||||
if (isset($dnsResponse['ip'])) {
|
||||
|
|
@ -78,7 +82,6 @@ class DnsPinMiddleware {
|
|||
$canHaveCnameRecord = false;
|
||||
} elseif (isset($dnsResponse['target']) && $canHaveCnameRecord) {
|
||||
$targetIps = array_merge($targetIps, $this->dnsResolve($dnsResponse['target'], $recursionCount));
|
||||
$canHaveCnameRecord = true;
|
||||
}
|
||||
}
|
||||
} elseif ($dnsNegativeTtl !== null) {
|
||||
|
|
|
|||
|
|
@ -537,10 +537,11 @@ class DnsPinMiddlewareTest extends TestCase {
|
|||
['nextcloud' => ['allow_local_address' => false]]
|
||||
);
|
||||
|
||||
$this->assertCount(4, $dnsQueries);
|
||||
$this->assertCount(3, $dnsQueries);
|
||||
$this->assertContains('example.com' . DNS_SOA, $dnsQueries);
|
||||
$this->assertContains('subsubdomain.subdomain.example.com' . DNS_A, $dnsQueries);
|
||||
$this->assertContains('subsubdomain.subdomain.example.com' . DNS_AAAA, $dnsQueries);
|
||||
$this->assertContains('subsubdomain.subdomain.example.com' . DNS_CNAME, $dnsQueries);
|
||||
// CNAME should not be queried if A or AAAA succeeded already
|
||||
$this->assertNotContains('subsubdomain.subdomain.example.com' . DNS_CNAME, $dnsQueries);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue