--- /sys/src/cmd/ndb/dnserver.c
+++ /sys/src/cmd/ndb/dnserver.c
@@ -45,11 +45,23 @@
repp->flags = (rcode&Rmask) | Fresp | Fcanrec | Oquery;
return;
}
if(!rrsupported(repp->qd->type)){
- dnslog("server: unsupported request %s from %I",
+ /* RFC 8659 §6.2 / RFC 3597 §3: NOERROR-empty for unknown RR types,
+ * not NOTIMP (which RFC 1035 §4.1.1 reserves for OPCODE). RFC 2308
+ * §3 SOA in authority when authoritative.
+ */
+ dnslog("server: unknown type %s from %I (returning NOERROR)",
rrname(repp->qd->type, tname, sizeof tname), srcip);
- repp->flags = Runimplimented | Fresp | Fcanrec | Oquery;
+ myarea = inmyarea(repp->qd->owner->name);
+ if(myarea != nil){
+ repp->flags = Rok | Fauth | Fresp | recursionflag | Oquery;
+ lock(&dnlock);
+ rrcopy(myarea->soarr, &tp);
+ rrcat(&repp->ns, tp);
+ unlock(&dnlock);
+ } else
+ repp->flags = Rok | Fresp | recursionflag | Oquery;
return;
}
if(repp->qd->owner->class != Cin){
|