2
0
mirror of https://gitlab.isc.org/isc-projects/dhcp synced 2025-08-31 06:15:55 +00:00

Don't check the lease we have for the client until we've verified that the client thinks it's on the right network

This commit is contained in:
Ted Lemon
1997-03-05 06:18:55 +00:00
parent b4c0cd4579
commit a62eea55ac

View File

@@ -42,7 +42,7 @@
#ifndef lint
static char copyright[] =
"$Id: dhcp.c,v 1.40 1997/02/22 12:25:11 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
"$Id: dhcp.c,v 1.41 1997/03/05 06:18:55 mellon Exp $ Copyright (c) 1995, 1996 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -190,13 +190,6 @@ void dhcprequest (packet)
? inet_ntoa (packet -> raw -> giaddr)
: packet -> interface -> name);
/* If we found a lease for the client but it's not the one the
client asked for, don't send it - some other server probably
made the cut. */
if (lease && !addr_eq (lease -> ip_addr, cip)) {
return;
}
/* If a client on a given network wants to request a lease on
an address on a different network, NAK it. If the Requested
Address option was used, the protocol says that it must have
@@ -208,7 +201,7 @@ void dhcprequest (packet)
IP router, we'll just have to assume that it's cool.
This violates the protocol spec in the case that the client
is in the REBINDING state and broadcasts a DHCPREQUEST on
is in the INIT-REBOOT state and broadcasts a DHCPREQUEST on
the local wire. We're supposed to check ciaddr for
validity in that case, but if the packet was unicast
through a router from a client in the RENEWING state, it
@@ -231,8 +224,9 @@ void dhcprequest (packet)
return;
}
/* If we do know where it came from and we don't know
where it claims to have come from, same deal - fry it. */
/* If we do know where it came from and either we don't
know where it came from at all or it came from a different
shared network than the packet came from, send a nak. */
subnet = find_grouped_subnet (packet -> shared_network, cip);
if (!subnet) {
nak_lease (packet, &cip);
@@ -240,6 +234,13 @@ void dhcprequest (packet)
}
}
/* If we found a lease for the client but it's not the one the
client asked for, don't send it - some other server probably
made the cut. */
if (lease && !addr_eq (lease -> ip_addr, cip)) {
return;
}
/* If we own the lease that the client is asking for,
and it's already been assigned to the client, ack it. */
if (lease &&