From ff1b3d041aa9ea7699fc69c3582d9a3352ea209c Mon Sep 17 00:00:00 2001 From: Thomas Markwalder Date: Fri, 26 Jun 2015 15:52:46 -0400 Subject: [PATCH] [master] Correctly handled v6 lease file entries that do not match to a pool Merged in rt39314. --- RELNOTES | 8 ++++++++ server/confpars.c | 20 +++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/RELNOTES b/RELNOTES index c6707fe7..aa51fff3 100644 --- a/RELNOTES +++ b/RELNOTES @@ -140,6 +140,14 @@ by Eric Young (eay@cryptsoft.com). for the bug report. [ISC-Bugs #38639] +- Corrected an issue in v6 lease file parsing. Prior to this, when encountering + a lease with an address for which no configured pool exists, the server was + declaring the lease file corrupt and incorrectly skipping over the subsequent + entry in the file. The server will now emit a log message indicating that + no pool was found for the address (or prefix) and correctly resume parsing + with the next entry in the lease file. + [ISC-Bugs #39314] + Changes since 4.3.2rc2 - None diff --git a/server/confpars.c b/server/confpars.c index 415a38be..d5534549 100644 --- a/server/confpars.c +++ b/server/confpars.c @@ -4955,9 +4955,10 @@ parse_ia_na_declaration(struct parse *cfile) { &iaaddr->addr) != ISC_R_SUCCESS) { inet_ntop(AF_INET6, &iaaddr->addr, addr_buf, sizeof(addr_buf)); - parse_warn(cfile, "no pool found for address %s", - addr_buf); - return; + log_error("No pool found for IA_NA address %s", + addr_buf); + iasubopt_dereference(&iaaddr, MDL); + continue; } /* remove old information */ @@ -5406,9 +5407,10 @@ parse_ia_ta_declaration(struct parse *cfile) { &iaaddr->addr) != ISC_R_SUCCESS) { inet_ntop(AF_INET6, &iaaddr->addr, addr_buf, sizeof(addr_buf)); - parse_warn(cfile, "no pool found for address %s", - addr_buf); - return; + log_error("No pool found for IA_TA address %s", + addr_buf); + iasubopt_dereference(&iaaddr, MDL); + continue; } /* remove old information */ @@ -5858,9 +5860,9 @@ parse_ia_pd_declaration(struct parse *cfile) { &iapref->addr) != ISC_R_SUCCESS) { inet_ntop(AF_INET6, &iapref->addr, addr_buf, sizeof(addr_buf)); - parse_warn(cfile, "no pool found for address %s", - addr_buf); - return; + log_error("No pool found for prefix %s", addr_buf); + iasubopt_dereference(&iapref, MDL); + continue; } /* remove old information */