From: Lennart Poettering Date: Mon, 13 Feb 2017 19:34:39 +0000 (+0100) Subject: resolved: don't return ANY transactions when looking for transactions X-Git-Tag: v233~98^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a46ed1bc69487a0f78ee35e32185ba146279312;p=thirdparty%2Fsystemd.git 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()). --- diff --git a/src/resolve/resolved-dns-scope.c b/src/resolve/resolved-dns-scope.c index 750409eebf8..7a26edbaf72 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. */