summaryrefslogtreecommitdiff
path: root/test/src
diff options
context:
space:
mode:
authorJeremy Harris <jgh146exb@wizmail.org>2019-09-01 19:44:31 +0100
committerJeremy Harris <jgh146exb@wizmail.org>2019-09-01 19:54:04 +0100
commit7d8d08c484958a90f5d5744894b9bc2f723bee4e (patch)
treed829ba1558ceb4371d0f38a76d6717bcdca84e7d /test/src
parent2944124ccb62cbf64e44bc8e0894fb30307514da (diff)
downloadexim4-7d8d08c484958a90f5d5744894b9bc2f723bee4e.tar.gz
Support TTL from SOA for NXDOMAIN & NODATA cache entries. Bug 1395
Diffstat (limited to 'test/src')
-rw-r--r--test/src/fakens.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/test/src/fakens.c b/test/src/fakens.c
index 583b01282..6d8a99df5 100644
--- a/test/src/fakens.c
+++ b/test/src/fakens.c
@@ -59,7 +59,7 @@ as such then the response will have the "AD" bit set.
Any DNS record line can be prefixed with "NXDOMAIN ";
The record will be ignored (but the prefix set still applied);
-This lets us return a DNSSEC NXDOMAIN.
+This lets us return a DNSSEC NXDOMAIN (=> HOST_NOT_FOUND).
Any DNS record line can be prefixed with "AA "
if all the records found by a lookup are marked
@@ -763,22 +763,23 @@ if (zonefile == NULL)
(void)sprintf(CS buffer, "%s/dnszones/%s", argv[1], zonefile);
-/* Initialize the start of the response packet. We don't have to fake up
-everything, because we know that Exim will look only at the answer and
-additional section parts. */
+/* Initialize the start of the response packet. */
memset(packet, 0, 12);
pk += 12;
/* Open the zone file. */
-f = fopen(CS buffer, "r");
-if (f == NULL)
+if (!(f = fopen(CS buffer, "r")))
{
fprintf(stderr, "fakens: failed to open %s: %s\n", buffer, strerror(errno));
return NO_RECOVERY;
}
+header->qr = 1; /* query */
+header->opcode = QUERY; /* standard query */
+header->tc = 0; /* no trucation */
+
/* Find the records we want, and add them to the result. */
count = 0;
@@ -789,12 +790,14 @@ header->ancount = htons(count);
/* If the AA bit should be set (as indicated by the AA prefix in the zone file),
we are expected to return some records in the authoritative section. Bind9: If
there is data in the answer section, the authoritative section contains the NS
-records, otherwise it contains the SOA record. Currently we mimic this
-behaviour for the first case (there is some answer record).
+records, otherwise it contains the SOA record. Mimic that.
*/
-if (aa)
- find_records(f, zone, zone[0] == '.' ? zone+1 : zone, US"NS", 2, &pk, &count, NULL, NULL);
+if (strcmp(qtype, "SOA") != 0 && strcmp(qtype, "NS") != 0)
+ if (count)
+ find_records(f, zone, zone[0] == '.' ? zone+1 : zone, US"NS", 2, &pk, &count, NULL, NULL);
+ else
+ find_records(f, zone, zone[0] == '.' ? zone+1 : zone, US"SOA", 3, &pk, &count, NULL, NULL);
header->nscount = htons(count - ntohs(header->ancount));
/* There is no need to return any additional records because Exim no longer