dns_rdataset_t rdataset;
unsigned int i;
dns_rdata_rrsig_t rrsig;
- bool kasp = zone->kasp;
+ dns_kasp_t *kasp = zone->kasp;
bool found;
+ bool offlineksk = false;
int64_t timewarn = 0, timemaybe = 0;
dns_rdataset_init(&rdataset);
+ if (kasp != NULL) {
+ offlineksk = dns_kasp_offlineksk(kasp);
+ }
+
if (type == dns_rdatatype_nsec3) {
result = dns_db_findnsec3node(db, name, false, &node);
} else {
if (!dns_rdatatype_iskeymaterial(type)) {
bool warn = false, deleted = false;
- if (delsig_ok(&rrsig, keys, nkeys, kasp, &warn)) {
+ if (delsig_ok(&rrsig, keys, nkeys, (kasp != NULL),
+ &warn))
+ {
result = update_one_rr(db, ver, zonediff->diff,
DNS_DIFFOP_DELRESIGN,
name, rdataset.ttl,
* iff there is a new offline signature.
*/
if (!dst_key_inactive(keys[i]) &&
- !dst_key_isprivate(keys[i]))
+ !dst_key_isprivate(keys[i]) && !offlineksk)
{
int64_t timeexpire = dns_time64_from32(
rrsig.timeexpire);
for (i = 0; i < nkeys; i++) {
/* Don't add signatures for offline or inactive keys */
- if (!dst_key_isprivate(keys[i])) {
+ if (!dst_key_isprivate(keys[i]) && !offlineksk) {
continue;
}
- if (dst_key_inactive(keys[i])) {
+ if (dst_key_inactive(keys[i]) && !offlineksk) {
continue;
}
/*
* Don't consider inactive keys or offline keys.
*/
- (void)dst_key_have_ksk_and_zsk(keys, nkeys, i, true,
- ksk, zsk, NULL,
- &have_zsk);
+ if (!dst_key_isprivate(keys[i]) && offlineksk && zsk) {
+ continue;
+ }
+ if (dst_key_inactive(keys[i]) && offlineksk && zsk) {
+ continue;
+ }
+
+ if (offlineksk) {
+ have_zsk = true;
+ } else {
+ (void)dst_key_have_ksk_and_zsk(keys, nkeys, i,
+ true, ksk, zsk,
+ NULL, &have_zsk);
+ }
if (dns_rdatatype_iskeymaterial(type)) {
/*
*/
if (kasp == NULL) {
ttl = keyset.ttl;
- } else if (ttl != keyset.ttl) {
+ } else if (ttl != keyset.ttl && !offlineksk) {
result = update_ttl(&keyset, &zone->origin, ttl, &diff);
if (result != ISC_R_SUCCESS) {
dnssec_log(zone, ISC_LOG_ERROR,
dns_rdatatype_none, 0, &cdsset, NULL);
if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdsset)) {
dns_rdataset_disassociate(&cdsset);
- } else if (result == ISC_R_SUCCESS && kasp != NULL && ttl != cdsset.ttl)
+ } else if (result == ISC_R_SUCCESS && kasp != NULL &&
+ ttl != cdsset.ttl && !offlineksk)
{
result = update_ttl(&cdsset, &zone->origin, ttl, &diff);
if (result != ISC_R_SUCCESS) {
if (result != ISC_R_SUCCESS && dns_rdataset_isassociated(&cdnskeyset)) {
dns_rdataset_disassociate(&cdnskeyset);
} else if (result == ISC_R_SUCCESS && kasp != NULL &&
- ttl != cdnskeyset.ttl)
+ ttl != cdnskeyset.ttl && !offlineksk)
{
result = update_ttl(&cdnskeyset, &zone->origin, ttl, &diff);
if (result != ISC_R_SUCCESS) {