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:
Mark Andrews 2016-07-07 12:52:47 +10:00
parent 434ff87fcb
commit 062b04898b
3 changed files with 24 additions and 6 deletions

View file

@ -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]

View file

@ -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),

View file

@ -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);