Skip to content
Snippets Groups Projects
Commit 16c61ca9 authored by Jan Kadlec's avatar Jan Kadlec
Browse files

Log a warning if mismatched TTLs (do not change)

parent 55a12084
Branches
Tags
No related merge requests found
......@@ -423,7 +423,7 @@ static int shallow_copy_signature(const knot_node_t *from, knot_node_t *to)
if (from_sig == NULL) {
return KNOT_EOK;
}
return knot_node_add_rrset(to, from_sig);
return knot_node_add_rrset(to, from_sig, NULL);
}
/*!
......
......@@ -68,6 +68,31 @@ static inline void knot_node_flags_clear(knot_node_t *node, uint8_t flag)
node->flags &= ~flag;
}
/*----------------------------------------------------------------------------*/
/*!
* \brief Logs a warning if merging RRs with different TTLs.
*
* \param ttl_first TTL of the first RR in the RRSet.
* \param ttl_new TTL to be inserted.
* \param rr RRSet we're adding into.
* \param zname Zone name for logging.
*/
static void ttl_check(uint32_t ttl_first, uint32_t ttl_new,
knot_rrset_t *rr, const knot_dname_t *zname)
{
if (rr->type != KNOT_RRTYPE_RRSIG && (ttl_first != ttl_new) && zname) {
char *zstr = knot_dname_to_str(zname);
char *rrstr = knot_dname_to_str(rr->owner);
char typestr[32];
knot_rrtype_to_string(rr->type, typestr, 32);
log_zone_warning("Zone %s: Record %s, type %s: "
"Inserting different TTL into RRSet.\n",
zstr, rrstr, typestr);
free(zstr);
free(rrstr);
}
}
/*----------------------------------------------------------------------------*/
/* API functions */
/*----------------------------------------------------------------------------*/
......@@ -132,7 +157,8 @@ int knot_node_add_rrset_replace(knot_node_t *node, knot_rrset_t *rrset)
return knot_node_add_rrset_no_merge(node, rrset);
}
int knot_node_add_rrset(knot_node_t *node, knot_rrset_t *rrset)
int knot_node_add_rrset(knot_node_t *node, knot_rrset_t *rrset,
const knot_dname_t *zname)
{
if (node == NULL) {
return KNOT_EINVAL;
......@@ -140,6 +166,8 @@ int knot_node_add_rrset(knot_node_t *node, knot_rrset_t *rrset)
for (uint16_t i = 0; i < node->rrset_count; ++i) {
if (node->rrset_tree[i]->type == rrset->type) {
ttl_check(knot_rrset_rr_ttl(node->rrset_tree[i], 0),
knot_rrset_rr_ttl(rrset, 0), rrset, zname);
int merged, deleted_rrs;
int ret = knot_rrset_merge_sort(node->rrset_tree[i],
rrset, &merged,
......
......@@ -123,11 +123,13 @@ knot_node_t *knot_node_new(const knot_dname_t *owner, knot_node_t *parent,
*
* \param node Node to add the RRSet to.
* \param rrset RRSet to add.
* \param zname Zone owner for error logging.
*
* \retval KNOT_EOK on success.
* \retval KNOT_ERROR if the RRSet could not be inserted.
*/
int knot_node_add_rrset(knot_node_t *node, knot_rrset_t *rrset);
int knot_node_add_rrset(knot_node_t *node, knot_rrset_t *rrset,
const knot_dname_t *zname);
int knot_node_add_rrset_replace(knot_node_t *node, knot_rrset_t *rrset);
......
......@@ -679,7 +679,7 @@ static int insert_rr(knot_zone_contents_t *z, knot_rrset_t *rr, knot_node_t **n,
}
}
return knot_node_add_rrset(*n, rr);
return knot_node_add_rrset(*n, rr, z->apex->owner);
}
static bool to_nsec3_tree(const knot_rrset_t *rr)
......@@ -728,7 +728,7 @@ dbg_zone_exec_detail(
/*! \todo REMOVE RRSET */
if (dupl == KNOT_RRSET_DUPL_MERGE) {
rc = knot_node_add_rrset(*node, rrset);
rc = knot_node_add_rrset(*node, rrset, zone->apex->owner);
} else {
rc = knot_node_add_rrset_no_merge(*node, rrset);
}
......@@ -811,7 +811,7 @@ int knot_zone_contents_add_nsec3_rrset(knot_zone_contents_t *zone,
/*! \todo REMOVE RRSET */
if (dupl == KNOT_RRSET_DUPL_MERGE) {
rc = knot_node_add_rrset(*node, rrset);
rc = knot_node_add_rrset(*node, rrset, zone->apex->owner);
} else {
rc = knot_node_add_rrset_no_merge(*node, rrset);
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment