}
policy->soa_minimal_ttl = zone_soa_min_ttl(zone);
- policy->zone_maximal_ttl = 0; // TODO
+ policy->zone_maximal_ttl = zone->max_ttl;
}
#include "knot/dnssec/zone-nsec.h"
#include "knot/dnssec/zone-sign.h"
-static int sign_init(const zone_contents_t *zone, zone_sign_flags_t flags, zone_sign_roll_flags_t roll_flags,
+static int sign_init(zone_contents_t *zone, zone_sign_flags_t flags, zone_sign_roll_flags_t roll_flags,
kdnssec_ctx_t *ctx, zone_sign_reschedule_t *reschedule)
{
assert(zone);
}
}
- // perform key rollover if needed
- r = knot_dnssec_key_rollover(ctx, roll_flags, reschedule);
+ r = zone_contents_adjust_full(zone);
if (r != KNOT_EOK) {
return r;
}
// update policy based on the zone content
-
update_policy_from_zone(ctx->policy, zone);
+ // perform key rollover if needed
+ r = knot_dnssec_key_rollover(ctx, roll_flags, reschedule);
+ if (r != KNOT_EOK) {
+ return r;
+ }
+
// RRSIG handling
ctx->rrsig_drop_existing = flags & ZONE_SIGN_DROP_SIGNATURES;
// Next dependencies force static module!
#include "knot/dnssec/ds_query.h"
#include "knot/dnssec/key-events.h"
+#include "knot/dnssec/policy.h"
#include "knot/dnssec/zone-events.h"
#include "knot/nameserver/query_module.h"
#include "knot/nameserver/process_query.h"
}
}
if (ret == KNOT_EOK || knot_time_cmp(ctx->event_rollover, mod->dnssec->now) <= 0) {
+ update_policy_from_zone(mod->dnssec->policy, qdata->extra->zone->contents);
ret = knot_dnssec_key_rollover(mod->dnssec, KEY_ROLL_ALLOW_KSK_ROLL | KEY_ROLL_ALLOW_ZSK_ROLL, &resch);
}
if (ret == KNOT_EOK) {
return KNOT_EOK;
}
+static int measure_max_ttl(zone_node_t *node, void *data){
+
+ uint32_t *max = data;
+ int rrset_count = node->rrset_count;
+ for (int i = 0; i < rrset_count; i++) {
+ *max = MAX(*max, node->rrs[i].ttl);
+ }
+ return KNOT_EOK;
+}
+
static bool nsec3_params_match(const knot_rdataset_t *rrs,
const dnssec_nsec3_params_t *params,
size_t rdata_pos)
return ret;
}
- measure_size(*tnode, &((zone_adjust_arg_t *)data)->zone->size);
+ zone_adjust_arg_t *arg = data;
+ measure_size(*tnode, &arg->zone->size);
+ measure_max_ttl(*tnode, &arg->zone->max_ttl);
// Connect nodes to their NSEC3 nodes
return adjust_nsec3_pointers(tnode, data);
args->previous_node = node;
measure_size(*tnode, &args->zone->size);
+ measure_max_ttl(*tnode, &args->zone->max_ttl);
// check if this node belongs to correct chain
const knot_rdataset_t *nsec3_rrs = node_rdataset(node, KNOT_RRTYPE_NSEC3);
zone_contents_apply(zone, measure_size, &zone->size);
return zone->size;
}
+
+uint32_t zone_contents_max_ttl(zone_contents_t *zone)
+{
+ zone->max_ttl = 0;
+ zone_contents_apply(zone, measure_max_ttl, &zone->size);
+ return zone->max_ttl;
+}
dnssec_nsec3_params_t nsec3_params;
size_t size;
+ uint32_t max_ttl;
bool dnssec;
} zone_contents_t;
*/
size_t zone_contents_measure_size(zone_contents_t *zone);
+/*!
+ * \brief Obtain maximal TTL above all the records in zone.
+ *
+ * The value is also stored in zone_contents structure.
+ *
+ * \param zone Zone in question.
+ * \return Maximal TTL.
+ */
+uint32_t zone_contents_max_ttl(zone_contents_t *zone);
+
/*! @} */
--- /dev/null
+example.com. 3 SOA dns1.example.com. hostmaster.example.com. 2010111227 21600 3600 604800 3
+example.com. 0 NS dns1.example.com.
+example.com. 2 MX 10 mail.example.com.
+dns1.example.com. 4 A 192.0.2.1
+dns1.example.com. 3 AAAA 2001:db8::1
+foo.example.com. 5 A 192.0.2.4
+mail.example.com. 3 A 192.0.2.3
+mail.example.com. 1 AAAA 2001:db8::3
+
parent.dnssec(parent_zone).enable = True
child = t.server("knot")
-child_zone = t.zone("example.com.")
+child_zone = t.zone("example.com.", storage=".")
t.link(child_zone, child)
def cds_submission():
--- /dev/null
+example.com. 3 SOA dns1.example.com. hostmaster.example.com. 2010111227 21600 3600 604800 3
+example.com. 0 NS dns1.example.com.
+example.com. 2 MX 10 mail.example.com.
+dns1.example.com. 4 A 192.0.2.1
+dns1.example.com. 3 AAAA 2001:db8::1
+foo.example.com. 5 A 192.0.2.4
+mail.example.com. 3 A 192.0.2.3
+mail.example.com. 1 AAAA 2001:db8::3
+
parent.dnssec(parent_zone).enable = True
child = t.server("knot")
-child_zone = t.zone("example.com.")
+child_zone = t.zone("example.com.", storage=".")
t.link(child_zone, child)
def cds_submission():