mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 23:00:56 -05:00
Fixup for root prime requests sent when not needed.
git-svn-id: file:///svn/unbound/trunk@1736 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
894ba681f0
commit
dcea0777bf
5 changed files with 215 additions and 0 deletions
|
|
@ -1,3 +1,8 @@
|
||||||
|
22 July 2009: Wouter
|
||||||
|
- Fix bug found by Michael Tokarev where unbound would try to
|
||||||
|
prime the root servers even though forwarders are configured for
|
||||||
|
the root.
|
||||||
|
|
||||||
21 July 2009: Wouter
|
21 July 2009: Wouter
|
||||||
- Fix server selection, so that it waits for open target queries when
|
- Fix server selection, so that it waits for open target queries when
|
||||||
faced with lameness.
|
faced with lameness.
|
||||||
|
|
|
||||||
|
|
@ -345,6 +345,13 @@ forwards_lookup(struct iter_forwards* fwd, uint8_t* qname, uint16_t qclass)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct delegpt*
|
||||||
|
forwards_lookup_root(struct iter_forwards* fwd, uint16_t qclass)
|
||||||
|
{
|
||||||
|
uint8_t root = 0;
|
||||||
|
return forwards_lookup(fwd, &root, qclass);
|
||||||
|
}
|
||||||
|
|
||||||
size_t
|
size_t
|
||||||
forwards_get_mem(struct iter_forwards* fwd)
|
forwards_get_mem(struct iter_forwards* fwd)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,15 @@ int forwards_apply_cfg(struct iter_forwards* fwd, struct config_file* cfg);
|
||||||
struct delegpt* forwards_lookup(struct iter_forwards* fwd,
|
struct delegpt* forwards_lookup(struct iter_forwards* fwd,
|
||||||
uint8_t* qname, uint16_t qclass);
|
uint8_t* qname, uint16_t qclass);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Same as forwards_lookup, but for the root only
|
||||||
|
* @param fwd: forward storage.
|
||||||
|
* @param qclass: The qclass of the query.
|
||||||
|
* @return: A delegation point if root forward exists, otherwise null.
|
||||||
|
*/
|
||||||
|
struct delegpt* forwards_lookup_root(struct iter_forwards* fwd,
|
||||||
|
uint16_t qclass);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get memory in use by forward storage
|
* Get memory in use by forward storage
|
||||||
* @param fwd: forward storage.
|
* @param fwd: forward storage.
|
||||||
|
|
|
||||||
|
|
@ -951,6 +951,25 @@ processInitRequest(struct module_qstate* qstate, struct iter_qstate* iq,
|
||||||
/* If the cache has returned nothing, then we have a
|
/* If the cache has returned nothing, then we have a
|
||||||
* root priming situation. */
|
* root priming situation. */
|
||||||
if(iq->dp == NULL) {
|
if(iq->dp == NULL) {
|
||||||
|
if(forwards_lookup_root(qstate->env->fwds,
|
||||||
|
iq->qchase.qclass)) {
|
||||||
|
/* forward zone root, no root prime needed */
|
||||||
|
/* fill in some dp - safety belt */
|
||||||
|
iq->dp = hints_lookup_root(ie->hints,
|
||||||
|
iq->qchase.qclass);
|
||||||
|
if(!iq->dp) {
|
||||||
|
log_err("internal error: no hints dp");
|
||||||
|
return error_response(qstate, id,
|
||||||
|
LDNS_RCODE_SERVFAIL);
|
||||||
|
}
|
||||||
|
iq->dp = delegpt_copy(iq->dp, qstate->region);
|
||||||
|
if(!iq->dp) {
|
||||||
|
log_err("out of memory in safety belt");
|
||||||
|
return error_response(qstate, id,
|
||||||
|
LDNS_RCODE_SERVFAIL);
|
||||||
|
}
|
||||||
|
return next_state(iq, INIT_REQUEST_2_STATE);
|
||||||
|
}
|
||||||
/* Note that the result of this will set a new
|
/* Note that the result of this will set a new
|
||||||
* DelegationPoint based on the result of priming. */
|
* DelegationPoint based on the result of priming. */
|
||||||
if(!prime_root(qstate, iq, ie, id, iq->qchase.qclass))
|
if(!prime_root(qstate, iq, ie, id, iq->qchase.qclass))
|
||||||
|
|
|
||||||
175
testdata/iter_fwdstubroot.rpl
vendored
Normal file
175
testdata/iter_fwdstubroot.rpl
vendored
Normal file
|
|
@ -0,0 +1,175 @@
|
||||||
|
; config options
|
||||||
|
server:
|
||||||
|
target-fetch-policy: "0 0 0 0 0"
|
||||||
|
|
||||||
|
stub-zone:
|
||||||
|
name: "."
|
||||||
|
stub-addr: 193.0.14.129 # K.ROOT-SERVERS.NET.
|
||||||
|
forward-zone:
|
||||||
|
name: "."
|
||||||
|
forward-addr: 10.0.0.1
|
||||||
|
stub-zone:
|
||||||
|
name: "sub.example.com"
|
||||||
|
stub-addr: 10.0.0.2
|
||||||
|
CONFIG_END
|
||||||
|
|
||||||
|
SCENARIO_BEGIN Test iterative resolve with a stub under a forward root zone
|
||||||
|
|
||||||
|
; K.ROOT-SERVERS.NET.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 193.0.14.129
|
||||||
|
|
||||||
|
; No answers from the actual root, blocked.
|
||||||
|
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; a.gtld-servers.net.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 192.5.6.30
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
com. IN NS
|
||||||
|
SECTION ANSWER
|
||||||
|
com. IN NS a.gtld-servers.net.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
a.gtld-servers.net. IN A 192.5.6.30
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
www.example.com. IN A
|
||||||
|
SECTION AUTHORITY
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; ns.example.com.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 1.2.3.4
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN NS
|
||||||
|
SECTION ANSWER
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
www.example.com. IN A
|
||||||
|
SECTION ANSWER
|
||||||
|
www.example.com. IN A 10.20.30.40
|
||||||
|
SECTION AUTHORITY
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; forwarder for example.com.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 10.0.0.1
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN NS
|
||||||
|
SECTION ANSWER
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
www.example.com. IN A
|
||||||
|
SECTION ANSWER
|
||||||
|
www.example.com. IN A 10.0.0.4
|
||||||
|
SECTION AUTHORITY
|
||||||
|
example.com. IN NS ns.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.example.com. IN A 1.2.3.4
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
; fail all other queries
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode
|
||||||
|
ADJUST copy_id copy_query
|
||||||
|
REPLY QR SERVFAIL
|
||||||
|
SECTION QUESTION
|
||||||
|
example.com. IN A
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; stub for sub.example.com.
|
||||||
|
RANGE_BEGIN 0 100
|
||||||
|
ADDRESS 10.0.0.2
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
sub.example.com. IN NS
|
||||||
|
SECTION ANSWER
|
||||||
|
sub.example.com. IN NS ns.sub.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.sub.example.com. IN A 1.2.3.44
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH opcode qtype qname
|
||||||
|
ADJUST copy_id
|
||||||
|
REPLY QR NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
www.sub.example.com. IN A
|
||||||
|
SECTION ANSWER
|
||||||
|
www.sub.example.com. IN A 10.0.0.5
|
||||||
|
SECTION AUTHORITY
|
||||||
|
sub.example.com. IN NS ns.sub.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.sub.example.com. IN A 1.2.3.44
|
||||||
|
ENTRY_END
|
||||||
|
RANGE_END
|
||||||
|
|
||||||
|
; try to resolve from stub zone
|
||||||
|
STEP 20 QUERY
|
||||||
|
ENTRY_BEGIN
|
||||||
|
REPLY RD
|
||||||
|
SECTION QUESTION
|
||||||
|
www.sub.example.com. IN A
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
STEP 30 CHECK_ANSWER
|
||||||
|
ENTRY_BEGIN
|
||||||
|
MATCH all
|
||||||
|
REPLY QR RD RA NOERROR
|
||||||
|
SECTION QUESTION
|
||||||
|
www.sub.example.com. IN A
|
||||||
|
SECTION ANSWER
|
||||||
|
www.sub.example.com. IN A 10.0.0.5
|
||||||
|
SECTION AUTHORITY
|
||||||
|
sub.example.com. IN NS ns.sub.example.com.
|
||||||
|
SECTION ADDITIONAL
|
||||||
|
ns.sub.example.com. IN A 1.2.3.44
|
||||||
|
ENTRY_END
|
||||||
|
|
||||||
|
SCENARIO_END
|
||||||
Loading…
Reference in a new issue