2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 14:05:33 +00:00

[2504] Fix getClosestNSEC() when tree.find() results in SUBDOMAIN

When tree.find() results in SUBDOMAIN, the node_path's top contains the
previous node.  Calling previousNode() yet again will return its
further previous node.
This commit is contained in:
Mukund Sivaraman
2012-12-06 15:58:25 +05:30
parent cbf6d3808e
commit 4a9ea530ab

View File

@@ -305,8 +305,16 @@ getClosestNSEC(const ZoneData& zone_data,
}
const ZoneNode* prev_node;
while ((prev_node = zone_data.getZoneTree().previousNode(node_path))
!= NULL) {
if (node_path.getLastComparisonResult().getRelation() ==
NameComparisonResult::SUBDOMAIN) {
// In case the search ended as a sub-domain, the previous node
// is already at the top of node_path.
prev_node = node_path.getLastComparedNode();
} else {
prev_node = zone_data.getZoneTree().previousNode(node_path);
}
while (prev_node != NULL) {
if (!prev_node->isEmpty()) {
const RdataSet* found =
RdataSet::find(prev_node->getData(), RRType::NSEC());
@@ -314,6 +322,7 @@ getClosestNSEC(const ZoneData& zone_data,
return (ConstNodeRRset(prev_node, found));
}
}
prev_node = zone_data.getZoneTree().previousNode(node_path);
}
// This must be impossible and should be an internal bug.
// See the description at the method declaration.