Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 48493
Collapse All | Expand All

(-)rdate-990821.orig/rdate.1 (-1 / +7 lines)
Lines 4-10 Link Here
4
rdate \- get the date and time via the network
4
rdate \- get the date and time via the network
5
.SH "SYNOPSIS"
5
.SH "SYNOPSIS"
6
.B rdate
6
.B rdate
7
[\-p] [\-s] [\-u] [host...]
7
[\-p] [\-s] [\-u] [\-q] [host...]
8
.SH "DESCRIPTION"
8
.SH "DESCRIPTION"
9
.B Rdate
9
.B Rdate
10
uses TCP or UDP to retrieve the current time of another machine using
10
uses TCP or UDP to retrieve the current time of another machine using
Lines 30-35 Link Here
30
.I \-u
30
.I \-u
31
Use UDP to retrieve the time instead of TCP.
31
Use UDP to retrieve the time instead of TCP.
32
The client will timeout if no reply is received within 5 seconds.
32
The client will timeout if no reply is received within 5 seconds.
33
.TP
34
.I \-q
35
Quiet mode.
33
.SH FILES
36
.SH FILES
34
.nf
37
.nf
35
/etc/services	map service name to socket number
38
/etc/services	map service name to socket number
Lines 51-56 Link Here
51
.TP
54
.TP
52
21-Aug-99  Arkadiusz Miskiewicz <misiek@pld.org.pl>
55
21-Aug-99  Arkadiusz Miskiewicz <misiek@pld.org.pl>
53
Added IPv6 support via TCP and UDP.
56
Added IPv6 support via TCP and UDP.
57
.TP
58
21-Aug-99  Karol Wojtaszek <sekretarz@dukato.net>
59
Added quiet mode.
54
.SH BUGS
60
.SH BUGS
55
Timeout handling on UDP doesn't work after the first server.
61
Timeout handling on UDP doesn't work after the first server.
56
Something to do with signal(2) semantics I don't understand.
62
Something to do with signal(2) semantics I don't understand.
(-)rdate-990821.orig/rdate.c (-20 / +46 lines)
Lines 10-20 Link Here
10
#include <string.h>
10
#include <string.h>
11
#include <signal.h>
11
#include <signal.h>
12
#include <setjmp.h>
12
#include <setjmp.h>
13
#include <stdarg.h>
13
14
14
/* difference between Unix time and net time */
15
/* difference between Unix time and net time */
15
#define BASE1970	2208988800UL
16
#define BASE1970	2208988800UL
16
17
17
jmp_buf	jmp;
18
jmp_buf	jmp;
19
int quiet = 0;
20
21
22
int p_fprintf(FILE *p, char *fmt, ...)
23
{
24
    va_list ap;
25
    int ret;
26
27
    if (quiet == 1) return;
28
    
29
    va_start(ap, fmt);
30
    ret = vfprintf(p, fmt, ap);
31
32
    va_end(ap);
33
    return ret;
34
}
35
36
int p_perror(char *s)
37
{
38
    if (quiet == 0) perror(s);
39
    
40
}
18
41
19
void alarm_handler(int signum)
42
void alarm_handler(int signum)
20
{
43
{
Lines 44-60 Link Here
44
67
45
#ifndef INET6
68
#ifndef INET6
46
	if ((him = gethostbyname(host)) == NULL) {
69
	if ((him = gethostbyname(host)) == NULL) {
47
		fprintf(stderr, "rdate: Unknown host %s\n", host);
70
		p_fprintf(stderr, "rdate: Unknown host %s\n", host);
48
		return(-1);
71
		return(-1);
49
	}
72
	}
50
73
51
        if ((timeServ = getservbyname("time","udp")) == NULL) {
74
        if ((timeServ = getservbyname("time","udp")) == NULL) {
52
                fprintf(stderr, "rdate: time/udp: unknown service\n");
75
                p_fprintf(stderr, "rdate: time/udp: unknown service\n");
53
                return(-1);
76
                return(-1);
54
        }
77
        }
55
78
56
	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
79
	if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
57
		perror("rdate");
80
		p_perror("rdate");
58
		return(-1);
81
		return(-1);
59
	}
82
	}
60
83
Lines 70-76 Link Here
70
	hints.ai_socktype = SOCK_DGRAM;
93
	hints.ai_socktype = SOCK_DGRAM;
71
        err = getaddrinfo(host, "time", &hints, &res0);
94
        err = getaddrinfo(host, "time", &hints, &res0);
72
        if (err < 0) {
95
        if (err < 0) {
73
                fprintf(stderr, "rdate %s", gai_strerror(err));
96
                p_fprintf(stderr, "rdate %s", gai_strerror(err));
74
                return(-1);
97
                return(-1);
75
        }
98
        }
76
        err = -1;
99
        err = -1;
Lines 83-95 Link Here
83
	}
106
	}
84
        freeaddrinfo(res0);
107
        freeaddrinfo(res0);
85
        if (err < 0) {
108
        if (err < 0) {
86
                perror("rdate");
109
                p_perror("rdate");
87
                return(-1);
110
                return(-1);
88
        }
111
        }
89
112
90
	if (sendto(fd, netTime, 0, 0, res->ai_addr, res->ai_addrlen) < 0) {
113
	if (sendto(fd, netTime, 0, 0, res->ai_addr, res->ai_addrlen) < 0) {
91
#endif
114
#endif
92
		perror("rdate");
115
		p_perror("rdate");
93
		close(fd);
116
		close(fd);
94
		return (-1);
117
		return (-1);
95
	}
118
	}
Lines 106-122 Link Here
106
	if ((jmpstatus = setjmp(jmp)) == 0 &&
129
	if ((jmpstatus = setjmp(jmp)) == 0 &&
107
	  (n = recvfrom(fd, netTime, sizeof(netTime), 0, res->ai_addr, &res->ai_addrlen)) < 0) {
130
	  (n = recvfrom(fd, netTime, sizeof(netTime), 0, res->ai_addr, &res->ai_addrlen)) < 0) {
108
#endif
131
#endif
109
		perror("rdate");
132
		p_perror("rdate");
110
		close(fd);
133
		close(fd);
111
		return (-1);
134
		return (-1);
112
	}
135
	}
113
	if (jmpstatus != 0) {
136
	if (jmpstatus != 0) {
114
		fprintf(stderr, "rdate: timed out waiting for data from %s\n", host);
137
		p_fprintf(stderr, "rdate: timed out waiting for data from %s\n", host);
115
		close(fd);
138
		close(fd);
116
		return (-1);
139
		return (-1);
117
	}
140
	}
118
	if (n < sizeof(netTime)) {
141
	if (n < sizeof(netTime)) {
119
		fprintf(stderr, "rdate: partial data read from %s\n", host);
142
		p_fprintf(stderr, "rdate: partial data read from %s\n", host);
120
		close(fd);
143
		close(fd);
121
		return (-1);
144
		return (-1);
122
	}
145
	}
Lines 151-167 Link Here
151
174
152
#ifndef INET6
175
#ifndef INET6
153
	if ((him = gethostbyname(host)) == NULL) {
176
	if ((him = gethostbyname(host)) == NULL) {
154
		fprintf(stderr, "rdate: Unknown host %s\n", host);
177
		p_fprintf(stderr, "rdate: Unknown host %s\n", host);
155
		return(-1);
178
		return(-1);
156
	}
179
	}
157
180
158
        if ((timeServ = getservbyname("time","tcp")) == NULL) {
181
        if ((timeServ = getservbyname("time","tcp")) == NULL) {
159
                fprintf(stderr, "rdate: time/tcp: unknown service\n");
182
                p_fprintf(stderr, "rdate: time/tcp: unknown service\n");
160
                return(-1);
183
                return(-1);
161
        }
184
        }
