]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix: do not query CNAME if A succeeded already
authorgeorglauterbach <44545919+georglauterbach@users.noreply.github.com>
Sun, 13 Oct 2024 08:21:03 +0000 (08:21 +0000)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Thu, 14 Nov 2024 10:46:13 +0000 (10:46 +0000)
Signed-off-by: georglauterbach <44545919+georglauterbach@users.noreply.github.com>
lib/private/Http/Client/DnsPinMiddleware.php
tests/lib/Http/Client/DnsPinMiddlewareTest.php

index 0d2f8d0bdc84c797eb9981b8880ae332ca567cb7..95ad5641c55e853371dfd582242ddd7601d680da 100644 (file)
@@ -74,17 +74,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'])) {
index 54071f37b1a8256534b769e03bee5389b64335aa..65763027408216c08b22d3abb4a724d57d93a24f 100644 (file)
@@ -554,10 +554,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);
        }
 }