From: wlodek Date: Mon, 13 Jan 2014 14:06:40 +0000 (+0100) Subject: [2892] Add ServerID checking X-Git-Tag: bind10-1.2.0beta1-release~115^2~16 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9fd55d4b5446d0c3d678b96ceea9750d2fc04ca5;p=thirdparty%2Fkea.git [2892] Add ServerID checking --- diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc index 506eefde82..4996adc4b3 100644 --- a/src/bin/dhcp6/dhcp6_srv.cc +++ b/src/bin/dhcp6/dhcp6_srv.cc @@ -762,6 +762,16 @@ Dhcpv6Srv::createStatusCode(uint16_t code, const std::string& text) { return (option_status); } +void +Dhcpv6Srv::testServerid(const Pkt6Ptr& pkt){ + OptionPtr serverid = pkt->getOption(D6O_SERVERID); + + // I just want to throw exception when server id's don't mach. + if !(getServerID()->getData() == serverid->getData()) + //if received serverid isn't same with our, drop message + isc_throw(ServerID_mismatch, "Receievd serverid isn't ours"); +} + void Dhcpv6Srv::sanityCheck(const Pkt6Ptr& pkt, RequirementLevel clientid, RequirementLevel serverid) { @@ -801,13 +811,21 @@ Dhcpv6Srv::sanityCheck(const Pkt6Ptr& pkt, RequirementLevel clientid, << server_ids.size() << "), exactly 1 expected in message " << pkt->getName()); } - break; + // test server received server id to check if that's ours id + // RFCViolation will be thrown if we didn't get exaclty one server_id so + // checking server_ids.size() here is pointless. + testServerid(pkt); + break; case OPTIONAL: if (server_ids.size() > 1) { isc_throw(RFCViolation, "Too many (" << server_ids.size() << ") server-id options received in " << pkt->getName()); } + if (server_ids.size() == 1) { + // test server received server id to check if that's ours id + testServerid(pkt); + } } }