if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
+echo "I:checking that raw zone with bad class is handled ($n)"
+ret=0
+$CHECKZONE -f raw example zones/bad-badclass.raw > test.out.$n 2>&1 && ret=1
+grep "failed: bad class" test.out.$n >/dev/null || ret=1
+n=`expr $n + 1`
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
echo "I:exit status: $status"
exit $status
/* Construct RRset headers */
dns_rdatalist_init(&rdatalist);
rdatalist.rdclass = isc_buffer_getuint16(&target);
+ if (lctx->zclass != rdatalist.rdclass) {
+ result = DNS_R_BADCLASS;
+ goto cleanup;
+ }
rdatalist.type = isc_buffer_getuint16(&target);
rdatalist.covers = isc_buffer_getuint16(&target);
rdatalist.ttl = isc_buffer_getuint32(&target);
dns_difftuple_t *tuple = NULL;
+ if (rdata->rdclass != xfr->rdclass)
+ return(DNS_R_BADCLASS);
+
CHECK(dns_zone_checknames(xfr->zone, name, rdata));
CHECK(dns_difftuple_create(xfr->diff.mctx, op,
name, ttl, rdata, &tuple));
dns_name_t *name, dns_ttl_t ttl, dns_rdata_t *rdata)
{
isc_result_t result;
-
dns_difftuple_t *tuple = NULL;
+
+ if (rdata->rdclass != xfr->rdclass)
+ return(DNS_R_BADCLASS);
+
if (op == DNS_DIFFOP_ADD)
CHECK(dns_zone_checknames(xfr->zone, name, rdata));
CHECK(dns_difftuple_create(xfr->diff.mctx, op,
dns_result_totext(result));
if (result != ISC_R_SUCCESS || msg->rcode != dns_rcode_noerror ||
+ msg->opcode != dns_opcode_query ||msg->rdclass != xfr->rdclass ||
(xfr->checkid && msg->id != xfr->id)) {
- if (result == ISC_R_SUCCESS)
+ if (result == ISC_R_SUCCESS && msg->rcode != dns_rcode_noerror)
result = ISC_RESULTCLASS_DNSRCODE + msg->rcode; /*XXX*/
- if (result == ISC_R_SUCCESS || result == DNS_R_NOERROR)
+ else if (result == ISC_R_SUCCESS &&
+ msg->opcode != dns_opcode_query)
+ result = DNS_R_UNEXPECTEDOPCODE;
+ else if (result == ISC_R_SUCCESS &&
+ msg->rdclass != xfr->rdclass)
+ result = DNS_R_BADCLASS;
+ else if (result == ISC_R_SUCCESS || result == DNS_R_NOERROR)
result = DNS_R_UNEXPECTEDID;
if (xfr->reqtype == dns_rdatatype_axfr ||
xfr->reqtype == dns_rdatatype_soa)