From 9b19d7745f9e5e7e18be9fcba915ede2761993ce Mon Sep 17 00:00:00 2001 From: Thomas Markwalder Date: Fri, 28 Oct 2016 14:20:05 -0400 Subject: [PATCH] [5058] CSVLeaseFile4 now properly loads declined leases src/lib/dhcpsrv/csv_lease_file4.cc CSVLeaseFile4::next() - modified to produce a read error if the hardware address is empty and the lease state is NOT declined. CSVLeaseFile4::readHWAddr() - no longer throws an exception if the hardware address is empty src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc Changed test lease data so invalid records do not have lease state of declined --- src/lib/dhcpsrv/csv_lease_file4.cc | 12 +++++++----- src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc | 5 +++-- src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc | 4 ++-- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/lib/dhcpsrv/csv_lease_file4.cc b/src/lib/dhcpsrv/csv_lease_file4.cc index 2c22c7fa13..6f1d5d5335 100644 --- a/src/lib/dhcpsrv/csv_lease_file4.cc +++ b/src/lib/dhcpsrv/csv_lease_file4.cc @@ -97,6 +97,12 @@ CSVLeaseFile4::next(Lease4Ptr& lease) { // Get the HW address. It should never be empty and the readHWAddr checks // that. HWAddr hwaddr = readHWAddr(row); + uint32_t state = readState(row); + if (hwaddr.hwaddr_.empty() && state != Lease::STATE_DECLINED) { + isc_throw(isc::BadValue, "A blank hardware address is only" + " valid for declined leases"); + } + lease.reset(new Lease4(readAddress(row), HWAddrPtr(new HWAddr(hwaddr)), client_id_vec.empty() ? NULL : &client_id_vec[0], @@ -108,7 +114,7 @@ CSVLeaseFile4::next(Lease4Ptr& lease) { readFqdnFwd(row), readFqdnRev(row), readHostname(row))); - lease->state_ = readState(row); + lease->state_ = state; } catch (std::exception& ex) { // bump the read error count @@ -152,10 +158,6 @@ CSVLeaseFile4::readAddress(const CSVRow& row) { HWAddr CSVLeaseFile4::readHWAddr(const CSVRow& row) { HWAddr hwaddr = HWAddr::fromText(row.readAt(getColumnIndex("hwaddr"))); - if (hwaddr.hwaddr_.empty()) { - isc_throw(isc::BadValue, "hardware address in the lease file" - " must not be empty"); - } return (hwaddr); } diff --git a/src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc b/src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc index 7b575a5784..9bdd3f9297 100644 --- a/src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc +++ b/src/lib/dhcpsrv/tests/csv_lease_file4_unittest.cc @@ -103,7 +103,7 @@ CSVLeaseFile4Test::writeSampleFile() const { "fqdn_fwd,fqdn_rev,hostname,state\n" "192.0.2.1,06:07:08:09:0a:bc,,200,200,8,1,1," "host.example.com,0\n" - "192.0.2.1,,a:11:01:04,200,200,8,1,1,host.example.com,1\n" + "192.0.2.1,,a:11:01:04,200,200,8,1,1,host.example.com,0\n" "192.0.3.15,dd:de:ba:0d:1b:2e:3e:4f,0a:00:01:04,100,100,7," "0,0,,1\n"); } @@ -145,7 +145,8 @@ TEST_F(CSVLeaseFile4Test, parse) { EXPECT_EQ(Lease::STATE_DEFAULT, lease->state_); } - // Second lease is malformed - HW address is empty. + // Second lease is malformed - HW address is empty when state + // is not delcined. { SCOPED_TRACE("Second lease malformed"); EXPECT_FALSE(lf.next(lease)); diff --git a/src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc b/src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc index 4b9393d814..7b030eb47d 100644 --- a/src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc +++ b/src/lib/dhcpsrv/tests/lease_file_loader_unittest.cc @@ -181,7 +181,7 @@ TEST_F(LeaseFileLoaderTest, loadWrite4) { "100,135,7,0,0,,1\n"; std::string c_1 = "192.0.2.3,,a:11:01:04," - "200,200,8,1,1,host.example.com,1\n"; + "200,200,8,1,1,host.example.com,0\n"; // Create lease file with leases for 192.0.2.1, 192.0.3.15. The lease // entry for the 192.0.2.3 is invalid (lacks HW address) and should @@ -427,7 +427,7 @@ TEST_F(LeaseFileLoaderTest, loadMaxErrors) { std::string a_2 = "192.0.2.1,06:07:08:09:0a:bc,," "200,500,8,1,1,host.example.com,1\n"; - std::string b_1 = "192.0.2.3,,a:11:01:04,200,200,8,1,1,host.example.com,1\n"; + std::string b_1 = "192.0.2.3,,a:11:01:04,200,200,8,1,1,host.example.com,0\n"; std::string c_1 = "192.0.2.10,01:02:03:04:05:06,,200,300,8,1,1,,1\n"; -- 2.47.3