return KNOT_EOK;
}
+static void zone_txn_update_clear(zone_t *zone)
+{
+ assert(zone->control_update);
+
+ zone_update_clear(zone->control_update);
+ free(zone->control_update);
+ zone->control_update = NULL;
+}
+
static int zone_txn_commit(zone_t *zone, ctl_args_t *args)
{
UNUSED(args);
return KNOT_TXN_ENOTEXISTS;
}
+ // NOOP if empty changeset/contents.
+ if (((zone->control_update->flags & UPDATE_INCREMENTAL) &&
+ changeset_empty(&zone->control_update->change)) ||
+ ((zone->control_update->flags & UPDATE_FULL) &&
+ zone_contents_is_empty(zone->control_update->new_cont))) {
+ zone_txn_update_clear(zone);
+ return KNOT_EOK;
+ }
+
// Sign update.
conf_val_t val = conf_zone_get(conf(), C_DNSSEC_SIGNING, zone->name);
bool dnssec_enable = (zone->control_update->flags & UPDATE_SIGN) && conf_bool(&val);
zone_sign_reschedule_t resch = { 0 };
int ret = knot_dnssec_sign_update(zone->control_update, &resch);
if (ret != KNOT_EOK) {
- zone_update_clear(zone->control_update);
- free(zone->control_update);
- zone->control_update = NULL;
+ zone_txn_update_clear(zone);
return ret;
}
log_dnssec_next(zone->name, (time_t)resch.next_sign);
return ret;
}
- zone_update_clear(zone->control_update);
- free(zone->control_update);
- zone->control_update = NULL;
+ zone_txn_update_clear(zone);
zone_events_schedule_now(zone, ZONE_EVENT_NOTIFY);
return KNOT_TXN_ENOTEXISTS;
}
- zone_update_clear(zone->control_update);
- free(zone->control_update);
- zone->control_update = NULL;
+ zone_txn_update_clear(zone);
return KNOT_EOK;
}