--- bin/named/config.c.orig 2016-03-09 04:02:43 UTC +++ bin/named/config.c @@ -159,6 +159,8 @@ options {\n\ lame-ttl 600;\n\ servfail-ttl 1;\n\ max-ncache-ttl 10800; /* 3 hours */\n\ + override-cache-ttl 0; /* do not override */\n\ + min-cache-ttl 0; /* no minimal, zero is allowed */\n\ max-cache-ttl 604800; /* 1 week */\n\ transfer-format many-answers;\n\ max-cache-size 90%;\n\ --- bin/named/server.c.orig 2016-03-09 04:02:43 UTC +++ bin/named/server.c @@ -3022,6 +3022,16 @@ configure_view(dns_view_t *view, dns_vie } obj = NULL; + result = ns_config_get(maps, "override-cache-ttl", &obj); + INSIST(result == ISC_R_SUCCESS); + view->overridecachettl = cfg_obj_asuint32(obj); + + obj = NULL; + result = ns_config_get(maps, "min-cache-ttl", &obj); + INSIST(result == ISC_R_SUCCESS); + view->mincachettl = cfg_obj_asuint32(obj); + + obj = NULL; result = ns_config_get(maps, "max-cache-ttl", &obj); INSIST(result == ISC_R_SUCCESS); view->maxcachettl = cfg_obj_asuint32(obj); --- lib/dns/include/dns/view.h.orig 2016-03-09 04:02:43 UTC +++ lib/dns/include/dns/view.h @@ -152,6 +152,8 @@ struct dns_view { isc_boolean_t requestnsid; isc_boolean_t sendcookie; dns_ttl_t maxcachettl; + dns_ttl_t mincachettl; + dns_ttl_t overridecachettl; dns_ttl_t maxncachettl; isc_uint32_t nta_lifetime; isc_uint32_t nta_recheck; --- lib/dns/resolver.c.orig 2016-03-09 04:02:43 UTC +++ lib/dns/resolver.c @@ -5419,6 +5419,18 @@ cache_name(fetchctx_t *fctx, dns_name_t } /* + * Enforce the configure cache TTL override. + */ + if (res->view->overridecachettl) + rdataset->ttl = res->view->overridecachettl; + + /* + * Enforce the configure minimum cache TTL. + */ + if (rdataset->ttl < res->view->mincachettl) + rdataset->ttl = res->view->mincachettl; + + /* * Enforce the configure maximum cache TTL. */ if (rdataset->ttl > res->view->maxcachettl) --- lib/isccfg/namedconf.c.orig 2016-03-09 04:02:43 UTC +++ lib/isccfg/namedconf.c @@ -1677,6 +1677,8 @@ view_clauses[] = { { "nosit-udp-size", &cfg_type_uint32, CFG_CLAUSEFLAG_OBSOLETE }, { "max-acache-size", &cfg_type_sizenodefault, 0 }, { "max-cache-size", &cfg_type_sizeorpercent, 0 }, + { "override-cache-ttl", &cfg_type_uint32, 0 }, + { "min-cache-ttl", &cfg_type_uint32, 0 }, { "max-cache-ttl", &cfg_type_uint32, 0 }, { "max-clients-per-query", &cfg_type_uint32, 0 }, { "max-ncache-ttl", &cfg_type_uint32, 0 },