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

Changed rdata adjustment in zone so that it now saves references of closest enclosers.

parent d6cb108c
No related branches found
No related tags found
No related merge requests found
......@@ -117,30 +117,74 @@ static void dnslib_zone_adjust_rdata_item(dnslib_rdata_t *rdata,
dnslib_zone_t *zone, int pos)
{
const dnslib_rdata_item_t *dname_item
= dnslib_rdata_item(rdata, pos);
= dnslib_rdata_item(rdata, pos);
if (dname_item != NULL) {
dnslib_dname_t *dname = dname_item->dname;
const dnslib_node_t *n = NULL;
const dnslib_node_t *closest_encloser = NULL;
const dnslib_node_t *prev = NULL;
n = dnslib_zone_find_node(zone, dname);
int ret = dnslib_zone_find_dname(zone, dname, &n,
&closest_encloser, &prev);
if (n == NULL) {
// n = dnslib_zone_find_node(zone, dname);
if (ret == DNSLIB_EBADARG || ret == DNSLIB_EBADZONE) {
// TODO: do some cleanup if needed
return;
}
if (n->owner == dname_item->dname) {
return;
assert(ret != DNSLIB_ZONE_NAME_FOUND
|| n == closest_encloser);
if (ret != DNSLIB_ZONE_NAME_FOUND
&& (closest_encloser != NULL)) {
debug_dnslib_zdump("Saving closest encloser to RDATA."
"\n");
// save pointer to the closest encloser
dnslib_rdata_item_t *item =
dnslib_rdata_get_item(rdata, pos);
assert(item->dname != NULL);
//assert(item->dname->node == NULL);
//skip_insert(list, (void *)item->dname,
// (void *)closest_encloser->owner, NULL);
item->dname->node = closest_encloser->owner->node;
}
debug_dnslib_zone("Replacing dname %s by reference to "
"dname %s in zone.\n", dname->name, n->owner->name);
/*!< \note This will not delete duplicated dnames.
Has to be removed as soon as possible !!! */
// dnslib_rdata_item_set_dname(rdata, pos, n->owner);
dname->node = n->owner->node;
// dnslib_dname_free(&dname);
}
// const dnslib_rdata_item_t *dname_item
// = dnslib_rdata_item(rdata, pos);
// if (dname_item != NULL) {
// dnslib_dname_t *dname = dname_item->dname;
// const dnslib_node_t *n = NULL;
// int ret = dnslib_zone_find_dname(zone, dname, &n,
// &closest_encloser, &prev);
// n = dnslib_zone_find_node(zone, dname);
// if (ret == DNSLIB_EBADARG || ret == DNSLIB_EBADZONE) {
// // TODO: do some cleanup if needed
// return;
// }
// n = dnslib_zone_find_node(zone, dname);
// if (n == NULL) {
// return;
// }
// if (n->owner == dname_item->dname) {
// return;
// }
// debug_dnslib_zone("Replacing dname %s by reference to "
// "dname %s in zone.\n", dname->name, n->owner->name);
// /*!< \note This will not delete duplicated dnames.
// Has to be removed as soon as possible !!! */
//// dnslib_rdata_item_set_dname(rdata, pos, n->owner);
// dname->node = n->owner->node;
//// dnslib_dname_free(&dname);
// }
}
/*----------------------------------------------------------------------------*/
......@@ -260,7 +304,7 @@ DEBUG_DNSLIB_ZONE(
);
// adjust domain names in RDATA
// dnslib_zone_adjust_rrsets(node, zone);
dnslib_zone_adjust_rrsets(node, zone);
DEBUG_DNSLIB_ZONE(
if (node->parent) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment