diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-05-03 23:39:35 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-05-03 23:39:35 +0000 |
commit | 6e6d331d97aa230625c9b50c73f5df9251b8df4b (patch) | |
tree | f5ad77208e9a8da163cb347b5e3ceea648a8b7e7 /networking/udhcp/dhcpd.c | |
parent | f71d916b60079f2009a714e49cb3e83efedbfb77 (diff) | |
download | busybox-w32-6e6d331d97aa230625c9b50c73f5df9251b8df4b.tar.gz busybox-w32-6e6d331d97aa230625c9b50c73f5df9251b8df4b.tar.bz2 busybox-w32-6e6d331d97aa230625c9b50c73f5df9251b8df4b.zip |
udhcpc: stop deleting our own pidfile if we daemonize.
udhcp[cd]: stop using atexit magic fir pidfile removal.
Diffstat (limited to '')
-rw-r--r-- | networking/udhcp/dhcpd.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index d85615349..9f96e8bd1 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c | |||
@@ -53,11 +53,11 @@ int udhcpd_main(int argc, char **argv) | |||
53 | udhcp_make_pidfile(server_config.pidfile); | 53 | udhcp_make_pidfile(server_config.pidfile); |
54 | 54 | ||
55 | option = find_option(server_config.options, DHCP_LEASE_TIME); | 55 | option = find_option(server_config.options, DHCP_LEASE_TIME); |
56 | server_config.lease = LEASE_TIME; | ||
56 | if (option) { | 57 | if (option) { |
57 | memcpy(&server_config.lease, option->data + 2, 4); | 58 | memcpy(&server_config.lease, option->data + 2, 4); |
58 | server_config.lease = ntohl(server_config.lease); | 59 | server_config.lease = ntohl(server_config.lease); |
59 | } else | 60 | } |
60 | server_config.lease = LEASE_TIME; | ||
61 | 61 | ||
62 | /* Sanity check */ | 62 | /* Sanity check */ |
63 | num_ips = ntohl(server_config.end) - ntohl(server_config.start) + 1; | 63 | num_ips = ntohl(server_config.end) - ntohl(server_config.start) + 1; |
@@ -72,8 +72,10 @@ int udhcpd_main(int argc, char **argv) | |||
72 | read_leases(server_config.lease_file); | 72 | read_leases(server_config.lease_file); |
73 | 73 | ||
74 | if (read_interface(server_config.interface, &server_config.ifindex, | 74 | if (read_interface(server_config.interface, &server_config.ifindex, |
75 | &server_config.server, server_config.arp) < 0) | 75 | &server_config.server, server_config.arp) < 0) { |
76 | return 1; | 76 | retval = 1; |
77 | goto ret; | ||
78 | } | ||
77 | 79 | ||
78 | /* Setup the signal pipe */ | 80 | /* Setup the signal pipe */ |
79 | udhcp_sp_setup(); | 81 | udhcp_sp_setup(); |
@@ -82,7 +84,8 @@ int udhcpd_main(int argc, char **argv) | |||
82 | while (1) { /* loop until universe collapses */ | 84 | while (1) { /* loop until universe collapses */ |
83 | 85 | ||
84 | if (server_socket < 0) { | 86 | if (server_socket < 0) { |
85 | server_socket = listen_socket(INADDR_ANY, SERVER_PORT, server_config.interface); | 87 | server_socket = listen_socket(INADDR_ANY, SERVER_PORT, |
88 | server_config.interface); | ||
86 | } | 89 | } |
87 | 90 | ||
88 | max_sock = udhcp_sp_fd_set(&rfds, server_socket); | 91 | max_sock = udhcp_sp_fd_set(&rfds, server_socket); |
@@ -90,16 +93,17 @@ int udhcpd_main(int argc, char **argv) | |||
90 | tv.tv_sec = timeout_end - time(0); | 93 | tv.tv_sec = timeout_end - time(0); |
91 | tv.tv_usec = 0; | 94 | tv.tv_usec = 0; |
92 | } | 95 | } |
96 | retval = 0; | ||
93 | if (!server_config.auto_time || tv.tv_sec > 0) { | 97 | if (!server_config.auto_time || tv.tv_sec > 0) { |
94 | retval = select(max_sock + 1, &rfds, NULL, NULL, | 98 | retval = select(max_sock + 1, &rfds, NULL, NULL, |
95 | server_config.auto_time ? &tv : NULL); | 99 | server_config.auto_time ? &tv : NULL); |
96 | } else retval = 0; /* If we already timed out, fall through */ | 100 | } |
97 | |||
98 | if (retval == 0) { | 101 | if (retval == 0) { |
99 | write_leases(); | 102 | write_leases(); |
100 | timeout_end = time(0) + server_config.auto_time; | 103 | timeout_end = time(0) + server_config.auto_time; |
101 | continue; | 104 | continue; |
102 | } else if (retval < 0 && errno != EINTR) { | 105 | } |
106 | if (retval < 0 && errno != EINTR) { | ||
103 | DEBUG("error on select"); | 107 | DEBUG("error on select"); |
104 | continue; | 108 | continue; |
105 | } | 109 | } |
@@ -113,7 +117,7 @@ int udhcpd_main(int argc, char **argv) | |||
113 | continue; | 117 | continue; |
114 | case SIGTERM: | 118 | case SIGTERM: |
115 | bb_info_msg("Received a SIGTERM"); | 119 | bb_info_msg("Received a SIGTERM"); |
116 | return 0; | 120 | goto ret0; |
117 | case 0: break; /* no signal */ | 121 | case 0: break; /* no signal */ |
118 | default: continue; /* signal or error (probably EINTR) */ | 122 | default: continue; /* signal or error (probably EINTR) */ |
119 | } | 123 | } |
@@ -222,7 +226,8 @@ int udhcpd_main(int argc, char **argv) | |||
222 | break; | 226 | break; |
223 | case DHCPRELEASE: | 227 | case DHCPRELEASE: |
224 | DEBUG("Received RELEASE"); | 228 | DEBUG("Received RELEASE"); |
225 | if (lease) lease->expires = time(0); | 229 | if (lease) |
230 | lease->expires = time(0); | ||
226 | break; | 231 | break; |
227 | case DHCPINFORM: | 232 | case DHCPINFORM: |
228 | DEBUG("Received INFORM"); | 233 | DEBUG("Received INFORM"); |
@@ -232,6 +237,10 @@ int udhcpd_main(int argc, char **argv) | |||
232 | bb_info_msg("Unsupported DHCP message (%02x) - ignoring", state[0]); | 237 | bb_info_msg("Unsupported DHCP message (%02x) - ignoring", state[0]); |
233 | } | 238 | } |
234 | } | 239 | } |
235 | 240 | ret0: | |
236 | return 0; | 241 | retval = 0; |
242 | ret: | ||
243 | if (server_config.pidfile) | ||
244 | remove_pidfile(server_config.pidfile); | ||
245 | return retval; | ||
237 | } | 246 | } |