From: Ted Lemon Date: Fri, 2 Jul 1999 17:47:42 +0000 (+0000) Subject: In one-lease-per-client, don't re-release expired leases. X-Git-Tag: V3-BETA-1-PATCH-0~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=15eda2482666252724334793c1fef856ea61003f;p=thirdparty%2Fdhcp.git In one-lease-per-client, don't re-release expired leases. --- diff --git a/server/dhcp.c b/server/dhcp.c index 97207cc36..466490a7f 100644 --- a/server/dhcp.c +++ b/server/dhcp.c @@ -22,7 +22,7 @@ #ifndef lint static char copyright[] = -"$Id: dhcp.c,v 1.96 1999/07/02 17:10:51 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; +"$Id: dhcp.c,v 1.97 1999/07/02 17:47:42 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n"; #endif /* not lint */ #include "dhcpd.h" @@ -894,8 +894,14 @@ void ack_lease (packet, lease, offer, when, msg) do { seek = find_lease_by_uid (lease -> uid, lease -> uid_len); - if (seek == lease) + /* Don't release expired leases, and don't + release the lease we're going to assign. */ + while (seek) { + if (seek != lease && + seek -> ends > cur_time) + break; seek = lease -> n_uid; + } if (seek) { release_lease (seek); } @@ -905,8 +911,12 @@ void ack_lease (packet, lease, offer, when, msg) seek = (find_lease_by_hw_addr (lease -> hardware_addr.haddr, lease -> hardware_addr.hlen)); - if (seek == lease) + while (seek) { + if (seek != lease && + seek -> ends > cur_time) + break; seek = lease -> n_hw; + } if (seek) { release_lease (seek); }