diff options
author | Jeremy Harris <jgh146exb@wizmail.org> | 2015-09-17 13:35:16 +0100 |
---|---|---|
committer | Jeremy Harris <jgh146exb@wizmail.org> | 2015-09-17 13:35:16 +0100 |
commit | 14b3c5bc64a16df07583fe4b5ef2e0129d063893 (patch) | |
tree | 76f33f84acdf7e5af636dbea346da58e1cb09cc0 /test/src | |
parent | f64fbe039033d51be277431ce09fabd3ebbc7e74 (diff) |
DNS: time-limit cached returns, using TTL. Bug 1395
This can matter for fast-changing data such as DNSBLs.
Diffstat (limited to 'test/src')
-rw-r--r-- | test/src/fakens.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/test/src/fakens.c b/test/src/fakens.c index a03f94a07..7e93979ec 100644 --- a/test/src/fakens.c +++ b/test/src/fakens.c @@ -61,6 +61,9 @@ Any DNS record line in a zone file can be prefixed with "AA " if all the records found by a lookup are marked as such then the response will have the "AA" bit set. +Any DNS record line in a zone file can be prefixed with "TTL=" and +a number of seconds (followed by one space). + */ #include <ctype.h> @@ -105,6 +108,8 @@ typedef struct tlist { int value; } tlist; +#define DEFAULT_TTL 3600U + /* On some (older?) operating systems, the standard ns_t_xxx definitions are not available, and only the older T_xxx ones exist in nameser.h. If ns_t_a is not defined, assume we are in this state. A really old system might not even @@ -347,6 +352,7 @@ while (fgets(CS buffer, sizeof(buffer), f) != NULL) BOOL rr_sec = FALSE; BOOL rr_aa = FALSE; int delay = 0; + uint ttl = DEFAULT_TTL; p = buffer; while (isspace(*p)) p++; @@ -380,6 +386,12 @@ while (fgets(CS buffer, sizeof(buffer), f) != NULL) for (p += 6; *p >= '0' && *p <= '9'; p++) delay = delay*10 + *p - '0'; if (isspace(*p)) p++; } + else if (Ustrncmp(p, US"TTL=", 4) == 0) /* TTL for record */ + { + ttl = 0; + for (p += 4; *p >= '0' && *p <= '9'; p++) ttl = ttl*10 + *p - '0'; + if (isspace(*p)) p++; + } else break; } @@ -459,7 +471,10 @@ while (fgets(CS buffer, sizeof(buffer), f) != NULL) *pk++ = 0; *pk++ = 1; /* class = IN */ - pk += 4; /* TTL field; don't care */ + *pk++ = (ttl >>24) & 255; + *pk++ = (ttl >>16) & 255; + *pk++ = (ttl >> 8) & 255; + *pk++ = ttl & 255; rdlptr = pk; /* remember rdlength field */ pk += 2; |