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