*
*/
bool
-dst_key_is_unused(dst_key_t *key) {
+dst_key_is_unused(const dst_key_t *key) {
isc_stdtime_t val;
dst_key_state_t st;
int state_type;
}
dst_key_state_t
-dst_key_goal(dst_key_t *key) {
+dst_key_goal(const dst_key_t *key) {
dst_key_state_t state;
isc_result_t result;
*\li Printable status in 'out'.
*
*/
+
+bool
+dns_keymgr_key_may_be_purged(const dst_key_t *key, uint32_t after,
+ isc_stdtime_t now);
+/*%<
+ * Checks if the key files for 'key' may be removed from disk.
+ *
+ * Requires:
+ *\li 'key' is a valid key.
+ *
+ * Returns:
+ *\li true if the key files may be purged, false otherwise.
+ */
*/
bool
-dst_key_is_unused(dst_key_t *key);
+dst_key_is_unused(const dst_key_t *key);
/*%<
* Check if this key is unused.
*
*/
dst_key_state_t
-dst_key_goal(dst_key_t *key);
+dst_key_goal(const dst_key_t *key);
/*%<
* Get the key goal. Should be OMNIPRESENT or HIDDEN.
* This can be used to determine if the key is being introduced or
*
*/
static bool
-keymgr_key_match_state(dst_key_t *key, dst_key_t *subject, int type,
+keymgr_key_match_state(const dst_key_t *key, const dst_key_t *subject, int type,
dst_key_state_t next_state,
dst_key_state_t states[NUM_KEYSTATES]) {
REQUIRE(key != NULL);
return ISC_R_SUCCESS;
}
-static bool
-keymgr_key_may_be_purged(dst_key_t *key, uint32_t after, isc_stdtime_t now) {
+bool
+dns_keymgr_key_may_be_purged(const dst_key_t *key, uint32_t after,
+ isc_stdtime_t now) {
bool ksk = false;
bool zsk = false;
dst_key_state_t hidden[NUM_KEYSTATES] = { HIDDEN, NA, NA, NA };
}
/* Check purge-keys interval. */
- if (keymgr_key_may_be_purged(dkey->key,
- dns_kasp_purgekeys(kasp), now))
+ if (dns_keymgr_key_may_be_purged(dkey->key,
+ dns_kasp_purgekeys(kasp), now))
{
dst_key_format(dkey->key, keystr, sizeof(keystr));
isc_log_write(DNS_LOGCATEGORY_DNSSEC,
}
static isc_result_t
-zone_verifykeys(dns_zone_t *zone, dns_dnsseckeylist_t *newkeys) {
+zone_verifykeys(dns_zone_t *zone, dns_dnsseckeylist_t *newkeys,
+ uint32_t purgeval, isc_stdtime_t now) {
/*
* Make sure that the existing keys are also present in the new keylist.
*/
if (dst_key_is_unused(key1->key)) {
continue;
}
+ if (dns_keymgr_key_may_be_purged(key1->key, purgeval, now)) {
+ continue;
+ }
if (key1->purge) {
continue;
}
if (kasp != NULL && !offlineksk) {
/* Verify new keys. */
- isc_result_t ret = zone_verifykeys(zone, &keys);
+ isc_result_t ret = zone_verifykeys(
+ zone, &keys, dns_kasp_purgekeys(kasp), now);
if (ret != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
"zone_rekey:zone_verifykeys failed: "