OSDN Git Service

Fix (hopefully) bug 976. Need more thorough audit.
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 7 Sep 2006 17:05:44 +0000 (17:05 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 7 Sep 2006 17:05:44 +0000 (17:05 -0000)
Restore erroneously removed FEATURE_UDHCP_SYSLOG.

networking/udhcp/Config.in
networking/udhcp/common.c
networking/udhcp/dhcpc.c
networking/udhcp/dhcpd.c
networking/udhcp/libbb_udhcp.h

index 7732937..3954b46 100644 (file)
@@ -37,6 +37,16 @@ config CONFIG_APP_UDHCPC
 
          See http://udhcp.busybox.net for further details.
 
+config CONFIG_FEATURE_UDHCP_SYSLOG
+       bool "Log udhcp messages to syslog"
+       default n
+       depends on CONFIG_APP_UDHCPD || CONFIG_APP_UDHCPC
+       help
+         If not daemonized, udhcpd prints its messages to stdout/stderr.
+         If this option is selected, it will also log them to syslog.
+
+         See http://udhcp.busybox.net for further details.
+
 config CONFIG_FEATURE_UDHCP_DEBUG
        bool "Compile udhcp with noisy debugging messages"
        default n
index 1ae65f7..c34b3de 100644 (file)
@@ -67,7 +67,7 @@ void udhcp_background(const char *pidfile)
 #endif /* __uClinux__ */
 }
 
-void udhcp_start_log_and_pid(const char *client_server, const char *pidfile)
+void udhcp_start_log_and_pid(const char *pidfile)
 {
        int pid_fd;
 
@@ -82,9 +82,9 @@ void udhcp_start_log_and_pid(const char *client_server, const char *pidfile)
        setlinebuf(stdout);
 
        if (ENABLE_FEATURE_UDHCP_SYSLOG) {
-               openlog(client_server, LOG_PID, LOG_LOCAL0);
+               openlog(bb_applet_name, LOG_PID, LOG_LOCAL0);
                logmode |= LOGMODE_SYSLOG;
        }
 
-       bb_info_msg("%s (v%s) started", client_server, BB_VER);
+       bb_info_msg("%s (v%s) started", bb_applet_name, BB_VER);
 }
index 5b2612e..eb1f1db 100644 (file)
 #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 */
index 8715661..bee4ffd 100644 (file)
@@ -55,7 +55,7 @@ int udhcpd_main(int argc, char *argv[])
        read_config(argc < 2 ? DHCPD_CONF_FILE : argv[1]);
 
        /* Start the log, sanitize fd's, and write a pid file */
-       udhcp_start_log_and_pid("udhcpd", server_config.pidfile);
+       udhcp_start_log_and_pid(server_config.pidfile);
 
        if ((option = find_option(server_config.options, DHCP_LEASE_TIME))) {
                memcpy(&server_config.lease, option->data + 2, 4);
index b353876..ab4ad06 100644 (file)
@@ -21,7 +21,7 @@
 #define COMBINED_BINARY
 
 void udhcp_background(const char *pidfile);
-void udhcp_start_log_and_pid(const char *client_server, const char *pidfile);
+void udhcp_start_log_and_pid(const char *pidfile);
 
 void udhcp_run_script(struct dhcpMessage *packet, const char *name);