diff --git a/util-linux/rdate.c b/util-linux/rdate.c index a5699ebf4..cb180247e 100644 --- a/util-linux/rdate.c +++ b/util-linux/rdate.c @@ -32,11 +32,17 @@ #include #include #include +#include #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 */