1484. [bug] The number of records reported after a AXFR was wrong.

[RT #6229]

1483.   [bug]           dig axfr failed if the message id in the answer failed
                        to match that in the request.  Only the id in the first
                        message is required to match. [RT #8138]
This commit is contained in:
Mark Andrews
2003-07-17 07:46:55 +00:00
parent 4ac02e2e6b
commit 3e7a76892a
3 changed files with 42 additions and 18 deletions
+11
View File
@@ -1,3 +1,14 @@
1484. [bug] The number of records reported after a AXFR was wrong.
[RT #6229]
1483. [bug] dig axfr failed if the message id in the answer failed
to match that in the request. Only the id in the first
message is required to match. [RT #8138]
1482. [bug] named could fail to start if the kernel supports
IPv6 but no interfaces are configured. Similarly
for IPv4. [RT #6229]
1482. [bug] Named could fail to start if the kernel supports
IPv6 but no interfaces are configured. Similarly
for IPv4. [RT #6229]
+28 -16
View File
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dighost.c,v 1.221.2.16 2003/05/15 01:17:54 marka Exp $ */
/* $Id: dighost.c,v 1.221.2.17 2003/07/17 07:46:55 marka Exp $ */
/*
* Notice to programmers: Do not use this code as an example of how to
@@ -1399,6 +1399,7 @@ setup_lookup(dig_lookup_t *lookup) {
query->first_soa_rcvd = ISC_FALSE;
query->second_rr_rcvd = ISC_FALSE;
query->first_repeat_rcvd = ISC_FALSE;
query->warn_id = ISC_TRUE;
query->first_rr_serial = 0;
query->second_rr_serial = 0;
query->servname = serv->servername;
@@ -1704,14 +1705,15 @@ connect_timeout(isc_task_t *task, isc_event_t *event) {
l->retries);
l->retries--;
n = requeue_lookup(l, ISC_TRUE);
n->origin = query->lookup->origin;
cancel_lookup(l);
check_next_lookup(l);
}
} else {
fputs(l->cmdline, stdout);
printf(";; connection timed out; no servers could be "
"reached\n");
cancel_lookup(l);
check_next_lookup(l);
if (exitcode < 9)
exitcode = 9;
}
@@ -2007,7 +2009,7 @@ check_for_more_data(dig_query_t *query, dns_message_t *msg,
query->second_rr_rcvd = ISC_TRUE;
query->second_rr_serial = 0;
debug("got the second rr as nonsoa");
continue;
goto next_rdata;
}
/*
@@ -2191,25 +2193,35 @@ recv_done(isc_task_t *task, isc_event_t *event) {
result = dns_message_peekheader(b, &id, &msgflags);
if (result != ISC_R_SUCCESS || l->sendmsg->id != id) {
match = ISC_FALSE;
if (l->tcp_mode) {
if (result == ISC_R_SUCCESS)
printf(";; ERROR: ID mismatch: "
"expected ID %u, got %u\n",
l->sendmsg->id, id);
else
isc_boolean_t fail = ISC_TRUE;
if (result == ISC_R_SUCCESS) {
if (!query->first_soa_rcvd ||
query->warn_id)
printf(";; %s: ID mismatch: "
"expected ID %u, got %u\n",
query->first_soa_rcvd ?
"WARNING" : "ERROR",
l->sendmsg->id, id);
if (query->first_soa_rcvd)
fail = ISC_FALSE;
query->warn_id = ISC_FALSE;
} else
printf(";; ERROR: short (< header size) message\n");
isc_event_free(&event);
clear_query(query);
check_next_lookup(l);
UNLOCK_LOOKUP;
return;
}
if (result == ISC_R_SUCCESS)
if (fail) {
isc_event_free(&event);
clear_query(query);
check_next_lookup(l);
UNLOCK_LOOKUP;
return;
}
match = ISC_TRUE;
} else if (result == ISC_R_SUCCESS)
printf(";; Warning: ID mismatch: "
"expected ID %u, got %u\n", l->sendmsg->id, id);
else
printf(";; Warning: short (< header size) message received\n");
match = ISC_FALSE;
}
if (!match) {
+3 -2
View File
@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: dig.h,v 1.71.2.3 2001/11/15 01:24:13 marka Exp $ */
/* $Id: dig.h,v 1.71.2.4 2003/07/17 07:46:55 marka Exp $ */
#ifndef DIG_H
#define DIG_H
@@ -152,7 +152,8 @@ struct dig_query {
first_soa_rcvd,
second_rr_rcvd,
first_repeat_rcvd,
recv_made;
recv_made,
warn_id;
isc_uint32_t first_rr_serial;
isc_uint32_t second_rr_serial;
isc_uint32_t rr_count;