xref: /freebsd-src/contrib/ntp/NOTES.y2kfixes (revision c0b746e5e8d9479f05b3749cbf1f73b8928719bd)
1*c0b746e5SOllivier RobertName of the Application: xntp
2*c0b746e5SOllivier Robert
3*c0b746e5SOllivier RobertVersion Number:  4.0.91
4*c0b746e5SOllivier Robert
5*c0b746e5SOllivier RobertDownload Size: 4541953 bytes
6*c0b746e5SOllivier Robert
7*c0b746e5SOllivier RobertDownloaded from: http://www.eecis.udel.edu/~ntp/
8*c0b746e5SOllivier Robert
9*c0b746e5SOllivier RobertOperating Systems Supported: many
10*c0b746e5SOllivier Robert
11*c0b746e5SOllivier RobertOperating Systems Tested: unix
12*c0b746e5SOllivier Robert
13*c0b746e5SOllivier RobertTesting
14*c0b746e5SOllivier Robert
15*c0b746e5SOllivier RobertDates tested (CPU clock set)
16*c0b746e5SOllivier Robert
17*c0b746e5SOllivier Robert	1999-12-31
18*c0b746e5SOllivier Robert	2000-01-01
19*c0b746e5SOllivier Robert	2000-02-29
20*c0b746e5SOllivier Robert
21*c0b746e5SOllivier Robert	Critical fragments of code tested with other dates by special
22*c0b746e5SOllivier Robert	algorithms.
23*c0b746e5SOllivier Robert
24*c0b746e5SOllivier RobertHardware Platform: Sun Sparc
25*c0b746e5SOllivier Robert
26*c0b746e5SOllivier RobertOS: Solaris 2.6
27*c0b746e5SOllivier Robert
28*c0b746e5SOllivier RobertCompiler: gcc
29*c0b746e5SOllivier Robert
30*c0b746e5SOllivier RobertVersion: 2.8.1
31*c0b746e5SOllivier Robert
32*c0b746e5SOllivier RobertRepairs:  9
33*c0b746e5SOllivier Robert
34*c0b746e5SOllivier RobertNo. of files Repaired: 13
35*c0b746e5SOllivier Robert
36*c0b746e5SOllivier Robert
37*c0b746e5SOllivier RobertCompilation of Patches Required: yes
38*c0b746e5SOllivier Robert
39*c0b746e5SOllivier RobertResults Description:
40*c0b746e5SOllivier Robert
41*c0b746e5SOllivier Robert1)	Tested suspicious code.
42*c0b746e5SOllivier Robert
43*c0b746e5SOllivier Robert2)	Repaired problem code and added documentation to ntp.h.
44*c0b746e5SOllivier Robert
45*c0b746e5SOllivier Robert3)	Verified ntpd works on critical Y2K dates.
46*c0b746e5SOllivier Robert
47*c0b746e5SOllivier Robert
48*c0b746e5SOllivier RobertComments:
49*c0b746e5SOllivier Robert
50*c0b746e5SOllivier Robert1)	Errors were found in improper use of tm_year within struct tm,
51*c0b746e5SOllivier Robert	calculations that did not support year 2000 as a leap year
52*c0b746e5SOllivier Robert	(it truly is, despite any unchanged comments remaining in
53*c0b746e5SOllivier Robert	the NTP source), and some incorrect date calculations, while
54*c0b746e5SOllivier Robert	not traditional Y2K errors, would break in the year 2000.
55*c0b746e5SOllivier Robert
56*c0b746e5SOllivier Robert2)	include/ntpd.h
57*c0b746e5SOllivier Robert    	Added some definitions and documentation about the right way
58*c0b746e5SOllivier Robert        of doing things.  Definitions used by most, if not all, of
59*c0b746e5SOllivier Robert        the Y2K repairs.
60*c0b746e5SOllivier Robert
61*c0b746e5SOllivier RobertCautions:
62*c0b746e5SOllivier Robert
63*c0b746e5SOllivier Robert1)	Some of the Y2K repairs were to reference clock drivers that
64*c0b746e5SOllivier Robert	we did not have the local hardware to test.  While I believe
65*c0b746e5SOllivier Robert	the changes are sound, they really need to be tested.
66*c0b746e5SOllivier Robert	This includes:
67*c0b746e5SOllivier Robert
68*c0b746e5SOllivier Robert		refclock_arc.c
69*c0b746e5SOllivier Robert		refclock_heath.c
70*c0b746e5SOllivier Robert		refclock_hpgps.c
71*c0b746e5SOllivier Robert
72*c0b746e5SOllivier Robert	Also, parseutil/dcfd.c is another hardware dependent module that
73*c0b746e5SOllivier Robert	was repaired without live testing.
74*c0b746e5SOllivier Robert
75*c0b746e5SOllivier RobertNon-Y2K Problems Observed:
76*c0b746e5SOllivier Robert
77*c0b746e5SOllivier Robert1)	Inconsistent casts of variables containing time values may
78*c0b746e5SOllivier Robert	make expansion to 64 bit integer values in a portable manner
79*c0b746e5SOllivier Robert	difficult.
80*c0b746e5SOllivier Robert
81*c0b746e5SOllivier Robert2)	libntp/caltontp.c:
82*c0b746e5SOllivier Robert        Has logic I believe will fail starting in year 2100 or so.
83*c0b746e5SOllivier Robert        Left unchanged/untested as it works well beyond basic NTP 2036
84*c0b746e5SOllivier Robert	limit checked by check_y2k.c.
85*c0b746e5SOllivier Robert        If NTP is implemented on 64-bit machines, this should be fixed
86*c0b746e5SOllivier Robert
87*c0b746e5SOllivier Robert3)	ntpd/refclock_acts.c:
88*c0b746e5SOllivier Robert	ACTS time format has changed somewhat since the code was written.
89*c0b746e5SOllivier Robert	In particular the '*' '#' character switch no longer occurs...
90*c0b746e5SOllivier Robert	only '*' is typed.
91*c0b746e5SOllivier Robert
92*c0b746e5SOllivier Robert      NOTE: Author (falsely) stated Y2K is NOT a leap year when it
93*c0b746e5SOllivier Robert      really is.
94*c0b746e5SOllivier Robert
95*c0b746e5SOllivier Robert      TRUTH: ACTS will go beyond Y2K: it uses FourDigitYear % 100 values
96*c0b746e5SOllivier Robert      for year so year 2000 will revert to "00".
97*c0b746e5SOllivier Robert
98*c0b746e5SOllivier Robert
99*c0b746e5SOllivier Robert4)     ntpd/refclock_oncore.c
100*c0b746e5SOllivier Robert       Some very strange logic in manipulating year values:
101*c0b746e5SOllivier Robert       1122         instance->pp->year = buf[6]*256+buf[7];
102*c0b746e5SOllivier Robert       Multiply by 256????
103*c0b746e5SOllivier Robert
104*c0b746e5SOllivier Robert    Response from PHK:
105*c0b746e5SOllivier Robert       The entire protocol is binary, the year is a 16 bit quantity
106*c0b746e5SOllivier Robert       which according to the manual can have the range 1998-2018.
107*c0b746e5SOllivier Robert
108