summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--RELNOTES7
-rw-r--r--server/failover.c11
3 files changed, 15 insertions, 4 deletions
diff --git a/.gitignore b/.gitignore
index 84a709de..80d7da00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -25,6 +25,7 @@ server/dhcpd
server/tests/dhcpd_unittests
server/tests/hash_unittests
server/tests/legacy_unittests
+server/tests/leaseq_unittests
server/tests/load_bal_unittests
server/tests/test-suite.log
tests/libt_api.a
diff --git a/RELNOTES b/RELNOTES
index 65adecfe..078a8cd6 100644
--- a/RELNOTES
+++ b/RELNOTES
@@ -156,6 +156,13 @@ by Eric Young (eay@cryptsoft.com).
to Jiri Popelka at Red Hat for reporting the issue.
[ISC-Bugs #39952]
+- A failover primary server will now accept a binding status update from the
+ secondary which transitions a lease from ACTIVE to ABANDONED. This accounts
+ for instances in which a client declines a lease and only the secondary
+ server receives it. Prior to this the primary server would reject such an
+ update as an "invalid state transition".
+ [ISC_BUGS #25180]
+
Changes since 4.3.3b1
- None
diff --git a/server/failover.c b/server/failover.c
index a3a0383c..f6e9a6d7 100644
--- a/server/failover.c
+++ b/server/failover.c
@@ -3,7 +3,7 @@
Failover protocol support code... */
/*
- * Copyright (c) 2004-2015 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 2004-2016 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1999-2003 by Internet Software Consortium
*
* Permission to use, copy, modify, and distribute this software for any
@@ -6075,9 +6075,12 @@ normal_binding_state_transition_check (struct lease *lease,
lease. */
if (state -> i_am == primary) {
/* Except that the client may send the DHCPRELEASE
- to the secondary, and we have to accept that. */
- if (binding_state == FTS_RELEASED)
- return binding_state;
+ to the secondary. We also allow for when the
+ secondary gets a DECLINE and the primary does not.*/
+ if ((binding_state == FTS_RELEASED) ||
+ (binding_state == FTS_ABANDONED))
+ return binding_state;
+
new_state = lease -> binding_state;
goto out;
}