From: Marcin Siodelski Date: Mon, 9 Nov 2015 14:15:04 +0000 (+0100) Subject: [4106] Throw exception from IPC for out of range port. X-Git-Tag: trac4296_base~2^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=17713f39c3593a92797eefa8a57fca32d153a90e;p=thirdparty%2Fkea.git [4106] Throw exception from IPC for out of range port. --- diff --git a/src/bin/dhcp4/dhcp4_dhcp4o6_ipc.cc b/src/bin/dhcp4/dhcp4_dhcp4o6_ipc.cc index 8ac834f1d6..3db23d7e4c 100644 --- a/src/bin/dhcp4/dhcp4_dhcp4o6_ipc.cc +++ b/src/bin/dhcp4/dhcp4_dhcp4o6_ipc.cc @@ -37,9 +37,6 @@ void Dhcp4o6Ipc::open() { Dhcp4o6IpcBase::close(); return; } - if (port > 65534) { - isc_throw(OutOfRange, "DHCP4o6 port " << port); - } int old_fd = socket_fd_; socket_fd_ = Dhcp4o6IpcBase::open(static_cast(port), ENDPOINT_TYPE_V4); diff --git a/src/bin/dhcp6/dhcp6_dhcp4o6_ipc.cc b/src/bin/dhcp6/dhcp6_dhcp4o6_ipc.cc index 00b99a9d9e..2e54ed3042 100644 --- a/src/bin/dhcp6/dhcp6_dhcp4o6_ipc.cc +++ b/src/bin/dhcp6/dhcp6_dhcp4o6_ipc.cc @@ -37,9 +37,6 @@ void Dhcp4o6Ipc::open() { Dhcp4o6IpcBase::close(); return; } - if (port > 65534) { - isc_throw(OutOfRange, "DHCP4o6 port " << port); - } int old_fd = socket_fd_; socket_fd_ = Dhcp4o6IpcBase::open(static_cast(port), ENDPOINT_TYPE_V6); diff --git a/src/lib/dhcpsrv/dhcp4o6_ipc.cc b/src/lib/dhcpsrv/dhcp4o6_ipc.cc index 0a3b6c3aa6..4e25d16643 100644 --- a/src/lib/dhcpsrv/dhcp4o6_ipc.cc +++ b/src/lib/dhcpsrv/dhcp4o6_ipc.cc @@ -40,6 +40,12 @@ Dhcp4o6IpcBase::~Dhcp4o6IpcBase() { } int Dhcp4o6IpcBase::open(const uint16_t port, const EndpointType& endpoint_type) { + // Check if the port value is correct. + if (port > 65534) { + isc_throw(Dhcp4o6IpcError, "specified port " << port << " is out of" + " range. The port value must not be greater than 65534 "); + } + if (port == port_) { // No change: nothing to do return (socket_fd_); diff --git a/src/lib/dhcpsrv/tests/dhcp4o6_ipc_unittest.cc b/src/lib/dhcpsrv/tests/dhcp4o6_ipc_unittest.cc index 7b53e5ed72..bb7cd3152c 100644 --- a/src/lib/dhcpsrv/tests/dhcp4o6_ipc_unittest.cc +++ b/src/lib/dhcpsrv/tests/dhcp4o6_ipc_unittest.cc @@ -531,6 +531,19 @@ TEST_F(Dhcp4o6IpcBaseTest, openError) { EXPECT_EQ(TEST_PORT + 10, ipc.getPort()); } +// This test verifies that the IPC returns an error when trying to bind +// to the out of range port. +TEST_F(Dhcp4o6IpcBaseTest, invalidPortError4) { + TestIpc ipc(65535, TestIpc::ENDPOINT_TYPE_V4); + EXPECT_THROW(ipc.open(), Dhcp4o6IpcError); +} + +// This test verifies that the IPC returns an error when trying to bind +// to the out of range port. +TEST_F(Dhcp4o6IpcBaseTest, invalidPortError6) { + TestIpc ipc(65535, TestIpc::ENDPOINT_TYPE_V6); + EXPECT_THROW(ipc.open(), Dhcp4o6IpcError); +} // This test verifies that receiving packet over the IPC fails when there // is no vendor option present.