ntpd: daemonize before DNS resolution
No binary (build failed)
—
(log yok)
| @@ -2213,6 +2213,31 @@ static NOINLINE void ntp_init(char **argv) | |
| // if (opts & OPT_x) /* disable stepping, only slew is allowed */ | |
| // G.time_was_stepped = 1; | |
| + | |
| + | #if ENABLE_FEATURE_NTPD_SERVER |
| + | G_listen_fd = -1; |
| + | if (opts & OPT_l) { |
| + | G_listen_fd = create_and_bind_dgram_or_die(NULL, 123); |
| + | if (G.if_name) { |
| + | if (setsockopt_bindtodevice(G_listen_fd, G.if_name)) |
| + | xfunc_die(); |
| + | } |
| + | socket_want_pktinfo(G_listen_fd); |
| + | setsockopt_int(G_listen_fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY); |
| + | } |
| + | #endif |
| + | /* I hesitate to set -20 prio. -15 should be high enough for timekeeping */ |
| + | if (opts & OPT_N) |
| + | setpriority(PRIO_PROCESS, 0, -15); |
| + | |
| + | /* add_peers() calls can retry DNS resolution (possibly forever). |
| + | * Daemonize before them, or else boot can stall forever. |
| + | */ |
| + | if (!(opts & OPT_n)) { |
| + | bb_daemonize_or_rexec(DAEMON_DEVNULL_STDIO, argv); |
| + | logmode = LOGMODE_NONE; |
| + | } |
| + | |
| if (peers) { | |
| while (peers) | |
| add_peers(llist_pop(&peers)); | |
| @@ -2241,26 +2266,6 @@ static NOINLINE void ntp_init(char **argv) | |
| /* -l but no peers: "stratum 1 server" mode */ | |
| G.stratum = 1; | |
| } | |
| - | #if ENABLE_FEATURE_NTPD_SERVER |
| - | G_listen_fd = -1; |
| - | if (opts & OPT_l) { |
| - | G_listen_fd = create_and_bind_dgram_or_die(NULL, 123); |
| - | if (opts & OPT_I) { |
| - | if (setsockopt_bindtodevice(G_listen_fd, G.if_name)) |
| - | xfunc_die(); |
| - | } |
| - | socket_want_pktinfo(G_listen_fd); |
| - | setsockopt_int(G_listen_fd, IPPROTO_IP, IP_TOS, IPTOS_LOWDELAY); |
| - | } |
| - | #endif |
| - | if (!(opts & OPT_n)) { |
| - | bb_daemonize_or_rexec(DAEMON_DEVNULL_STDIO, argv); |
| - | logmode = LOGMODE_NONE; |
| - | } |
| - | /* I hesitate to set -20 prio. -15 should be high enough for timekeeping */ |
| - | if (opts & OPT_N) |
| - | setpriority(PRIO_PROCESS, 0, -15); |
| - | |
| /* If network is up, syncronization occurs in ~10 seconds. | |
| * We give "ntpd -q" 10 seconds to get first reply, | |
| * then another 50 seconds to finish syncing. | |