From: Wouter Wijngaards Date: Mon, 17 Sep 2007 14:03:35 +0000 (+0000) Subject: namerror nsec3 proof works. X-Git-Tag: release-0.5~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6510d8f20ad929c4de6e02c23e6dc3a18cd36155;p=thirdparty%2Funbound.git namerror nsec3 proof works. git-svn-id: file:///svn/unbound/trunk@616 be551aaa-1e26-0410-a405-d3ace91eadb9 --- diff --git a/doc/Changelog b/doc/Changelog index 25cc91b8f..1f9ebf78c 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 17 September 2007: Wouter - NSEC3 hash cache unit test. + - validator nsec3 nameerror test. 14 September 2007: Wouter - nsec3 nodata proof, nods proof, wildcard proof. diff --git a/testcode/fake_event.c b/testcode/fake_event.c index 977553370..2a7913e40 100644 --- a/testcode/fake_event.c +++ b/testcode/fake_event.c @@ -179,6 +179,7 @@ pending_find_match(struct replay_runtime* runtime, struct entry** entry, p->start_step, p->end_step, (*entry)->lineno); if(p->addrlen != 0) log_addr("matched ip", &p->addr, p->addrlen); + log_pkt("matched pkt: ", (*entry)->reply_list->reply); return 1; } p = p->next_range; diff --git a/testcode/ldns-testpkts.c b/testcode/ldns-testpkts.c index 5bdc85b65..b01795344 100644 --- a/testcode/ldns-testpkts.c +++ b/testcode/ldns-testpkts.c @@ -184,6 +184,8 @@ static void replyline(const char* line, ldns_pkt *reply) ldns_pkt_set_ra(reply, true); } else if(str_keyword(&parse, "AD")) { ldns_pkt_set_ad(reply, true); + } else if(str_keyword(&parse, "DO")) { + ldns_pkt_set_edns_do(reply, true); } else { error("could not parse REPLY: '%s'", parse); } @@ -200,6 +202,8 @@ static void adjustline(const char* line, struct entry* e, return; if(str_keyword(&parse, "copy_id")) { e->copy_id = true; + } else if(str_keyword(&parse, "copy_query")) { + e->copy_query = true; } else if(str_keyword(&parse, "sleep=")) { e->sleeptime = (unsigned int) strtol(parse, (char**)&parse, 10); while(isspace(*parse)) @@ -230,6 +234,7 @@ static struct entry* new_entry() e->match_transport = transport_any; e->reply_list = NULL; e->copy_id = false; + e->copy_query = false; e->sleeptime = 0; e->next = NULL; return e; @@ -692,6 +697,12 @@ adjust_packet(struct entry* match, ldns_pkt* answer_pkt, ldns_pkt* query_pkt) /* copy & adjust packet */ if(match->copy_id) ldns_pkt_set_id(answer_pkt, ldns_pkt_id(query_pkt)); + if(match->copy_query) { + ldns_rr_list* list = ldns_pkt_get_section_clone(query_pkt, + LDNS_SECTION_QUESTION); + ldns_rr_list_deep_free(ldns_pkt_question(answer_pkt)); + ldns_pkt_set_question(answer_pkt, list); + } if(match->sleeptime > 0) { verbose(3, "sleeping for %d seconds\n", match->sleeptime); sleep(match->sleeptime); diff --git a/testcode/ldns-testpkts.h b/testcode/ldns-testpkts.h index 558cc7373..df9ee5237 100644 --- a/testcode/ldns-testpkts.h +++ b/testcode/ldns-testpkts.h @@ -54,11 +54,13 @@ (opcode) QUERY IQUERY STATUS NOTIFY UPDATE (rcode) NOERROR FORMERR SERVFAIL NXDOMAIN NOTIMPL YXDOMAIN YXRRSET NXRRSET NOTAUTH NOTZONE - (flags) QR AA TC RD CD RA AD + (flags) QR AA TC RD CD RA AD DO REPLY ... ; any additional actions to do. ; 'copy_id' copies the ID from the query to the answer. ADJUST copy_id + ; 'copy_query' copies the query name, type and class to the answer. + ADJUST copy_query ; 'sleep=10' sleeps for 10 seconds before giving the answer (TCP is open) ADJUST [sleep=] ; sleep before giving any reply ADJUST [packet_sleep=] ; sleep before this packet in sequence @@ -174,6 +176,8 @@ struct entry { /** how to adjust the reply packet */ /** copy over the ID from the query into the answer */ bool copy_id; + /** copy the query nametypeclass from query into the answer */ + bool copy_query; /** in seconds */ unsigned int sleeptime; diff --git a/testcode/pktview.c b/testcode/pktview.c index 0b5412f0e..0b66cc912 100644 --- a/testcode/pktview.c +++ b/testcode/pktview.c @@ -111,8 +111,13 @@ void analyze_rdata(ldns_buffer*pkt, const ldns_rr_descriptor* desc, } rdf++; } - if(rdlen) + if(rdlen) { + size_t i; printf(" remain[%d]\n", (int)rdlen); + for(i=0; isecurity)); return; } + has_valid_nsec = 1; + has_valid_wnsec = 1; } /* If the message fails to prove either condition, it is bogus. */