shithub: riscv

Download patch

ref: 41c60689b358e6c5d5b80451c800cc137ae2026e
parent: e4ce6aadac9e1de8d5ea625e9680d24cabce0e1a
author: cinap_lenrek <cinap_lenrek@felloff.net>
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 */