]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5466] Addressed review comments.
authorMarcin Siodelski <marcin@isc.org>
Wed, 7 Mar 2018 09:47:01 +0000 (10:47 +0100)
committerMarcin Siodelski <marcin@isc.org>
Wed, 7 Mar 2018 09:47:01 +0000 (10:47 +0100)
Changes in lease parsing from JSON - moved validation of IP address and
HW address to derived classes.

src/lib/dhcpsrv/lease.cc

index bb5a81ad6e7bce1b4e09b65db778e74e76d7b9f7..5c5947cc9fbed3c9042efbd38adea8651e2fb261 100644 (file)
@@ -130,8 +130,6 @@ Lease::fromElementCommon(const LeasePtr& lease, const data::ConstElementPtr& ele
         isc_throw(Unexpected, "pointer to parsed lease is null");
     }
 
-    bool is_v6 = static_cast<bool>(boost::dynamic_pointer_cast<Lease6>(lease));
-
     // IP address.
     ConstElementPtr ip_address = element->get("ip-address");
     if (!ip_address || (ip_address->getType() != Element::string)) {
@@ -148,13 +146,6 @@ Lease::fromElementCommon(const LeasePtr& lease, const data::ConstElementPtr& ele
                   << " in the parsed lease");
     }
 
-    if (!is_v6 && !io_address->isV4()) {
-        isc_throw(BadValue, "address " << *io_address << " it not an IPv4 address");
-
-    } else if (is_v6 && !io_address->isV6()) {
-        isc_throw(BadValue, "address " << *io_address << " it not an IPv6 address");
-    }
-
     lease->addr_ = *io_address;
 
     // Subnet identifier.
@@ -187,9 +178,6 @@ Lease::fromElementCommon(const LeasePtr& lease, const data::ConstElementPtr& ele
             isc_throw(BadValue, "invalid hardware address "
                       << hw_address->stringValue() << " in the parsed lease");
         }
-
-    } else if (!is_v6) {
-        isc_throw(BadValue, "hw-address not present in the parsed lease");
     }
 
     // cltt
@@ -420,6 +408,17 @@ Lease4::fromElement(const ConstElementPtr& element) {
     // Extract common lease properties into the lease.
     fromElementCommon(boost::dynamic_pointer_cast<Lease>(lease), element);
 
+    // Validate ip-address, which must be an IPv4 address.
+    if (!lease->addr_.isV4()) {
+        isc_throw(BadValue, "address " << lease->addr_ << " it not an IPv4 address");
+    }
+
+    // Make sure the hw-addres is present.
+    if (!lease->hwaddr_) {
+        isc_throw(BadValue, "hw-address not present in the parsed lease");
+    }
+
+
     // Client identifier is IPv4 specific.
     ConstElementPtr client_id = element->get("client-id");
     if (client_id) {
@@ -619,6 +618,11 @@ Lease6::fromElement(const data::ConstElementPtr& element) {
     // Extract common lease properties into the lease.
     fromElementCommon(boost::dynamic_pointer_cast<Lease>(lease), element);
 
+    // Validate ip-address, which must be an IPv6 address.
+    if (!lease->addr_.isV6()) {
+        isc_throw(BadValue, "address " << lease->addr_ << " it not an IPv6 address");
+    }
+
     // lease type
     ConstElementPtr lease_type = element->get("type");
     if (!lease_type || (lease_type->getType() != Element::string)) {