diff --git a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc index 599a78cb2b..5ad7e43188 100644 --- a/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc +++ b/src/hooks/dhcp/pgsql_cb/pgsql_cb_dhcp6.cc @@ -4448,7 +4448,7 @@ TaggedStatementArray tagged_statements = { { OID_INT8, // 10 min_preferred_lifetime OID_INT8, // 11 max_preferred_lifetime OID_TIMESTAMP, // 12 modification_ts - OID_TEXT, // 13 user_conetx + OID_TEXT, // 13 user_context OID_VARCHAR // 14 name (of class to update) }, "UPDATE_CLIENT_CLASS6", @@ -4472,7 +4472,7 @@ TaggedStatementArray tagged_statements = { { OID_INT8, // 10 min_preferred_lifetime OID_INT8, // 11 max_preferred_lifetime OID_TIMESTAMP, // 12 modification_ts - OID_TEXT, // 13 user_conetx + OID_TEXT, // 13 user_context OID_VARCHAR // 14 name (of class to update) }, "UPDATE_CLIENT_CLASS6_SAME_POSITION", diff --git a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc index 07107a2baf..0f2c30357a 100644 --- a/src/lib/dhcpsrv/parsers/client_class_def_parser.cc +++ b/src/lib/dhcpsrv/parsers/client_class_def_parser.cc @@ -142,6 +142,12 @@ ClientClassDefParser::parse(ClientClassDictionaryPtr& class_dictionary, // Parse user context ConstElementPtr user_context = class_def_cfg->get("user-context"); + if (user_context) { + if (user_context->getType() != Element::map) { + isc_throw(isc::dhcp::DhcpConfigError, "User context has to be a map (" + << user_context->getPosition() << ")"); + } + } // Let's try to parse the only-if-required flag bool required = false; diff --git a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc index a12a1ea99a..082954cb0c 100644 --- a/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc +++ b/src/lib/dhcpsrv/tests/client_class_def_parser_unittest.cc @@ -1438,5 +1438,17 @@ TEST_F(ClientClassDefParserTest, preferredLifetimeTests) { } } +// Verifies that an invalid user-context fails to parse. +TEST_F(ClientClassDefParserTest, invalidUserContext) { + std::string cfg_text = + "{ \n" + " \"name\": \"one\", \n" + " \"user-context\": \"i am not a map\" \n" + "} \n"; + + ClientClassDefPtr cclass; + ASSERT_THROW_MSG(cclass = parseClientClassDef(cfg_text, AF_INET), + DhcpConfigError, "User context has to be a map (:3:20)"); +} } // end of anonymous namespace diff --git a/src/share/database/scripts/mysql/dhcpdb_create.mysql b/src/share/database/scripts/mysql/dhcpdb_create.mysql index c73e544ee1..19fa95a628 100644 --- a/src/share/database/scripts/mysql/dhcpdb_create.mysql +++ b/src/share/database/scripts/mysql/dhcpdb_create.mysql @@ -4344,7 +4344,7 @@ CREATE TRIGGER dhcp6_shared_network_BDEL BEFORE DELETE ON dhcp6_shared_network END $$ DELIMITER ; --- Add user_context column to Client class tables. +-- Add user_context column to client class tables. ALTER TABLE dhcp4_client_class ADD COLUMN user_context LONGTEXT NULL; ALTER TABLE dhcp6_client_class ADD COLUMN user_context LONGTEXT NULL; diff --git a/src/share/database/scripts/mysql/upgrade_013_to_014.sh.in b/src/share/database/scripts/mysql/upgrade_013_to_014.sh.in index ffba56e97b..b8bb124a41 100644 --- a/src/share/database/scripts/mysql/upgrade_013_to_014.sh.in +++ b/src/share/database/scripts/mysql/upgrade_013_to_014.sh.in @@ -110,7 +110,7 @@ CREATE TRIGGER dhcp6_shared_network_BDEL BEFORE DELETE ON dhcp6_shared_network END $$ DELIMITER ; --- Add user_context column to Client class tables. +-- Add user_context column to client class tables. ALTER TABLE dhcp4_client_class ADD COLUMN user_context LONGTEXT NULL; ALTER TABLE dhcp6_client_class ADD COLUMN user_context LONGTEXT NULL; diff --git a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql index a087724096..8a330ead31 100644 --- a/src/share/database/scripts/pgsql/dhcpdb_create.pgsql +++ b/src/share/database/scripts/pgsql/dhcpdb_create.pgsql @@ -4969,7 +4969,7 @@ END; $dhcp6_shared_network_BDEL$ LANGUAGE plpgsql; --- Add user_context column to Client class tables. +-- Add user_context column to client class tables. ALTER TABLE dhcp4_client_class ADD COLUMN user_context JSON DEFAULT NULL; ALTER TABLE dhcp6_client_class ADD COLUMN user_context JSON DEFAULT NULL; diff --git a/src/share/database/scripts/pgsql/upgrade_011_to_012.sh.in b/src/share/database/scripts/pgsql/upgrade_011_to_012.sh.in index cc3fccaa4b..3e048c44c9 100644 --- a/src/share/database/scripts/pgsql/upgrade_011_to_012.sh.in +++ b/src/share/database/scripts/pgsql/upgrade_011_to_012.sh.in @@ -90,7 +90,7 @@ END; \$dhcp6_shared_network_BDEL\$ LANGUAGE plpgsql; --- Add user_context column to Client class tables. +-- Add user_context column to client class tables. ALTER TABLE dhcp4_client_class ADD COLUMN user_context JSON DEFAULT NULL; ALTER TABLE dhcp6_client_class ADD COLUMN user_context JSON DEFAULT NULL;