mark_insecure_parents(qry);
}
}
- } else if ((qry->flags & (QUERY_DNSSEC_NODS | QUERY_FORWARD | QUERY_DNSSEC_OPTOUT)) ==
+ } else if ((qry->flags & (QUERY_DNSSEC_NODS | QUERY_FORWARD)) ==
(QUERY_DNSSEC_NODS | QUERY_FORWARD)) {
int ret = kr_dnssec_matches_name_and_type(&req->auth_selected, qry->uid,
qry->sname, KNOT_RRTYPE_NS);
return KR_STATE_DONE;
}
- if (qry->parent == NULL && (qry->flags & QUERY_CNAME)) {
- return KR_STATE_PRODUCE;
- }
-
bool nods = false;
bool ds_req = false;
bool ns_req = false;
knot_dname_is_equal(q->sname, wanted_name)) {
if (q->stype == KNOT_RRTYPE_DS) {
ds_req = true;
- if (qry->flags & QUERY_DNSSEC_NODS) {
+ if (q->flags & QUERY_DNSSEC_NODS) {
nods = true;
}
- if (qry->flags & QUERY_CNAME) {
+ if (q->flags & QUERY_CNAME) {
nods = true;
- ns_req = true;
- }
- if (!(q->flags & QUERY_DNSSEC_OPTOUT)) {
+ ns_exist = false;
+ } else if (!(q->flags & QUERY_DNSSEC_OPTOUT)) {
int ret = kr_dnssec_matches_name_and_type(&request->auth_selected, q->uid,
wanted_name, KNOT_RRTYPE_NS);
ns_exist = (ret == kr_ok());
}
} else {
+ if (q->flags & QUERY_CNAME) {
+ nods = true;
+ ns_exist = false;
+ }
ns_req = true;
}
}
return KR_STATE_DONE;
}
+ if (qry->parent == NULL && (qry->flags & QUERY_CNAME) &&
+ ds_req && ns_req) {
+ return KR_STATE_PRODUCE;
+ }
+
if ((qry->stype == KNOT_RRTYPE_DS) &&
knot_dname_is_equal(wanted_name, qry->sname)) {
nods = true;