summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Lemon <source@isc.org>2000-03-07 02:50:45 +0000
committerTed Lemon <source@isc.org>2000-03-07 02:50:45 +0000
commit164f9c7e2f866fb9b45e6f1500a5614a6631995e (patch)
tree7f3d149a6eacad2f65fa3663414e6f9592d264b6
parentcb9cf4bd2bdbd38399f8bed943b20783f6200877 (diff)
downloadisc-dhcp-164f9c7e2f866fb9b45e6f1500a5614a6631995e.tar.gz
Fix corner case where REBIND would be ignored rather than NAKed.
-rw-r--r--server/dhcp.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/server/dhcp.c b/server/dhcp.c
index 4b92b912..6299ce4a 100644
--- a/server/dhcp.c
+++ b/server/dhcp.c
@@ -22,7 +22,7 @@
#ifndef lint
static char copyright[] =
-"$Id: dhcp.c,v 1.140 2000/03/06 23:33:52 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
+"$Id: dhcp.c,v 1.141 2000/03/07 02:50:45 mellon Exp $ Copyright (c) 1995, 1996, 1997, 1998, 1999 The Internet Software Consortium. All rights reserved.\n";
#endif /* not lint */
#include "dhcpd.h"
@@ -215,7 +215,10 @@ void dhcprequest (packet, ms_nulltp)
If ciaddr was specified and Requested Address was not, then
we really only know for sure what network a packet came from
if it came through a BOOTP gateway - if it came through an
- IP router, we'll just have to assume that it's cool.
+ IP router, we can't respond. However, a client in REBINDING
+ state with the wrong IP address will also look like this, and
+ this is more likely, so we NAK these packets - if the packet
+ came through a router, the NAK won't reach the client anyway.
If we don't think we know where the packet came from, it
came through a gateway from an unknown network, so it's not
@@ -251,6 +254,7 @@ void dhcprequest (packet, ms_nulltp)
if (!packet -> shared_network ||
(packet -> raw -> ciaddr.s_addr &&
packet -> raw -> giaddr.s_addr) ||
+ (!oc && packet -> raw -> ciaddr.s_addr) ||
(oc && !packet -> raw -> ciaddr.s_addr)) {
/* If we don't know where it came from but we do know