]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5022] Options can only be specified for DHCPv6 pools.
authorMarcin Siodelski <marcin@isc.org>
Wed, 5 Oct 2016 18:56:42 +0000 (20:56 +0200)
committerMarcin Siodelski <marcin@isc.org>
Wed, 5 Oct 2016 18:56:42 +0000 (20:56 +0200)
src/bin/dhcp4/json_config_parser.cc
src/bin/dhcp6/json_config_parser.cc
src/lib/dhcpsrv/parsers/dhcp_parsers.cc
src/lib/dhcpsrv/parsers/dhcp_parsers.h

index 02a5bbca16cdafbe60a0ad15d95fad0b3252fd92..52b554972b70d7493a53c249d0ab198bd7673e55 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <limits>
 #include <iostream>
+#include <netinet/in.h>
 #include <vector>
 #include <map>
 
@@ -61,7 +62,7 @@ public:
     /// @param pools storage container in which to store the parsed pool
     /// upon "commit"
     Pool4Parser(const std::string& param_name,  PoolStoragePtr pools)
-        :PoolParser(param_name, pools) {
+        :PoolParser(param_name, pools, AF_INET) {
     }
 
 protected:
index 9939de3b6f44aeaf454c9ce7cc95be4d8f8619e3..2f304703260404de3974170f3cdbf7d41f935eaa 100644 (file)
@@ -43,6 +43,7 @@
 #include <iostream>
 #include <limits>
 #include <map>
+#include <netinet/in.h>
 #include <vector>
 
 #include <stdint.h>
@@ -78,7 +79,7 @@ public:
     /// @param pools storage container in which to store the parsed pool
     /// upon "commit"
     Pool6Parser(const std::string& param_name,  PoolStoragePtr pools)
-        :PoolParser(param_name, pools) {
+        :PoolParser(param_name, pools, AF_INET6) {
     }
 
 protected:
index efd7e23e72c59a204f96862ceb21db410ffb05d8..b96416cf4b8790da547712322f75644fda3235f3 100644 (file)
@@ -1039,8 +1039,10 @@ void PoolsListParser::commit() {
 }
 
 //****************************** PoolParser ********************************
-PoolParser::PoolParser(const std::string&, PoolStoragePtr pools)
-        :pools_(pools), options_(new CfgOption()) {
+PoolParser::PoolParser(const std::string&, PoolStoragePtr pools,
+                       const uint16_t address_family)
+        :pools_(pools), options_(new CfgOption()),
+         address_family_(address_family) {
 
     if (!pools_) {
         isc_throw(isc::dhcp::DhcpConfigError, "parser logic error: "
@@ -1124,9 +1126,15 @@ PoolParser::build(ConstElementPtr pool_structure) {
     ConstElementPtr option_data = pool_structure->get("option-data");
     if (option_data) {
         try {
+            // Currently we don't support specifying options for the DHCPv4 server.
+            if (address_family_ == AF_INET) {
+                isc_throw(DhcpConfigError, "option-data is not supported for DHCPv4"
+                          " address pools");
+            }
+
             OptionDataListParserPtr option_parser(new OptionDataListParser("option-data",
                                                                            options_,
-                                                                           AF_INET6));
+                                                                           address_family_));
             option_parser->build(option_data);
             option_parser->commit();
             options_->copyTo(*pool->getCfgOption());;
index 4092ccb97f15a2f6272fb8246e79738892e480d4..67f62074c1dce97d4cba9b4218d7d53c67e879ee 100644 (file)
@@ -835,8 +835,10 @@ public:
     /// accept string as first argument.
     /// @param pools is the storage in which to store the parsed pool
     /// upon "commit".
+    /// @param address_family AF_INET (for DHCPv4) or AF_INET6 (for DHCPv6).
     /// @throw isc::dhcp::DhcpConfigError if storage is null.
-    PoolParser(const std::string& dummy, PoolStoragePtr pools);
+    PoolParser(const std::string& dummy, PoolStoragePtr pools,
+               const uint16_t address_family);
 
     /// @brief parses the actual structure
     ///
@@ -882,6 +884,9 @@ protected:
 
     /// A storage for pool specific option values.
     CfgOptionPtr options_;
+
+    /// @brief Address family: AF_INET (for DHCPv4) or AF_INET6 for DHCPv6.
+    uint16_t address_family_;
 };
 
 /// @brief Parser for a list of pools