summaryrefslogtreecommitdiff
path: root/src/resolve
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2017-02-13 20:34:39 +0100
committerLennart Poettering <lennart@poettering.net>2017-02-13 20:34:39 +0100
commit4a46ed1bc69487a0f78ee35e32185ba146279312 (patch)
treeb38c993f5059232eb02725b67b9aa329ba738c3d /src/resolve
parent53f7443a4302ca7950777f6140d7d87052a202d9 (diff)
resolved: don't return ANY transactions when looking for transactions
This reverts a part of 53fda2bb933694c9bdb1bbf1f5583e39673b74b2: On classic DNS and LLMNR ANY requests may be replied to with any kind of RR, and the reply does not have to be comprehensive: these protocols simply define that if there's an RRset that can answer the question, then at least one should be sent as reply, but not necessarily all. This means it's not safe to "merge" transactions for arbitrary RR types into ANY requests, as the reply might not answer the specific question. As the merging is primarily an optimization, let's undo this for now. This logic may be readded later, in a way that only applies to mDNS. Also, there's an OOM problem with this chunk: dns_resource_key_new() might fail due to OOM and this is not handled. (This is easily removed though, by using DNS_RESOURCE_KEY_CONST()).
Diffstat (limited to 'src/resolve')
-rw-r--r--src/resolve/resolved-dns-scope.c11
1 files changed, 2 insertions, 9 deletions
diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c
index 750409eebf..7a26edbaf7 100644
--- a/src/resolve/resolved-dns-scope.c
+++ b/src/resolve/resolved-dns-scope.c
@@ -793,15 +793,8 @@ DnsTransaction *dns_scope_find_transaction(DnsScope *scope, DnsResourceKey *key,
/* Try to find an ongoing transaction that is a equal to the
* specified question */
t = hashmap_get(scope->transactions_by_key, key);
- if (!t) {
- DnsResourceKey *key_any;
-
- key_any = dns_resource_key_new(DNS_CLASS_IN, DNS_TYPE_ANY, dns_resource_key_name(key));
- t = hashmap_get(scope->transactions_by_key, key_any);
- key_any = dns_resource_key_unref(key_any);
- if (!t)
- return NULL;
- }
+ if (!t)
+ return NULL;
/* Refuse reusing transactions that completed based on cached
* data instead of a real packet, if that's requested. */