Teach rdate to timeout in 10 seconds to avoid blocking forever with odd or broken networking setups
No binary (build failed)
—
(log yok)
| @@ -32,11 +32,17 @@ | |
| #include <time.h> | |
| #include <stdlib.h> | |
| #include <unistd.h> | |
| + | #include <signal.h> |
| #include "busybox.h" | |
| static const int RFC_868_BIAS = 2208988800UL; | |
| + | static void socket_timeout() |
| + | { |
| + | bb_error_msg_and_die("timeout connecting to time server\n"); |
| + | } |
| + | |
| static time_t askremotedate(const char *host) | |
| { | |
| unsigned long int nett, localt; | |
| @@ -46,6 +52,10 @@ static time_t askremotedate(const char *host) | |
| if (getservbyname("time", "tcp") != NULL) | |
| port="time"; | |
| + | /* Add a timeout for dead or non accessable servers */ |
| + | alarm(10); |
| + | signal(SIGALRM, socket_timeout); |
| + | |
| fd = xconnect(host, port); | |
| if (safe_read(fd, (void *)&nett, 4) != 4) /* read time from server */ | |