X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=util-linux%2Frdate.c;h=c9a7ffeabe2970ae7ce5ca664c6043fa0fd8b3b2;hb=50547c07451d07178eeb64e7d8637952b427bd4c;hp=04a76129a3f62d2e199ad042c8d412bc4313deb0;hpb=c9fc633f9ed09143a63f62f26b0afb619a31273c;p=oweals%2Fbusybox.git diff --git a/util-linux/rdate.c b/util-linux/rdate.c index 04a76129a..c9a7ffeab 100644 --- a/util-linux/rdate.c +++ b/util-linux/rdate.c @@ -32,36 +32,34 @@ #include #include #include +#include + #include "busybox.h" static const int RFC_868_BIAS = 2208988800UL; +static void socket_timeout(int sig) +{ + bb_error_msg_and_die("timeout connecting to time server"); +} + static time_t askremotedate(const char *host) { - struct hostent *h; - struct sockaddr_in s_in; - struct servent *tserv; unsigned long int nett, localt; + struct sockaddr_in s_in; int fd; - h = xgethostbyname(host); /* get the IP addr */ - memcpy(&s_in.sin_addr, h->h_addr, sizeof(s_in.sin_addr)); - - s_in.sin_port = htons(37); /* find port # */ - if ((tserv = getservbyname("time", "tcp")) != NULL) - s_in.sin_port = tserv->s_port; - - s_in.sin_family = AF_INET; + bb_lookup_host(&s_in, host, "time"); - if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) /* get net connection */ - perror_msg_and_die("socket"); + /* Add a timeout for dead or non accessable servers */ + alarm(10); + signal(SIGALRM, socket_timeout); - if (connect(fd, (struct sockaddr *)&s_in, sizeof(s_in)) < 0) /* connect to time server */ - perror_msg_and_die("%s", host); + fd = xconnect(&s_in); - if (read(fd, (void *)&nett, 4) != 4) /* read time from server */ - error_msg_and_die("%s did not send the complete time", host); + if (safe_read(fd, (void *)&nett, 4) != 4) /* read time from server */ + bb_error_msg_and_die("%s did not send the complete time", host); close(fd); @@ -95,18 +93,18 @@ int rdate_main(int argc, char **argv) setdate = 0; break; default: - show_usage(); + bb_show_usage(); } } if (optind == argc) - show_usage(); + bb_show_usage(); remote_time = askremotedate(argv[optind]); if (setdate) { if (stime(&remote_time) < 0) - perror_msg_and_die("Could not set time of day"); + bb_perror_msg_and_die("Could not set time of day"); } if (printdate)