diff -Naur rdate-990821.orig/rdate.1 rdate-990821/rdate.1 --- rdate-990821.orig/rdate.1 1999-08-21 22:46:41.000000000 +0200 +++ rdate-990821/rdate.1 2004-04-18 22:45:15.000000000 +0200 @@ -4,7 +4,7 @@ rdate \- get the date and time via the network .SH "SYNOPSIS" .B rdate -[\-p] [\-s] [\-u] [host...] +[\-p] [\-s] [\-u] [\-q] [host...] .SH "DESCRIPTION" .B Rdate uses TCP or UDP to retrieve the current time of another machine using @@ -30,6 +30,9 @@ .I \-u Use UDP to retrieve the time instead of TCP. The client will timeout if no reply is received within 5 seconds. +.TP +.I \-q +Quiet mode. .SH FILES .nf /etc/services map service name to socket number @@ -51,6 +54,9 @@ .TP 21-Aug-99 Arkadiusz Miskiewicz Added IPv6 support via TCP and UDP. +.TP +21-Aug-99 Karol Wojtaszek +Added quiet mode. .SH BUGS Timeout handling on UDP doesn't work after the first server. Something to do with signal(2) semantics I don't understand. diff -Naur rdate-990821.orig/rdate.c rdate-990821/rdate.c --- rdate-990821.orig/rdate.c 1999-08-21 22:46:41.000000000 +0200 +++ rdate-990821/rdate.c 2004-04-19 18:39:10.128450056 +0200 @@ -10,11 +10,34 @@ #include #include #include +#include /* difference between Unix time and net time */ #define BASE1970 2208988800UL jmp_buf jmp; +int quiet = 0; + + +int p_fprintf(FILE *p, char *fmt, ...) +{ + va_list ap; + int ret; + + if (quiet == 1) return; + + va_start(ap, fmt); + ret = vfprintf(p, fmt, ap); + + va_end(ap); + return ret; +} + +int p_perror(char *s) +{ + if (quiet == 0) perror(s); + +} void alarm_handler(int signum) { @@ -44,17 +67,17 @@ #ifndef INET6 if ((him = gethostbyname(host)) == NULL) { - fprintf(stderr, "rdate: Unknown host %s\n", host); + p_fprintf(stderr, "rdate: Unknown host %s\n", host); return(-1); } if ((timeServ = getservbyname("time","udp")) == NULL) { - fprintf(stderr, "rdate: time/udp: unknown service\n"); + p_fprintf(stderr, "rdate: time/udp: unknown service\n"); return(-1); } if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { - perror("rdate"); + p_perror("rdate"); return(-1); } @@ -70,7 +93,7 @@ hints.ai_socktype = SOCK_DGRAM; err = getaddrinfo(host, "time", &hints, &res0); if (err < 0) { - fprintf(stderr, "rdate %s", gai_strerror(err)); + p_fprintf(stderr, "rdate %s", gai_strerror(err)); return(-1); } err = -1; @@ -83,13 +106,13 @@ } freeaddrinfo(res0); if (err < 0) { - perror("rdate"); + p_perror("rdate"); return(-1); } if (sendto(fd, netTime, 0, 0, res->ai_addr, res->ai_addrlen) < 0) { #endif - perror("rdate"); + p_perror("rdate"); close(fd); return (-1); } @@ -106,17 +129,17 @@ if ((jmpstatus = setjmp(jmp)) == 0 && (n = recvfrom(fd, netTime, sizeof(netTime), 0, res->ai_addr, &res->ai_addrlen)) < 0) { #endif - perror("rdate"); + p_perror("rdate"); close(fd); return (-1); } if (jmpstatus != 0) { - fprintf(stderr, "rdate: timed out waiting for data from %s\n", host); + p_fprintf(stderr, "rdate: timed out waiting for data from %s\n", host); close(fd); return (-1); } if (n < sizeof(netTime)) { - fprintf(stderr, "rdate: partial data read from %s\n", host); + p_fprintf(stderr, "rdate: partial data read from %s\n", host); close(fd); return (-1); } @@ -151,17 +174,17 @@ #ifndef INET6 if ((him = gethostbyname(host)) == NULL) { - fprintf(stderr, "rdate: Unknown host %s\n", host); + p_fprintf(stderr, "rdate: Unknown host %s\n", host); return(-1); } if ((timeServ = getservbyname("time","tcp")) == NULL) { - fprintf(stderr, "rdate: time/tcp: unknown service\n"); + p_fprintf(stderr, "rdate: time/tcp: unknown service\n"); return(-1); } if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { - perror("rdate"); + p_perror("rdate"); return(-1); } @@ -170,7 +193,7 @@ sin.sin_port = timeServ->s_port; if (connect(fd, &sin, sizeof(sin)) < 0) { - perror("rdate"); + p_perror("rdate"); close(fd); return(-1); } @@ -181,7 +204,7 @@ hints.ai_socktype = SOCK_STREAM; err = getaddrinfo(host, "time", &hints, &res0); if (err < 0) { - fprintf(stderr, "rdate %s", gai_strerror(err)); + p_fprintf(stderr, "rdate %s", gai_strerror(err)); return(-1); } err = -1; @@ -198,7 +221,7 @@ } freeaddrinfo(res0); if (err < 0) { - perror("rdate"); + p_perror("rdate"); return(-1); } #endif @@ -207,7 +230,7 @@ for (i = 0; i < 4; ) { int l = read(fd, &netTime[i], 4-i); if (l <= 0) { - perror("rdate"); + p_perror("rdate"); close(fd); return(-1); } @@ -230,7 +253,7 @@ int o, mode = 0; time_t t; - while ((o = getopt(argc, argv, "spu")) != EOF) + while ((o = getopt(argc, argv, "spuq")) != EOF) switch (o) { case 'p': mode |= 1; @@ -241,9 +264,12 @@ case 'u': mode |= 4; break; + case 'q': + quiet = 1; + break; default: usage: - fprintf(stderr, "Usage: rdate [-s] [-p] [-u] ...\n"); + p_fprintf(stderr, "Usage: rdate [-s] [-p] [-u] [-q] ...\n"); return 1; } if (optind >= argc) @@ -256,10 +282,10 @@ if (t == (time_t)-1) continue; if (mode & 1) - printf("[%s]\t%s", argv[o], ctime(&t)); + p_fprintf(stdout,"[%s]\t%s", argv[o], ctime(&t)); if (mode & 2) if (stime(&t) < 0) { - perror("rdate"); + p_perror("rdate"); return 1; } }