diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-07 17:05:44 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2006-09-07 17:05:44 +0000 |
commit | 239369b3685473094b2661c05634dfbe26f470b1 (patch) | |
tree | ed316732ba1856d03153fcba7a4e47fae92c22c5 /networking/udhcp/dhcpc.c | |
parent | a9801658ee4b7f5717d145818428452f864e1015 (diff) |
Fix (hopefully) bug 976. Need more thorough audit.
Restore erroneously removed FEATURE_UDHCP_SYSLOG.
Diffstat (limited to 'networking/udhcp/dhcpc.c')
-rw-r--r-- | networking/udhcp/dhcpc.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/networking/udhcp/dhcpc.c b/networking/udhcp/dhcpc.c index 5b2612e56..eb1f1db8d 100644 --- a/networking/udhcp/dhcpc.c +++ b/networking/udhcp/dhcpc.c @@ -32,6 +32,11 @@ #include "signalpipe.h" static int state; +/* Something is definitely wrong here. IPv4 addresses + * in variables of type long?? BTW, we use inet_ntoa() + * in the code. Manpage says that struct in_addr has a member of type long (!) + * which holds IPv4 address, and the struct is passed by value (!!) + */ static unsigned long requested_ip; /* = 0 */ static unsigned long server_addr; static unsigned long timeout; @@ -267,7 +272,7 @@ int udhcpc_main(int argc, char *argv[]) } /* Start the log, sanitize fd's, and write a pid file */ - udhcp_start_log_and_pid("udhcpc", client_config.pidfile); + udhcp_start_log_and_pid(client_config.pidfile); if (read_interface(client_config.interface, &client_config.ifindex, NULL, client_config.arp) < 0) @@ -446,8 +451,9 @@ int udhcpc_main(int argc, char *argv[]) case INIT_SELECTING: /* Must be a DHCPOFFER to one of our xid's */ if (*message == DHCPOFFER) { - if ((temp = get_option(&packet, DHCP_SERVER_ID))) { - memcpy(&server_addr, temp, 4); + temp = get_option(&packet, DHCP_SERVER_ID); + if (temp) { + server_addr = *(uint32_t*)temp; xid = packet.xid; requested_ip = packet.yiaddr; @@ -465,12 +471,12 @@ int udhcpc_main(int argc, char *argv[]) case RENEWING: case REBINDING: if (*message == DHCPACK) { - if (!(temp = get_option(&packet, DHCP_LEASE_TIME))) { + temp = get_option(&packet, DHCP_LEASE_TIME); + if (!temp) { bb_error_msg("No lease time with ACK, using 1 hour lease"); lease = 60 * 60; } else { - memcpy(&lease, temp, 4); - lease = ntohl(lease); + lease = ntohl(*(uint32_t*)temp); } /* enter bound state */ |