dhcpd: reply with NAK to clients in INIT-REBOOT state w/o existing lease

We were not responding to them at all.

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2010-11-28 21:51:44 +01:00
parent 1c31e9e82b
commit 713d241852

View File

@ -448,9 +448,9 @@ int udhcpd_main(int argc UNUSED_PARAM, char **argv)
/* Get SERVER_ID if present */
server_id_opt = udhcp_get_option(&packet, DHCP_SERVER_ID);
if (server_id_opt) {
uint32_t server_id_net;
move_from_unaligned32(server_id_net, server_id_opt);
if (server_id_net != server_config.server_nip) {
uint32_t server_id_network_order;
move_from_unaligned32(server_id_network_order, server_id_opt);
if (server_id_network_order != server_config.server_nip) {
/* client talks to somebody else */
log1("server ID doesn't match, ignoring");
continue;
@ -584,11 +584,15 @@ o DHCPREQUEST generated during REBINDING state:
send_ACK(&packet, lease->lease_nip);
break;
}
if (server_id_opt) {
/* client was talking specifically to us.
* "No, we don't have this IP for you". */
/* No lease for this MAC, or lease IP != requested IP */
if (server_id_opt /* client is in SELECTING state */
|| requested_ip_opt /* client is in INIT-REBOOT state */
) {
/* "No, we don't have this IP for you" */
send_NAK(&packet);
}
} /* else: client is in RENEWING or REBINDING, do not answer */
break;
case DHCPDECLINE: