Convert all uses of inet_ntoa() to inet_ntop(). inet_ntop() is POSIX,
supports ipv6 (doesn't matter to ndhc), and does not use a stupid internal static buffer. This fixes some cosmetic print bugs.
This commit is contained in:
parent
cfa22626e4
commit
b89c694bc9
@ -464,9 +464,11 @@ void arp_set_defense_mode(struct client_state_t *cs)
|
|||||||
|
|
||||||
void arp_success(struct client_state_t *cs)
|
void arp_success(struct client_state_t *cs)
|
||||||
{
|
{
|
||||||
|
char clibuf[INET_ADDRSTRLEN];
|
||||||
struct in_addr temp_addr = {.s_addr = arp_dhcp_packet.yiaddr};
|
struct in_addr temp_addr = {.s_addr = arp_dhcp_packet.yiaddr};
|
||||||
|
inet_ntop(AF_INET, &temp_addr, clibuf, sizeof clibuf);
|
||||||
log_line("Lease of %s obtained. Lease time is %ld seconds.",
|
log_line("Lease of %s obtained. Lease time is %ld seconds.",
|
||||||
inet_ntoa(temp_addr), cs->lease);
|
clibuf, cs->lease);
|
||||||
cs->clientAddr = arp_dhcp_packet.yiaddr;
|
cs->clientAddr = arp_dhcp_packet.yiaddr;
|
||||||
cs->dhcpState = DS_BOUND;
|
cs->dhcpState = DS_BOUND;
|
||||||
cs->init = 0;
|
cs->init = 0;
|
||||||
|
@ -596,6 +596,7 @@ int send_discover(struct client_state_t *cs)
|
|||||||
|
|
||||||
int send_selecting(struct client_state_t *cs)
|
int send_selecting(struct client_state_t *cs)
|
||||||
{
|
{
|
||||||
|
char clibuf[INET_ADDRSTRLEN];
|
||||||
struct dhcpmsg packet = init_packet(DHCPREQUEST, cs->xid);
|
struct dhcpmsg packet = init_packet(DHCPREQUEST, cs->xid);
|
||||||
add_u32_option(&packet, DHCP_REQUESTED_IP, cs->clientAddr);
|
add_u32_option(&packet, DHCP_REQUESTED_IP, cs->clientAddr);
|
||||||
add_u32_option(&packet, DHCP_SERVER_ID, cs->serverAddr);
|
add_u32_option(&packet, DHCP_SERVER_ID, cs->serverAddr);
|
||||||
@ -604,8 +605,9 @@ int send_selecting(struct client_state_t *cs)
|
|||||||
add_option_request_list(&packet);
|
add_option_request_list(&packet);
|
||||||
add_option_vendor(&packet);
|
add_option_vendor(&packet);
|
||||||
add_option_hostname(&packet);
|
add_option_hostname(&packet);
|
||||||
log_line("Sending select for %s...",
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr = cs->clientAddr},
|
||||||
inet_ntoa((struct in_addr){.s_addr = cs->clientAddr}));
|
clibuf, sizeof clibuf);
|
||||||
|
log_line("Sending select for %s...", clibuf);
|
||||||
return send_dhcp_raw(&packet);
|
return send_dhcp_raw(&packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
30
ndhc/state.c
30
ndhc/state.c
@ -174,10 +174,13 @@ static int validate_serverid(struct client_state_t *cs, struct dhcpmsg *packet,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (memcmp(&cs->serverAddr, temp, 4)) {
|
if (memcmp(&cs->serverAddr, temp, 4)) {
|
||||||
|
char svrbuf[INET_ADDRSTRLEN];
|
||||||
uint32_t iptmp;
|
uint32_t iptmp;
|
||||||
memcpy(&iptmp, temp, 4);
|
memcpy(&iptmp, temp, 4);
|
||||||
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=iptmp},
|
||||||
|
svrbuf, sizeof svrbuf);
|
||||||
log_line("Received %s with an unexpected server id: %s. Ignoring it.",
|
log_line("Received %s with an unexpected server id: %s. Ignoring it.",
|
||||||
typemsg, inet_ntoa((struct in_addr){.s_addr=iptmp}));
|
typemsg, svrbuf);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
@ -214,8 +217,10 @@ static void an_packet(struct client_state_t *cs, struct dhcpmsg *packet,
|
|||||||
// have received a lease with a different IP than what we had before.
|
// have received a lease with a different IP than what we had before.
|
||||||
if (cs->dhcpState == DS_REQUESTING ||
|
if (cs->dhcpState == DS_REQUESTING ||
|
||||||
memcmp(&packet->yiaddr, &cs->clientAddr, 4)) {
|
memcmp(&packet->yiaddr, &cs->clientAddr, 4)) {
|
||||||
log_line("Accepted a firm offer for %s. Validating...",
|
char clibuf[INET_ADDRSTRLEN];
|
||||||
inet_ntoa((struct in_addr){.s_addr=cs->clientAddr}));
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=cs->clientAddr},
|
||||||
|
clibuf, sizeof clibuf);
|
||||||
|
log_line("Accepted a firm offer for %s. Validating...", clibuf);
|
||||||
if (arp_check(cs, packet) == -1) {
|
if (arp_check(cs, packet) == -1) {
|
||||||
log_warning("Failed to make arp socket. Searching for new lease...");
|
log_warning("Failed to make arp socket. Searching for new lease...");
|
||||||
reinit_selecting(cs, 3000);
|
reinit_selecting(cs, 3000);
|
||||||
@ -242,15 +247,20 @@ static void selecting_packet(struct client_state_t *cs, struct dhcpmsg *packet,
|
|||||||
uint8_t *temp = NULL;
|
uint8_t *temp = NULL;
|
||||||
ssize_t optlen;
|
ssize_t optlen;
|
||||||
if ((temp = get_option_data(packet, DHCP_SERVER_ID, &optlen))) {
|
if ((temp = get_option_data(packet, DHCP_SERVER_ID, &optlen))) {
|
||||||
|
char clibuf[INET_ADDRSTRLEN];
|
||||||
|
char svrbuf[INET_ADDRSTRLEN];
|
||||||
memcpy(&cs->serverAddr, temp, 4);
|
memcpy(&cs->serverAddr, temp, 4);
|
||||||
cs->xid = packet->xid;
|
cs->xid = packet->xid;
|
||||||
cs->clientAddr = packet->yiaddr;
|
cs->clientAddr = packet->yiaddr;
|
||||||
cs->dhcpState = DS_REQUESTING;
|
cs->dhcpState = DS_REQUESTING;
|
||||||
dhcp_wake_ts = curms();
|
dhcp_wake_ts = curms();
|
||||||
num_dhcp_requests = 0;
|
num_dhcp_requests = 0;
|
||||||
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=cs->clientAddr},
|
||||||
|
clibuf, sizeof clibuf);
|
||||||
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=cs->serverAddr},
|
||||||
|
svrbuf, sizeof svrbuf);
|
||||||
log_line("Received an offer of %s from server %s.",
|
log_line("Received an offer of %s from server %s.",
|
||||||
inet_ntoa((struct in_addr){.s_addr=cs->clientAddr}),
|
clibuf, svrbuf);
|
||||||
inet_ntoa((struct in_addr){.s_addr=cs->serverAddr}));
|
|
||||||
} else {
|
} else {
|
||||||
log_line("Invalid offer received: it didn't have a server id.");
|
log_line("Invalid offer received: it didn't have a server id.");
|
||||||
}
|
}
|
||||||
@ -282,9 +292,13 @@ static void selecting_timeout(struct client_state_t *cs, long long nowts)
|
|||||||
|
|
||||||
static void xmit_release(struct client_state_t *cs)
|
static void xmit_release(struct client_state_t *cs)
|
||||||
{
|
{
|
||||||
log_line("Unicasting a release of %s to %s.",
|
char clibuf[INET_ADDRSTRLEN];
|
||||||
inet_ntoa((struct in_addr){.s_addr=cs->clientAddr}),
|
char svrbuf[INET_ADDRSTRLEN];
|
||||||
inet_ntoa((struct in_addr){.s_addr=cs->serverAddr}));
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=cs->clientAddr},
|
||||||
|
clibuf, sizeof clibuf);
|
||||||
|
inet_ntop(AF_INET, &(struct in_addr){.s_addr=cs->serverAddr},
|
||||||
|
svrbuf, sizeof svrbuf);
|
||||||
|
log_line("Unicasting a release of %s to %s.", clibuf, svrbuf);
|
||||||
send_release(cs);
|
send_release(cs);
|
||||||
print_release(cs);
|
print_release(cs);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user