From: Francis Dupont Date: Sun, 5 Jul 2026 08:58:28 +0000 (+0200) Subject: [#4549] Added client id check X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=47171072aedff491081fd2fc4bebc737df564580;p=thirdparty%2Fkea.git [#4549] Added client id check --- diff --git a/changelog_unreleased/4549-BLQ-running-queries-bugs b/changelog_unreleased/4549-BLQ-running-queries-bugs new file mode 100644 index 0000000000..76a94a7bb7 --- /dev/null +++ b/changelog_unreleased/4549-BLQ-running-queries-bugs @@ -0,0 +1,6 @@ +[bug] fdupont + Corrected Bulk Lease Query processing e.g. now + return an error on bad dhcp-client-identifier option. + Thank you to Qifan Zhang from Palo Alto Networks for + reporting the issue. + (Gitlab #4549) diff --git a/src/hooks/dhcp/lease_query/bulk_lease_query4.cc b/src/hooks/dhcp/lease_query/bulk_lease_query4.cc index e2ff34bf4a..378f95bea7 100644 --- a/src/hooks/dhcp/lease_query/bulk_lease_query4.cc +++ b/src/hooks/dhcp/lease_query/bulk_lease_query4.cc @@ -113,6 +113,12 @@ BulkLeaseQuery4::init() { // Get the client identifier. query_client_id_ = query4_->getOption(DHO_DHCP_CLIENT_IDENTIFIER); if (query_client_id_) { + try { + ClientId client_id(query_client_id_->getData()); + } catch (const Exception&) { + sendDone(BLQ_STATUS_MalformedQuery, "bad client id option"); + return; + } query_mask_ |= 1; } diff --git a/src/hooks/dhcp/lease_query/lease_query_connection.cc b/src/hooks/dhcp/lease_query/lease_query_connection.cc index 570197ca16..611af1b6bf 100644 --- a/src/hooks/dhcp/lease_query/lease_query_connection.cc +++ b/src/hooks/dhcp/lease_query/lease_query_connection.cc @@ -365,7 +365,7 @@ LeaseQueryConnection::processNextQuery() { } // Pop and process waiting queries until queue is empty or list full. while ((max_concurrent_queries_ == 0) || - (max_concurrent_queries_ >= getNumRunningQueries())) { + (max_concurrent_queries_ > getNumRunningQueries())) { BlqQueryPtr query = popPendingQuery(); if (!query) { return; diff --git a/src/hooks/dhcp/lease_query/tests/bulk_lease_query4_unittest.cc b/src/hooks/dhcp/lease_query/tests/bulk_lease_query4_unittest.cc index ce4e89b71a..e4c0f5ce21 100644 --- a/src/hooks/dhcp/lease_query/tests/bulk_lease_query4_unittest.cc +++ b/src/hooks/dhcp/lease_query/tests/bulk_lease_query4_unittest.cc @@ -1047,6 +1047,18 @@ TEST_F(MemfileBulkLeaseQuery4ProcessTest, initQueryInvalidWithStatus) { BLQ_STATUS_MalformedQuery, "multiple queries" }, + { + "bad client id option", + [](Pkt4Ptr lq) { + const vector bad = { 1 }; + OptionPtr cid(new Option(Option::V4, + DHO_DHCP_CLIENT_IDENTIFIER, + bad)); + lq->addOption(cid); + }, + BLQ_STATUS_MalformedQuery, + "bad client id option" + }, { "empty relay id option", [this](Pkt4Ptr lq) { @@ -1056,8 +1068,8 @@ TEST_F(MemfileBulkLeaseQuery4ProcessTest, initQueryInvalidWithStatus) { rai->addOption(opt); lq->addOption(rai); }, - BLQ_STATUS_MalformedQuery, - "empty relay id option" + BLQ_STATUS_MalformedQuery, + "empty relay id option" }, { "empty remote id option", @@ -1068,8 +1080,8 @@ TEST_F(MemfileBulkLeaseQuery4ProcessTest, initQueryInvalidWithStatus) { rai->addOption(opt); lq->addOption(rai); }, - BLQ_STATUS_MalformedQuery, - "empty remote id option" + BLQ_STATUS_MalformedQuery, + "empty remote id option" } };