7f6560313b
SVN-Revision: 17673
42 lines
1.0 KiB
Diff
42 lines
1.0 KiB
Diff
--- a/query.c
|
|
+++ b/query.c
|
|
@@ -193,6 +193,7 @@ static int doit(struct query *z,int stat
|
|
int k;
|
|
int p;
|
|
int q;
|
|
+ uint32 cachettl;
|
|
|
|
errno = error_io;
|
|
if (state == 1) goto HAVEPACKET;
|
|
@@ -470,6 +471,7 @@ static int doit(struct query *z,int stat
|
|
rcode = header[3] & 15;
|
|
if (rcode && (rcode != 3)) goto DIE; /* impossible; see irrelevant() */
|
|
|
|
+ cachettl = 0;
|
|
flagout = 0;
|
|
flagcname = 0;
|
|
flagreferral = 0;
|
|
@@ -512,6 +514,11 @@ static int doit(struct query *z,int stat
|
|
|
|
uint16_unpack_big(header + 8,&datalen);
|
|
pos += datalen;
|
|
+
|
|
+ if (flagsoa && (pos <= len)) {
|
|
+ cachettl = ttlget(buf + pos - 4);
|
|
+ if (soattl < cachettl) cachettl = soattl;
|
|
+ }
|
|
}
|
|
posglue = pos;
|
|
|
|
@@ -689,8 +696,8 @@ static int doit(struct query *z,int stat
|
|
}
|
|
|
|
if (rcode == 3) {
|
|
- log_nxdomain(whichserver,d,soattl);
|
|
- cachegeneric(DNS_T_ANY,d,"",0,soattl);
|
|
+ log_nxdomain(whichserver,d,cachettl);
|
|
+ cachegeneric(DNS_T_ANY,d,"",0,cachettl);
|
|
|
|
NXDOMAIN:
|
|
if (z->level) goto LOWERLEVEL;
|