* Better checking of long domain names and labels in queries.
* answer->owner may be null on error. Documented, and adnshost copes.
* Better reporting of unexpected or weird replies from nameserver.
+ * Add test case for recursion (infinite loop) domain compression.
--
--- /dev/null
+adns debug: using nameserver 172.18.45.6
+37.45.18.172.in-addr.arpa. flags 0 type 12 PTR(raw) submitted
+37.45.18.172.in-addr.arpa. flags 0 type PTR(raw): Found overly-long domain name; nrrs=0; cname=37.45.18.172.in-addr.arpa.test.iwj.relativity.greenend.org.uk; owner=$; ttl=60
+rc=0
--- /dev/null
+default
+:12 37.45.18.172.in-addr.arpa.
+ start 951961094.184850
+ socket type=SOCK_DGRAM
+ socket=4
+ +0.000134
+ fcntl fd=4 cmd=F_GETFL
+ fcntl=~O_NONBLOCK&...
+ +0.000053
+ fcntl fd=4 cmd=F_SETFL O_NONBLOCK|...
+ fcntl=OK
+ +0.000035
+ sendto fd=4 addr=172.18.45.6:53
+ 311f0100 00010000 00000000 02333702 34350231 38033137 3207696e 2d616464
+ 72046172 70610000 0c0001.
+ sendto=43
+ +0.000960
+ select max=5 rfds=[4] wfds=[] efds=[] to=1.999040
+ select=1 rfds=[4] wfds=[] efds=[]
+ +0.000200
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=OK addr=172.18.45.6:53
+ 311f8580 00010002 00010001 02333702 34350231 38033137 3207696e 2d616464
+ 72046172 70610000 0c0001c0 0c000500 01000151 80003f02 33370234 35023138
+ 03313732 07696e2d 61646472 04617270 61047465 73740369 776a0a72 656c6174
+ 69766974 79086772 65656e65 6e64036f 72670275 6b00c037 000c0001 0000003c
+ 00060370 7472c082 c0510002 00010000 003c0006 036e7330 c05ac094 00010001
+ 00015180 0004ac12 2d06.
+ +0.000624
+ recvfrom fd=4 buflen=512 *addrlen=16
+ recvfrom=EAGAIN
+ +0.000222
+ close fd=4
+ close=OK
+ +0.000197
label[ll++]= c;
}
if (!ll) return adns_s_querydomaininvalid;
- if (ll > 63) return adns_s_querydomaintoolong;
+ if (ll > DNS_MAXLABEL) return adns_s_querydomaintoolong;
nbytes+= ll+1;
- if (nbytes > 254) return adns_s_querydomaintoolong;
+ if (nbytes >= DNS_MAXDOMAIN) return adns_s_querydomaintoolong;
MKQUERY_ADDB(ll);
memcpy(rqp,label,ll); rqp+= ll;
}