diff options
| author | Roy Marples <roy@marples.name> | 2009-04-12 19:16:57 +0000 |
|---|---|---|
| committer | Roy Marples <roy@marples.name> | 2009-04-12 19:16:57 +0000 |
| commit | 572ccfb7e23b6aec55b820433c75e90127c2a006 (patch) | |
| tree | f5102954cab91c97e2b41601b224c3750f6310d7 | |
| parent | 919a8c8bd4f2a3106ae0db58c7e323c89f50ba74 (diff) | |
| download | dhcpcd-572ccfb7e23b6aec55b820433c75e90127c2a006.tar.xz | |
We should ignore DHCP messages without a ServerID, #166.
| -rw-r--r-- | dhcpcd.c | 11 |
1 files changed, 8 insertions, 3 deletions
@@ -456,6 +456,12 @@ handle_dhcp(struct interface *iface, struct dhcp_message **dhcpp) /* We may have found a BOOTP server */ if (get_option_uint8(&type, dhcp, DHO_MESSAGETYPE) == -1) type = 0; + else if (get_option_addr(&addr.s_addr, dhcp, DHO_SERVERID) == -1) { + /* We should ignore invalid NAK messages without a ServerID */ + syslog(LOG_WARNING, "%s: ignoring DHCP message; no Server ID", + iface->name); + return; + } /* We should restart on a NAK */ if (type == DHCP_NAK) { @@ -494,9 +500,8 @@ handle_dhcp(struct interface *iface, struct dhcp_message **dhcpp) lease->frominfo = 0; lease->addr.s_addr = dhcp->yiaddr; lease->server.s_addr = 0; - if (type) - get_option_addr(&lease->server.s_addr, dhcp, - DHO_SERVERID); + if (type != 0) + lease->server.s_addr = addr.s_addr; log_dhcp(LOG_INFO, "offered", iface, dhcp); free(state->offer); state->offer = dhcp; |
