2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-09-01 15:05:23 +00:00

Change default minimal-responses setting to no-auth-recursive (#46016)

This commit is contained in:
Mukund Sivaraman
2017-09-19 19:49:02 +05:30
parent e2ed24aa4d
commit 32bcafc316
8 changed files with 52 additions and 21 deletions

View File

@@ -1,3 +1,6 @@
4782. [func] Change default minimal-responses setting to
no-auth-recursive. [RT #46016]
4781. [bug] Fix use after free when closing an LMDB. [RT #46000] 4781. [bug] Fix use after free when closing an LMDB. [RT #46000]
4780. [bug] Fix out of bounds access in DHCID totext() method. 4780. [bug] Fix out of bounds access in DHCID totext() method.

View File

@@ -181,7 +181,7 @@ options {\n\
message-compression yes;\n\ message-compression yes;\n\
# min-roots <obsolete>;\n\ # min-roots <obsolete>;\n\
minimal-any false;\n\ minimal-any false;\n\
minimal-responses true;\n\ minimal-responses no-auth-recursive;\n\
notify-source *;\n\ notify-source *;\n\
notify-source-v6 *;\n\ notify-source-v6 *;\n\
nsec3-test-zone no;\n\ nsec3-test-zone no;\n\

View File

@@ -19,7 +19,8 @@ ns A 10.53.0.4
$TTL 5 $TTL 5
to-be-removed NS ns.to-be-removed to-be-removed NS ns.to-be-removed
ns.to-be-removed A 10.53.0.6 ns.to-be-removed A 10.53.0.6
fetch 10 TXT A short ttl fetch.tld. NS ns.fetch.tld.
ns.fetch.tld. A 10.53.0.6
no-edns-version.tld. NS ns.no-edns-version.tld. no-edns-version.tld. NS ns.no-edns-version.tld.
ns.no-edns-version.tld. A 10.53.0.6 ns.no-edns-version.tld. A 10.53.0.6
edns-version.tld. NS ns.edns-version.tld. edns-version.tld. NS ns.edns-version.tld.

View File

@@ -16,7 +16,8 @@ $TTL 300
) )
@ NS ns.tld. @ NS ns.tld.
ns A 10.53.0.4 ns A 10.53.0.4
fetch 10 TXT A short ttl fetch.tld. NS ns.fetch.tld.
ns.fetch.tld. A 10.53.0.6
fetchall 10 TXT A short ttl fetchall 10 TXT A short ttl
fetchall 10 A 1.2.3.4 fetchall 10 A 1.2.3.4
fetchall 10 AAAA ::1 fetchall 10 AAAA ::1

View File

@@ -0,0 +1,20 @@
; Copyright (C) 2011, 2016 Internet Systems Consortium, Inc. ("ISC")
;
; This Source Code Form is subject to the terms of the Mozilla Public
; License, v. 2.0. If a copy of the MPL was not distributed with this
; file, You can obtain one at http://mozilla.org/MPL/2.0/.
; $Id: moves.db,v 1.3 2011/03/13 23:47:36 tbox Exp $
$TTL 300
@ IN SOA marka.isc.org. ns.fetch.tld. (
2010 ; serial
600 ; refresh
600 ; retry
1200 ; expire
600 ; minimum
)
@ NS ns.fetch.tld.
ns.fetch.tld. A 10.53.0.6
@ 10 TXT A short ttl

View File

@@ -68,3 +68,8 @@ zone "delegation-only" {
type master; type master;
file "delegation-only.db"; file "delegation-only.db";
}; };
zone "fetch.tld" {
type master;
file "fetch.tld.db";
};

View File

@@ -6239,7 +6239,9 @@ options {
unless they are required, but it may still add unless they are required, but it may still add
records to the additional section. When set to records to the additional section. When set to
<userinput>no-auth-recursive</userinput>, this <userinput>no-auth-recursive</userinput>, this
is only done if the query is recursive. These is only done if the query is recursive. When the
query is not recursive, the effect is same as if
<userinput>no</userinput> was specified. These
settings are useful when answering stub clients, settings are useful when answering stub clients,
which usually ignore the authority section. which usually ignore the authority section.
<userinput>no-auth-recursive</userinput> is <userinput>no-auth-recursive</userinput> is
@@ -6247,7 +6249,8 @@ options {
both authoritative and recursive queries. both authoritative and recursive queries.
</para> </para>
<para> <para>
The default is <userinput>yes</userinput>. The default is
<userinput>no-auth-recursive</userinput>.
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
@@ -6269,11 +6272,6 @@ options {
at the cost of increased memory usage for the zone. If at the cost of increased memory usage for the zone. If
you don't want this, set it to <userinput>no</userinput>. you don't want this, set it to <userinput>no</userinput>.
</para> </para>
<para>
The glue cache is only used when
<userinput>minimal-responses</userinput> is also set
to <userinput>yes</userinput>.
</para>
</listitem> </listitem>
</varlistentry> </varlistentry>

View File

@@ -2063,10 +2063,12 @@ query_addadditional(void *arg, const dns_name_t *name, dns_rdatatype_t qtype) {
return (eresult); return (eresult);
} }
static inline void static void
query_addrdataset(ns_client_t *client, dns_name_t *fname, query_addrdataset(ns_client_t *client, dns_section_t section,
dns_rdataset_t *rdataset) dns_name_t *fname, dns_rdataset_t *rdataset)
{ {
UNUSED(section);
/* /*
* Add 'rdataset' and any pertinent additional data to * Add 'rdataset' and any pertinent additional data to
* 'fname', a name in the response message for 'client'. * 'fname', a name in the response message for 'client'.
@@ -2089,7 +2091,6 @@ query_addrdataset(ns_client_t *client, dns_name_t *fname,
* Try to process glue directly. * Try to process glue directly.
*/ */
if (client->view->use_glue_cache && if (client->view->use_glue_cache &&
(client->view->minimalresponses == dns_minimal_yes) &&
(rdataset->type == dns_rdatatype_ns) && (rdataset->type == dns_rdatatype_ns) &&
(client->query.gluedb != NULL) && (client->query.gluedb != NULL) &&
dns_db_iszone(client->query.gluedb)) dns_db_iszone(client->query.gluedb))
@@ -2191,7 +2192,7 @@ query_addrrset(ns_client_t *client, dns_name_t **namep,
* we do not need to check if the SIG rdataset is already in the * we do not need to check if the SIG rdataset is already in the
* response. * response.
*/ */
query_addrdataset(client, mname, rdataset); query_addrdataset(client, section, mname, rdataset);
*rdatasetp = NULL; *rdatasetp = NULL;
if (sigrdataset != NULL && dns_rdataset_isassociated(sigrdataset)) { if (sigrdataset != NULL && dns_rdataset_isassociated(sigrdataset)) {
/* /*
@@ -7051,6 +7052,7 @@ query_dns64(query_ctx_t *qctx) {
isc_netaddr_t netaddr; isc_netaddr_t netaddr;
dns_dns64_t *dns64; dns_dns64_t *dns64;
unsigned int flags = 0; unsigned int flags = 0;
const dns_section_t section = DNS_SECTION_ANSWER;
/*% /*%
* To the current response for 'qctx->client', add the answer RRset * To the current response for 'qctx->client', add the answer RRset
@@ -7074,7 +7076,7 @@ query_dns64(query_ctx_t *qctx) {
dns64_rdata = NULL; dns64_rdata = NULL;
dns64_rdataset = NULL; dns64_rdataset = NULL;
dns64_rdatalist = NULL; dns64_rdatalist = NULL;
result = dns_message_findname(client->message, DNS_SECTION_ANSWER, result = dns_message_findname(client->message, section,
name, dns_rdatatype_aaaa, name, dns_rdatatype_aaaa,
qctx->rdataset->covers, qctx->rdataset->covers,
&mname, &mrdataset); &mname, &mrdataset);
@@ -7094,7 +7096,7 @@ query_dns64(query_ctx_t *qctx) {
*/ */
if (qctx->dbuf != NULL) if (qctx->dbuf != NULL)
query_keepname(client, name, qctx->dbuf); query_keepname(client, name, qctx->dbuf);
dns_message_addname(client->message, name, DNS_SECTION_ANSWER); dns_message_addname(client->message, name, section);
qctx->fname = NULL; qctx->fname = NULL;
mname = name; mname = name;
} else { } else {
@@ -7187,7 +7189,7 @@ query_dns64(query_ctx_t *qctx) {
dns_rdataset_setownercase(dns64_rdataset, mname); dns_rdataset_setownercase(dns64_rdataset, mname);
client->query.attributes |= NS_QUERYATTR_NOADDITIONAL; client->query.attributes |= NS_QUERYATTR_NOADDITIONAL;
dns64_rdataset->trust = qctx->rdataset->trust; dns64_rdataset->trust = qctx->rdataset->trust;
query_addrdataset(client, mname, dns64_rdataset); query_addrdataset(client, section, mname, dns64_rdataset);
dns64_rdataset = NULL; dns64_rdataset = NULL;
dns64_rdatalist = NULL; dns64_rdatalist = NULL;
dns_message_takebuffer(client->message, &buffer); dns_message_takebuffer(client->message, &buffer);
@@ -7232,6 +7234,7 @@ query_filter64(query_ctx_t *qctx) {
isc_region_t r; isc_region_t r;
isc_result_t result; isc_result_t result;
unsigned int i; unsigned int i;
const dns_section_t section = DNS_SECTION_ANSWER;
CTRACE(ISC_LOG_DEBUG(3), "query_filter64"); CTRACE(ISC_LOG_DEBUG(3), "query_filter64");
@@ -7245,7 +7248,7 @@ query_filter64(query_ctx_t *qctx) {
myrdata = NULL; myrdata = NULL;
myrdataset = NULL; myrdataset = NULL;
myrdatalist = NULL; myrdatalist = NULL;
result = dns_message_findname(client->message, DNS_SECTION_ANSWER, result = dns_message_findname(client->message, section,
name, dns_rdatatype_aaaa, name, dns_rdatatype_aaaa,
qctx->rdataset->covers, qctx->rdataset->covers,
&mname, &myrdataset); &mname, &myrdataset);
@@ -7322,11 +7325,11 @@ query_filter64(query_ctx_t *qctx) {
if (qctx->dbuf != NULL) if (qctx->dbuf != NULL)
query_keepname(client, name, qctx->dbuf); query_keepname(client, name, qctx->dbuf);
dns_message_addname(client->message, name, dns_message_addname(client->message, name,
DNS_SECTION_ANSWER); section);
qctx->dbuf = NULL; qctx->dbuf = NULL;
} }
myrdataset->trust = qctx->rdataset->trust; myrdataset->trust = qctx->rdataset->trust;
query_addrdataset(client, mname, myrdataset); query_addrdataset(client, section, mname, myrdataset);
myrdataset = NULL; myrdataset = NULL;
myrdatalist = NULL; myrdatalist = NULL;
dns_message_takebuffer(client->message, &buffer); dns_message_takebuffer(client->message, &buffer);