--- /dev/null
+[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)
// 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;
}
}
// 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;
BLQ_STATUS_MalformedQuery,
"multiple queries"
},
+ {
+ "bad client id option",
+ [](Pkt4Ptr lq) {
+ const vector<uint8_t> 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) {
rai->addOption(opt);
lq->addOption(rai);
},
- BLQ_STATUS_MalformedQuery,
- "empty relay id option"
+ BLQ_STATUS_MalformedQuery,
+ "empty relay id option"
},
{
"empty remote id option",
rai->addOption(opt);
lq->addOption(rai);
},
- BLQ_STATUS_MalformedQuery,
- "empty remote id option"
+ BLQ_STATUS_MalformedQuery,
+ "empty remote id option"
}
};