]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: shortcut lookups names in the local zone
authorLennart Poettering <lennart@poettering.net>
Wed, 18 Nov 2015 14:33:37 +0000 (15:33 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 18 Nov 2015 16:07:11 +0000 (17:07 +0100)
Previously, we'd always generate a packet on the wire, even for names
that are within our local zone. Shortcut this, and always check the
local zone first. This should minimize generated traffic and improve
security.

src/resolve/resolved-dns-transaction.c

index 6545f6cd8a7ed39a37b9fd4d945e2257f1b608c9..37f47c47c064966274950674f85f503f6390527d 100644 (file)
@@ -626,6 +626,20 @@ int dns_transaction_go(DnsTransaction *t) {
         t->cached = dns_answer_unref(t->cached);
         t->cached_rcode = 0;
 
+        /* Check the zone, but obly if this transaction is not used
+         * for probing or verifying a zone item. */
+        if (set_isempty(t->zone_items)) {
+
+                r = dns_zone_lookup(&t->scope->zone, t->key, &t->cached, NULL, NULL);
+                if (r < 0)
+                        return r;
+                if (r > 0) {
+                        t->cached_rcode = DNS_RCODE_SUCCESS;
+                        dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
+                        return 0;
+                }
+        }
+
         /* Check the cache, but only if this transaction is not used
          * for probing or verifying a zone item. */
         if (set_isempty(t->zone_items)) {