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