summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>1997-12-02 09:28:08 +0000
committerTed Lemon <source@isc.org>1997-12-02 09:28:08 +0000
commit355bf452dc475a2cbaafd38bcf3a43db78c122df (patch)
tree17dee169e25a96f5db01d56ac23ee85612e81be3
parentec8d21a78395a700079ba13b38d62daae2815053 (diff)
downloadisc-dhcp-355bf452dc475a2cbaafd38bcf3a43db78c122df.tar.gz
If we're responding to a BOOTP request, hunt for a lease that's applicable - there might be more than one lease matching the network and the hardware address.
-rw-r--r--server/dhcp.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/server/dhcp.c b/server/dhcp.c
index 08167e65..7a6a1d1f 100644
--- a/server/dhcp.c
+++ b/server/dhcp.c
@@ -42,7 +42,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dhcp.c,v 1.55 1997/12/02 09:07:03 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dhcp.c,v 1.56 1997/12/02 09:28:08 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -1190,11 +1190,17 @@ struct lease *find_lease (packet, share, ours)
packet -> raw -> hlen);
/* Find the lease that's on the network the packet came from
(if any). */
- for (; hw_lease; hw_lease = hw_lease -> n_hw)
- if (hw_lease -> shared_network == share)
- break;
- if (hw_lease && (hw_lease -> flags & ABANDONED_LEASE))
- hw_lease = (struct lease *)0;
+ for (; hw_lease; hw_lease = hw_lease -> n_hw) {
+ if (hw_lease -> shared_network == share) {
+ if (hw_lease -> flags & ABANDONED_LEASE)
+ continue;
+ if (packet -> packet_type)
+ break;
+ if (hw_lease -> flags &
+ (BOOTP_LEASE | DYNAMIC_BOOTP_OK))
+ break;
+ }
+ }
/* Try to find a lease that's been allocated to the client's
IP address. */