]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
[master] Failover primary now accepts secondary updates from active to abandoned
authorThomas Markwalder <tmark@isc.org>
Mon, 18 Jan 2016 14:21:15 +0000 (09:21 -0500)
committerThomas Markwalder <tmark@isc.org>
Mon, 18 Jan 2016 14:21:15 +0000 (09:21 -0500)
    Merges in rt25189.

.gitignore
RELNOTES
server/failover.c

index 84a709defb957b8b73d1eec30d6d34edb5b3ec55..80d7da008961c257e5314c7fa6ade8c0912c5654 100644 (file)
@@ -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
index 65adecfe3e73f5ee1d8bb5820f88811b301a0b2f..078a8cd69da97344b0fecfe11527224962c6657a 100644 (file)
--- 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
 
index a3a0383c4675dd8053428debb0d73e8a562bf48e..f6e9a6d7fb0e5c21b87ae35673448ec711819478 100644 (file)
@@ -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;
                }