diff options
Diffstat (limited to 'services/cache/dns.c')
| -rw-r--r-- | services/cache/dns.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/services/cache/dns.c b/services/cache/dns.c index e14e636dbfd0..84db7a77884c 100644 --- a/services/cache/dns.c +++ b/services/cache/dns.c @@ -795,6 +795,12 @@ dns_cache_lookup(struct module_env* env, dname_remove_label(&k.qname, &k.qname_len); h = query_info_hash(&k, flags); e = slabhash_lookup(env->msg_cache, h, &k, 0); + if(!e && k.qtype != LDNS_RR_TYPE_NS && + env->cfg->qname_minimisation) { + k.qtype = LDNS_RR_TYPE_NS; + h = query_info_hash(&k, flags); + e = slabhash_lookup(env->msg_cache, h, &k, 0); + } if(e) { struct reply_info* data = (struct reply_info*)e->data; struct dns_msg* msg; @@ -810,6 +816,7 @@ dns_cache_lookup(struct module_env* env, } lock_rw_unlock(&e->lock); } + k.qtype = qtype; } /* fill common RR types for ANY response to avoid requery */ |
