shithub: riscv

Download patch

ref: 0b094303f3e30007fd9fccc3df81f44cf2c49003
parent: bf187247380252d3f79ad7089251600b7535815e
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sat Oct 17 17:28:56 EDT 2020

ndb/dnsdebug: add -c flag to debug caching dns server behaviour

--- a/sys/man/8/ndb
+++ b/sys/man/8/ndb
@@ -97,7 +97,7 @@
 .br
 .B ndb/dnsdebug
 [
-.B -rx
+.B -rxc
 ] [
 .B -f
 .I dbfile
@@ -758,6 +758,9 @@
 interface and
 .B /lib/ndb/external
 database file.
+The
+.B -c
+option enables caching which is handy for debugging the dns code.
 .PP
 .I Ndb/dnsgetip
 resolves and prints A and AAAA records without consulting
--- a/sys/src/cmd/ndb/dnsdebug.c
+++ b/sys/src/cmd/ndb/dnsdebug.c
@@ -56,9 +56,16 @@
 	case 'f':
 		dbfile = EARGF(usage());
 		break;
+	case 'c':
+		cfg.cachedb = 1;
+		break;
 	case 'r':
 		cfg.resolver = 1;
 		break;
+	case 'd':
+		debug = 1;
+		traceactivity = 1;
+		break;
 	case 'x':
 		dbfile = "/lib/ndb/external";
 		strcpy(mntpt, "/net.alt");
@@ -73,6 +80,7 @@
 	fmtinstall('R', prettyrrfmt);
 	opendatabase();
 	srand(truerand());
+	db2cache(1);
 
 	if(cfg.resolver)
 		squirrelserveraddrs();
@@ -89,7 +97,6 @@
 		p[Blinelen(&in)-1] = 0;
 		n = tokenize(p, f, 3);
 		if(n>=1) {
-			dnpurge();		/* flush the cache */
 			docmd(n, f);
 		}
 	}
@@ -457,6 +464,12 @@
 	name = type = nil;
 	tmpsrv = 0;
 
+	if(strcmp(f[0], "refresh") == 0){
+		db2cache(1);
+		dnageall(0);
+		return;
+	}
+
 	if(*f[0] == '@') {
 		if(setserver(f[0]+1) < 0)
 			return;
@@ -483,6 +496,7 @@
 	if(name == nil)
 		return;
 
+	if(!cfg.cachedb) dnpurge();		/* flush the cache */
 	doquery(name, type);
 
 	if(tmpsrv)