Make add_option_(vendor|hostname)() not use ndhc internals.
This change makes it easier to fuzz test, but should have no functional effect on ndhc's behavior.
This commit is contained in:
parent
646931a2bf
commit
6c136c3f85
23
src/dhcp.c
23
src/dhcp.c
@ -403,6 +403,17 @@ bool dhcp_packet_get(struct client_state_t cs[static 1],
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void add_options_vendor_hostname(struct dhcpmsg packet[static 1])
|
||||||
|
{
|
||||||
|
size_t vlen = strlen(client_config.vendor);
|
||||||
|
size_t hlen = strlen(client_config.hostname);
|
||||||
|
if (vlen)
|
||||||
|
add_option_vendor(packet, client_config.vendor, vlen);
|
||||||
|
else
|
||||||
|
add_option_vendor(packet, "ndhc", sizeof "ndhc" - 1);
|
||||||
|
add_option_hostname(packet, client_config.hostname, hlen);
|
||||||
|
}
|
||||||
|
|
||||||
// Initialize a DHCP client packet that will be sent to a server
|
// Initialize a DHCP client packet that will be sent to a server
|
||||||
static void init_packet(struct dhcpmsg packet[static 1], char type)
|
static void init_packet(struct dhcpmsg packet[static 1], char type)
|
||||||
{
|
{
|
||||||
@ -425,8 +436,7 @@ ssize_t send_discover(struct client_state_t cs[static 1])
|
|||||||
add_option_reqip(&packet, cs->clientAddr);
|
add_option_reqip(&packet, cs->clientAddr);
|
||||||
add_option_maxsize(&packet);
|
add_option_maxsize(&packet);
|
||||||
add_option_request_list(&packet);
|
add_option_request_list(&packet);
|
||||||
add_option_vendor(&packet);
|
add_options_vendor_hostname(&packet);
|
||||||
add_option_hostname(&packet);
|
|
||||||
log_line("%s: Discovering DHCP servers...", client_config.interface);
|
log_line("%s: Discovering DHCP servers...", client_config.interface);
|
||||||
return send_dhcp_raw(&packet);
|
return send_dhcp_raw(&packet);
|
||||||
}
|
}
|
||||||
@ -440,8 +450,7 @@ ssize_t send_selecting(struct client_state_t cs[static 1])
|
|||||||
add_option_serverid(&packet, cs->serverAddr);
|
add_option_serverid(&packet, cs->serverAddr);
|
||||||
add_option_maxsize(&packet);
|
add_option_maxsize(&packet);
|
||||||
add_option_request_list(&packet);
|
add_option_request_list(&packet);
|
||||||
add_option_vendor(&packet);
|
add_options_vendor_hostname(&packet);
|
||||||
add_option_hostname(&packet);
|
|
||||||
inet_ntop(AF_INET, &(struct in_addr){.s_addr = cs->clientAddr},
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr = cs->clientAddr},
|
||||||
clibuf, sizeof clibuf);
|
clibuf, sizeof clibuf);
|
||||||
log_line("%s: Sending a selection request for %s...",
|
log_line("%s: Sending a selection request for %s...",
|
||||||
@ -456,8 +465,7 @@ ssize_t send_renew(struct client_state_t cs[static 1])
|
|||||||
packet.ciaddr = cs->clientAddr;
|
packet.ciaddr = cs->clientAddr;
|
||||||
add_option_maxsize(&packet);
|
add_option_maxsize(&packet);
|
||||||
add_option_request_list(&packet);
|
add_option_request_list(&packet);
|
||||||
add_option_vendor(&packet);
|
add_options_vendor_hostname(&packet);
|
||||||
add_option_hostname(&packet);
|
|
||||||
log_line("%s: Sending a renew request...", client_config.interface);
|
log_line("%s: Sending a renew request...", client_config.interface);
|
||||||
return send_dhcp_unicast(cs, &packet);
|
return send_dhcp_unicast(cs, &packet);
|
||||||
}
|
}
|
||||||
@ -470,8 +478,7 @@ ssize_t send_rebind(struct client_state_t cs[static 1])
|
|||||||
add_option_reqip(&packet, cs->clientAddr);
|
add_option_reqip(&packet, cs->clientAddr);
|
||||||
add_option_maxsize(&packet);
|
add_option_maxsize(&packet);
|
||||||
add_option_request_list(&packet);
|
add_option_request_list(&packet);
|
||||||
add_option_vendor(&packet);
|
add_options_vendor_hostname(&packet);
|
||||||
add_option_hostname(&packet);
|
|
||||||
log_line("%s: Sending a rebind request...", client_config.interface);
|
log_line("%s: Sending a rebind request...", client_config.interface);
|
||||||
return send_dhcp_raw(&packet);
|
return send_dhcp_raw(&packet);
|
||||||
}
|
}
|
||||||
|
@ -287,20 +287,18 @@ void add_option_maxsize(struct dhcpmsg *packet)
|
|||||||
htons(sizeof(struct ip_udp_dhcp_packet)));
|
htons(sizeof(struct ip_udp_dhcp_packet)));
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_option_vendor(struct dhcpmsg *packet)
|
void add_option_vendor(struct dhcpmsg *packet, const char * const vendor,
|
||||||
|
size_t vsize)
|
||||||
{
|
{
|
||||||
size_t len = strlen(client_config.vendor);
|
if (vsize)
|
||||||
if (len)
|
add_option_string(packet, DCODE_VENDOR, vendor, vsize);
|
||||||
add_option_string(packet, DCODE_VENDOR, client_config.vendor, len);
|
|
||||||
else
|
|
||||||
add_option_string(packet, DCODE_VENDOR, "ndhc", sizeof "ndhc" - 1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_option_hostname(struct dhcpmsg *packet)
|
void add_option_hostname(struct dhcpmsg *packet, const char * const hostname,
|
||||||
|
size_t hsize)
|
||||||
{
|
{
|
||||||
size_t len = strlen(client_config.hostname);
|
if (hsize)
|
||||||
if (len)
|
add_option_string(packet, DCODE_HOSTNAME, hostname, hsize);
|
||||||
add_option_string(packet, DCODE_HOSTNAME, client_config.hostname, len);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -78,8 +78,10 @@ void add_option_clientid(struct dhcpmsg *packet,
|
|||||||
const char * const clientid, size_t clen);
|
const char * const clientid, size_t clen);
|
||||||
#ifndef NDHS_BUILD
|
#ifndef NDHS_BUILD
|
||||||
void add_option_maxsize(struct dhcpmsg *packet);
|
void add_option_maxsize(struct dhcpmsg *packet);
|
||||||
void add_option_vendor(struct dhcpmsg *packet);
|
void add_option_vendor(struct dhcpmsg *packet, const char * const vendor,
|
||||||
void add_option_hostname(struct dhcpmsg *packet);
|
size_t vsize);
|
||||||
|
void add_option_hostname(struct dhcpmsg *packet, const char * const hostname,
|
||||||
|
size_t hsize);
|
||||||
#endif
|
#endif
|
||||||
uint32_t get_option_router(const struct dhcpmsg * const packet);
|
uint32_t get_option_router(const struct dhcpmsg * const packet);
|
||||||
uint8_t get_option_msgtype(const struct dhcpmsg * const packet);
|
uint8_t get_option_msgtype(const struct dhcpmsg * const packet);
|
||||||
|
Loading…
Reference in New Issue
Block a user