BIND 10 #2267: new generateRRsetFromIterator doesn't handle RRSIGs correctly
BIND 10 Development
do-not-reply at isc.org
Tue Sep 18 01:34:57 UTC 2012
#2267: new generateRRsetFromIterator doesn't handle RRSIGs correctly
-------------------------------------+-------------------------------------
Reporter: jinmei | Owner:
Type: defect | Status: new
Priority: medium | Milestone: Next-
Component: Unclassified | Sprint-Proposed
Sensitive: 0 | Keywords:
Sub-Project: DNS | Defect Severity: N/A
Estimated Difficulty: 0 | Feature Depending on Ticket:
Total Hours: 0 | Add Hours to Ticket: 0
| Internal?: 0
-------------------------------------+-------------------------------------
The new (memory-efficient) version of in memory loader from another
data source has a bug. It cannot load RRSIGs correctly if a single
name has multiple types of RRsets and their RRSIGs.
It can be confirmed by applying the following patch to the unit test.
load() will fail with an exception.
{{{#!diff
const char* rrset_data[] = {
"example.org. 3600 IN SOA ns1.example.org. bugs.x.w.example.org. 68
3600 300 3600000 3600",
"a.example.org. 3600 IN A 192.168.0.1",
+ "a.example.org. 3600 IN RRSIG A 5 3 3600 20150420235959
20051021000000 "
+ "40430 example.org. FAKEFAKEFAKE",
"a.example.org. 3600 IN MX 10
mail.example.org.",
NULL
};
}}}
Even ignoring this bug, the current implementation doesn't seem to be
very understandable due to the last_rrset_ member variable. It's
quite difficult to keep track of this thing.
My suggested fix is this:
- simplify generateRRsetFromIterator() so it now just passes each
RRset in the returned order.
- implement the buffer logic in `InMemoryClientImpl::addFromLoad()`.
it ensures a matched pair of RRset and (if signed) its RRSIG RRset
is generated. (it can assume if the different names of RRsets aren't
interleaved.) To implement this, it's probably better to introduce
a helper `Loader` class.
- revise `InMemoryClientImpl::addFromLoad()` so it takes RRset and its
RRSIG. Then we won't need the `last_rrset_` magic.
- `InMemoryClient::add()` (and maybe some tests) will need to be updated.
Also, we should merge the older loadFromIterator test.
I'd also deprecate the impl class. The in-memory client is now almost
private itself, so the advantages of pimpl aren't that big.
--
Ticket URL: <http://bind10.isc.org/ticket/2267>
BIND 10 Development <http://bind10.isc.org>
BIND 10 Development
More information about the bind10-tickets
mailing list