diff options
author | Ted Lemon <source@isc.org> | 1997-12-02 09:28:08 +0000 |
---|---|---|
committer | Ted Lemon <source@isc.org> | 1997-12-02 09:28:08 +0000 |
commit | 355bf452dc475a2cbaafd38bcf3a43db78c122df (patch) | |
tree | 17dee169e25a96f5db01d56ac23ee85612e81be3 | |
parent | ec8d21a78395a700079ba13b38d62daae2815053 (diff) | |
download | isc-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.c | 18 |
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. */ |