mirror of
https://github.com/isc-projects/bind9.git
synced 2026-03-09 17:50:52 -04:00
4406. [bug] getrrsetbyname with a non absolute name could
trigger a infinite recursion bug in lwresd
and named with lwres configured if when combined
with a search list entry the resulting name is
too long. [RT #42694]
(cherry picked from commit 38cc2d14e2)
This commit is contained in:
parent
434ff87fcb
commit
062b04898b
3 changed files with 24 additions and 6 deletions
6
CHANGES
6
CHANGES
|
|
@ -1,3 +1,9 @@
|
|||
4406. [bug] getrrsetbyname with a non absolute name could
|
||||
trigger a infinite recursion bug in lwresd
|
||||
and named with lwres configured if when combined
|
||||
with a search list entry the resulting name is
|
||||
too long. [RT #42694]
|
||||
|
||||
4405. [bug] Change 4342 introduced a regression where you could
|
||||
not remove a delegation in a NSEC3 signed zone using
|
||||
OPTOUT via nsupdate. [RT #42702]
|
||||
|
|
|
|||
|
|
@ -403,14 +403,18 @@ start_lookup(ns_lwdclient_t *client) {
|
|||
INSIST(client->lookup == NULL);
|
||||
|
||||
dns_fixedname_init(&absname);
|
||||
result = ns_lwsearchctx_current(&client->searchctx,
|
||||
dns_fixedname_name(&absname));
|
||||
|
||||
/*
|
||||
* This will return failure if relative name + suffix is too long.
|
||||
* In this case, just go on to the next entry in the search path.
|
||||
* Perform search across all search domains until success
|
||||
* is returned. Return in case of failure.
|
||||
*/
|
||||
if (result != ISC_R_SUCCESS)
|
||||
start_lookup(client);
|
||||
while (ns_lwsearchctx_current(&client->searchctx,
|
||||
dns_fixedname_name(&absname)) != ISC_R_SUCCESS) {
|
||||
if (ns_lwsearchctx_next(&client->searchctx) != ISC_R_SUCCESS) {
|
||||
ns_lwdclient_errorpktsend(client, LWRES_R_FAILURE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
result = dns_lookup_create(cm->mctx,
|
||||
dns_fixedname_name(&absname),
|
||||
|
|
|
|||
|
|
@ -768,6 +768,14 @@ main(void) {
|
|||
test_getrrsetbyname("e.example1.", 1, 46, 2, 0, 1);
|
||||
test_getrrsetbyname("", 1, 1, 0, 0, 0);
|
||||
|
||||
test_getrrsetbyname("123456789.123456789.123456789.123456789."
|
||||
"123456789.123456789.123456789.123456789."
|
||||
"123456789.123456789.123456789.123456789."
|
||||
"123456789.123456789.123456789.123456789."
|
||||
"123456789.123456789.123456789.123456789."
|
||||
"123456789.123456789.123456789.123456789."
|
||||
"123456789", 1, 1, 0, 0, 0);
|
||||
|
||||
if (fails == 0)
|
||||
printf("I:ok\n");
|
||||
return (fails);
|
||||
|
|
|
|||
Loading…
Reference in a new issue