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) | |
download | busybox-w32-239369b3685473094b2661c05634dfbe26f470b1.tar.gz busybox-w32-239369b3685473094b2661c05634dfbe26f470b1.tar.bz2 busybox-w32-239369b3685473094b2661c05634dfbe26f470b1.zip |
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 @@ | |||
32 | #include "signalpipe.h" | 32 | #include "signalpipe.h" |
33 | 33 | ||
34 | static int state; | 34 | static int state; |
35 | /* Something is definitely wrong here. IPv4 addresses | ||
36 | * in variables of type long?? BTW, we use inet_ntoa() | ||
37 | * in the code. Manpage says that struct in_addr has a member of type long (!) | ||
38 | * which holds IPv4 address, and the struct is passed by value (!!) | ||
39 | */ | ||
35 | static unsigned long requested_ip; /* = 0 */ | 40 | static unsigned long requested_ip; /* = 0 */ |
36 | static unsigned long server_addr; | 41 | static unsigned long server_addr; |
37 | static unsigned long timeout; | 42 | static unsigned long timeout; |
@@ -267,7 +272,7 @@ int udhcpc_main(int argc, char *argv[]) | |||
267 | } | 272 | } |
268 | 273 | ||
269 | /* Start the log, sanitize fd's, and write a pid file */ | 274 | /* Start the log, sanitize fd's, and write a pid file */ |
270 | udhcp_start_log_and_pid("udhcpc", client_config.pidfile); | 275 | udhcp_start_log_and_pid(client_config.pidfile); |
271 | 276 | ||
272 | if (read_interface(client_config.interface, &client_config.ifindex, | 277 | if (read_interface(client_config.interface, &client_config.ifindex, |
273 | NULL, client_config.arp) < 0) | 278 | NULL, client_config.arp) < 0) |
@@ -446,8 +451,9 @@ int udhcpc_main(int argc, char *argv[]) | |||
446 | case INIT_SELECTING: | 451 | case INIT_SELECTING: |
447 | /* Must be a DHCPOFFER to one of our xid's */ | 452 | /* Must be a DHCPOFFER to one of our xid's */ |
448 | if (*message == DHCPOFFER) { | 453 | if (*message == DHCPOFFER) { |
449 | if ((temp = get_option(&packet, DHCP_SERVER_ID))) { | 454 | temp = get_option(&packet, DHCP_SERVER_ID); |
450 | memcpy(&server_addr, temp, 4); | 455 | if (temp) { |
456 | server_addr = *(uint32_t*)temp; | ||
451 | xid = packet.xid; | 457 | xid = packet.xid; |
452 | requested_ip = packet.yiaddr; | 458 | requested_ip = packet.yiaddr; |
453 | 459 | ||
@@ -465,12 +471,12 @@ int udhcpc_main(int argc, char *argv[]) | |||
465 | case RENEWING: | 471 | case RENEWING: |
466 | case REBINDING: | 472 | case REBINDING: |
467 | if (*message == DHCPACK) { | 473 | if (*message == DHCPACK) { |
468 | if (!(temp = get_option(&packet, DHCP_LEASE_TIME))) { | 474 | temp = get_option(&packet, DHCP_LEASE_TIME); |
475 | if (!temp) { | ||
469 | bb_error_msg("No lease time with ACK, using 1 hour lease"); | 476 | bb_error_msg("No lease time with ACK, using 1 hour lease"); |
470 | lease = 60 * 60; | 477 | lease = 60 * 60; |
471 | } else { | 478 | } else { |
472 | memcpy(&lease, temp, 4); | 479 | lease = ntohl(*(uint32_t*)temp); |
473 | lease = ntohl(lease); | ||
474 | } | 480 | } |
475 | 481 | ||
476 | /* enter bound state */ | 482 | /* enter bound state */ |