Commit d3c971ea authored by Thomas Markwalder's avatar Thomas Markwalder
Browse files

[master Merge branch 'trac3362'

b10-dhcp-ddns now checks for NXRRSET on DNS removal, rather than NXDOMAIN
parents 5a65fffe c943bd48
......@@ -214,9 +214,11 @@ NameRemoveTransaction::removingFwdAddrsHandler() {
switch (getDnsUpdateStatus()) {
case DNSClient::SUCCESS: {
// We successfully received a response packet from the server.
// The RCODE will be based on a value-dependent RRset search,
// see RFC 2136 section 3.2.3/3.2.4.
const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
if ((rcode == dns::Rcode::NOERROR()) ||
(rcode == dns::Rcode::NXDOMAIN())) {
(rcode == dns::Rcode::NXRRSET())) {
// We were able to remove it or it wasn't there, now we
// need to remove any other RRs for this FQDN.
transition(REMOVING_FWD_RRS_ST, UPDATE_OK_EVT);
......@@ -318,14 +320,14 @@ NameRemoveTransaction::removingFwdRRsHandler() {
switch (getDnsUpdateStatus()) {
case DNSClient::SUCCESS: {
// We successfully received a response packet from the server.
// The RCODE will be based on a value-dependent RRset search,
// see RFC 2136 section 3.2.3/3.2.4.
const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
// @todo Not sure if NXDOMAIN is ok here, but I think so.
// A Rcode of NXDOMAIN would mean there are no RRs for the FQDN,
// which is fine. We were asked to delete them, they are not there
// so all is well.
if ((rcode == dns::Rcode::NOERROR()) ||
(rcode == dns::Rcode::NXDOMAIN())) {
// We were able to remove the forward mapping. Mark it as done.
(rcode == dns::Rcode::NXRRSET())) {
// We were able to remove them or they were not there (
// Rcode of NXRRSET means there are no matching RRsets).
// In either case, we consider it success and mark it as done.
setForwardChangeCompleted(true);
// If request calls for reverse update then do that next,
......@@ -471,11 +473,14 @@ NameRemoveTransaction::removingRevPtrsHandler() {
switch (getDnsUpdateStatus()) {
case DNSClient::SUCCESS: {
// We successfully received a response packet from the server.
// The RCODE will be based on a value-dependent RRset search,
// see RFC 2136 section 3.2.3/3.2.4.
const dns::Rcode& rcode = getDnsUpdateResponse()->getRcode();
if ((rcode == dns::Rcode::NOERROR()) ||
(rcode == dns::Rcode::NXDOMAIN())) {
// We were able to update the reverse mapping. Mark it as done.
// @todo For now we are also treating NXDOMAIN as success.
(rcode == dns::Rcode::NXRRSET())) {
// We were able to remove the reverse mapping or they were
// not there (Rcode of NXRRSET means there are no matching
// RRsets). In either case, mark it as done.
setReverseChangeCompleted(true);
transition(PROCESS_TRANS_OK_ST, UPDATE_OK_EVT);
} else {
......
......@@ -603,8 +603,8 @@ TEST_F(NameRemoveTransactionTest, removingFwdAddrsHandler_FqdnNotInUse) {
// Run removingFwdAddrsHandler to construct and send the request.
EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
// Simulate receiving a FQDN not in use response.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXDOMAIN());
// Simulate receiving a RRSET does not exist.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
// Run removingFwdAddrsHandler again to process the response.
EXPECT_NO_THROW(name_remove->removingFwdAddrsHandler());
......@@ -963,8 +963,8 @@ TEST_F(NameRemoveTransactionTest, removingFwdRRsHandler_FqdnNotInUse) {
// Run removingFwdRRsHandler to construct and send the request.
EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
// Simulate receiving a FQDN not in use response.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXDOMAIN());
// Simulate receiving a RRSET does not exist response.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
// Run removingFwdRRsHandler again to process the response.
EXPECT_NO_THROW(name_remove->removingFwdRRsHandler());
......@@ -1340,8 +1340,8 @@ TEST_F(NameRemoveTransactionTest, removingRevPtrsHandler_FqdnNotInUse) {
EXPECT_EQ(StateModel::NOP_EVT,
name_remove->getNextEvent());
// Simulate receiving a FQDN not in use response.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXDOMAIN());
// Simulate receiving a RRSET does not exist.
name_remove->fakeResponse(DNSClient::SUCCESS, dns::Rcode::NXRRSET());
// Run removingRevPtrsHandler again to process the response.
EXPECT_NO_THROW(name_remove->removingRevPtrsHandler());
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment