]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
Properly ignore address hints if we cannot supply them.
authorShane Kerr <shane@isc.org>
Sun, 2 Dec 2007 23:19:02 +0000 (23:19 +0000)
committerShane Kerr <shane@isc.org>
Sun, 2 Dec 2007 23:19:02 +0000 (23:19 +0000)
See RT ticket #17303 for details.

RELNOTES
server/dhcpv6.c

index 59de2fa5da7a56f1ab717eb5dc67e96a8d891de1..919f517bb6a9fb6af7ac525ec610c1604acb6fcb 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -55,6 +55,11 @@ suggested fixes to <dhcp-users@isc.org>.
 
                        Changes since 4.0.0b3
 
+- When addresses were passed as hints to the server in an IA, they were 
+  incorrectly handled, sometimes being treated as an error. Now the 
+  server will treat these as hints and ignore them if it cannot supply
+  a requested address.
+
 - If the client had multiple addresses, and one expired (was not renewed
   by the server), the client would continue to attempt to renew the same
   old address over and over.  Now, the client will omit any expired
index 53df84a5cd4868648838cfbc2b1295e8358a72f4..ca4a495497db694ffb4b979d288da158fd816e48 100644 (file)
@@ -1261,7 +1261,7 @@ reply_process_ia(struct reply_state *reply, struct option_cache *ia) {
                if (status == ISC_R_CANCELED)
                        break;
 
-               if (status != ISC_R_SUCCESS)
+               if ((status != ISC_R_SUCCESS) && (status != ISC_R_ADDRINUSE))
                        goto cleanup;
        }
 
@@ -1627,7 +1627,8 @@ reply_process_addr(struct reply_state *reply, struct option_cache *addr) {
                        status = reply_process_try_addr(reply, &tmp_addr);
 
                        /* Either error out or skip this address. */
-                       if (status != ISC_R_SUCCESS)
+                       if ((status != ISC_R_SUCCESS) && 
+                           (status != ISC_R_ADDRINUSE)) 
                                goto cleanup;
 
                        if (reply->lease == NULL) {