From 164f9c7e2f866fb9b45e6f1500a5614a6631995e Mon Sep 17 00:00:00 2001 From: Ted Lemon Date: Tue, 7 Mar 2000 02:50:45 +0000 Subject: [PATCH] Fix corner case where REBIND would be ignored rather than NAKed. --- server/dhcp.c | 8 ++++++-- 1 file 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