summaryrefslogtreecommitdiff
path: root/server/dhcp.c
diff options
context:
space:
mode:
authorThomas Markwalder <tmark@isc.org>2016-10-04 14:25:25 -0400
committerThomas Markwalder <tmark@isc.org>2016-10-04 14:25:25 -0400
commit3210786b6eb9d28df19bd2f5281f563b1c60b501 (patch)
tree977ee326ffa8997641f688bcd4680c5b3ef0994d /server/dhcp.c
parentb3dc725e2e72be0dd77c577431868e4d45ea30e5 (diff)
downloadisc-dhcp-3210786b6eb9d28df19bd2f5281f563b1c60b501.tar.gz
[master] Server now permits one UID to hold leases in multiple subnets
Merges in rt41358.
Diffstat (limited to 'server/dhcp.c')
-rw-r--r--server/dhcp.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/server/dhcp.c b/server/dhcp.c
index c9b36325..a490f635 100644
--- a/server/dhcp.c
+++ b/server/dhcp.c
@@ -4152,6 +4152,7 @@ int find_lease (struct lease **lp,
* preference, so the first one is the best one.
*/
while (uid_lease) {
+ isc_boolean_t do_release = !packet->raw->ciaddr.s_addr;
#if defined (DEBUG_FIND_LEASE)
log_info ("trying next lease matching client id: %s",
piaddr (uid_lease -> ip_addr));
@@ -4182,6 +4183,9 @@ int find_lease (struct lease **lp,
log_info ("wrong network segment: %s",
piaddr (uid_lease -> ip_addr));
#endif
+ /* Allow multiple leases using the same UID
+ on different subnetworks. */
+ do_release = ISC_FALSE;
goto n_uid;
}
@@ -4197,7 +4201,7 @@ int find_lease (struct lease **lp,
if (uid_lease -> n_uid)
lease_reference (&next,
uid_lease -> n_uid, MDL);
- if (!packet -> raw -> ciaddr.s_addr)
+ if (do_release)
release_lease (uid_lease, packet);
lease_dereference (&uid_lease, MDL);
if (next) {