Commit cd543033 authored by Brian Wellington's avatar Brian Wellington
Browse files

357. [bug] The server would crash if a response contained both

                        a CNAME and records of the query type.
parent 86370ee8
357. [bug] The server would crash if a response contained both
a CNAME and records of the query type.
356. [cleanup] isc_task_send no longer requires event->sender to
be non-null.
......
......@@ -15,7 +15,7 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
/* $Id: resolver.c,v 1.159 2000/07/27 22:05:04 bwelling Exp $ */
/* $Id: resolver.c,v 1.160 2000/07/28 22:37:47 bwelling Exp $ */
#include <config.h>
......@@ -3350,7 +3350,7 @@ answer_response(fetchctx_t *fctx) {
dns_name_t *name, *qname, tname;
dns_rdataset_t *rdataset;
isc_boolean_t done, external, chaining, aa, found, want_chaining;
isc_boolean_t have_answer;
isc_boolean_t have_answer, found_cname, found_type;
unsigned int aflag;
dns_rdatatype_t type;
dns_fixedname_t dname;
......@@ -3365,6 +3365,8 @@ answer_response(fetchctx_t *fctx) {
*/
done = ISC_FALSE;
found_cname = ISC_FALSE;
found_type = ISC_FALSE;
chaining = ISC_FALSE;
have_answer = ISC_FALSE;
want_chaining = ISC_FALSE;
......@@ -3386,11 +3388,12 @@ answer_response(fetchctx_t *fctx) {
found = ISC_FALSE;
want_chaining = ISC_FALSE;
aflag = 0;
if (rdataset->type == type) {
if (rdataset->type == type && !found_cname) {
/*
* We've found an ordinary answer.
*/
found = ISC_TRUE;
found_type = ISC_TRUE;
done = ISC_TRUE;
aflag = DNS_RDATASETATTR_ANSWER;
} else if (type == dns_rdatatype_any) {
......@@ -3402,15 +3405,18 @@ answer_response(fetchctx_t *fctx) {
found = ISC_TRUE;
aflag = DNS_RDATASETATTR_ANSWER;
} else if (rdataset->type == dns_rdatatype_sig
&& rdataset->covers == type) {
&& rdataset->covers == type
&& !found_cname) {
/*
* We've found a signature that
* covers the type we're looking for.
*/
found = ISC_TRUE;
found_type = ISC_TRUE;
aflag = DNS_RDATASETATTR_ANSWERSIG;
} else if (rdataset->type ==
dns_rdatatype_cname) {
dns_rdatatype_cname
&& !found_type) {
/*
* We're looking for something else,
* but we found a CNAME.
......@@ -3423,6 +3429,7 @@ answer_response(fetchctx_t *fctx) {
type == dns_rdatatype_nxt)
return (DNS_R_FORMERR);
found = ISC_TRUE;
found_cname = ISC_TRUE;
want_chaining = ISC_TRUE;
aflag = DNS_RDATASETATTR_ANSWER;
result = cname_target(rdataset,
......@@ -3431,12 +3438,14 @@ answer_response(fetchctx_t *fctx) {
return (result);
} else if (rdataset->type == dns_rdatatype_sig
&& rdataset->covers ==
dns_rdatatype_cname) {
dns_rdatatype_cname
&& !found_type) {
/*
* We're looking for something else,
* but we found a SIG CNAME.
*/
found = ISC_TRUE;
found_cname = ISC_TRUE;
aflag = DNS_RDATASETATTR_ANSWERSIG;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment