bool dumpzones;
bool dumpadb;
bool dumpbad;
+ bool dumpexpired;
bool dumpfail;
FILE *fp;
ISC_LIST(struct viewlistentry) viewlist;
dns_cache_getname(dctx->view->view->cache));
} else if (dctx->zone == NULL && dctx->cache == NULL && dctx->dumpcache)
{
- style = &dns_master_style_cache;
+ if (dctx->dumpexpired) {
+ style = &dns_master_style_cache_with_expired;
+ } else {
+ style = &dns_master_style_cache;
+ }
/* start cache dump */
if (dctx->view->view->cachedb != NULL) {
dns_db_attach(dctx->view->view->cachedb, &dctx->cache);
dctx->dumpcache = true;
dctx->dumpadb = true;
dctx->dumpbad = true;
+ dctx->dumpexpired = false;
dctx->dumpfail = true;
dctx->dumpzones = false;
dctx->fp = NULL;
} else if (ptr != NULL && strcmp(ptr, "-cache") == 0) {
/* this is the default */
ptr = next_token(lex, NULL);
+ } else if (ptr != NULL && strcmp(ptr, "-expired") == 0) {
+ /* this is the same as -cache but includes expired data */
+ dctx->dumpexpired = true;
+ ptr = next_token(lex, NULL);
} else if (ptr != NULL && strcmp(ptr, "-zones") == 0) {
/* only dump zones, suppress caches */
dctx->dumpadb = false;
Close, truncate and re-open the DNSTAP output file.\n\
dnstap -roll count\n\
Close, rename and re-open the DNSTAP output file(s).\n\
- dumpdb [-all|-cache|-zones|-adb|-bad|-fail] [view ...]\n\
+ dumpdb [-all|-cache|-zones|-adb|-bad|-expired|-fail] [view ...]\n\
Dump cache(s) to the dump file (named_dump.db).\n\
flush Flushes all of the server's caches.\n\
flush [view] Flushes the server's cache for a view.\n\
output file is moved to ".1", and so on. If number is specified, then
the number of backup log files is limited to that number.
-``dumpdb`` [**-all** | **-cache** | **-zones** | **-adb** | **-bad** | **-fail**] [*view ...*]
+``dumpdb`` [**-all** | **-cache** | **-zones** | **-adb** | **-bad** | **-expired** | **-fail**] [*view ...*]
Dump the server's caches (default) and/or zones to the dump file for
the specified views. If no view is specified, all views are dumped.
(See the ``dump-file`` option in the BIND 9 Administrator Reference
output file is moved to ".1", and so on. If number is specified, then
the number of backup log files is limited to that number.
.TP
-\fBdumpdb\fP [\fB\-all\fP | \fB\-cache\fP | \fB\-zones\fP | \fB\-adb\fP | \fB\-bad\fP | \fB\-fail\fP] [\fIview ...\fP]
+\fBdumpdb\fP [\fB\-all\fP | \fB\-cache\fP | \fB\-zones\fP | \fB\-adb\fP | \fB\-bad\fP | \fB\-expired\fP | \fB\-fail\fP] [\fIview ...\fP]
Dump the server\(aqs caches (default) and/or zones to the dump file for
the specified views. If no view is specified, all views are dumped.
(See the \fBdump\-file\fP option in the BIND 9 Administrator Reference
/*% Print ECS cache entries as comments (reserved for future use). */
#define DNS_STYLEFLAG_ECSCACHE 0x100000000ULL
+/*% Print expired cache entries. */
+#define DNS_STYLEFLAG_EXPIRED 0x200000000ULL
+
ISC_LANG_BEGINDECLS
/***
*/
LIBDNS_EXTERNAL_DATA extern const dns_master_style_t dns_master_style_cache;
+/*%
+ * A master style format designed for cache files. The same as above but
+ * this also prints expired entries.
+ */
+LIBDNS_EXTERNAL_DATA extern const dns_master_style_t
+ dns_master_style_cache_with_expired;
+
/*%
* A master style that prints name, ttl, class, type, and value on
* every line. Similar to explicitttl above, but more verbose.
#define DNS_RDATASETATTR_PREFETCH 0x00400000
#define DNS_RDATASETATTR_CYCLIC 0x00800000 /*%< Cyclic ordering. */
#define DNS_RDATASETATTR_STALE 0x01000000
+#define DNS_RDATASETATTR_ANCIENT 0x02000000
/*%
* _OMITDNSSEC:
/*% Does the rdataset 'r' contain a stale answer? */
#define STALE(r) (((r)->attributes & DNS_RDATASETATTR_STALE) != 0)
+/*% Does the rdataset 'r' contain an expired answer? */
+#define ANCIENT(r) (((r)->attributes & DNS_RDATASETATTR_ANCIENT) != 0)
/*%
* Context structure for a masterfile dump in progress.
UINT_MAX
};
+LIBDNS_EXTERNAL_DATA const dns_master_style_t
+ dns_master_style_cache_with_expired = {
+ DNS_STYLEFLAG_OMIT_OWNER | DNS_STYLEFLAG_OMIT_CLASS |
+ DNS_STYLEFLAG_MULTILINE | DNS_STYLEFLAG_RRCOMMENT |
+ DNS_STYLEFLAG_TRUST | DNS_STYLEFLAG_NCACHE |
+ DNS_STYLEFLAG_EXPIRED,
+ 24,
+ 32,
+ 32,
+ 40,
+ 80,
+ 8,
+ UINT_MAX
+ };
+
LIBDNS_EXTERNAL_DATA const dns_master_style_t dns_master_style_simple = {
0, 24, 32, 32, 40, 80, 8, UINT_MAX
};
for (i = 0; i < n; i++) {
dns_rdataset_t *rds = sorted[i];
+
+ if (ANCIENT(rds) &&
+ (ctx->style.flags & DNS_STYLEFLAG_EXPIRED) == 0) {
+ /* Omit expired entries */
+ dns_rdataset_disassociate(rds);
+ continue;
+ }
+
if ((ctx->style.flags & DNS_STYLEFLAG_TRUST) != 0) {
if ((ctx->style.flags & DNS_STYLEFLAG_INDENT) != 0 ||
(ctx->style.flags & DNS_STYLEFLAG_YAML) != 0)
isc_result_t result;
if (STALE(rds)) {
fprintf(f,
- "; stale (will be retained for "
- "%u more seconds)\n",
+ "; stale (will be retained for %u more "
+ "seconds)\n",
(rds->stale_ttl -
ctx->serve_stale_ttl));
+ } else if (ANCIENT(rds)) {
+ fprintf(f, "; expired (awaiting cleanup)\n");
}
result = dump_rdataset(mctx, name, rds, ctx, buffer, f);
if (result != ISC_R_SUCCESS) {