Yunyi Zhang, Baojun Liu and Haixin Duan from Tsinghua University.
COPY_VAR_ptr(ipset_name_v6);
#endif
COPY_VAR_int(ede);
+ COPY_VAR_int(iter_scrub_promiscuous);
}
#endif /* ATOMIC_POINTER_LOCK_FREE && HAVE_LINK_ATOMIC_STORE */
# Limit on upstream queries for an incoming query and its recursion.
# max-global-quota: 200
+ # Should the scrubber remove promiscuous NS from positive answers,
+ # protects against poison attempts.
+ # iter-scrub-promiscuous: yes
+
# msec for waiting for an unknown server to reply. Increase if you
# are behind a slow satellite link, to eg. 1128.
# unknown-server-time-limit: 376
\fI\%tcp\-reuse\-timeout\fP,
\fI\%tcp\-auth\-query\-timeout\fP,
\fI\%delay\-close\fP\&.
+\fI\%iter\-scrub\-promiscuous\fP\&.
.sp
It does not work with
\fI\%interface\fP and
:ref:`tcp-reuse-timeout<unbound.conf.tcp-reuse-timeout>`,
:ref:`tcp-auth-query-timeout<unbound.conf.tcp-auth-query-timeout>`,
:ref:`delay-close<unbound.conf.delay-close>`.
+ :ref:`iter-scrub-promiscuous<unbound.conf.iter-scrub-promiscuous>`.
It does not work with
:ref:`interface<unbound.conf.interface>` and
.UNINDENT
.INDENT 0.0
.TP
+.B iter\-scrub\-promiscuous: \fI<yes or no>\fP
+Should the iterator scrubber remove promiscuous NS from positive answers.
+This protects against poisonous contents, that could affect names in the
+same zone as a spoofed packet.
+.sp
+Default: yes
+.UNINDENT
+.INDENT 0.0
+.TP
.B fast\-server\-permil: \fI<number>\fP
Specify how many times out of 1000 to pick from the set of fastest servers.
0 turns the feature off.
Default: 200
+@@UAHL@unbound.conf@iter-scrub-promiscuous@@: *<yes or no>*
+ Should the iterator scrubber remove promiscuous NS from positive answers.
+ This protects against poisonous contents, that could affect names in the
+ same zone as a spoofed packet.
+
+ Default: yes
+
+
@@UAHL@unbound.conf@fast-server-permil@@: *<number>*
Specify how many times out of 1000 to pick from the set of fastest servers.
0 turns the feature off.
"RRset:", pkt, msg, prev, &rrset);
continue;
}
+ /* If the NS set is a promiscuous NS set, scrub that
+ * to remove potential for poisonous contents that
+ * affects other names in the same zone. Remove
+ * promiscuous NS sets in positive answers, that
+ * thus have records in the answer section. Nodata
+ * and nxdomain promiscuous NS sets have been removed
+ * already. Since the NS rrset is scrubbed, its
+ * address records are also not marked to be allowed
+ * and are removed later. */
+ if(FLAGS_GET_RCODE(msg->flags) == LDNS_RCODE_NOERROR &&
+ msg->an_rrsets != 0 &&
+ env->cfg->iter_scrub_promiscuous) {
+ remove_rrset("normalize: removing promiscuous "
+ "RRset:", pkt, msg, prev, &rrset);
+ continue;
+ }
if(nsset == NULL) {
nsset = rrset;
} else {
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
qname-minimisation: "no"
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
disable-edns-do: yes
stub-zone:
dns64-ignore-aaaa: ip6ignore.example.com
dns64-ignore-aaaa: ip6only.example.com
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
module-config: "dns64 iterator"
dns64-prefix: 64:ff9b::0/96
minimal-responses: no
+ iter-scrub-promiscuous: no
prefetch: yes
stub-zone:
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
; config options go here.
server:
minimal-responses: no
+ iter-scrub-promiscuous: no
forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END
username: ""
do-not-query-localhost: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
forward-zone:
name: "."
; is fine for that, not removed by minimal-responses.
access-control: 127.0.0.1 allow_snoop
minimal-responses: yes
+ iter-scrub-promiscuous: no
forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END
qname-minimisation: "no"
# test that default value of harden-dnssec-stripped is still yes.
fake-sha1: yes
+ iter-scrub-promiscuous: no
trust-anchor-signaling: no
access-control: 127.0.0.1 allow_snoop
module-config: "ipsecmod validator iterator"
ipsecmod-enabled: no
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
ipsecmod-ignore-bogus: yes
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
ipsecmod-max-ttl: 200
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
ipsecmod-max-ttl: 200
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
ipsecmod-whitelist: white.example.com
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
tcp-upstream: no
#tls-upstream:no # same case but not testable in rpl.
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
discard-timeout: 86400
stub-zone:
target-fetch-policy: "0 0 0 0 0 "
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
qname-minimisation: "no"
module-config: "iterator"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "3 2 1 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
do-ip6: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
prefetch: "yes"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
--- /dev/null
+; config options
+server:
+ target-fetch-policy: "0 0 0 0 0"
+ qname-minimisation: no
+ iter-scrub-promiscuous: yes
+
+stub-zone:
+ name: "."
+ stub-addr: 1.2.3.0 # ns.root
+CONFIG_END
+
+SCENARIO_BEGIN Test iterator with scrub of promiscuous records
+; The test queries receive spoofed answers. The check queries see if
+; the record is returned by the original server or by a spoofed source.
+; The test domains are pollute1.mesa, pollute2.mesa and pollute3.mesa.
+; The spoofed contents are ns.attacker.mesa and its IPs 5.6.7.8 and 5.6.7.9.
+; The pollute1.mesa NS, ns.pollute2.mesa A, and test3.atkr.pollute3.mesa NS
+; with ns.pollute3.mesa A records are tested for cache placement.
+
+; ns.root
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.3.0
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+. IN NS
+SECTION ANSWER
+. IN NS NS.ROOT.
+SECTION ADDITIONAL
+NS.ROOT. IN A 1.2.3.0
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+mesa. IN NS
+SECTION AUTHORITY
+mesa. IN NS ns.mesa.
+SECTION ADDITIONAL
+ns.mesa. IN A 1.2.7.7
+ENTRY_END
+RANGE_END
+
+; ns.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.7.7
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+pollute1.mesa. IN NS
+SECTION AUTHORITY
+pollute1.mesa. IN NS ns.pollute1.mesa.
+SECTION ADDITIONAL
+ns.pollute1.mesa. IN A 1.2.4.1
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+pollute2.mesa. IN NS
+SECTION AUTHORITY
+pollute2.mesa. IN NS ns.pollute2.mesa.
+SECTION ADDITIONAL
+ns.pollute2.mesa. IN A 1.2.4.2
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+pollute3.mesa. IN NS
+SECTION AUTHORITY
+pollute3.mesa. IN NS ns.pollute3.mesa.
+SECTION ADDITIONAL
+ns.pollute3.mesa. IN A 1.2.4.3
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode subdomain
+ADJUST copy_id copy_query
+REPLY QR NOERROR
+SECTION QUESTION
+attacker.mesa. IN NS
+SECTION AUTHORITY
+attacker.mesa. IN NS ns.attacker.mesa.
+SECTION ADDITIONAL
+ns.attacker.mesa. IN A 5.6.7.8
+ENTRY_END
+RANGE_END
+
+; ns.pollute1.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.1
+
+; This is the spoofed answer that is returned.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test1.atkr.pollute1.mesa. IN A
+SECTION ANSWER
+test1.atkr.pollute1.mesa. 86400 IN A 1.2.3.4
+SECTION AUTHORITY
+pollute1.mesa. 86400 IN NS ns.attacker.mesa.
+ENTRY_END
+
+; correct answer for the check query.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute1.mesa. IN A
+SECTION ANSWER
+check.pollute1.mesa. IN A 1.8.9.1
+ENTRY_END
+RANGE_END
+
+; ns.pollute2.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.2
+
+; This is the spoofed answer that is returned.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test2.atkr.pollute2.mesa. IN A
+SECTION ANSWER
+test2.atkr.pollute2.mesa. 86400 IN A 1.2.3.4
+SECTION AUTHORITY
+pollute2.mesa. 86400 IN NS ns.pollute2.mesa.
+SECTION ADDITIONAL
+ns.pollute2.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+; correct answer for the check query.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute2.mesa. IN A
+SECTION ANSWER
+check.pollute2.mesa. IN A 1.8.9.2
+ENTRY_END
+RANGE_END
+
+; ns.pollute3.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 1.2.4.3
+
+; This is the spoofed answer that is returned.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+SECTION ANSWER
+test3.atkr.pollute3.mesa. 86400 IN A 1.2.3.4
+SECTION AUTHORITY
+test3.atkr.pollute3.mesa. 86400 IN NS ns.pollute3.mesa.
+SECTION ADDITIONAL
+ns.pollute3.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+; correct answer for the check query.
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+check.pollute3.mesa. IN A 1.8.9.3
+ENTRY_END
+RANGE_END
+
+; ns.attacker.mesa
+RANGE_BEGIN 0 400
+ ADDRESS 5.6.7.8
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN A
+SECTION ANSWER
+ns.attacker.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN AAAA
+SECTION AUTHORITY
+attacker.mesa. 3600 IN SOA ns.attacker.mesa. root.attacker.mesa. 4 7200 3600 604800 3600
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+ns.attacker.mesa. IN A
+SECTION ANSWER
+ns.attacker.mesa. 86400 IN A 5.6.7.8
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute1.mesa. IN A
+SECTION ANSWER
+check.pollute1.mesa. 86400 IN A 5.6.7.9
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute2.mesa. IN A
+SECTION ANSWER
+check.pollute2.mesa. 86400 IN A 5.6.7.9
+ENTRY_END
+
+ENTRY_BEGIN
+MATCH opcode qtype qname
+ADJUST copy_id
+REPLY QR AA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+check.pollute3.mesa. 86400 IN A 5.6.7.9
+ENTRY_END
+RANGE_END
+
+; Test query 1
+STEP 1 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test1.atkr.pollute1.mesa. IN A
+ENTRY_END
+
+STEP 10 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test1.atkr.pollute1.mesa. IN A
+SECTION ANSWER
+test1.atkr.pollute1.mesa. 86400 IN A 1.2.3.4
+ENTRY_END
+
+; Test query 2
+STEP 20 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test2.atkr.pollute2.mesa. IN A
+ENTRY_END
+
+STEP 30 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test2.atkr.pollute2.mesa. IN A
+SECTION ANSWER
+test2.atkr.pollute2.mesa. 86400 IN A 1.2.3.4
+ENTRY_END
+
+; Test query 3
+STEP 40 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+ENTRY_END
+
+STEP 50 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+test3.atkr.pollute3.mesa. IN A
+SECTION ANSWER
+test3.atkr.pollute3.mesa. 86400 IN A 1.2.3.4
+ENTRY_END
+
+; Check the cache contents, for query 1.
+STEP 60 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+check.pollute1.mesa. IN A
+ENTRY_END
+
+STEP 70 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+check.pollute1.mesa. IN A
+SECTION ANSWER
+; good answer
+check.pollute1.mesa. IN A 1.8.9.1
+; bad answer
+;check.pollute1.mesa. IN A 5.6.7.9
+ENTRY_END
+
+; Check the cache contents, for query 2.
+STEP 80 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+check.pollute2.mesa. IN A
+ENTRY_END
+
+STEP 90 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+check.pollute2.mesa. IN A
+SECTION ANSWER
+; good answer
+check.pollute2.mesa. IN A 1.8.9.2
+; bad answer
+;check.pollute2.mesa. IN A 5.6.7.9
+ENTRY_END
+
+; Check the cache contents, for query 3.
+STEP 100 QUERY
+ENTRY_BEGIN
+REPLY RD
+SECTION QUESTION
+check.pollute3.mesa. IN A
+ENTRY_END
+
+STEP 110 CHECK_ANSWER
+ENTRY_BEGIN
+MATCH all
+REPLY QR RD RA NOERROR
+SECTION QUESTION
+check.pollute3.mesa. IN A
+SECTION ANSWER
+; good answer
+check.pollute3.mesa. IN A 1.8.9.3
+; bad answer
+;check.pollute3.mesa. IN A 5.6.7.9
+ENTRY_END
+
+SCENARIO_END
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
ede: yes
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
do-ip6: no
harden-unverified-glue: yes
stub-zone:
; config options go here.
server:
minimal-responses: no
+ iter-scrub-promiscuous: no
forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END
; config options go here.
server:
minimal-responses: no
+ iter-scrub-promiscuous: no
forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END
; config options go here.
server:
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
forward-zone: name: "." forward-addr: 216.0.0.1
CONFIG_END
server:
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
# The value does not matter, we will not simulate delay.
# We do not want only serve-expired because fetches from that
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
access-control: 127.0.0.1/32 allow_snoop
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
ede: yes
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
ede: yes
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
ede: yes
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
serve-expired-reply-ttl: 123
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 1
serve-expired-reply-ttl: 123
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 1
serve-expired-reply-ttl: 123
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 1
serve-expired-reply-ttl: 123
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
serve-expired: yes
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-reply-ttl: 123
serve-expired-client-timeout: 0
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
serve-expired-ttl: 10
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-ttl: 10
serve-expired-client-timeout: 1
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
serve-expired-reply-ttl: 123
module-config: "validator iterator"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-original-ttl: yes
cache-max-ttl: 1000
cache-min-ttl: 20
access-control: 127.0.0.1 allow_snoop
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
prefetch: yes
access-control: 127.0.0.0/8 allow_snoop
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
; the size for the edns subnet cache
msg-cache-size: 1500
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
prefetch: yes
stub-zone:
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
serve-expired: yes
serve-expired-client-timeout: 0
serve-expired-ttl: 1
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
prefetch: yes
stub-zone:
verbosity: 3
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
access-control: 127.0.0.1 allow_snoop
qname-minimisation: no
minimal-responses: no
+ iter-scrub-promiscuous: no
prefetch: yes
stub-zone:
fake-dsa: yes
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-dsa: yes
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
server:
target-fetch-policy: "0 0 0 0 0"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
cache-max-ttl: 10
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
cache-min-ttl: 10
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
fake-sha1: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
fake-sha1: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
qname-minimisation: "no"
fake-sha1: yes
trust-anchor-signaling: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
stub-zone:
qname-minimisation: "no"
fake-sha1: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
rrset-roundrobin: no
forward-zone:
qname-minimisation: "no"
fake-sha1: yes
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
fake-sha1: yes
trust-anchor-signaling: no
minimal-responses: no
+ iter-scrub-promiscuous: no
stub-zone:
name: "."
target-fetch-policy: "0 0 0 0 0"
qname-minimisation: "no"
minimal-responses: no
+ iter-scrub-promiscuous: no
access-control: 10.10.10.0/24 allow
access-control-view: 10.10.10.10/32 "view1"
cfg->dns_error_reporting = 0;
cfg->iter_scrub_ns = 20;
cfg->iter_scrub_cname = 11;
+ cfg->iter_scrub_promiscuous = 1;
cfg->max_global_quota = 200;
return cfg;
error_exit:
else S_YNO("dns-error-reporting:", dns_error_reporting)
else S_NUMBER_OR_ZERO("iter-scrub-ns:", iter_scrub_ns)
else S_NUMBER_OR_ZERO("iter-scrub-cname:", iter_scrub_cname)
+ else S_YNO("iter-scrub-promiscuous:", iter_scrub_promiscuous)
else S_NUMBER_OR_ZERO("max-global-quota:", max_global_quota)
else S_YNO("serve-original-ttl:", serve_original_ttl)
else S_STR("val-nsec3-keysize-iterations:", val_nsec3_key_iterations)
else O_YNO(opt, "dns-error-reporting", dns_error_reporting)
else O_DEC(opt, "iter-scrub-ns", iter_scrub_ns)
else O_DEC(opt, "iter-scrub-cname", iter_scrub_cname)
+ else O_YNO(opt, "iter-scrub-promiscuous", iter_scrub_promiscuous)
else O_DEC(opt, "max-global-quota", max_global_quota)
else O_YNO(opt, "serve-original-ttl", serve_original_ttl)
else O_STR(opt, "val-nsec3-keysize-iterations",val_nsec3_key_iterations)
int iter_scrub_cname;
/** limit on upstream queries for an incoming query and subqueries. */
int max_global_quota;
+ /** Should the iterator scrub promiscuous NS rrsets, from positive
+ * answers. */
+ int iter_scrub_promiscuous;
};
/** from cfg username, after daemonize setup performed */
iter-scrub-ns{COLON} { YDVAR(1, VAR_ITER_SCRUB_NS) }
iter-scrub-cname{COLON} { YDVAR(1, VAR_ITER_SCRUB_CNAME) }
max-global-quota{COLON} { YDVAR(1, VAR_MAX_GLOBAL_QUOTA) }
+iter-scrub-promiscuous{COLON} { YDVAR(1, VAR_ITER_SCRUB_PROMISCUOUS) }
<INITIAL,val>{NEWLINE} { LEXOUT(("NL\n")); cfg_parser->line++; }
/* Quoted strings. Strip leading and ending quotes */
%token VAR_LOG_DESTADDR VAR_CACHEDB_CHECK_WHEN_SERVE_EXPIRED
%token VAR_COOKIE_SECRET_FILE VAR_ITER_SCRUB_NS VAR_ITER_SCRUB_CNAME
%token VAR_MAX_GLOBAL_QUOTA VAR_HARDEN_UNVERIFIED_GLUE VAR_LOG_TIME_ISO
+%token VAR_ITER_SCRUB_PROMISCUOUS
%%
toplevelvars: /* empty */ | toplevelvars toplevelvar ;
server_harden_unknown_additional | server_disable_edns_do |
server_log_destaddr | server_cookie_secret_file |
server_iter_scrub_ns | server_iter_scrub_cname | server_max_global_quota |
- server_harden_unverified_glue | server_log_time_iso
+ server_harden_unverified_glue | server_log_time_iso | server_iter_scrub_promiscuous
;
stub_clause: stubstart contents_stub
{
free($2);
}
;
+server_iter_scrub_promiscuous: VAR_ITER_SCRUB_PROMISCUOUS STRING_ARG
+ {
+ OUTYY(("P(server_iter_scrub_promiscuous:%s)\n", $2));
+ if(strcmp($2, "yes") != 0 && strcmp($2, "no") != 0)
+ yyerror("expected yes or no.");
+ else cfg_parser->cfg->iter_scrub_promiscuous =
+ (strcmp($2, "yes")==0);
+ free($2);
+ }
+ ;
ipsetstart: VAR_IPSET
{
OUTYY(("\nP(ipset:)\n"));