162
185
163
	if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
186
	if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
164
		perror("rdate");
187
		p_perror("rdate");
165
		return(-1);
188
		return(-1);
166
	}
189
	}
167
190
Lines 170-176 Link Here
170
        sin.sin_port = timeServ->s_port;
193
        sin.sin_port = timeServ->s_port;
171
194
172
        if (connect(fd, &sin, sizeof(sin)) < 0) {
195
        if (connect(fd, &sin, sizeof(sin)) < 0) {
173
		perror("rdate");
196
		p_perror("rdate");
174
		close(fd);
197
		close(fd);
175
		return(-1);
198
		return(-1);
176
	}
199
	}
Lines 181-187 Link Here
181
	hints.ai_socktype = SOCK_STREAM;
204
	hints.ai_socktype = SOCK_STREAM;
182
	err = getaddrinfo(host, "time", &hints, &res0);
205
	err = getaddrinfo(host, "time", &hints, &res0);
183
	if (err < 0) {
206
	if (err < 0) {
184
		fprintf(stderr, "rdate %s", gai_strerror(err));
207
		p_fprintf(stderr, "rdate %s", gai_strerror(err));
185
		return(-1);
208
		return(-1);
186
	}
209
	}
187
	err = -1;
210
	err = -1;
Lines 198-204 Link Here
198
	}
221
	}
199
	freeaddrinfo(res0);
222
	freeaddrinfo(res0);
200
	if (err < 0) {
223
	if (err < 0) {
201
		perror("rdate");
224
		p_perror("rdate");
202
		return(-1);
225
		return(-1);
203
	}
226
	}
204
#endif
227
#endif
Lines 207-213 Link Here
207
	for (i = 0; i < 4; ) {
230
	for (i = 0; i < 4; ) {
208
		int l = read(fd, &netTime[i], 4-i);
231
		int l = read(fd, &netTime[i], 4-i);
209
		if (l <= 0) {
232
		if (l <= 0) {
210
			perror("rdate");
233
			p_perror("rdate");
211
			close(fd);
234
			close(fd);
212
			return(-1);
235
			return(-1);
213
		}
236
		}
Lines 230-236 Link Here
230
	int o, mode = 0;
253
	int o, mode = 0;
231
	time_t t;
254
	time_t t;
232
255
233
	while ((o = getopt(argc, argv, "spu")) != EOF)
256
	while ((o = getopt(argc, argv, "spuq")) != EOF)
234
		switch (o) {
257
		switch (o) {
235
		  case 'p':
258
		  case 'p':
236
			mode |= 1;
259
			mode |= 1;
Lines 241-249 Link Here
241
		  case 'u':
264
		  case 'u':
242
			mode |= 4;
265
			mode |= 4;
243
			break;
266
			break;
267
		  case 'q':
268
			quiet = 1;
269
			break;
244
		  default:
270
		  default:
245
		  usage:
271
		  usage:
246
			fprintf(stderr, "Usage: rdate [-s] [-p] [-u] <host> ...\n");
272
			p_fprintf(stderr, "Usage: rdate [-s] [-p] [-u] [-q] <host> ...\n");
247
			return 1;
273
			return 1;
248
		}
274
		}
249
	if (optind >= argc)
275
	if (optind >= argc)
Lines 256-265 Link Here
256
		if (t == (time_t)-1)
282
		if (t == (time_t)-1)
257
			continue;
283
			continue;
258
		if (mode & 1)
284
		if (mode & 1)
259
			printf("[%s]\t%s", argv[o], ctime(&t));
285
			p_fprintf(stdout,"[%s]\t%s", argv[o], ctime(&t));
260
		if (mode & 2)
286
		if (mode & 2)
261
			if (stime(&t) < 0) {
287
			if (stime(&t) < 0) {
262
				perror("rdate");
288
				p_perror("rdate");
263
				return 1;
289
				return 1;
264
			}
290
			}
265
	}
291
	}

Return to bug 48493