diff options
author | Thomas Markwalder <tmark@isc.org> | 2016-10-04 15:04:09 -0400 |
---|---|---|
committer | Thomas Markwalder <tmark@isc.org> | 2016-10-04 15:04:09 -0400 |
commit | 85241f1f27d8b368f2603e51fb68961490a0bced (patch) | |
tree | 0c40cca0e50384b317c998ac033247960048739f /server | |
parent | 3709b7fc844ab8384ba40a1be3cf7916168423e1 (diff) | |
download | isc-dhcp-85241f1f27d8b368f2603e51fb68961490a0bced.tar.gz |
[v4_1_esv] Server now permits one UID to hold leases in multiple subnets
Merges in rt41358.
Diffstat (limited to 'server')
-rw-r--r-- | server/dhcp.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/server/dhcp.c b/server/dhcp.c index 3f50c6a9..88baa0d4 100644 --- a/server/dhcp.c +++ b/server/dhcp.c @@ -3466,6 +3466,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)); @@ -3490,6 +3491,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; } @@ -3505,7 +3509,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) { |