ref: 41c60689b358e6c5d5b80451c800cc137ae2026e
parent: e4ce6aadac9e1de8d5ea625e9680d24cabce0e1a
author: cinap_lenrek <[email protected]>
date: Sun Dec 20 18:08:11 EST 2020
ndb/dns: handle dnskey RR's (thanks moody) On 12/18/20, Jacob Moody wrote: > Hello, > > I recently ran in to some issues with pointing an unbound server towards a > 9front dns server as its upstream. > The parsing seemed to fail when ndb/dns received a DNSKEY RR from it's own > upstream source on behalf of unbound. > This patch catches and stores the DNSKEY from the upstream server to prevent > this.
--- a/sys/src/cmd/ndb/convDNS2M.c
+++ b/sys/src/cmd/ndb/convDNS2M.c
@@ -275,6 +275,7 @@
NAME(rp->rmb->name);
NAME(rp->rp->name);
break;
+ case Tdnskey:
case Tkey:
USHORT(rp->key->flags);
UCHAR(rp->key->proto);
--- a/sys/src/cmd/ndb/convM2DNS.c
+++ b/sys/src/cmd/ndb/convM2DNS.c
@@ -448,6 +448,7 @@
rp->rmb = dnlookup(NAME(dname), Cin, 1);
rp->rp = dnlookup(NAME(dname), Cin, 1);
break;
+ case Tdnskey:
case Tkey:
USHORT(rp->key->flags);
UCHAR(rp->key->proto);
--- a/sys/src/cmd/ndb/dn.c
+++ b/sys/src/cmd/ndb/dn.c
@@ -893,6 +893,7 @@
nrp->srv = srv;
*srv = *rp->srv;
break;
+ case Tdnskey:
case Tkey:
key = nrp->key;
*nrp = *rp;
@@ -1273,6 +1274,7 @@
case Trp:
fmtprint(&fstr, "\t%s %s", dnname(rp->rmb), dnname(rp->rp));
break;
+ case Tdnskey:
case Tkey:
if (rp->key == nil)
fmtprint(&fstr, "\t<null> <null> <null>");
@@ -1413,6 +1415,7 @@
idnname(rp->rmb, buf, sizeof(buf)),
idnname(rp->rp, buf, sizeof(buf)));
break;
+ case Tdnskey:
case Tkey:
if (rp->key == nil)
fmtprint(&fstr, " flags=<null> proto=<null> alg=<null>");
@@ -1951,6 +1954,7 @@
rp->srv = emalloc(sizeof(*rp->srv));
setmalloctag(rp->srv, rp->pc);
break;
+ case Tdnskey:
case Tkey:
rp->key = emalloc(sizeof(*rp->key));
setmalloctag(rp->key, rp->pc);
@@ -1994,6 +1998,7 @@
memset(rp->srv, 0, sizeof *rp->srv); /* cause trouble */
free(rp->srv);
break;
+ case Tdnskey:
case Tkey:
free(rp->key->data);
memset(rp->key, 0, sizeof *rp->key); /* cause trouble */