summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRenato Botelho <renato@netgate.com>2017-01-09 12:11:29 -0200
committerRenato Botelho <renato@netgate.com>2017-01-09 12:11:29 -0200
commit583cd464636b9a6cfccc531961c9485848ef5ebc (patch)
tree3f0da9de78f683ce052e013172f4e718a77e8127
parentd20b9916a16a3507b076e4764566a9641f9e973a (diff)
parent570e4ab90f4cd78ac7fef92fbb56aab29321dc2c (diff)
downloadFreeBSD-src-583cd464636b9a6cfccc531961c9485848ef5ebc.zip
FreeBSD-src-583cd464636b9a6cfccc531961c9485848ef5ebc.tar.gz
Merge remote-tracking branch 'origin/releng/10.3' into RELENG_2_3
-rw-r--r--UPDATING20
-rw-r--r--contrib/ntp/ChangeLog71
-rw-r--r--contrib/ntp/CommitLog1896
-rw-r--r--contrib/ntp/NEWS307
-rwxr-xr-xcontrib/ntp/configure20
-rw-r--r--contrib/ntp/html/drivers/driver40.html4
-rw-r--r--contrib/ntp/html/miscopt.html6
-rw-r--r--contrib/ntp/include/Makefile.am1
-rw-r--r--contrib/ntp/include/Makefile.in1
-rw-r--r--contrib/ntp/include/libssl_compat.h100
-rw-r--r--contrib/ntp/include/ntp.h10
-rw-r--r--contrib/ntp/include/ntp_intres.h6
-rw-r--r--contrib/ntp/include/ntpd.h1
-rw-r--r--contrib/ntp/lib/isc/netaddr.c1
-rw-r--r--contrib/ntp/libntp/Makefile.am1
-rw-r--r--contrib/ntp/libntp/Makefile.in67
-rw-r--r--contrib/ntp/libntp/a_md5encrypt.c62
-rw-r--r--contrib/ntp/libntp/audio.c6
-rw-r--r--contrib/ntp/libntp/libssl_compat.c335
-rw-r--r--contrib/ntp/libntp/ntp_calendar.c85
-rw-r--r--contrib/ntp/libntp/ntp_intres.c62
-rw-r--r--contrib/ntp/libntp/ssl_init.c11
-rw-r--r--contrib/ntp/libntp/work_fork.c18
-rw-r--r--contrib/ntp/libparse/clk_hopf6021.c68
-rw-r--r--contrib/ntp/ntpd/complete.conf.in2
-rw-r--r--contrib/ntp/ntpd/invoke-ntp.conf.texi17
-rw-r--r--contrib/ntp/ntpd/invoke-ntp.keys.texi2
-rw-r--r--contrib/ntp/ntpd/invoke-ntpd.texi4
-rw-r--r--contrib/ntp/ntpd/keyword-gen-utd2
-rw-r--r--contrib/ntp/ntpd/keyword-gen.c1
-rw-r--r--contrib/ntp/ntpd/ntp.conf.5man39
-rw-r--r--contrib/ntp/ntpd/ntp.conf.5mdoc23
-rw-r--r--contrib/ntp/ntpd/ntp.conf.def19
-rw-r--r--contrib/ntp/ntpd/ntp.conf.html110
-rw-r--r--contrib/ntp/ntpd/ntp.conf.man.in39
-rw-r--r--contrib/ntp/ntpd/ntp.conf.mdoc.in23
-rw-r--r--contrib/ntp/ntpd/ntp.keys.5man4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.5mdoc4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.html2
-rw-r--r--contrib/ntp/ntpd/ntp.keys.man.in4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.mdoc.in4
-rw-r--r--contrib/ntp/ntpd/ntp_config.c36
-rw-r--r--contrib/ntp/ntpd/ntp_control.c156
-rw-r--r--contrib/ntp/ntpd/ntp_crypto.c345
-rw-r--r--contrib/ntp/ntpd/ntp_keyword.h2126
-rw-r--r--contrib/ntp/ntpd/ntp_loopfilter.c11
-rw-r--r--contrib/ntp/ntpd/ntp_parser.c2389
-rw-r--r--contrib/ntp/ntpd/ntp_parser.h744
-rw-r--r--contrib/ntp/ntpd/ntp_peer.c116
-rw-r--r--contrib/ntp/ntpd/ntp_proto.c151
-rw-r--r--contrib/ntp/ntpd/ntp_refclock.c62
-rw-r--r--contrib/ntp/ntpd/ntpd-opts.c14
-rw-r--r--contrib/ntp/ntpd/ntpd-opts.h6
-rw-r--r--contrib/ntp/ntpd/ntpd.1ntpdman6
-rw-r--r--contrib/ntp/ntpd/ntpd.1ntpdmdoc4
-rw-r--r--contrib/ntp/ntpd/ntpd.html4
-rw-r--r--contrib/ntp/ntpd/ntpd.man.in6
-rw-r--r--contrib/ntp/ntpd/ntpd.mdoc.in4
-rw-r--r--contrib/ntp/ntpd/refclock_gpsdjson.c2
-rw-r--r--contrib/ntp/ntpd/refclock_jjy.c8
-rw-r--r--contrib/ntp/ntpd/refclock_jupiter.c67
-rw-r--r--contrib/ntp/ntpdc/invoke-ntpdc.texi4
-rw-r--r--contrib/ntp/ntpdc/ntpdc-opts.c14
-rw-r--r--contrib/ntp/ntpdc/ntpdc-opts.h6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.1ntpdcman6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc4
-rw-r--r--contrib/ntp/ntpdc/ntpdc.html4
-rw-r--r--contrib/ntp/ntpdc/ntpdc.man.in6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.mdoc.in4
-rw-r--r--contrib/ntp/ntpq/invoke-ntpq.texi4
-rw-r--r--contrib/ntp/ntpq/ntpq-opts.c14
-rw-r--r--contrib/ntp/ntpq/ntpq-opts.h6
-rw-r--r--contrib/ntp/ntpq/ntpq.1ntpqman6
-rw-r--r--contrib/ntp/ntpq/ntpq.1ntpqmdoc4
-rw-r--r--contrib/ntp/ntpq/ntpq.c9
-rw-r--r--contrib/ntp/ntpq/ntpq.html4
-rw-r--r--contrib/ntp/ntpq/ntpq.man.in6
-rw-r--r--contrib/ntp/ntpq/ntpq.mdoc.in4
-rw-r--r--contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi4
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c14
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc4
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.html2
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.man.in6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in4
-rw-r--r--contrib/ntp/packageinfo.sh2
-rw-r--r--contrib/ntp/scripts/build/genAuthors.in12
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman6
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.html2
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in6
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi2
-rw-r--r--contrib/ntp/scripts/invoke-plot_summary.texi4
-rw-r--r--contrib/ntp/scripts/invoke-summary.texi4
-rw-r--r--contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait-opts4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman6
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.html4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.man.in6
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in4
-rw-r--r--contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep-opts4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman6
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.html4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.man.in6
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in4
-rw-r--r--contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace-opts4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman6
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.html4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.man.in6
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in4
-rw-r--r--contrib/ntp/scripts/plot_summary-opts4
-rw-r--r--contrib/ntp/scripts/plot_summary.1plot_summaryman6
-rw-r--r--contrib/ntp/scripts/plot_summary.1plot_summarymdoc4
-rw-r--r--contrib/ntp/scripts/plot_summary.html4
-rw-r--r--contrib/ntp/scripts/plot_summary.man.in6
-rw-r--r--contrib/ntp/scripts/plot_summary.mdoc.in4
-rw-r--r--contrib/ntp/scripts/summary-opts4
-rw-r--r--contrib/ntp/scripts/summary.1summaryman6
-rw-r--r--contrib/ntp/scripts/summary.1summarymdoc4
-rw-r--r--contrib/ntp/scripts/summary.html4
-rw-r--r--contrib/ntp/scripts/summary.man.in6
-rw-r--r--contrib/ntp/scripts/summary.mdoc.in4
-rw-r--r--contrib/ntp/scripts/update-leap/invoke-update-leap.texi2
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap-opts4
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.1update-leapman6
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc4
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.html2
-rwxr-xr-xcontrib/ntp/scripts/update-leap/update-leap.in7
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.man.in6
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.mdoc.in4
-rwxr-xr-xcontrib/ntp/sntp/configure20
-rw-r--r--contrib/ntp/sntp/crypto.c18
-rw-r--r--contrib/ntp/sntp/include/version.def2
-rw-r--r--contrib/ntp/sntp/include/version.texi6
-rw-r--r--contrib/ntp/sntp/invoke-sntp.texi4
-rw-r--r--contrib/ntp/sntp/m4/version.m42
-rw-r--r--contrib/ntp/sntp/sntp-opts.c14
-rw-r--r--contrib/ntp/sntp/sntp-opts.h6
-rw-r--r--contrib/ntp/sntp/sntp.1sntpman6
-rw-r--r--contrib/ntp/sntp/sntp.1sntpmdoc6
-rw-r--r--contrib/ntp/sntp/sntp.html4
-rw-r--r--contrib/ntp/sntp/sntp.man.in6
-rw-r--r--contrib/ntp/sntp/sntp.mdoc.in4
-rw-r--r--contrib/ntp/sntp/tests/packetProcessing.c196
-rw-r--r--contrib/ntp/sntp/tests/run-packetProcessing.c36
-rw-r--r--contrib/ntp/sntp/unity/Makefile.am2
-rw-r--r--contrib/ntp/sntp/unity/Makefile.in37
-rw-r--r--contrib/ntp/sntp/unity/ulib_setup.c14
-rw-r--r--contrib/ntp/sntp/unity/ulib_teardown.c13
-rw-r--r--contrib/ntp/sntp/unity/unity_fixture.c4
-rw-r--r--contrib/ntp/sntp/version.c2
-rw-r--r--contrib/ntp/tests/libntp/a_md5encrypt.c4
-rw-r--r--contrib/ntp/tests/libntp/calendar.c127
-rw-r--r--contrib/ntp/tests/libntp/run-calendar.c35
-rw-r--r--contrib/ntp/tests/libntp/sfptostr.c6
-rw-r--r--contrib/ntp/tests/ntpd/Makefile.am1
-rw-r--r--contrib/ntp/tests/ntpd/Makefile.in18
-rw-r--r--contrib/ntp/util/invoke-ntp-keygen.texi4
-rw-r--r--contrib/ntp/util/ntp-keygen-opts.c14
-rw-r--r--contrib/ntp/util/ntp-keygen-opts.h6
-rw-r--r--contrib/ntp/util/ntp-keygen.1ntp-keygenman6
-rw-r--r--contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc4
-rw-r--r--contrib/ntp/util/ntp-keygen.c367
-rw-r--r--contrib/ntp/util/ntp-keygen.html4
-rw-r--r--contrib/ntp/util/ntp-keygen.man.in6
-rw-r--r--contrib/ntp/util/ntp-keygen.mdoc.in4
-rw-r--r--contrib/telnet/telnetd/sys_term.c7
-rw-r--r--contrib/tzcode/zic/zdump.c24
-rw-r--r--contrib/tzcode/zic/zic.c20
-rw-r--r--contrib/tzdata/CONTRIBUTING73
-rw-r--r--contrib/tzdata/LICENSE4
-rw-r--r--contrib/tzdata/Makefile793
-rw-r--r--contrib/tzdata/NEWS3782
-rw-r--r--contrib/tzdata/README71
-rw-r--r--contrib/tzdata/Theory840
-rw-r--r--contrib/tzdata/africa12
-rw-r--r--contrib/tzdata/antarctica88
-rw-r--r--contrib/tzdata/asia579
-rw-r--r--contrib/tzdata/australasia64
-rw-r--r--contrib/tzdata/backward2
-rw-r--r--contrib/tzdata/backzone677
-rw-r--r--contrib/tzdata/checklinks.awk48
-rw-r--r--contrib/tzdata/checktab.awk177
-rw-r--r--contrib/tzdata/etcetera74
-rw-r--r--contrib/tzdata/europe888
-rw-r--r--contrib/tzdata/factory7
-rw-r--r--contrib/tzdata/leap-seconds.list13
-rw-r--r--contrib/tzdata/leapseconds6
-rw-r--r--contrib/tzdata/leapseconds.awk76
-rw-r--r--contrib/tzdata/northamerica166
-rw-r--r--contrib/tzdata/southamerica51
-rw-r--r--contrib/tzdata/version1
-rw-r--r--contrib/tzdata/zone.tab297
-rw-r--r--contrib/tzdata/zone1970.tab306
-rwxr-xr-xcontrib/tzdata/zoneinfo2tdf.pl52
-rw-r--r--lib/libc/net/linkaddr.c52
-rw-r--r--lib/libvmmapi/vmmapi.c11
-rw-r--r--sys/conf/newvers.sh2
-rw-r--r--usr.sbin/ntp/config.h10
-rw-r--r--usr.sbin/ntp/doc/ntp-keygen.84
-rw-r--r--usr.sbin/ntp/doc/ntp.conf.523
-rw-r--r--usr.sbin/ntp/doc/ntp.keys.54
-rw-r--r--usr.sbin/ntp/doc/ntpd.84
-rw-r--r--usr.sbin/ntp/doc/ntpdc.84
-rw-r--r--usr.sbin/ntp/doc/ntpq.84
-rw-r--r--usr.sbin/ntp/doc/sntp.86
-rw-r--r--usr.sbin/ntp/libntp/Makefile4
-rwxr-xr-xusr.sbin/ntp/scripts/mkver2
215 files changed, 15666 insertions, 4769 deletions
diff --git a/UPDATING b/UPDATING
index fb7ad51..fa403f9 100644
--- a/UPDATING
+++ b/UPDATING
@@ -16,6 +16,26 @@ from older versions of FreeBSD, try WITHOUT_CLANG to bootstrap to the tip of
stable/10, and then rebuild without this option. The bootstrap process from
older version of current is a bit fragile.
+20161222 p15 FreeBSD-SA-16:39.ntp
+
+ Fix multiple vulnerabilities of ntp.
+
+20161208 p14 FreeBSD-SA-16:37.libc [revised]
+
+ Fix regressions introduced by SA-16:37.libc.
+
+20161206 p13 FreeBSD-SA-16:36.telnetd
+ FreeBSD-SA-16:37.libc
+ FreeBSD-SA-16:38.bhyve
+ FreeBSD-EN-16:19.tzcode
+ FreeBSD-EN-16:20.tzdata
+
+ Fix possible login(1) argument injection in telnetd(8). [SA-16:36]
+ Fix link_ntoa(3) buffer overflow in libc. [SA-16:37]
+ Fix possible escape from bhyve(8) virtual machine. [SA-16:38]
+ Fix warnings about valid time zone abbreviations. [EN-16:19]
+ Update timezone database information. [EN-16:20]
+
20161102 p12 FreeBSD-SA-16:33.openssh
FreeBSD-SA-16:35.openssl
diff --git a/contrib/ntp/ChangeLog b/contrib/ntp/ChangeLog
index 0805467..0cb8c4f 100644
--- a/contrib/ntp/ChangeLog
+++ b/contrib/ntp/ChangeLog
@@ -1,4 +1,73 @@
---
+(4.2.8p9) 2016/11/21 Released by Harlan Stenn <stenn@ntp.org>
+(4.2.8p9) 2016/MM/DD Released by Harlan Stenn <stenn@ntp.org>
+
+* [Sec 3119] Trap crash <perlinger@ntp.org>
+* [Sec 3118] Mode 6 information disclosure and DDoS vector <perlinger@ntp.org>
+ - TRAP config via mode 6 packet requires AUTH now.
+* [Sec 3114] Broadcast Mode Replay Prevention DoS
+ - applied patches by Matthew Van Gundy. <perlinger@ntp.org>
+ - with bcpollbstep, tweaks and cleanup by stenn@ntp.org
+* [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS <perlinger@ntp.org>
+ - applied fix as suggested by Matthew Van Gundy
+* [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+ - fixed error handling for truncated UDP packets. <perlinger@ntp.org>
+* [Sec 3102] Zero origin issues. HStenn.
+* [Sec 3082] null pointer dereference in _IO_str_init_static_internal()
+ - more hardening to read_mru_list(). perlinger@ntp.org
+* [Sec 3072] Attack on interface selection <perlinger@ntp.org>
+ - implemented Miroslav Lichvars <mlichvar@redhat.com> suggestion
+ to skip interface updates based on incoming packets
+* [Bug 3142] bug in netmask prefix length detection <perlinger@ntp.org>
+* [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+* [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+ - moved retry decision where it belongs. <perlinger@ntp.org>
+* [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order
+ using the loopback-ppsapi-provider.dll <perlinger@ntp.org>
+* [Bug 3116] unit tests for NTP time stamp expansion. <perlinger@ntp.org>
+* [Bug 3100] ntpq can't retrieve daemon_version <perlinger@ntp.org>
+ - fixed extended sysvar lookup (bug introduced with bug 3008 fix)
+* [Bug 3095] Compatibility with openssl 1.1 <perlinger@ntp.org>
+ - applied patches by Kurt Roeckx <kurt@roeckx.be> to source
+ - added shim layer for SSL API calls with issues (both directions)
+* [Bug 3089] Serial Parser does not work anymore for hopfser like device
+ - simplified / refactored hex-decoding in driver. <perlinger@ntp.org>
+* [Bug 3084] update-leap mis-parses the leapfile name. HStenn.
+* [Bug 3068] Linker warnings when building on Solaris. perlinger@ntp.org
+ - applied patch thanks to Andrew Stormont <andyjstormont@gmail.com>
+* [Bug 3067] Root distance calculation needs improvement. HStenn.
+* [Bug 3066] NMEA clock ignores pps. perlinger@ntp.org
+ - PPS-HACK works again.
+* [Bug 3059] Potential buffer overrun from oversized hash <perlinger@ntp.org>
+ - applied patch by Brian Utterback <brian.utterback@oracle.com>
+* [Bug 3053] ntp_loopfilter.c frequency calc precedence error. Sarah White.
+* [Bug 3050] Fix for bug #2960 causes [...] spurious error message.
+ <perlinger@ntp.org>
+ - patches by Reinhard Max <max@suse.com> and Havard Eidnes <he@uninett.no>
+* [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+ - Patch provided by Kuramatsu.
+* [Bug 3021] unity_fixture.c needs pragma weak <perlinger@ntp.org>
+ - removed unnecessary & harmful decls of 'setUp()' & 'tearDown()'
+* [Bug 3019] Windows: ERROR_HOST_UNREACHABLE block packet processing.
+ DMayer and JPerlinger.
+* [Bug 2998] sntp/tests/packetProcessing.c broken without openssl. JPerlinger
+* [Bug 2961] sntp/tests/packetProcessing.c assumes AUTOKEY. HStenn.
+* [Bug 2959] refclock_jupiter: gps week correction <perlinger@ntp.org>
+ - fixed GPS week expansion to work based on build date. Special thanks
+ to Craig Leres for initial patch and testing.
+* [Bug 2951] ntpd tests fail: multiple definition of `send_via_ntp_signd'
+ - fixed Makefile.am <perlinger@ntp.org>
+* [Bug 2689] ATOM driver processes last PPS pulse at startup,
+ even if it is very old <perlinger@ntp.org>
+ - make sure PPS source is alive before processing samples
+ - improve stability close to the 500ms phase jump (phase gate)
+* Fix typos in include/ntp.h.
+* Shim X509_get_signature_nid() if needed.
+* git author attribution cleanup
+* bk ignore file cleanup
+* remove locks in Windows IO, use rpc-like thread synchronisation instead
+
+---
(4.2.8p8) 2016/06/02 Released by Harlan Stenn <stenn@ntp.org>
* [Sec 3042] Broadcast Interleave. HStenn.
@@ -19,7 +88,7 @@
* Fix typo in ntp-wait and plot_summary. HStenn.
* Make sure we have an "author" file for git imports. HStenn.
* Update the sntp problem tests for MacOS. HStenn.
-
+
---
(4.2.8p7) 2016/04/26 Released by Harlan Stenn <stenn@ntp.org>
diff --git a/contrib/ntp/CommitLog b/contrib/ntp/CommitLog
index 4577755..1c4c87f 100644
--- a/contrib/ntp/CommitLog
+++ b/contrib/ntp/CommitLog
@@ -1,3 +1,1866 @@
+ChangeSet@1.3720, 2016-11-21 08:08:21-05:00, stenn@deacon.udel.edu
+ NTP_4_2_8P9
+ TAG: NTP_4_2_8P9
+
+ ChangeLog@1.1852 +1 -0
+ NTP_4_2_8P9
+
+ ntpd/invoke-ntp.conf.texi@1.203 +1 -1
+ NTP_4_2_8P9
+
+ ntpd/invoke-ntp.keys.texi@1.192 +1 -1
+ NTP_4_2_8P9
+
+ ntpd/invoke-ntpd.texi@1.508 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntp.conf.5man@1.237 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntp.conf.5mdoc@1.237 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntp.conf.html@1.187 +157 -154
+ NTP_4_2_8P9
+
+ ntpd/ntp.conf.man.in@1.237 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntp.conf.mdoc.in@1.237 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntp.keys.5man@1.226 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntp.keys.5mdoc@1.226 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntp.keys.html@1.188 +21 -33
+ NTP_4_2_8P9
+
+ ntpd/ntp.keys.man.in@1.226 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntp.keys.mdoc.in@1.226 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntpd-opts.c@1.530 +245 -245
+ NTP_4_2_8P9
+
+ ntpd/ntpd-opts.h@1.529 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntpd.1ntpdman@1.337 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntpd.1ntpdmdoc@1.337 +2 -2
+ NTP_4_2_8P9
+
+ ntpd/ntpd.html@1.181 +142 -186
+ NTP_4_2_8P9
+
+ ntpd/ntpd.man.in@1.337 +3 -3
+ NTP_4_2_8P9
+
+ ntpd/ntpd.mdoc.in@1.337 +2 -2
+ NTP_4_2_8P9
+
+ ntpdc/invoke-ntpdc.texi@1.505 +2 -2
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc-opts.c@1.523 +106 -106
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc-opts.h@1.522 +3 -3
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc.1ntpdcman@1.336 +3 -3
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.336 +2 -2
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc.html@1.349 +75 -95
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc.man.in@1.336 +3 -3
+ NTP_4_2_8P9
+
+ ntpdc/ntpdc.mdoc.in@1.336 +2 -2
+ NTP_4_2_8P9
+
+ ntpq/invoke-ntpq.texi@1.513 +2 -2
+ NTP_4_2_8P9
+
+ ntpq/ntpq-opts.c@1.530 +113 -113
+ NTP_4_2_8P9
+
+ ntpq/ntpq-opts.h@1.528 +3 -3
+ NTP_4_2_8P9
+
+ ntpq/ntpq.1ntpqman@1.341 +3 -3
+ NTP_4_2_8P9
+
+ ntpq/ntpq.1ntpqmdoc@1.341 +2 -2
+ NTP_4_2_8P9
+
+ ntpq/ntpq.html@1.178 +136 -160
+ NTP_4_2_8P9
+
+ ntpq/ntpq.man.in@1.341 +3 -3
+ NTP_4_2_8P9
+
+ ntpq/ntpq.mdoc.in@1.341 +2 -2
+ NTP_4_2_8P9
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.507 +2 -2
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.525 +67 -67
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.524 +3 -3
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.336 +3 -3
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.336 +2 -2
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd.html@1.176 +10 -14
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd.man.in@1.336 +3 -3
+ NTP_4_2_8P9
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.336 +2 -2
+ NTP_4_2_8P9
+
+ packageinfo.sh@1.532 +2 -2
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.97 +3 -3
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.98 +2 -2
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/calc_tickadj.html@1.99 +30 -42
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.96 +3 -3
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.98 +2 -2
+ NTP_4_2_8P9
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.101 +1 -1
+ NTP_4_2_8P9
+
+ scripts/invoke-plot_summary.texi@1.119 +2 -2
+ NTP_4_2_8P9
+
+ scripts/invoke-summary.texi@1.118 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.328 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait-opts@1.64 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.325 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.326 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait.html@1.345 +41 -59
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait.man.in@1.325 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.326 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.116 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep-opts@1.66 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.104 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.104 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep.html@1.117 +46 -57
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep.man.in@1.104 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.105 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.117 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace-opts@1.66 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.104 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.105 +2 -2
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace.html@1.118 +38 -47
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace.man.in@1.104 +3 -3
+ NTP_4_2_8P9
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.106 +2 -2
+ NTP_4_2_8P9
+
+ scripts/plot_summary-opts@1.67 +2 -2
+ NTP_4_2_8P9
+
+ scripts/plot_summary.1plot_summaryman@1.117 +3 -3
+ NTP_4_2_8P9
+
+ scripts/plot_summary.1plot_summarymdoc@1.117 +2 -2
+ NTP_4_2_8P9
+
+ scripts/plot_summary.html@1.120 +40 -58
+ NTP_4_2_8P9
+
+ scripts/plot_summary.man.in@1.117 +3 -3
+ NTP_4_2_8P9
+
+ scripts/plot_summary.mdoc.in@1.117 +2 -2
+ NTP_4_2_8P9
+
+ scripts/summary-opts@1.66 +2 -2
+ NTP_4_2_8P9
+
+ scripts/summary.1summaryman@1.116 +3 -3
+ NTP_4_2_8P9
+
+ scripts/summary.1summarymdoc@1.116 +2 -2
+ NTP_4_2_8P9
+
+ scripts/summary.html@1.119 +37 -49
+ NTP_4_2_8P9
+
+ scripts/summary.man.in@1.116 +3 -3
+ NTP_4_2_8P9
+
+ scripts/summary.mdoc.in@1.116 +2 -2
+ NTP_4_2_8P9
+
+ scripts/update-leap/invoke-update-leap.texi@1.17 +1 -1
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap-opts@1.17 +2 -2
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap.1update-leapman@1.17 +3 -3
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.17 +2 -2
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap.html@1.17 +48 -72
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap.man.in@1.17 +3 -3
+ NTP_4_2_8P9
+
+ scripts/update-leap/update-leap.mdoc.in@1.17 +2 -2
+ NTP_4_2_8P9
+
+ sntp/invoke-sntp.texi@1.505 +2 -2
+ NTP_4_2_8P9
+
+ sntp/sntp-opts.c@1.524 +158 -158
+ NTP_4_2_8P9
+
+ sntp/sntp-opts.h@1.522 +3 -3
+ NTP_4_2_8P9
+
+ sntp/sntp.1sntpman@1.340 +3 -3
+ NTP_4_2_8P9
+
+ sntp/sntp.1sntpmdoc@1.340 +2 -2
+ NTP_4_2_8P9
+
+ sntp/sntp.html@1.520 +111 -135
+ NTP_4_2_8P9
+
+ sntp/sntp.man.in@1.340 +3 -3
+ NTP_4_2_8P9
+
+ sntp/sntp.mdoc.in@1.340 +2 -2
+ NTP_4_2_8P9
+
+ util/invoke-ntp-keygen.texi@1.508 +2 -2
+ NTP_4_2_8P9
+
+ util/ntp-keygen-opts.c@1.526 +172 -172
+ NTP_4_2_8P9
+
+ util/ntp-keygen-opts.h@1.524 +3 -3
+ NTP_4_2_8P9
+
+ util/ntp-keygen.1ntp-keygenman@1.336 +3 -3
+ NTP_4_2_8P9
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.336 +2 -2
+ NTP_4_2_8P9
+
+ util/ntp-keygen.html@1.182 +157 -216
+ NTP_4_2_8P9
+
+ util/ntp-keygen.man.in@1.336 +3 -3
+ NTP_4_2_8P9
+
+ util/ntp-keygen.mdoc.in@1.336 +2 -2
+ NTP_4_2_8P9
+
+ChangeSet@1.3719, 2016-11-21 07:07:04-05:00, stenn@deacon.udel.edu
+ ntp-4.2.8p9
+
+ packageinfo.sh@1.531 +1 -1
+ ntp-4.2.8p9
+
+ChangeSet@1.3718, 2016-11-21 03:47:58+00:00, stenn@psp-deb1.ntp.org
+ NEWS updates, final p9 testing
+
+ NEWS@1.203 +25 -17
+ NEWS updates, final p9 testing
+
+ packageinfo.sh@1.530 +2 -2
+ NEWS updates, final p9 testing
+
+ChangeSet@1.3717, 2016-11-18 10:33:02+00:00, stenn@psp-deb1.ntp.org
+ NEWS update for 3142
+
+ NEWS@1.202 +2 -1
+ NEWS update for 3142
+
+ChangeSet@1.3686.23.1, 2016-11-18 08:55:13+01:00, perlinger@ntp.org
+ [Bug 3142] bug in netmask prefix length detection
+
+ ChangeLog@1.1834.23.1 +3 -0
+ [Bug 3142] bug in netmask prefix length detection
+
+ lib/isc/netaddr.c@1.15 +0 -1
+ [Bug 3142] bug in netmask prefix length detection
+
+ChangeSet@1.3715, 2016-11-16 21:25:49-08:00, harlan@fb-x86-a.pfcs.com
+ NEWS file update
+
+ NEWS@1.201 +7 -22
+ NEWS file update
+
+ChangeSet@1.3707.1.1, 2016-11-13 21:59:31-08:00, harlan@fb-x86-a.pfcs.com
+ cleanup
+
+ NEWS@1.197.1.1 +201 -77
+ cleanup
+
+ChangeSet@1.3713, 2016-11-13 21:56:18-08:00, harlan@hms-mbp11.pfcs.com
+ cleanip
+
+ ChangeLog@1.1850 +2 -0
+ cleanip
+
+ChangeSet@1.3712, 2016-11-13 02:43:02+00:00, stenn@psp-deb1.ntp.org
+ NEWS updates
+
+ NEWS@1.199 +17 -0
+ NEWS updates
+
+ChangeSet@1.3710, 2016-11-13 02:30:31+00:00, stenn@psp-deb1.ntp.org
+ NEWS cleanup
+
+ NEWS@1.198 +2 -0
+ NEWS cleanup
+
+ChangeSet@1.3707, 2016-11-12 17:36:54-08:00, harlan@fb-x86-a.pfcs.com
+ NEWS cleanup
+
+ NEWS@1.197 +41 -6
+ NEWS cleanup
+
+ChangeSet@1.3706, 2016-11-12 16:55:59-08:00, harlan@fb-x86-a.pfcs.com
+ [Bug 3067] Root distance calculation needs improvement. HStenn
+
+ ChangeLog@1.1846.1.2 +1 -0
+ [Bug 3067] Root distance calculation needs improvement. HStenn
+
+ NEWS@1.196 +1 -0
+ [Bug 3067] Root distance calculation needs improvement. HStenn
+
+ ntpd/ntp_proto.c@1.396 +16 -11
+ [Bug 3067] Root distance calculation needs improvement. HStenn
+
+ChangeSet@1.3705, 2016-11-12 15:57:34-08:00, harlan@fb-x86-a.pfcs.com
+ [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+
+ ChangeLog@1.1846.1.1 +1 -0
+ [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+
+ NEWS@1.195 +1 -0
+ [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+
+ ntpd/refclock_gpsdjson.c@1.25 +1 -1
+ [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+
+ChangeSet@1.3686.22.1, 2016-11-12 05:54:39+01:00, perlinger@ntp.org
+ [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+
+ ChangeLog@1.1834.22.1 +4 -0
+ [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+
+ include/ntp_intres.h@1.2 +6 -0
+ [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+ - add flags and prototype for 'getaddrinfo_sometime_ex()'
+
+ libntp/ntp_intres.c@1.101 +48 -14
+ [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+ - implement 'getaddrinfo_sometime_ex()', support ignoring all errors
+
+ ntpd/ntp_config.c@1.338.1.1 +11 -10
+ [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+ - move decison about igoring DNS errors to resolver code
+
+ChangeSet@1.3703.1.2, 2016-11-09 12:32:07+00:00, stenn@psp-deb1.ntp.org
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ChangeLog@1.1848 +1 -1
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ html/miscopt.html@1.87 +4 -2
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ include/ntp.h@1.223 +1 -0
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ include/ntpd.h@1.194 +1 -0
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/complete.conf.in@1.32 +1 -1
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/invoke-ntp.conf.texi@1.202 +16 -1
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/keyword-gen-utd@1.29 +1 -1
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/keyword-gen.c@1.35 +1 -0
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp.conf.5man@1.236 +29 -8
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp.conf.5mdoc@1.236 +21 -2
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp.conf.def@1.25 +19 -0
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp.conf.man.in@1.236 +29 -8
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp.conf.mdoc.in@1.236 +21 -2
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_config.c@1.339 +15 -0
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_keyword.h@1.31 +1068 -1058
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_parser.c@1.103 +1196 -1193
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_parser.h@1.67 +373 -371
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_parser.y@1.93 +3 -1
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ ntpd/ntp_proto.c@1.394.1.2 +43 -26
+ [Bug 3114] bcpollbstep, tweaks and cleanup
+
+ChangeSet@1.3703, 2016-11-09 06:06:04+00:00, stenn@psp-deb1.ntp.org
+ typo
+
+ ChangeLog@1.1846 +1 -1
+ typo
+
+ChangeSet@1.3686.21.1, 2016-11-08 20:01:41+01:00, perlinger@ntp.org
+ [Bug 3089] Serial Parser does not work anymore for hopfser like device
+
+ ChangeLog@1.1834.21.1 +4 -0
+ [Bug 3089] Serial Parser does not work anymore for hopfser like device
+
+ libparse/clk_hopf6021.c@1.13 +43 -25
+ [Bug 3089] Serial Parser does not work anymore for hopfser like device
+ - simplified / refactored hex-decoding in driver.
+
+ChangeSet@1.3698.2.1, 2016-11-03 17:02:24-07:00, harlan@max.pfcs.com
+ Added leap smear/root dispersion comment
+
+ ntpd/ntp_proto.c@1.393.1.1 +4 -0
+ Added leap smear/root dispersion comment
+
+ChangeSet@1.3699.1.2, 2016-10-31 10:56:33+00:00, stenn@psp-deb1.ntp.org
+ Add bug 3125 to the NEWS file
+
+ NEWS@1.194 +2 -0
+ Add bug 3125 to the NEWS file
+
+ChangeSet@1.3701, 2016-10-24 07:37:25+02:00, perlinger@ntp.org
+ [winio2 - unlocked]
+ - the great lock removal
+ - the great renaming
+
+ ChangeLog@1.1844 +1 -0
+ [winio2 - unlocked] notes on changes
+
+ ntpd/ntp_refclock.c@1.123 +1 -1
+ [winio2 - unlocked]
+ - whitespace at EOL
+
+ ports/winnt/include/ntp_iocpltypes.h@1.3 +21 -24
+ [winio2 - unlocked]
+ - eliminate critical section, simplify API
+ - the great renaming
+
+ ports/winnt/ntpd/ntp_iocompletionport.c@1.77 +331 -209
+ [winio2 - unlocked]
+ - the great lock removal
+ - handle context objects are only manipulated by IOCPL thread
+ - closing handles is done by main thread after informing IOCPL thread (RPC-style)
+ - the great renaming
+ - restructured UNIX line mode emulation
+
+ ports/winnt/ntpd/ntp_iocpltypes.c@1.3 +31 -95
+ [winio2 - unlocked]
+ - eliminate critical section, simplify API
+ - the great renaming
+
+
+ChangeSet@1.3698.1.7, 2016-10-23 05:18:04+00:00, stenn@psp-deb1.ntp.org
+ ntp-4.2.8p9-PRE
+
+ ntpd/invoke-ntp.conf.texi@1.201 +1 -1
+ ntp-4.2.8p9-PRE
+
+ ntpd/invoke-ntp.keys.texi@1.191 +1 -1
+ ntp-4.2.8p9-PRE
+
+ ntpd/invoke-ntpd.texi@1.507 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.conf.5man@1.235 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.conf.5mdoc@1.235 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.conf.html@1.186 +104 -91
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.conf.man.in@1.235 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.conf.mdoc.in@1.235 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.keys.5man@1.225 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.keys.5mdoc@1.225 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.keys.html@1.187 +29 -17
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.keys.man.in@1.225 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntp.keys.mdoc.in@1.225 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd-opts.c@1.529 +245 -245
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd-opts.h@1.528 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd.1ntpdman@1.336 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd.1ntpdmdoc@1.336 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd.html@1.180 +146 -102
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd.man.in@1.336 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpd/ntpd.mdoc.in@1.336 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpdc/invoke-ntpdc.texi@1.504 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc-opts.c@1.522 +106 -106
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc-opts.h@1.521 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc.1ntpdcman@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc.html@1.348 +77 -57
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc.man.in@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpdc/ntpdc.mdoc.in@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpq/invoke-ntpq.texi@1.512 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq-opts.c@1.529 +113 -113
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq-opts.h@1.527 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq.1ntpqman@1.340 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq.1ntpqmdoc@1.340 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq.html@1.177 +129 -105
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq.man.in@1.340 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpq/ntpq.mdoc.in@1.340 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.506 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.524 +67 -67
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.523 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd.html@1.175 +14 -10
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd.man.in@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ packageinfo.sh@1.529 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.96 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.97 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/calc_tickadj.html@1.98 +34 -22
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.95 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.97 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.100 +1 -1
+ ntp-4.2.8p9-PRE
+
+ scripts/invoke-plot_summary.texi@1.118 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/invoke-summary.texi@1.117 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.327 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait-opts@1.63 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.324 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.325 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait.html@1.344 +49 -31
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait.man.in@1.324 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.325 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.115 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep-opts@1.65 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.103 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.103 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep.html@1.116 +44 -33
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep.man.in@1.103 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.104 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.116 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace-opts@1.65 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.103 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.104 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace.html@1.117 +36 -27
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace.man.in@1.103 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.105 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary-opts@1.66 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary.1plot_summaryman@1.116 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary.1plot_summarymdoc@1.116 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary.html@1.119 +47 -29
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary.man.in@1.116 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/plot_summary.mdoc.in@1.116 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/summary-opts@1.65 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/summary.1summaryman@1.115 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/summary.1summarymdoc@1.115 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/summary.html@1.118 +39 -27
+ ntp-4.2.8p9-PRE
+
+ scripts/summary.man.in@1.115 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/summary.mdoc.in@1.115 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/invoke-update-leap.texi@1.16 +1 -1
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap-opts@1.16 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap.1update-leapman@1.16 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.16 +2 -2
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap.html@1.16 +59 -35
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap.man.in@1.16 +3 -3
+ ntp-4.2.8p9-PRE
+
+ scripts/update-leap/update-leap.mdoc.in@1.16 +2 -2
+ ntp-4.2.8p9-PRE
+
+ sntp/invoke-sntp.texi@1.504 +2 -2
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp-opts.c@1.523 +158 -158
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp-opts.h@1.521 +3 -3
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp.1sntpman@1.339 +3 -3
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp.1sntpmdoc@1.339 +2 -2
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp.html@1.519 +109 -85
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp.man.in@1.339 +3 -3
+ ntp-4.2.8p9-PRE
+
+ sntp/sntp.mdoc.in@1.339 +2 -2
+ ntp-4.2.8p9-PRE
+
+ util/invoke-ntp-keygen.texi@1.507 +2 -2
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen-opts.c@1.525 +172 -172
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen-opts.h@1.523 +3 -3
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen.1ntp-keygenman@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen.html@1.181 +183 -124
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen.man.in@1.335 +3 -3
+ ntp-4.2.8p9-PRE
+
+ util/ntp-keygen.mdoc.in@1.335 +2 -2
+ ntp-4.2.8p9-PRE
+
+ChangeSet@1.3688.4.1, 2016-10-20 19:28:06+00:00, stenn@psp-deb1.ntp.org
+ cleanup
+
+ ChangeLog@1.1836.4.1 +1 -0
+ cleanup
+
+ChangeSet@1.3686.20.1, 2016-10-20 20:13:40+02:00, perlinger@ntp.org
+ [Sec 3114] Broadcast Mode Replay Prevention DoS
+
+ ChangeLog@1.1834.20.1 +4 -0
+ [Sec 3114] Broadcast Mode Replay Prevention DoS
+
+ ntpd/ntp_proto.c@1.392.2.1 +39 -6
+ [Sec 3114] Broadcast Mode Replay Prevention DoS
+ - applied patches by Matthew Van Gundy, with some rework.
+
+ChangeSet@1.3686.19.1, 2016-10-20 09:21:04+02:00, perlinger@ntp.org
+ [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS
+
+ ChangeLog@1.1834.19.1 +4 -0
+ [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS
+
+
+ include/ntp.h@1.220.1.1 +1 -1
+ [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS
+
+ ntpd/ntp_proto.c@1.392.1.1 +12 -3
+ [Sec 3113] Broadcast Mode Poll Interval Enforcement DoS
+ - applied fix as suggested by Matthew Van Gundy
+
+ChangeSet@1.3698.1.5, 2016-10-13 01:26:54-07:00, harlan@max.pfcs.com
+ typo
+
+ ChangeLog@1.1841.1.3 +1 -1
+ typo
+
+ChangeSet@1.3698.1.4, 2016-10-13 01:24:48-07:00, harlan@max.pfcs.com
+ [Bug 3102] Zero origin issues
+
+ ChangeLog@1.1841.1.2 +1 -0
+ [Bug 3102] Zero origin issues
+
+ ntpd/ntp_proto.c@1.393 +28 -3
+ [Bug 3102] Zero origin issues
+
+ChangeSet@1.3698.1.3, 2016-10-11 01:33:28-07:00, harlan@max.pfcs.com
+ Distribute libssl_compat.h
+
+ include/Makefile.am@1.55 +1 -0
+ Distribute libssl_compat.h
+
+ChangeSet@1.3698.1.2, 2016-10-10 22:34:55-07:00, harlan@max.pfcs.com
+ bug 3102 tests
+
+ tests/bug-3102/README-3102.txt@1.1 +43 -0
+ BitKeeper file tests/bug-3102/README-3102.txt
+
+ tests/bug-3102/README-3102.txt@1.0 +0 -0
+
+ tests/bug-3102/zeroorg.py@1.1 +24 -0
+ BitKeeper file tests/bug-3102/zeroorg.py
+
+ tests/bug-3102/zeroorg.py@1.0 +0 -0
+
+ChangeSet@1.3688.3.2, 2016-10-10 01:46:05-07:00, harlan@max.pfcs.com
+ Fix typos in include/ntp.h
+
+ ChangeLog@1.1836.3.1 +1 -0
+ Fix typos in include/ntp.h
+
+ include/ntp.h@1.221 +3 -4
+ Fix typos in include/ntp.h
+
+ChangeSet@1.3699, 2016-10-04 08:36:17+02:00, perlinger@ntp.org
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+
+ ChangeLog@1.1842 +2 -0
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+
+ ports/winnt/include/ntp_iocompletionport.h@1.23 +1 -1
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+ - minor type renaming
+
+ ports/winnt/include/termios.h@1.18 +3 -0
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+ - manage device context for IOCPL together with comport
+
+ ports/winnt/libntp/termios.c@1.34 +191 -120
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+ - manage device context for IOCPL together with comport
+
+ ports/winnt/ntpd/ntp_iocompletionport.c@1.76 +91 -98
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+ - manage device context for IOCPL together with comport
+ - integrate Danny Mayers changes for docket error handling
+
+ ports/winnt/ntpd/ntp_iocpltypes.c@1.2 +2 -2
+ [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order using the loopback-ppsapi-provider.dll
+ - fix wrong instance initialisation
+
+ChangeSet@1.3698, 2016-10-01 10:52:11+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS for 3119
+
+ NEWS@1.193 +17 -0
+ Update NEWS for 3119
+
+ChangeSet@1.3696, 2016-10-01 10:43:24+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS for 3118
+
+ NEWS@1.192 +17 -0
+ Update NEWS for 3118
+
+ChangeSet@1.3694, 2016-10-01 10:29:06+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS for 3110
+
+ NEWS@1.191 +17 -0
+ Update NEWS for 3110
+
+ChangeSet@1.3688.3.1, 2016-10-01 11:36:55+02:00, perlinger@ntp.org
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project files
+
+ ports/winnt/vs2005/libntp.vcproj@1.26 +8 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ ports/winnt/vs2008/libntp/libntp.vcproj@1.57 +12 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ ports/winnt/vs2013/libntp/libntp.vcxproj@1.12 +4 -1
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ ports/winnt/vs2013/libntp/libntp.vcxproj.filters@1.10 +14 -5
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ ports/winnt/vs2015/libntp/libntp.vcxproj@1.2 +3 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ ports/winnt/vs2015/libntp/libntp.vcxproj.filters@1.2 +9 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - add new sources to project
+
+ChangeSet@1.3691, 2016-10-01 09:18:25+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS for 3082
+
+ NEWS@1.190 +17 -0
+ Update NEWS for 3082
+
+ChangeSet@1.3688.1.33, 2016-10-01 08:32:28+00:00, stenn@psp-deb1.ntp.org
+ [Bug 3072] tweaks
+
+ NEWS@1.189 +16 -1
+ [Bug 3072] tweaks
+
+ ntpd/ntp_peer.c@1.160 +6 -1
+ [Bug 3072] tweaks
+
+ChangeSet@1.3688.1.31, 2016-09-29 20:53:30+00:00, perlinger@ntp.org
+ created 'X509_get_signature_nid()' shim for OpenSSL < v1.1.0
+ fixed unit test for sntp/packetProcessing to work with or without AUTOKEY flag
+
+ include/libssl_compat.h@1.2 +8 -1
+ created 'X509_get_signature_nid()' shim for OpenSSL < v1.1.0
+
+ libntp/libssl_compat.c@1.2 +9 -1
+ created 'X509_get_signature_nid()' shim for OpenSSL < v1.1.0
+
+ libntp/ssl_init.c@1.21 +0 -11
+ moved 'X509_get_signature_nid()' for OpenSSL < v1.1.0 to 'libssl_compat.{c,h}'
+
+ sntp/tests/packetProcessing.c@1.12 +0 -13
+ fixed unit test to work with or without AUTOKEY flag
+
+ChangeSet@1.3688.1.30, 2016-09-29 12:03:17+00:00, stenn@psp-deb1.ntp.org
+ NEWS update
+
+ NEWS@1.188 +2 -0
+ NEWS update
+
+ChangeSet@1.3688.2.1, 2016-09-29 11:59:03+00:00, stenn@psp-deb1.ntp.org
+ X509_get_signature_nid() shim tweak
+
+ ChangeLog@1.1836.2.1, stenn@stenn.ntp.org +1 -0
+ Shim X509_get_signature_nid() if needed
+
+ NEWS@1.187, stenn@stenn.ntp.org +1 -0
+ Shim X509_get_signature_nid() if needed
+
+ libntp/ssl_init.c@1.17.1.3 +1 -1
+ X509_get_signature_nid() shim tweak
+
+ libntp/ssl_init.c@1.17.1.2, stenn@stenn.ntp.org +12 -0
+ Shim X509_get_signature_nid() if needed
+
+ChangeSet@1.3688.1.27, 2016-09-28 11:28:56+00:00, stenn@psp-deb1.ntp.org
+ NEWS
+
+ NEWS@1.186 +1 -0
+ NEWS
+
+ChangeSet@1.3688.1.25, 2016-09-28 11:24:36+00:00, stenn@psp-deb1.ntp.org
+ NEWS
+
+ NEWS@1.185 +2 -0
+ NEWS
+
+ChangeSet@1.3688.1.23, 2016-09-28 11:17:22+00:00, stenn@psp-deb1.ntp.org
+ Updated ChangeLog and NEWS
+
+ ChangeLog@1.1836.1.19 +2 -2
+ Updated ChangeLog and NEWS
+
+ NEWS@1.184 +2 -0
+ Updated ChangeLog and NEWS
+
+ChangeSet@1.3688.1.21, 2016-09-28 11:12:28+00:00, stenn@psp-deb1.ntp.org
+ NEWS
+
+ NEWS@1.183 +2 -0
+ NEWS
+
+ChangeSet@1.3688.1.19, 2016-09-28 11:01:29+00:00, stenn@psp-deb1.ntp.org
+ NEWS
+
+ NEWS@1.182 +3 -0
+ NEWS
+
+ChangeSet@1.3688.1.17, 2016-09-28 10:54:12+00:00, stenn@psp-deb1.ntp.org
+ Update ChangeLog and NEWS
+
+ NEWS@1.181 +3 -0
+ Update ChangeLog and NEWS
+
+ChangeSet@1.3688.1.15, 2016-09-28 10:45:21+00:00, stenn@psp-deb1.ntp.org
+ Update ChangeLog and NEWS
+
+ ChangeLog@1.1836.1.14 +2 -2
+ Update ChangeLog and NEWS
+
+ NEWS@1.180 +2 -0
+ Update ChangeLog and NEWS
+
+ChangeSet@1.3688.1.13, 2016-09-28 10:37:17+00:00, stenn@psp-deb1.ntp.org
+ NEWS updates
+
+ NEWS@1.179 +4 -0
+ NEWS updates
+
+ChangeSet@1.3688.1.11, 2016-09-28 10:25:01+00:00, stenn@psp-deb1.ntp.org
+ Update ChangeLog and NEWS
+
+ ChangeLog@1.1836.1.11 +1 -1
+ Update ChangeLog and NEWS
+
+ NEWS@1.178 +1 -0
+ Update ChangeLog and NEWS
+
+ChangeSet@1.3688.1.8, 2016-09-28 08:17:16+00:00, stenn@psp-deb1.ntp.org
+ Update ChangeLog and NEWS
+
+ ChangeLog@1.1836.1.8 +2 -4
+ Update ChangeLog and NEWS
+
+ NEWS@1.177 +3 -0
+ Update ChangeLog and NEWS
+
+ChangeSet@1.3688.1.6, 2016-09-28 08:10:35+00:00, stenn@psp-deb1.ntp.org
+ Update ChangeLog and NEWS
+
+ ChangeLog@1.1836.1.6 +4 -6
+ Update ChangeLog and NEWS
+
+ NEWS@1.176 +4 -0
+ Update ChangeLog and NEWS
+
+ChangeSet@1.3688.1.4, 2016-09-28 07:59:31+00:00, stenn@psp-deb1.ntp.org
+ ChangeLog and NEWS cleanup
+
+ ChangeLog@1.1836.1.4 +2 -4
+ ChangeLog and NEWS cleanup
+
+ NEWS@1.175 +20 -0
+ ChangeLog and NEWS cleanup
+
+ChangeSet@1.3686.9.2, 2016-09-26 08:24:48+02:00, perlinger@ntp.org
+ [Bug 3021] unity_fixture.c needs pragma weak
+ - add library implementation of empty setUp()/tearDown()
+
+ sntp/unity/Makefile.am@1.10 +2 -0
+ [Bug 3021] unity_fixture.c needs pragma weak
+ - add library implementation of empty setUp()/tearDown()
+
+ sntp/unity/ulib_setup.c@1.1 +14 -0
+ [Bug 3021] unity_fixture.c needs pragma weak
+ - add library implementation of empty setUp()/tearDown()
+
+ sntp/unity/ulib_setup.c@1.0 +0 -0
+
+ sntp/unity/ulib_teardown.c@1.1 +13 -0
+ [Bug 3021] unity_fixture.c needs pragma weak
+ - add library implementation of empty setUp()/tearDown()
+
+ sntp/unity/ulib_teardown.c@1.0 +0 -0
+
+ChangeSet@1.3686.18.1, 2016-09-25 10:58:43+02:00, perlinger@ntp.org
+ [Bug 2689] ATOM driver processes last PPS pulse at startup, even if it is very old
+ - make sure PPS source is alive before processing samples
+ - improve stability close to the 500ms phase jump by a 400ms phase gate
+
+ ChangeLog@1.1834.18.1 +6 -0
+ [Bug 2689] ATOM driver processes last PPS pulse at startup, even if it is very old
+
+ ntpd/ntp_refclock.c@1.122 +50 -10
+ [Bug 2689] ATOM driver processes last PPS pulse at startup, even if it is very old
+ - make sure PPS source is alive before processing samples
+ - improve stability close to the 500ms phase jump by a 400ms phase gate
+
+ChangeSet@1.3686.17.1, 2016-09-24 20:38:17+02:00, perlinger@ntp.org
+ [Sec 3118] Mode 6 information disclosure and DDoS vector
+
+ ChangeLog@1.1834.17.1 +4 -0
+ [Sec 3118] Mode 6 information disclosure and DDoS vector
+
+ ntpd/ntp_control.c@1.209.5.1 +3 -3
+ [Sec 3118] Mode 6 information disclosure and DDoS vector
+ - TRAP config via mode 6 packet requires AUTH now
+ - writing the clock status should require AUTH, too.
+
+ChangeSet@1.3686.16.1, 2016-09-23 20:00:55+02:00, perlinger@ntp.org
+ [Sec 3119] Trap crash
+
+ ChangeLog@1.1834.16.1 +3 -0
+ [Sec 3119] Trap crash
+
+ ntpd/ntp_control.c@1.209.4.1 +19 -4
+ [Sec 3119] Trap crash
+ - bail out if we hit a Peer Event without a peer.
+
+ChangeSet@1.3686.15.1, 2016-09-22 20:42:39+02:00, perlinger@ntp.org
+ [Bug 3116] unit tests for NTP time stamp expansion
+
+ ChangeLog@1.1834.15.1 +3 -0
+ [Bug 3116] unit tests for NTP time stamp expansion
+
+ libntp/ntp_calendar.c@1.18 +56 -29
+ [Bug 3116] unit tests for NTP time stamp expansion
+ - added back unsigned spec to constant to avoid confusion
+ and explained why there was no problem at all
+
+ tests/libntp/calendar.c@1.13 +127 -0
+ [Bug 3116] unit tests for NTP time stamp expansion
+ - added test cases for NTP time stamp expansion
+
+ tests/libntp/run-calendar.c@1.12 +20 -15
+ [Bug 3116] unit tests for NTP time stamp expansion
+ - update generated file
+
+ChangeSet@1.3688.1.2, 2016-09-16 08:26:08+00:00, stenn@psp-deb1.ntp.org
+ [Bug 3053] ntp_loopfilter.c frequency calc precedence error. Sarah White.
+
+ ChangeLog@1.1836.1.2 +1 -0
+ [Bug 3053] ntp_loopfilter.c frequency calc precedence error. Sarah White.
+
+ ntpd/ntp_loopfilter.c@1.189 +6 -5
+ [Bug 3053] ntp_loopfilter.c frequency calc precedence error. Sarah White.
+
+ChangeSet@1.3688.1.1, 2016-09-16 08:21:45+00:00, stenn@psp-deb1.ntp.org
+ cleanup
+
+ ChangeLog@1.1836.1.1 +1 -0
+ cleanup
+
+ChangeSet@1.3686.14.1, 2016-09-15 19:29:17+02:00, perlinger@ntp.org
+ [Bug 2959] refclock_jupiter: gps week correction
+
+ ChangeLog@1.1834.14.1 +5 -0
+ [Bug 2959] refclock_jupiter: gps week correction
+
+ ntpd/refclock_jupiter.c@1.30 +66 -1
+ [Bug 2959] refclock_jupiter: gps week correction
+ - fixed GPS week expansion to work based on build date. Special thanks to Craig Leres
+ for initial patch and testing.
+
+ChangeSet@1.3686.13.1, 2016-09-13 07:26:06+02:00, perlinger@ntp.org
+ [Bug 3072] Attack on interface selection
+
+ ChangeLog@1.1834.13.1 +6 -1
+ [Bug 3072] Attack on interface selection
+
+ ntpd/ntp_peer.c@1.159 +61 -50
+ [Bug 3072] Attack on interface selection
+ - implemented Miroslav Lichvars <mlichvar@redhat.com> suggestion to skip interface updates
+ based on incoming packets
+
+ChangeSet@1.3686.12.1, 2016-09-10 17:22:27+02:00, perlinger@ntp.org
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be> to source
+ - added shim layer for new SSL API calls
+
+ ChangeLog@1.1834.12.1 +5 -0
+ [Bug 3095] Compatibility with openssl 1.1
+
+ include/libssl_compat.h@1.1 +93 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ shim layer for OpenSSL v1.1 API compatibility
+
+ include/libssl_compat.h@1.0 +0 -0
+
+ libntp/Makefile.am@1.78.1.1 +1 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ libntp/a_md5encrypt.c@1.36.1.1 +26 -28
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ libntp/libssl_compat.c@1.1 +327 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ shim layer for OpenSSL v1.1 API compatibility
+
+ libntp/libssl_compat.c@1.0 +0 -0
+
+ libntp/ssl_init.c@1.17.1.1 +7 -3
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpd/ntp_control.c@1.209.3.1 +13 -10
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpd/ntp_crypto.c@1.186.1.1 +207 -138
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpq/ntpq.c@1.170.1.1 +6 -3
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ sntp/crypto.c@1.21.1.1 +11 -7
+ [Bug 3095] Compatibility with openssl 1.1
+ - switched to new OpenSSL API
+
+ util/ntp-keygen.c@1.107.1.1 +217 -150
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+ - replaced use of deprecated functions
+
+ChangeSet@1.3686.11.1, 2016-09-09 18:34:03+02:00, jnperlin@nemesis.localnet
+ [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+
+ BitKeeper/etc/ignore@1.91.2.1 +2 -0
+ add more studio specific garbage
+
+ ChangeLog@1.1834.11.1 +4 -0
+ [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+
+ ports/winnt/include/ntp_iocpltypes.h@1.2 +1 -0
+ [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+ - add 'ioFlags' to context; should be persistent during overlapped IO
+
+ ports/winnt/ntpd/ntp_iocompletionport.c@1.73.1.1 +48 -9
+ [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+ - fixed error handling for truncated UDP packets
+ - sidekick: fixed handling of spurious ERROR_HOST_UNREACHABLE errors
+ - sidekick: fixed error message formatting for WaitForMultipleObjects() errors
+
+ ports/winnt/vs2015/ntp.sln@1.2 +3 -3
+ [Sec 3110] Windows: ntpd DoS by oversized UDP packet
+ - sidekick: set version of solution to match VS2015
+
+ChangeSet@1.3686.10.1, 2016-09-04 21:10:56+02:00, perlinger@ntp.org
+ [Bug 2951] ntpd tests fail: multiple definition of `send_via_ntp_signd'
+
+ ChangeLog@1.1834.10.1 +4 -0
+ [Bug 2951] ntpd tests fail: multiple definition of `send_via_ntp_signd'
+
+ tests/ntpd/Makefile.am@1.29 +0 -1
+ [Bug 2951] ntpd tests fail: multiple definition of `send_via_ntp_signd'
+ - removed source file that is included from t-ntp_signed.c
+
+ChangeSet@1.3686.9.1, 2016-09-04 19:19:34+02:00, perlinger@ntp.org
+ [Bug 3021] unity_fixture.c needs pragma weak
+
+ ChangeLog@1.1834.9.1 +4 -0
+ [Bug 3021] unity_fixture.c needs pragma weak
+
+ sntp/unity/unity_fixture.c@1.2 +0 -4
+ [Bug 3021] unity_fixture.c needs pragma weak
+ - removed unnecessary & harmful decls of 'setUp()' & 'tearDown()'
+ (no need to declare & implement locally unreferenced functions)
+
+ChangeSet@1.3686.8.1, 2016-09-04 17:37:34+02:00, perlinger@ntp.org
+ [Bug 3050] Fix for bug #2960 causes sntp to print a spurious error message
+
+ ChangeLog@1.1834.8.1 +5 -0
+ [Bug 3050] Fix for bug #2960 causes sntp to print a spurious error message
+
+ libntp/work_fork.c@1.17 +13 -5
+ [Bug 3050] Fix for bug #2960 causes sntp to print a spurious error message
+ - applied patches by Reinhard Max <max@suse.com> and Havard Eidnes <he@uninett.no>.
+ Reinhard fought the cause, Harvard the symptom -- having both should put an end to this issue.
+
+ChangeSet@1.3686.7.2, 2016-09-04 11:20:00+02:00, perlinger@ntp.org
+ [Bug 3059] Potential buffer overrun from oversized hash
+
+ ChangeLog@1.1834.7.2 +2 -0
+ [Bug 3059] Potential buffer overrun from oversized hash
+
+ libntp/a_md5encrypt.c@1.38 +7 -1
+ [Bug 3059] Potential buffer overrun from oversized hash
+ - applied patch by Brian Utterback <brian.utterback@oracle.com>
+
+ChangeSet@1.3686.7.1, 2016-09-04 08:48:03+02:00, perlinger@ntp.org
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be> to source
+ - added shim layer for SSL API calls with issues (both directions)
+
+ ChangeLog@1.1834.7.1 +5 -0
+ [Bug 3095] Compatibility with openssl 1.1
+
+ include/libssl_compat.h@1.1 +127 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ shim layer for OpenSSL v1.1 API compatibility
+
+ include/libssl_compat.h@1.0 +0 -0
+
+ libntp/Makefile.am@1.79 +1 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ libntp/a_md5encrypt.c@1.37 +26 -28
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+ - added shim layer for SSL API calls with issues (both directions)
+
+ libntp/libssl_compat.c@1.1 +452 -0
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be> to source
+ - added shim layer for SSL API calls with issues (both directions)
+
+ libntp/libssl_compat.c@1.0 +0 -0
+
+ libntp/ssl_init.c@1.18 +7 -3
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpd/ntp_control.c@1.209.2.1 +13 -10
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpd/ntp_crypto.c@1.187 +207 -138
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ ntpq/ntpq.c@1.171 +6 -3
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ sntp/crypto.c@1.22 +11 -7
+ [Bug 3095] Compatibility with openssl 1.1
+ - switched to new OpenSSL API
+
+ util/ntp-keygen.c@1.108 +147 -131
+ [Bug 3095] Compatibility with openssl 1.1
+ - applied patches by Kurt Roeckx <kurt@roeckx.be>
+
+ChangeSet@1.3686.6.1, 2016-08-21 09:29:00+02:00, perlinger@ntp.org
+ [Bug 3100] ntpq can't retrieve daemon_version
+ (extended sysvar lookup bug, introduced with fix for bug 3008)
+
+ ChangeLog@1.1834.6.1 +4 -0
+ [Bug 3100] ntpq can't retrieve daemon_version
+
+ ntpd/ntp_control.c@1.209.1.1 +10 -4
+ [Bug 3100] ntpq can't retrieve daemon_version
+ - extended sysvar lookup broken with fix for bug3008: extended sysvar text is "<name>=<val>",
+ name compare has to match if the name match stops at NUL or '='. Bug introduced with bug 3008 fix.
+
+ChangeSet@1.3686.5.1, 2016-08-01 09:09:19+02:00, perlinger@ntp.org
+ [Bug 3068] Linker warnings when building on Solaris.
+ - applied patch thanks to Andrew Stormont <andyjstormont@gmail.com>
+
+ ChangeLog@1.1834.5.1 +2 -0
+ [Bug 3068] Linker warnings when building on Solaris.
+
+ libntp/audio.c@1.37 +3 -3
+ [Bug 3068] Linker warnings when building on Solaris.
+ - applied patch thanks to Andrew Stormont <andyjstormont@gmail.com>
+
+ChangeSet@1.3686.4.1, 2016-07-26 08:56:44+02:00, perlinger@ntp.org
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+
+ ChangeLog@1.1834.4.1 +1 -0
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+
+ sntp/tests/packetProcessing.c@1.9.1.1 +107 -89
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+ - make sure the tests compile when configured using --without-crypto --disable-autokey
+ - ensure the there is no buffer overrun when AUTOKEY is disabled
+
+ sntp/tests/run-packetProcessing.c@1.11 +18 -18
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+ - automatic testrunner update
+
+ tests/libntp/a_md5encrypt.c@1.15 +1 -3
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+ - side kick: avoid extra memset by using 'emalloc_zero()'
+
+ tests/libntp/sfptostr.c@1.6 +3 -3
+ [Bug 2998] sntp/tests/packetProcessing.c broken without openssl
+ - side kick: avoid warnings about left shift of negative integer
+
+ChangeSet@1.3686.3.1, 2016-07-23 09:20:53+02:00, perlinger@ntp.org
+ [Bug 3066] NMEA clock ignores pps.
+ (side kick: ignore msbuild 10 user settings file)
+
+ BitKeeper/etc/ignore@1.91.1.1 +1 -0
+ ignore msbuild 10 user setting
+
+ ChangeLog@1.1834.3.1 +4 -0
+ [Bug 3066] NMEA clock ignores pps. (actually, the PPS HACK stopped to work for all serial devices)
+
+ ports/winnt/ntpd/ntp_iocompletionport.c@1.74 +20 -2
+ [Bug 3066] NMEA clock ignores pps. perlinger@ntp.org
+ - PPS-HACK works again; now controllable (explicitely) by the env var PPSAPI_HACK=true/yes/1 (anything else is NO)
+ - if PPSAPI_HACK is not set, a non-empty PPSAPI_DLLS list disables the PPS hack
+
+ChangeSet@1.3686.2.2, 2016-07-06 01:53:32-07:00, harlan@max.pfcs.com
+ [Bug 3084] update-leap mis-parses the leapfile name
+
+ ChangeLog@1.1834.2.2 +1 -0
+ [Bug 3084] update-leap mis-parses the leapfile name
+
+ scripts/update-leap/update-leap.in@1.3 +5 -2
+ [Bug 3084] update-leap mis-parses the leapfile name
+
+ChangeSet@1.3686.2.1, 2016-07-06 01:47:02-07:00, harlan@max.pfcs.com
+ [Bug 2961] sntp/tests/packetProcessing.c assumes AUTOKEY
+
+ ChangeLog@1.1834.2.1 +4 -0
+ [Bug 2961] sntp/tests/packetProcessing.c assumes AUTOKEY
+
+ sntp/tests/packetProcessing.c@1.10 +5 -3
+ [Bug 2961] sntp/tests/packetProcessing.c assumes AUTOKEY
+
+ChangeSet@1.3686.1.1, 2016-07-05 23:15:20+02:00, perlinger@ntp.org
+ [Sec 3075] Core Dump. Added missing paramter validation in read_mru_list().
+ [Sec 3082] (title too long -- Variation of [Sec 3075].)
+ - more hardening to read_mru_list().
+
+ ChangeLog@1.1834.1.1 +7 -1
+ [Sec 3075] Core Dump. Added missing paramter validation in read_mru_list()
+ [Sec 3082] (title too long -- Variation of [Sec 3075].)
+ - more hardening to read_mru_list().
+
+ ntpd/ntp_control.c@1.210 +57 -33
+ [Sec 3075] Core Dump. Added missing paramter validation in read_mru_list().
+ [Sec 3082] (title too long -- Variation of [Sec 3075].)
+ - more hardening to read_mru_list().
+
+ChangeSet@1.3688, 2016-06-14 05:57:34+00:00, stenn@psp-deb1.ntp.org
+ bk ignore file cleanup
+
+ BitKeeper/etc/ignore@1.92 +17 -13
+ bk ignore file cleanup
+
+ ChangeLog@1.1836 +1 -0
+ bk ignore file cleanup
+
+ChangeSet@1.3687, 2016-06-14 05:56:12+00:00, stenn@psp-deb1.ntp.org
+ git author attribution cleanup
+
+ BitKeeper/etc/Authors/a115350.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/a115350.txt
+
+ BitKeeper/etc/Authors/a115350.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/abe.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/abe.txt
+
+ BitKeeper/etc/Authors/abe.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/amidamaru.txt@1.1 +2 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/amidamaru.txt
+
+ BitKeeper/etc/Authors/amidamaru.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/bkorb.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/bkorb.txt
+
+ BitKeeper/etc/Authors/bkorb.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/blk.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/blk.txt
+
+ BitKeeper/etc/Authors/blk.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/blu.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/blu.txt
+
+ BitKeeper/etc/Authors/blu.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/bruckman.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/bruckman.txt
+
+ BitKeeper/etc/Authors/bruckman.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/burnicki.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/burnicki.txt
+
+ BitKeeper/etc/Authors/burnicki.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/claas.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/claas.txt
+
+ BitKeeper/etc/Authors/claas.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/clemens.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/clemens.txt
+
+ BitKeeper/etc/Authors/clemens.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/cov-build.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/cov-build.txt
+
+ BitKeeper/etc/Authors/cov-build.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/cprice.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/cprice.txt
+
+ BitKeeper/etc/Authors/cprice.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/davehart.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/davehart.txt
+
+ BitKeeper/etc/Authors/davehart.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/dietrich.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/dietrich.txt
+
+ BitKeeper/etc/Authors/dietrich.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/dunlop.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/dunlop.txt
+
+ BitKeeper/etc/Authors/dunlop.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/fernandoph.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/fernandoph.txt
+
+ BitKeeper/etc/Authors/fernandoph.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/fredb.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/fredb.txt
+
+ BitKeeper/etc/Authors/fredb.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/gerstung.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/gerstung.txt
+
+ BitKeeper/etc/Authors/gerstung.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/ginsbach.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/ginsbach.txt
+
+ BitKeeper/etc/Authors/ginsbach.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/gnu.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/gnu.txt
+
+ BitKeeper/etc/Authors/gnu.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/gopal.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/gopal.txt
+
+ BitKeeper/etc/Authors/gopal.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/gunturu.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/gunturu.txt
+
+ BitKeeper/etc/Authors/gunturu.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/harlan.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/harlan.txt
+
+ BitKeeper/etc/Authors/harlan.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/harlanst.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/harlanst.txt
+
+ BitKeeper/etc/Authors/harlanst.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/hart.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/hart.txt
+
+ BitKeeper/etc/Authors/hart.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/hilbrecht.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/hilbrecht.txt
+
+ BitKeeper/etc/Authors/hilbrecht.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/hstenn.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/hstenn.txt
+
+ BitKeeper/etc/Authors/hstenn.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/jhay.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/jhay.txt
+
+ BitKeeper/etc/Authors/jhay.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/jnperlin.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/jnperlin.txt
+
+ BitKeeper/etc/Authors/jnperlin.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/kamboj.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/kamboj.txt
+
+ BitKeeper/etc/Authors/kamboj.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/kardel.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/kardel.txt
+
+ BitKeeper/etc/Authors/kardel.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/karlsson.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/karlsson.txt
+
+ BitKeeper/etc/Authors/karlsson.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/kuehn.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/kuehn.txt
+
+ BitKeeper/etc/Authors/kuehn.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/linus.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/linus.txt
+
+ BitKeeper/etc/Authors/linus.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/loki.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/loki.txt
+
+ BitKeeper/etc/Authors/loki.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/martin.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/martin.txt
+
+ BitKeeper/etc/Authors/martin.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/matthias.andree.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/matthias.andree.txt
+
+ BitKeeper/etc/Authors/matthias.andree.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/mayer.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/mayer.txt
+
+ BitKeeper/etc/Authors/mayer.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/mbrett.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/mbrett.txt
+
+ BitKeeper/etc/Authors/mbrett.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/murray.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/murray.txt
+
+ BitKeeper/etc/Authors/murray.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/neal.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/neal.txt
+
+ BitKeeper/etc/Authors/neal.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/paul.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/paul.txt
+
+ BitKeeper/etc/Authors/paul.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/peda.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/peda.txt
+
+ BitKeeper/etc/Authors/peda.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/perlinger.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/perlinger.txt
+
+ BitKeeper/etc/Authors/perlinger.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/phk.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/phk.txt
+
+ BitKeeper/etc/Authors/phk.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/rayvt.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/rayvt.txt
+
+ BitKeeper/etc/Authors/rayvt.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/rick.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/rick.txt
+
+ BitKeeper/etc/Authors/rick.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/ro.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/ro.txt
+
+ BitKeeper/etc/Authors/ro.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/root.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/root.txt
+
+ BitKeeper/etc/Authors/root.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/skamboj.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/skamboj.txt
+
+ BitKeeper/etc/Authors/skamboj.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/stenn.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/stenn.txt
+
+ BitKeeper/etc/Authors/stenn.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/tflendrich.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/tflendrich.txt
+
+ BitKeeper/etc/Authors/tflendrich.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/tomek.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/tomek.txt
+
+ BitKeeper/etc/Authors/tomek.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/utterback.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/utterback.txt
+
+ BitKeeper/etc/Authors/utterback.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/venu.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/venu.txt
+
+ BitKeeper/etc/Authors/venu.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/viperus.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/viperus.txt
+
+ BitKeeper/etc/Authors/viperus.txt@1.0 +0 -0
+
+ BitKeeper/etc/Authors/wink.txt@1.1 +1 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/Authors/wink.txt
+
+ BitKeeper/etc/Authors/wink.txt@1.0 +0 -0
+
+ BitKeeper/etc/authors.txt@1.1 +58 -0
+ BitKeeper file /home/stenn/ntp-stable-p8/BitKeeper/etc/authors.txt
+
+ BitKeeper/etc/authors.txt@1.0 +0 -0
+
+ ChangeLog@1.1835 +3 -0
+ git author attribution cleanup
+
+ scripts/build/genAuthors.in@1.2 +7 -5
+ git author attribution cleanup
+
ChangeSet@1.3686, 2016-06-02 07:40:06-04:00, stenn@deacon.udel.edu
NTP_4_2_8P8
TAG: NTP_4_2_8P8
@@ -386,13 +2249,13 @@ ChangeSet@1.3680, 2016-05-24 12:05:06+00:00, stenn@psp-deb1.ntp.org
ntpd/ntp_proto.c@1.391 +39 -24
[Sec 3044] Spoofed server packets are partially processed. HStenn.
-ChangeSet@1.3669.3.2, 2016-05-24 02:58:00-07:00, harlan@hms-mbp11.pfcs.com
+ChangeSet@1.3669.4.2, 2016-05-24 02:58:00-07:00, harlan@hms-mbp11.pfcs.com
Make sure we have an "author" file for git imports. HStenn.
- ChangeLog@1.1820.3.3 +1 -0
+ ChangeLog@1.1820.4.3 +1 -0
Update the problem tests for MacOS for sntp. HStenn.
- ChangeLog@1.1820.3.2 +1 -0
+ ChangeLog@1.1820.4.2 +1 -0
Make sure we have an "author" file for git imports. HStenn.
configure.ac@1.606 +1 -0
@@ -420,10 +2283,10 @@ ChangeSet@1.3669.3.2, 2016-05-24 02:58:00-07:00, harlan@hms-mbp11.pfcs.com
sntp/tests/Makefile.am@1.67 +8 -2
Update the problem tests for MacOS for sntp. HStenn.
-ChangeSet@1.3669.3.1, 2016-05-24 02:25:46-07:00, harlan@hms-mbp11.pfcs.com
+ChangeSet@1.3669.4.1, 2016-05-24 02:25:46-07:00, harlan@hms-mbp11.pfcs.com
[Sec 3042] Broadcast Interleave. HStenn.
- ChangeLog@1.1820.3.1 +4 -0
+ ChangeLog@1.1820.4.1 +4 -0
[Sec 3042] Broadcast Interleave. HStenn.
ntpd/ntp_proto.c@1.386.1.1 +69 -14
@@ -506,6 +2369,13 @@ ChangeSet@1.3671.1.2, 2016-05-17 04:25:50+00:00, stenn@psp-deb1.ntp.org
ChangeLog@1.1822.1.2 +1 -0
[Bug 3052] Add a .gitignore file. Edmund Wong.
+ChangeSet@1.3669.3.2, 2016-05-10 12:11:43+00:00, abe@psp-deb1.ntp.org
+ refclock_jjy.c:
+ [Bug 3047] Correct typo in the comment line.
+
+ ntpd/refclock_jjy.c@1.32 +1 -1
+ [Bug 3047] Correct typo in the comment line.
+
ChangeSet@1.3675, 2016-05-08 11:59:28+02:00, perlinger@ntp.org
[Sec 3043] Autokey association reset. perlinger@ntp.org
(fixes [Sec 3044] and [Sec 3045], too)
@@ -517,6 +2387,22 @@ ChangeSet@1.3675, 2016-05-08 11:59:28+02:00, perlinger@ntp.org
[Sec 3043] Autokey association reset. perlinger@ntp.org
(fixes [Sec 3044] and [Sec 3045], too)
+ChangeSet@1.3669.3.1, 2016-05-08 07:34:11+00:00, abe@psp-deb1.ntp.org
+ driver40.html, refclock_jjy.c, driver40-ja.html, ChangeLog:
+ [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+
+ ChangeLog@1.1820.3.1 +2 -0
+ [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+
+ html/drivers/driver40-ja.html@1.5 +2 -2
+ [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+
+ html/drivers/driver40.html@1.20 +2 -2
+ [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+
+ ntpd/refclock_jjy.c@1.31 +7 -3
+ [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+
ChangeSet@1.3674, 2016-05-06 11:05:44+00:00, stenn@psp-deb1.ntp.org
[Sec 3046] CRYPTO_NAK crash
diff --git a/contrib/ntp/NEWS b/contrib/ntp/NEWS
index fd2551c..6445ed4 100644
--- a/contrib/ntp/NEWS
+++ b/contrib/ntp/NEWS
@@ -1,4 +1,311 @@
---
+NTP 4.2.8p9 (Harlan Stenn <stenn@ntp.org>, 2016/11/21)
+
+Focus: Security, Bug fixes, enhancements.
+
+Severity: HIGH
+
+In addition to bug fixes and enhancements, this release fixes the
+following 1 high- (Windows only), 2 medium-, 2 medium-/low, and
+5 low-severity vulnerabilities, and provides 28 other non-security
+fixes and improvements:
+
+* Trap crash
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3119 / CVE-2016-9311 / VU#633847
+ Affects: ntp-4.0.90 (21 July 1999), possibly earlier, up to but not
+ including 4.2.8p9, and ntp-4.3.0 up to but not including ntp-4.3.94.
+ CVSS2: MED 4.9 (AV:N/AC:H/Au:N/C:N/I:N/A:C)
+ CVSS3: MED 4.4 CVSS:3.0/AV:N/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:H
+ Summary:
+ ntpd does not enable trap service by default. If trap service
+ has been explicitly enabled, an attacker can send a specially
+ crafted packet to cause a null pointer dereference that will
+ crash ntpd, resulting in a denial of service.
+ Mitigation:
+ Implement BCP-38.
+ Use "restrict default noquery ..." in your ntp.conf file. Only
+ allow mode 6 queries from trusted networks and hosts.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Matthew Van Gundy of Cisco.
+
+* Mode 6 information disclosure and DDoS vector
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3118 / CVE-2016-9310 / VU#633847
+ Affects: ntp-4.0.90 (21 July 1999), possibly earlier, up to but not
+ including 4.2.8p9, and ntp-4.3.0 up to but not including ntp-4.3.94.
+ CVSS2: MED 6.4 (AV:A/AC:L/Au:N/C:N/I:N/A:P)
+ CVSS3: MED 6.5 CVSS:3.0/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
+ Summary:
+ An exploitable configuration modification vulnerability exists
+ in the control mode (mode 6) functionality of ntpd. If, against
+ long-standing BCP recommendations, "restrict default noquery ..."
+ is not specified, a specially crafted control mode packet can set
+ ntpd traps, providing information disclosure and DDoS
+ amplification, and unset ntpd traps, disabling legitimate
+ monitoring. A remote, unauthenticated, network attacker can
+ trigger this vulnerability.
+ Mitigation:
+ Implement BCP-38.
+ Use "restrict default noquery ..." in your ntp.conf file.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Matthew Van Gundy of Cisco.
+
+* Broadcast Mode Replay Prevention DoS
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3114 / CVE-2016-7427 / VU#633847
+ Affects: ntp-4.2.8p6, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.90 up to, but not including ntp-4.3.94.
+ CVSS2: LOW 3.3 (AV:A/AC:L/Au:N/C:N/I:N/A:P)
+ CVSS3: MED 4.3 CVSS:3.0/AV:L/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
+ Summary:
+ The broadcast mode of NTP is expected to only be used in a
+ trusted network. If the broadcast network is accessible to an
+ attacker, a potentially exploitable denial of service
+ vulnerability in ntpd's broadcast mode replay prevention
+ functionality can be abused. An attacker with access to the NTP
+ broadcast domain can periodically inject specially crafted
+ broadcast mode NTP packets into the broadcast domain which,
+ while being logged by ntpd, can cause ntpd to reject broadcast
+ mode packets from legitimate NTP broadcast servers.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Matthew Van Gundy of Cisco.
+
+* Broadcast Mode Poll Interval Enforcement DoS
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3113 / CVE-2016-7428 / VU#633847
+ Affects: ntp-4.2.8p6, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.90 up to, but not including ntp-4.3.94
+ CVSS2: LOW 3.3 (AV:A/AC:L/Au:N/C:N/I:N/A:P)
+ CVSS3: MED 4.3 CVSS:3.0/AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
+ Summary:
+ The broadcast mode of NTP is expected to only be used in a
+ trusted network. If the broadcast network is accessible to an
+ attacker, a potentially exploitable denial of service
+ vulnerability in ntpd's broadcast mode poll interval enforcement
+ functionality can be abused. To limit abuse, ntpd restricts the
+ rate at which each broadcast association will process incoming
+ packets. ntpd will reject broadcast mode packets that arrive
+ before the poll interval specified in the preceding broadcast
+ packet expires. An attacker with access to the NTP broadcast
+ domain can send specially crafted broadcast mode NTP packets to
+ the broadcast domain which, while being logged by ntpd, will
+ cause ntpd to reject broadcast mode packets from legitimate NTP
+ broadcast servers.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Matthew Van Gundy of Cisco.
+
+* Windows: ntpd DoS by oversized UDP packet
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3110 / CVE-2016-9312 / VU#633847
+ Affects Windows only: ntp-4.?.?, up to but not including ntp-4.2.8p9,
+ and ntp-4.3.0 up to, but not including ntp-4.3.94.
+ CVSS2: HIGH 7.8 (AV:N/AC:L/Au:N/C:N/I:N/A:C)
+ CVSS3: HIGH 7.5 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
+ Summary:
+ If a vulnerable instance of ntpd on Windows receives a crafted
+ malicious packet that is "too big", ntpd will stop working.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Robert Pajak of ABB.
+
+* 0rigin (zero origin) issues
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3102 / CVE-2016-7431 / VU#633847
+ Affects: ntp-4.2.8p8, and ntp-4.3.93.
+ CVSS2: MED 5.0 (AV:N/AC:L/Au:N/C:N/I:P/A:N)
+ CVSS3: MED 5.3 CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
+ Summary:
+ Zero Origin timestamp problems were fixed by Bug 2945 in
+ ntp-4.2.8p6. However, subsequent timestamp validation checks
+ introduced a regression in the handling of some Zero origin
+ timestamp checks.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Sharon Goldberg and Aanchal
+ Malhotra of Boston University.
+
+* read_mru_list() does inadequate incoming packet checks
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3082 / CVE-2016-7434 / VU#633847
+ Affects: ntp-4.2.7p22, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.0 up to, but not including ntp-4.3.94.
+ CVSS2: LOW 3.8 (AV:L/AC:H/Au:S/C:N/I:N/A:C)
+ CVSS3: LOW 3.8 CVSS:3.0/AV:P/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:H
+ Summary:
+ If ntpd is configured to allow mrulist query requests from a
+ server that sends a crafted malicious packet, ntpd will crash
+ on receipt of that crafted malicious mrulist query packet.
+ Mitigation:
+ Only allow mrulist query packets from trusted hosts.
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Magnus Stubman.
+
+* Attack on interface selection
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3072 / CVE-2016-7429 / VU#633847
+ Affects: ntp-4.2.7p385, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.0 up to, but not including ntp-4.3.94
+ CVSS2: LOW 1.0 (AV:L/AC:H/Au:S/C:N/I:N/A:P)
+ CVSS3: LOW 1.6 CVSS:3.0/AV:P/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:L
+ Summary:
+ When ntpd receives a server response on a socket that corresponds
+ to a different interface than was used for the request, the peer
+ structure is updated to use the interface for new requests. If
+ ntpd is running on a host with multiple interfaces in separate
+ networks and the operating system doesn't check source address in
+ received packets (e.g. rp_filter on Linux is set to 0), an
+ attacker that knows the address of the source can send a packet
+ with spoofed source address which will cause ntpd to select wrong
+ interface for the source and prevent it from sending new requests
+ until the list of interfaces is refreshed, which happens on
+ routing changes or every 5 minutes by default. If the attack is
+ repeated often enough (once per second), ntpd will not be able to
+ synchronize with the source.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ If you are going to configure your OS to disable source address
+ checks, also configure your firewall configuration to control
+ what interfaces can receive packets from what networks.
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Miroslav Lichvar of Red Hat.
+
+* Client rate limiting and server responses
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3071 / CVE-2016-7426 / VU#633847
+ Affects: ntp-4.2.5p203, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.0 up to, but not including ntp-4.3.94
+ CVSS2: LOW 1.0 (AV:L/AC:H/Au:S/C:N/I:N/A:P)
+ CVSS3: LOW 1.6 CVSS:3.0/AV:P/AC:H/PR:H/UI:R/S:U/C:N/I:N/A:L
+ Summary:
+ When ntpd is configured with rate limiting for all associations
+ (restrict default limited in ntp.conf), the limits are applied
+ also to responses received from its configured sources. An
+ attacker who knows the sources (e.g., from an IPv4 refid in
+ server response) and knows the system is (mis)configured in this
+ way can periodically send packets with spoofed source address to
+ keep the rate limiting activated and prevent ntpd from accepting
+ valid responses from its sources.
+
+ While this blanket rate limiting can be useful to prevent
+ brute-force attacks on the origin timestamp, it allows this DoS
+ attack. Similarly, it allows the attacker to prevent mobilization
+ of ephemeral associations.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered by Miroslav Lichvar of Red Hat.
+
+* Fix for bug 2085 broke initial sync calculations
+ Date Resolved: 21 November 2016; Dev (4.3.94) 21 November 2016
+ References: Sec 3067 / CVE-2016-7433 / VU#633847
+ Affects: ntp-4.2.7p385, up to but not including ntp-4.2.8p9, and
+ ntp-4.3.0 up to, but not including ntp-4.3.94. But the
+ root-distance calculation in general is incorrect in all versions
+ of ntp-4 until this release.
+ CVSS2: LOW 1.2 (AV:L/AC:H/Au:N/C:N/I:N/A:P)
+ CVSS3: LOW 1.6 CVSS:3.0/AV:P/AC:H/PR:H/UI:N/S:U/C:N/I:N/A:L
+ Summary:
+ Bug 2085 described a condition where the root delay was included
+ twice, causing the jitter value to be higher than expected. Due
+ to a misinterpretation of a small-print variable in The Book, the
+ fix for this problem was incorrect, resulting in a root distance
+ that did not include the peer dispersion. The calculations and
+ formulae have been reviewed and reconciled, and the code has been
+ updated accordingly.
+ Mitigation:
+ Upgrade to 4.2.8p9, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Properly monitor your ntpd instances, and auto-restart ntpd
+ (without -g) if it stops running.
+ Credit: This weakness was discovered independently by Brian Utterback of
+ Oracle, and Sharon Goldberg and Aanchal Malhotra of Boston University.
+
+Other fixes:
+
+* [Bug 3142] bug in netmask prefix length detection <perlinger@ntp.org>
+* [Bug 3138] gpsdjson refclock should honor fudgetime1. stenn@ntp.org
+* [Bug 3129] Unknown hosts can put resolver thread into a hard loop
+ - moved retry decision where it belongs. <perlinger@ntp.org>
+* [Bug 3125] NTPD doesn't fully start when ntp.conf entries are out of order
+ using the loopback-ppsapi-provider.dll <perlinger@ntp.org>
+* [Bug 3116] unit tests for NTP time stamp expansion. <perlinger@ntp.org>
+* [Bug 3100] ntpq can't retrieve daemon_version <perlinger@ntp.org>
+ - fixed extended sysvar lookup (bug introduced with bug 3008 fix)
+* [Bug 3095] Compatibility with openssl 1.1 <perlinger@ntp.org>
+ - applied patches by Kurt Roeckx <kurt@roeckx.be> to source
+ - added shim layer for SSL API calls with issues (both directions)
+* [Bug 3089] Serial Parser does not work anymore for hopfser like device
+ - simplified / refactored hex-decoding in driver. <perlinger@ntp.org>
+* [Bug 3084] update-leap mis-parses the leapfile name. HStenn.
+* [Bug 3068] Linker warnings when building on Solaris. perlinger@ntp.org
+ - applied patch thanks to Andrew Stormont <andyjstormont@gmail.com>
+* [Bug 3067] Root distance calculation needs improvement. HStenn
+* [Bug 3066] NMEA clock ignores pps. perlinger@ntp.org
+ - PPS-HACK works again.
+* [Bug 3059] Potential buffer overrun from oversized hash <perlinger@ntp.org>
+ - applied patch by Brian Utterback <brian.utterback@oracle.com>
+* [Bug 3053] ntp_loopfilter.c frequency calc precedence error. Sarah White.
+* [Bug 3050] Fix for bug #2960 causes [...] spurious error message.
+ <perlinger@ntp.org>
+ - patches by Reinhard Max <max@suse.com> and Havard Eidnes <he@uninett.no>
+* [Bug 3047] Fix refclock_jjy C-DEX JST2000. abe@ntp.org
+ - Patch provided by Kuramatsu.
+* [Bug 3021] unity_fixture.c needs pragma weak <perlinger@ntp.org>
+ - removed unnecessary & harmful decls of 'setUp()' & 'tearDown()'
+* [Bug 3019] Windows: ERROR_HOST_UNREACHABLE block packet processing. DMayer
+* [Bug 2998] sntp/tests/packetProcessing.c broken without openssl. JPerlinger
+* [Bug 2961] sntp/tests/packetProcessing.c assumes AUTOKEY. HStenn.
+* [Bug 2959] refclock_jupiter: gps week correction <perlinger@ntp.org>
+ - fixed GPS week expansion to work based on build date. Special thanks
+ to Craig Leres for initial patch and testing.
+* [Bug 2951] ntpd tests fail: multiple definition of `send_via_ntp_signd'
+ - fixed Makefile.am <perlinger@ntp.org>
+* [Bug 2689] ATOM driver processes last PPS pulse at startup,
+ even if it is very old <perlinger@ntp.org>
+ - make sure PPS source is alive before processing samples
+ - improve stability close to the 500ms phase jump (phase gate)
+* Fix typos in include/ntp.h.
+* Shim X509_get_signature_nid() if needed
+* git author attribution cleanup
+* bk ignore file cleanup
+* remove locks in Windows IO, use rpc-like thread synchronisation instead
+
+---
NTP 4.2.8p8 (Harlan Stenn <stenn@ntp.org>, 2016/06/02)
Focus: Security, Bug fixes, enhancements.
diff --git a/contrib/ntp/configure b/contrib/ntp/configure
index c38e7eb..91131cd 100755
--- a/contrib/ntp/configure
+++ b/contrib/ntp/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ntp 4.2.8p8.
+# Generated by GNU Autoconf 2.69 for ntp 4.2.8p9.
#
# Report bugs to <http://bugs.ntp.org./>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ntp'
PACKAGE_TARNAME='ntp'
-PACKAGE_VERSION='4.2.8p8'
-PACKAGE_STRING='ntp 4.2.8p8'
+PACKAGE_VERSION='4.2.8p9'
+PACKAGE_STRING='ntp 4.2.8p9'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -1618,7 +1618,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ntp 4.2.8p8 to adapt to many kinds of systems.
+\`configure' configures ntp 4.2.8p9 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1688,7 +1688,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ntp 4.2.8p8:";;
+ short | recursive ) echo "Configuration of ntp 4.2.8p9:";;
esac
cat <<\_ACEOF
@@ -1924,7 +1924,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ntp configure 4.2.8p8
+ntp configure 4.2.8p9
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2754,7 +2754,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ntp $as_me 4.2.8p8, which was
+It was created by ntp $as_me 4.2.8p9, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3755,7 +3755,7 @@ fi
# Define the identity of the package.
PACKAGE='ntp'
- VERSION='4.2.8p8'
+ VERSION='4.2.8p9'
cat >>confdefs.h <<_ACEOF
@@ -38003,7 +38003,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ntp $as_me 4.2.8p8, which was
+This file was extended by ntp $as_me 4.2.8p9, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -38070,7 +38070,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ntp config.status 4.2.8p8
+ntp config.status 4.2.8p9
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/contrib/ntp/html/drivers/driver40.html b/contrib/ntp/html/drivers/driver40.html
index 356429e..3b5f00f 100644
--- a/contrib/ntp/html/drivers/driver40.html
+++ b/contrib/ntp/html/drivers/driver40.html
@@ -16,7 +16,7 @@
<body>
<h3>JJY Receivers</h3>
<p>Last update:
- <!-- #BeginDate format:En2m -->15-May-2015 00:00<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->08-May-2016 00:00<!-- #EndDate -->
UTC &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="driver40.html">ENGLISH</a> &nbsp; <a href="driver40-ja.html">JAPANESE</a></p>
<hr>
<h4>Synopsis</h4>
@@ -136,7 +136,7 @@
<tr>
<td><code>{ENQ}1J{ETX}</code></td>
<td>&nbsp;--&gt;&nbsp;</td>
- <td><code>{STX}JYYMMDD HHMMSSS{ETX}</code></td>
+ <td><code>{STX}JYYMMDDWHHMMSSS{ETX}</code></td>
</tr>
</table>
<br>
diff --git a/contrib/ntp/html/miscopt.html b/contrib/ntp/html/miscopt.html
index bf4cfbf..6e03963 100644
--- a/contrib/ntp/html/miscopt.html
+++ b/contrib/ntp/html/miscopt.html
@@ -11,7 +11,7 @@
<img src="pic/boom3.gif" alt="gif" align="left"><a href="http://www.eecis.udel.edu/~mills/pictures.html">from <i>Pogo</i>, Walt Kelly</a>
<p>We have three, now looking for more.</p>
<p>Last update:
- <!-- #BeginDate format:En2m -->17-May-2016 06:26<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->9-Nov-2016 12:26<!-- #EndDate -->
UTC</p>
<br clear="left">
<h4>Related Links</h4>
@@ -145,10 +145,12 @@
<dd>Specifies the stepout threshold in seconds. The default without this command is 300 s. Since this option also affects the training and startup intervals, it should not be set less than the default. Further details are on the <a href="clock.html">Clock State Machine</a> page.</dd>
</dl>
</dd>
- <dt id="tos"><tt>tos [beacon <i>beacon</i> | ceiling <i>ceiling</i> | cohort {0 | 1} | floor <i>floor</i> | maxclock <i>maxclock </i>| maxdist <i>maxdist</i> | minclock <i>minclock</i> | mindist <i>mindist </i>| minsane <i>minsane</i> | orphan <i>stratum</i> | orphanwait <em>delay</em>]</tt></dt>
+ <dt id="tos"><tt>tos [bcpollbstep <i>poll-gate</i> | beacon <i>beacon</i> | ceiling <i>ceiling</i> | cohort {0 | 1} | floor <i>floor</i> | maxclock <i>maxclock </i>| maxdist <i>maxdist</i> | minclock <i>minclock</i> | mindist <i>mindist </i>| minsane <i>minsane</i> | orphan <i>stratum</i> | orphanwait <em>delay</em>]</tt></dt>
<dd>This command alters certain system variables used by the the clock selection and clustering algorithms. The default values of these variables have been carefully optimized for a wide range of network speeds and reliability expectations. Very rarely is it necessary to change the default values; but, some folks can't resist twisting the knobs. It can be used to select the quality and quantity of peers used to synchronize the system clock and is most useful in dynamic server discovery schemes. The options are as follows:</dd>
<dd>
<dl>
+ <dt><tt>bcpollbstep <i>poll-gate</i></tt></dt>
+ <dd>This option will cause the client to delay believing backward time steps from a broadcast server for <tt>bcpollbstep</tt> poll intervals. NTP Broadcast networks are expected to be trusted, and if the server's time gets stepped backwards then it's desireable that the clients follow this change as soon as possible. However, in spite of various protections built-in to the broadcast protocol, it is possible that an attacker could perform a carefully-constructed replay attack and cause clients to erroneously step their clocks backward. If the risk of a successful broadcast replay attack is greater than the risk of the clients being out of sync in the event that there is a backward step on the broadcast time servers, this option may be used to cause the clients to delay beliveving backward time steps until <i>poll-gate</i> consecutive polls have been received. The default is 0, which means the client will accept these steps upon receipt. Any value from 0 to 4 can be specified.</dd>
<dt><tt>beacon <i>beacon</i></tt></dt>
<dd>The manycast server sends packets at intervals of 64 s if less than <tt>maxclock</tt> servers are available. Otherwise, it sends packets at the <i><tt>beacon</tt></i> interval in seconds. The default is 3600 s. See the <a href="discover.html">Automatic Server Discovery</a> page for further details.</dd>
<dt><tt>ceiling <i>ceiling</i></tt></dt>
diff --git a/contrib/ntp/include/Makefile.am b/contrib/ntp/include/Makefile.am
index 521ac14..749a0c8 100644
--- a/contrib/ntp/include/Makefile.am
+++ b/contrib/ntp/include/Makefile.am
@@ -16,6 +16,7 @@ noinst_HEADERS = \
intreswork.h \
iosignal.h \
l_stdlib.h \
+ libssl_compat.h \
lib_strbuf.h \
libntp.h \
mbg_gps166.h \
diff --git a/contrib/ntp/include/Makefile.in b/contrib/ntp/include/Makefile.in
index ef92804..acd3bb5 100644
--- a/contrib/ntp/include/Makefile.in
+++ b/contrib/ntp/include/Makefile.in
@@ -501,6 +501,7 @@ noinst_HEADERS = \
intreswork.h \
iosignal.h \
l_stdlib.h \
+ libssl_compat.h \
lib_strbuf.h \
libntp.h \
mbg_gps166.h \
diff --git a/contrib/ntp/include/libssl_compat.h b/contrib/ntp/include/libssl_compat.h
new file mode 100644
index 0000000..a8938a1
--- /dev/null
+++ b/contrib/ntp/include/libssl_compat.h
@@ -0,0 +1,100 @@
+/*
+ * libssl_compat.h -- OpenSSL v1.1 compatibility shims
+ *
+ * ---------------------------------------------------------------------
+ *
+ * Written by Juergen Perlinger <perlinger@ntp.org> for the NTP project
+ *
+ * Based on an idea by Kurt Roeckx <kurt@roeckx.be>
+ *
+ * ---------------------------------------------------------------------
+ * This is a clean room implementation of shim functions that have
+ * counterparts in the OpenSSL v1.1 API but not in earlier versions.
+ *
+ * If the OpenSSL version used for compilation needs the shims (that is,
+ * does not provide the new functions) the names of these functions are
+ * redirected to our shims.
+ * ---------------------------------------------------------------------
+ */
+
+#ifndef NTP_LIBSSL_COMPAT_H
+#define NTP_LIBSSL_COMPAT_H
+
+#include "openssl/evp.h"
+#include "openssl/dsa.h"
+#include "openssl/rsa.h"
+
+/* ----------------------------------------------------------------- */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+/* ----------------------------------------------------------------- */
+
+# include <openssl/objects.h>
+# include <openssl/x509.h>
+
+/* shim the new-style API on an old-style OpenSSL */
+
+extern BN_GENCB* sslshimBN_GENCB_new(void);
+extern void sslshimBN_GENCB_free(BN_GENCB*);
+
+extern EVP_MD_CTX* sslshim_EVP_MD_CTX_new(void);
+extern void sslshim_EVP_MD_CTX_free(EVP_MD_CTX *ctx);
+
+extern int sslshim_EVP_PKEY_id(const EVP_PKEY * pkey);
+extern int sslshim_EVP_PKEY_base_id(const EVP_PKEY * pkey);
+extern RSA* sslshim_EVP_PKEY_get0_RSA(EVP_PKEY * pkey);
+extern DSA* sslshim_EVP_PKEY_get0_DSA(EVP_PKEY * pkey);
+
+extern void sslshim_RSA_get0_key(const RSA *prsa, const BIGNUM **pn,
+ const BIGNUM **pe, const BIGNUM **pd);
+extern int sslshim_RSA_set0_key(RSA *prsa, BIGNUM *n,
+ BIGNUM *e, BIGNUM *d);
+extern void sslshim_RSA_get0_factors(const RSA *prsa, const BIGNUM **pp,
+ const BIGNUM **pq);
+extern int sslshim_RSA_set0_factors(RSA *prsar, BIGNUM *p, BIGNUM *q);
+extern int sslshim_RSA_set0_crt_params(RSA *prsa, BIGNUM *dmp1,
+ BIGNUM *dmq1, BIGNUM *iqmp);
+
+extern void sslshim_DSA_SIG_get0(const DSA_SIG *psig, const BIGNUM **pr,
+ const BIGNUM **ps);
+extern int sslshim_DSA_SIG_set0(DSA_SIG *psig, BIGNUM *r, BIGNUM *s);
+extern void sslshim_DSA_get0_pqg(const DSA *pdsa, const BIGNUM **pp,
+ const BIGNUM **pq, const BIGNUM **pg);
+extern int sslshim_DSA_set0_pqg(DSA *pdsa, BIGNUM *p, BIGNUM *q, BIGNUM *g);
+extern void sslshim_DSA_get0_key(const DSA *pdsa, const BIGNUM **ppub_key,
+ const BIGNUM **ppriv_key);
+extern int sslshim_DSA_set0_key(DSA *pdsa, BIGNUM *pub_key,
+ BIGNUM *priv_key);
+
+extern int sslshim_X509_get_signature_nid(const X509 *x);
+
+#define BN_GENCB_new sslshimBN_GENCB_new
+#define BN_GENCB_free sslshimBN_GENCB_free
+
+#define EVP_MD_CTX_new sslshim_EVP_MD_CTX_new
+#define EVP_MD_CTX_free sslshim_EVP_MD_CTX_free
+
+#define EVP_PKEY_id sslshim_EVP_PKEY_id
+#define EVP_PKEY_base_id sslshim_EVP_PKEY_base_id
+#define EVP_PKEY_get0_RSA sslshim_EVP_PKEY_get0_RSA
+#define EVP_PKEY_get0_DSA sslshim_EVP_PKEY_get0_DSA
+
+#define RSA_get0_key sslshim_RSA_get0_key
+#define RSA_set0_key sslshim_RSA_set0_key
+#define RSA_get0_factors sslshim_RSA_get0_factors
+#define RSA_set0_factors sslshim_RSA_set0_factors
+#define RSA_set0_crt_params sslshim_RSA_set0_crt_params
+
+#define DSA_SIG_get0 sslshim_DSA_SIG_get0
+#define DSA_SIG_set0 sslshim_DSA_SIG_set0
+#define DSA_get0_pqg sslshim_DSA_get0_pqg
+#define DSA_set0_pqg sslshim_DSA_set0_pqg
+#define DSA_get0_key sslshim_DSA_get0_key
+#define DSA_set0_key sslshim_DSA_set0_key
+
+#define X509_get_signature_nid sslshim_X509_get_signature_nid
+
+/* ----------------------------------------------------------------- */
+#endif /* OPENSSL_VERSION_NUMBER < v1.1.0 */
+/* ----------------------------------------------------------------- */
+
+#endif /* NTP_LIBSSL_COMPAT_H */
diff --git a/contrib/ntp/include/ntp.h b/contrib/ntp/include/ntp.h
index 84c30d9..323135d 100644
--- a/contrib/ntp/include/ntp.h
+++ b/contrib/ntp/include/ntp.h
@@ -391,7 +391,7 @@ struct peer {
* Statistic counters
*/
u_long timereset; /* time stat counters were reset */
- u_long timelastrec; /* last packet received time */
+ u_long timelastrec; /* last packet received time, incl. trash */
u_long timereceived; /* last (clean) packet received time */
u_long timereachable; /* last reachable/unreachable time */
@@ -419,8 +419,7 @@ struct peer {
* MODE_BROADCAST and MODE_BCLIENT appear in the transition
* function. MODE_CONTROL and MODE_PRIVATE can appear in packets,
* but those never survive to the transition function.
- * is a
-/ */
+ */
#define MODE_UNSPEC 0 /* unspecified (old version) */
#define MODE_ACTIVE 1 /* symmetric active mode */
#define MODE_PASSIVE 2 /* symmetric passive mode */
@@ -433,7 +432,7 @@ struct peer {
#define MODE_CONTROL 6 /* control mode */
#define MODE_PRIVATE 7 /* private mode */
/*
- * This is a madeup mode for broadcast client.
+ * This is a made-up mode for broadcast client.
*/
#define MODE_BCLIENT 6 /* broadcast client mode */
@@ -724,6 +723,7 @@ struct pkt {
#define PROTO_UECRYPTONAK 30
#define PROTO_UEDIGEST 31
#define PROTO_PCEDIGEST 32
+#define PROTO_BCPOLLBSTEP 33
/*
* Configuration items for the loop filter
@@ -731,7 +731,7 @@ struct pkt {
#define LOOP_DRIFTINIT 1 /* iniitialize frequency */
#define LOOP_KERN_CLEAR 2 /* set initial frequency offset */
#define LOOP_MAX 3 /* set both step offsets */
-#define LOOP_MAX_BACK 4 /* set bacward-step offset */
+#define LOOP_MAX_BACK 4 /* set backward-step offset */
#define LOOP_MAX_FWD 5 /* set forward-step offset */
#define LOOP_PANIC 6 /* set panic offseet */
#define LOOP_PHI 7 /* set dispersion rate */
diff --git a/contrib/ntp/include/ntp_intres.h b/contrib/ntp/include/ntp_intres.h
index 1b6bd66..1109130 100644
--- a/contrib/ntp/include/ntp_intres.h
+++ b/contrib/ntp/include/ntp_intres.h
@@ -9,6 +9,9 @@
#ifdef WORKER
#define INITIAL_DNS_RETRY 2 /* seconds between queries */
+/* flags for extended addrinfo version */
+#define GAIR_F_IGNDNSERR 0x0001 /* ignore DNS errors */
+
/*
* you call getaddrinfo_sometime(name, service, &hints, retry, callback_func, context);
* later (*callback_func)(rescode, gai_errno, context, name, service, hints, ai_result) is called.
@@ -19,6 +22,9 @@ typedef void (*gai_sometime_callback)
extern int getaddrinfo_sometime(const char *, const char *,
const struct addrinfo *, int,
gai_sometime_callback, void *);
+extern int getaddrinfo_sometime_ex(const char *, const char *,
+ const struct addrinfo *, int,
+ gai_sometime_callback, void *, u_int);
/*
* In gai_sometime_callback routines, the resulting addrinfo list is
* only available until the callback returns. To hold on to the list
diff --git a/contrib/ntp/include/ntpd.h b/contrib/ntp/include/ntpd.h
index 362068c..1f33bf4 100644
--- a/contrib/ntp/include/ntpd.h
+++ b/contrib/ntp/include/ntpd.h
@@ -483,6 +483,7 @@ extern int sys_bclient; /* we set our time to broadcasts */
extern double sys_bdelay; /* broadcast client default delay */
extern int sys_authenticate; /* requre authentication for config */
extern l_fp sys_authdelay; /* authentication delay */
+extern u_char sys_bcpollbstep; /* broadcast poll backstep gate */
extern u_long sys_epoch; /* last clock update time */
extern keyid_t sys_private; /* private value for session seed */
extern int sys_manycastserver; /* respond to manycast client pkts */
diff --git a/contrib/ntp/lib/isc/netaddr.c b/contrib/ntp/lib/isc/netaddr.c
index 9710466..01f9080 100644
--- a/contrib/ntp/lib/isc/netaddr.c
+++ b/contrib/ntp/lib/isc/netaddr.c
@@ -280,7 +280,6 @@ isc_netaddr_masktoprefixlen(const isc_netaddr_t *s, unsigned int *lenp) {
for (; i < ipbytes; i++) {
if (p[i] != 0)
return (ISC_R_MASKNONCONTIG);
- i++;
}
*lenp = nbytes * 8 + nbits;
return (ISC_R_SUCCESS);
diff --git a/contrib/ntp/libntp/Makefile.am b/contrib/ntp/libntp/Makefile.am
index 26a4709..874739a 100644
--- a/contrib/ntp/libntp/Makefile.am
+++ b/contrib/ntp/libntp/Makefile.am
@@ -73,6 +73,7 @@ libntp_a_SRCS = \
iosignal.c \
is_ip_address.c \
lib_strbuf.c \
+ libssl_compat.c \
machines.c \
mktime.c \
modetoa.c \
diff --git a/contrib/ntp/libntp/Makefile.in b/contrib/ntp/libntp/Makefile.in
index 9125c19..46b7926 100644
--- a/contrib/ntp/libntp/Makefile.in
+++ b/contrib/ntp/libntp/Makefile.in
@@ -150,15 +150,15 @@ am__libntp_a_SOURCES_DIST = systime.c a_md5encrypt.c adjtime.c \
calyearstart.c clocktime.c clocktypes.c decodenetnum.c \
dofptoa.c dolfptoa.c emalloc.c findconfig.c getopt.c \
hextoint.c hextolfp.c humandate.c icom.c iosignal.c \
- is_ip_address.c lib_strbuf.c machines.c mktime.c modetoa.c \
- mstolfp.c msyslog.c netof.c ntp_calendar.c ntp_crypto_rnd.c \
- ntp_intres.c ntp_libopts.c ntp_lineedit.c ntp_random.c \
- ntp_rfc2553.c ntp_worker.c numtoa.c numtohost.c octtoint.c \
- prettydate.c refidsmear.c recvbuff.c refnumtoa.c snprintf.c \
- socket.c socktoa.c socktohost.c ssl_init.c statestr.c strdup.c \
- strl_obsd.c syssignal.c timetoa.c timevalops.c uglydate.c \
- vint64ops.c work_fork.c work_thread.c ymd2yd.c \
- $(srcdir)/../lib/isc/assertions.c \
+ is_ip_address.c lib_strbuf.c libssl_compat.c machines.c \
+ mktime.c modetoa.c mstolfp.c msyslog.c netof.c ntp_calendar.c \
+ ntp_crypto_rnd.c ntp_intres.c ntp_libopts.c ntp_lineedit.c \
+ ntp_random.c ntp_rfc2553.c ntp_worker.c numtoa.c numtohost.c \
+ octtoint.c prettydate.c refidsmear.c recvbuff.c refnumtoa.c \
+ snprintf.c socket.c socktoa.c socktohost.c ssl_init.c \
+ statestr.c strdup.c strl_obsd.c syssignal.c timetoa.c \
+ timevalops.c uglydate.c vint64ops.c work_fork.c work_thread.c \
+ ymd2yd.c $(srcdir)/../lib/isc/assertions.c \
$(srcdir)/../lib/isc/buffer.c \
$(srcdir)/../lib/isc/backtrace-emptytbl.c \
$(srcdir)/../lib/isc/backtrace.c \
@@ -209,20 +209,21 @@ am__objects_4 = a_md5encrypt.$(OBJEXT) adjtime.$(OBJEXT) \
getopt.$(OBJEXT) hextoint.$(OBJEXT) hextolfp.$(OBJEXT) \
humandate.$(OBJEXT) icom.$(OBJEXT) iosignal.$(OBJEXT) \
is_ip_address.$(OBJEXT) lib_strbuf.$(OBJEXT) \
- machines.$(OBJEXT) mktime.$(OBJEXT) modetoa.$(OBJEXT) \
- mstolfp.$(OBJEXT) msyslog.$(OBJEXT) netof.$(OBJEXT) \
- ntp_calendar.$(OBJEXT) ntp_crypto_rnd.$(OBJEXT) \
- ntp_intres.$(OBJEXT) ntp_libopts.$(OBJEXT) \
- ntp_lineedit.$(OBJEXT) ntp_random.$(OBJEXT) \
- ntp_rfc2553.$(OBJEXT) ntp_worker.$(OBJEXT) numtoa.$(OBJEXT) \
- numtohost.$(OBJEXT) octtoint.$(OBJEXT) prettydate.$(OBJEXT) \
- refidsmear.$(OBJEXT) recvbuff.$(OBJEXT) refnumtoa.$(OBJEXT) \
- snprintf.$(OBJEXT) socket.$(OBJEXT) socktoa.$(OBJEXT) \
- socktohost.$(OBJEXT) ssl_init.$(OBJEXT) statestr.$(OBJEXT) \
- strdup.$(OBJEXT) strl_obsd.$(OBJEXT) syssignal.$(OBJEXT) \
- timetoa.$(OBJEXT) timevalops.$(OBJEXT) uglydate.$(OBJEXT) \
- vint64ops.$(OBJEXT) work_fork.$(OBJEXT) work_thread.$(OBJEXT) \
- ymd2yd.$(OBJEXT) $(am__objects_3) $(am__objects_1)
+ libssl_compat.$(OBJEXT) machines.$(OBJEXT) mktime.$(OBJEXT) \
+ modetoa.$(OBJEXT) mstolfp.$(OBJEXT) msyslog.$(OBJEXT) \
+ netof.$(OBJEXT) ntp_calendar.$(OBJEXT) \
+ ntp_crypto_rnd.$(OBJEXT) ntp_intres.$(OBJEXT) \
+ ntp_libopts.$(OBJEXT) ntp_lineedit.$(OBJEXT) \
+ ntp_random.$(OBJEXT) ntp_rfc2553.$(OBJEXT) \
+ ntp_worker.$(OBJEXT) numtoa.$(OBJEXT) numtohost.$(OBJEXT) \
+ octtoint.$(OBJEXT) prettydate.$(OBJEXT) refidsmear.$(OBJEXT) \
+ recvbuff.$(OBJEXT) refnumtoa.$(OBJEXT) snprintf.$(OBJEXT) \
+ socket.$(OBJEXT) socktoa.$(OBJEXT) socktohost.$(OBJEXT) \
+ ssl_init.$(OBJEXT) statestr.$(OBJEXT) strdup.$(OBJEXT) \
+ strl_obsd.$(OBJEXT) syssignal.$(OBJEXT) timetoa.$(OBJEXT) \
+ timevalops.$(OBJEXT) uglydate.$(OBJEXT) vint64ops.$(OBJEXT) \
+ work_fork.$(OBJEXT) work_thread.$(OBJEXT) ymd2yd.$(OBJEXT) \
+ $(am__objects_3) $(am__objects_1)
am_libntp_a_OBJECTS = systime.$(OBJEXT) $(am__objects_4)
libntp_a_OBJECTS = $(am_libntp_a_OBJECTS)
libntpsim_a_AR = $(AR) $(ARFLAGS)
@@ -233,15 +234,15 @@ am__libntpsim_a_SOURCES_DIST = systime_s.c a_md5encrypt.c adjtime.c \
calyearstart.c clocktime.c clocktypes.c decodenetnum.c \
dofptoa.c dolfptoa.c emalloc.c findconfig.c getopt.c \
hextoint.c hextolfp.c humandate.c icom.c iosignal.c \
- is_ip_address.c lib_strbuf.c machines.c mktime.c modetoa.c \
- mstolfp.c msyslog.c netof.c ntp_calendar.c ntp_crypto_rnd.c \
- ntp_intres.c ntp_libopts.c ntp_lineedit.c ntp_random.c \
- ntp_rfc2553.c ntp_worker.c numtoa.c numtohost.c octtoint.c \
- prettydate.c refidsmear.c recvbuff.c refnumtoa.c snprintf.c \
- socket.c socktoa.c socktohost.c ssl_init.c statestr.c strdup.c \
- strl_obsd.c syssignal.c timetoa.c timevalops.c uglydate.c \
- vint64ops.c work_fork.c work_thread.c ymd2yd.c \
- $(srcdir)/../lib/isc/assertions.c \
+ is_ip_address.c lib_strbuf.c libssl_compat.c machines.c \
+ mktime.c modetoa.c mstolfp.c msyslog.c netof.c ntp_calendar.c \
+ ntp_crypto_rnd.c ntp_intres.c ntp_libopts.c ntp_lineedit.c \
+ ntp_random.c ntp_rfc2553.c ntp_worker.c numtoa.c numtohost.c \
+ octtoint.c prettydate.c refidsmear.c recvbuff.c refnumtoa.c \
+ snprintf.c socket.c socktoa.c socktohost.c ssl_init.c \
+ statestr.c strdup.c strl_obsd.c syssignal.c timetoa.c \
+ timevalops.c uglydate.c vint64ops.c work_fork.c work_thread.c \
+ ymd2yd.c $(srcdir)/../lib/isc/assertions.c \
$(srcdir)/../lib/isc/buffer.c \
$(srcdir)/../lib/isc/backtrace-emptytbl.c \
$(srcdir)/../lib/isc/backtrace.c \
@@ -665,6 +666,7 @@ libntp_a_SRCS = \
iosignal.c \
is_ip_address.c \
lib_strbuf.c \
+ libssl_compat.c \
machines.c \
mktime.c \
modetoa.c \
@@ -813,6 +815,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/is_ip_address.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib_strbuf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libssl_compat.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/machines.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
diff --git a/contrib/ntp/libntp/a_md5encrypt.c b/contrib/ntp/libntp/a_md5encrypt.c
index 618ccd9..7edcd2e 100644
--- a/contrib/ntp/libntp/a_md5encrypt.c
+++ b/contrib/ntp/libntp/a_md5encrypt.c
@@ -11,6 +11,7 @@
#include "ntp.h"
#include "ntp_md5.h" /* provides OpenSSL digest API */
#include "isc/string.h"
+#include "libssl_compat.h"
/*
* MD5authencrypt - generate message digest
*
@@ -26,7 +27,7 @@ MD5authencrypt(
{
u_char digest[EVP_MAX_MD_SIZE];
u_int len;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx;
/*
* Compute digest of key concatenated with packet. Note: the
@@ -34,18 +35,20 @@ MD5authencrypt(
* was creaded.
*/
INIT_SSL();
-#if defined(OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x0090700fL
- if (!EVP_DigestInit(&ctx, EVP_get_digestbynid(type))) {
+ ctx = EVP_MD_CTX_new();
+ if (!(ctx && EVP_DigestInit(ctx, EVP_get_digestbynid(type)))) {
msyslog(LOG_ERR,
"MAC encrypt: digest init failed");
+ EVP_MD_CTX_free(ctx);
return (0);
}
-#else
- EVP_DigestInit(&ctx, EVP_get_digestbynid(type));
-#endif
- EVP_DigestUpdate(&ctx, key, cache_secretsize);
- EVP_DigestUpdate(&ctx, (u_char *)pkt, length);
- EVP_DigestFinal(&ctx, digest, &len);
+ EVP_DigestUpdate(ctx, key, cache_secretsize);
+ EVP_DigestUpdate(ctx, (u_char *)pkt, length);
+ EVP_DigestFinal(ctx, digest, &len);
+ EVP_MD_CTX_free(ctx);
+ /* If the MAC is longer than the MAX then truncate it. */
+ if (len > MAX_MAC_LEN - 4)
+ len = MAX_MAC_LEN - 4;
memmove((u_char *)pkt + length + 4, digest, len);
return (len + 4);
}
@@ -67,7 +70,7 @@ MD5authdecrypt(
{
u_char digest[EVP_MAX_MD_SIZE];
u_int len;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx;
/*
* Compute digest of key concatenated with packet. Note: the
@@ -75,24 +78,26 @@ MD5authdecrypt(
* was created.
*/
INIT_SSL();
-#if defined(OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x0090700fL
- if (!EVP_DigestInit(&ctx, EVP_get_digestbynid(type))) {
+ ctx = EVP_MD_CTX_new();
+ if (!(ctx && EVP_DigestInit(ctx, EVP_get_digestbynid(type)))) {
msyslog(LOG_ERR,
"MAC decrypt: digest init failed");
+ EVP_MD_CTX_free(ctx);
return (0);
}
-#else
- EVP_DigestInit(&ctx, EVP_get_digestbynid(type));
-#endif
- EVP_DigestUpdate(&ctx, key, cache_secretsize);
- EVP_DigestUpdate(&ctx, (u_char *)pkt, length);
- EVP_DigestFinal(&ctx, digest, &len);
+ EVP_DigestUpdate(ctx, key, cache_secretsize);
+ EVP_DigestUpdate(ctx, (u_char *)pkt, length);
+ EVP_DigestFinal(ctx, digest, &len);
+ EVP_MD_CTX_free(ctx);
+ /* If the MAC is longer than the MAX then truncate it. */
+ if (len > MAX_MAC_LEN - 4)
+ len = MAX_MAC_LEN - 4;
if (size != (size_t)len + 4) {
msyslog(LOG_ERR,
"MAC decrypt: MAC length error");
return (0);
}
- return !isc_tsmemcmp(digest, (const char *)pkt + length + 4, len);
+ return !isc_tsmemcmp(digest, (u_char *)pkt + length + 4, len);
}
/*
@@ -106,7 +111,7 @@ addr2refid(sockaddr_u *addr)
{
u_char digest[20];
u_int32 addr_refid;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx;
u_int len;
if (IS_IPV4(addr))
@@ -114,24 +119,23 @@ addr2refid(sockaddr_u *addr)
INIT_SSL();
-#if defined(OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x0090700fL
- EVP_MD_CTX_init(&ctx);
+ ctx = EVP_MD_CTX_new();
+ EVP_MD_CTX_init(ctx);
#ifdef EVP_MD_CTX_FLAG_NON_FIPS_ALLOW
/* MD5 is not used as a crypto hash here. */
- EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
+ EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
#endif
- if (!EVP_DigestInit_ex(&ctx, EVP_md5(), NULL)) {
+ if (!EVP_DigestInit_ex(ctx, EVP_md5(), NULL)) {
msyslog(LOG_ERR,
"MD5 init failed");
+ EVP_MD_CTX_free(ctx); /* pedantic... but safe */
exit(1);
}
-#else
- EVP_DigestInit(&ctx, EVP_md5());
-#endif
- EVP_DigestUpdate(&ctx, (u_char *)PSOCK_ADDR6(addr),
+ EVP_DigestUpdate(ctx, (u_char *)PSOCK_ADDR6(addr),
sizeof(struct in6_addr));
- EVP_DigestFinal(&ctx, digest, &len);
+ EVP_DigestFinal(ctx, digest, &len);
+ EVP_MD_CTX_free(ctx);
memcpy(&addr_refid, digest, sizeof(addr_refid));
return (addr_refid);
}
diff --git a/contrib/ntp/libntp/audio.c b/contrib/ntp/libntp/audio.c
index 726dfa9..3b0a0b3 100644
--- a/contrib/ntp/libntp/audio.c
+++ b/contrib/ntp/libntp/audio.c
@@ -55,7 +55,7 @@ static struct audio_device device; /* audio device ident */
#ifdef PCM_STYLE_SOUND
# define INIT_FILE "/etc/ntp.audio"
int agc = SOUND_MIXER_WRITE_RECLEV; /* or IGAIN or LINE */
-int monitor = SOUND_MIXER_WRITE_VOLUME; /* or OGAIN */
+int audiomonitor = SOUND_MIXER_WRITE_VOLUME; /* or OGAIN */
int devmask = 0;
int recmask = 0;
char cf_c_dev[100], cf_i_dev[100], cf_agc[100], cf_monitor[100];
@@ -334,7 +334,7 @@ audio_init(
/* devmask */
i = mixer_name(cf_monitor, devmask);
if (i >= 0)
- monitor = MIXER_WRITE(i);
+ audiomonitor = MIXER_WRITE(i);
else
printf("monitor %s not in devmask %#x\n",
cf_monitor, devmask);
@@ -412,7 +412,7 @@ audio_gain(
# endif
l |= r << 8;
if (cf_monitor[0] != '\0')
- rval = ioctl(ctl_fd, monitor, &l );
+ rval = ioctl(ctl_fd, audiomonitor, &l );
else
rval = ioctl(ctl_fd, SOUND_MIXER_WRITE_VOLUME,
&l);
diff --git a/contrib/ntp/libntp/libssl_compat.c b/contrib/ntp/libntp/libssl_compat.c
new file mode 100644
index 0000000..ce6acb7
--- /dev/null
+++ b/contrib/ntp/libntp/libssl_compat.c
@@ -0,0 +1,335 @@
+/*
+ * libssl_compat.c -- OpenSSL v1.1 compatibility functions
+ *
+ * ---------------------------------------------------------------------
+ * Written by Juergen Perlinger <perlinger@ntp.org> for the NTP project
+ *
+ * Based on an idea by Kurt Roeckx <kurt@roeckx.be>
+ *
+ * ---------------------------------------------------------------------
+ * This is a clean room implementation of shim functions that have
+ * counterparts in the OpenSSL v1.1 API but not in earlier versions. So
+ * while OpenSSL broke binary compatibility with v1.1, this shim module
+ * should provide the necessary source code compatibility with older
+ * versions of OpenSSL.
+ * ---------------------------------------------------------------------
+ */
+#include "config.h"
+
+#include <string.h>
+#include <openssl/bn.h>
+#include <openssl/evp.h>
+
+#include "ntp_types.h"
+
+/* ----------------------------------------------------------------- */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+/* ----------------------------------------------------------------- */
+
+#include "libssl_compat.h"
+#include "ntp_assert.h"
+
+/* --------------------------------------------------------------------
+ * replace a BIGNUM owned by the caller with another one if it's not
+ * NULL, taking over the ownership of the new value. This clears & frees
+ * the old value -- the clear might be overkill, but it's better to err
+ * on the side of paranoia here.
+ */
+static void
+replace_bn_nn(
+ BIGNUM ** ps,
+ BIGNUM * n
+ )
+{
+ if (n) {
+ REQUIRE(*ps != n);
+ BN_clear_free(*ps);
+ *ps = n;
+ }
+}
+
+/* --------------------------------------------------------------------
+ * allocation and deallocation of prime number callbacks
+ */
+BN_GENCB*
+sslshimBN_GENCB_new(void)
+{
+ return calloc(1,sizeof(BN_GENCB));
+}
+
+void
+sslshimBN_GENCB_free(
+ BN_GENCB *cb
+ )
+{
+ free(cb);
+}
+
+/* --------------------------------------------------------------------
+ * allocation and deallocation of message digests
+ */
+EVP_MD_CTX*
+sslshim_EVP_MD_CTX_new(void)
+{
+ return calloc(1, sizeof(EVP_MD_CTX));
+}
+
+void
+sslshim_EVP_MD_CTX_free(
+ EVP_MD_CTX * pctx
+ )
+{
+ free(pctx);
+}
+
+/* --------------------------------------------------------------------
+ * get EVP keys and key type
+ */
+int
+sslshim_EVP_PKEY_id(
+ const EVP_PKEY *pkey
+ )
+{
+ return (pkey) ? pkey->type : EVP_PKEY_NONE;
+}
+
+int
+sslshim_EVP_PKEY_base_id(
+ const EVP_PKEY *pkey
+ )
+{
+ return (pkey) ? EVP_PKEY_type(pkey->type) : EVP_PKEY_NONE;
+}
+
+RSA*
+sslshim_EVP_PKEY_get0_RSA(
+ EVP_PKEY * pkey
+ )
+{
+ return (pkey) ? pkey->pkey.rsa : NULL;
+}
+
+DSA*
+sslshim_EVP_PKEY_get0_DSA(
+ EVP_PKEY * pkey
+ )
+{
+ return (pkey) ? pkey->pkey.dsa : NULL;
+}
+
+/* --------------------------------------------------------------------
+ * set/get RSA params
+ */
+void
+sslshim_RSA_get0_key(
+ const RSA * prsa,
+ const BIGNUM ** pn,
+ const BIGNUM ** pe,
+ const BIGNUM ** pd
+ )
+{
+ REQUIRE(prsa != NULL);
+
+ if (pn)
+ *pn = prsa->n;
+ if (pe)
+ *pe = prsa->e;
+ if (pd)
+ *pd = prsa->d;
+}
+
+int
+sslshim_RSA_set0_key(
+ RSA * prsa,
+ BIGNUM * n,
+ BIGNUM * e,
+ BIGNUM * d
+ )
+{
+ REQUIRE(prsa != NULL);
+ if (!((prsa->n || n) && (prsa->e || e)))
+ return 0;
+
+ replace_bn_nn(&prsa->n, n);
+ replace_bn_nn(&prsa->e, e);
+ replace_bn_nn(&prsa->d, d);
+
+ return 1;
+}
+
+void
+sslshim_RSA_get0_factors(
+ const RSA * prsa,
+ const BIGNUM ** pp,
+ const BIGNUM ** pq
+ )
+{
+ REQUIRE(prsa != NULL);
+
+ if (pp)
+ *pp = prsa->p;
+ if (pq)
+ *pq = prsa->q;
+}
+
+int
+sslshim_RSA_set0_factors(
+ RSA * prsa,
+ BIGNUM * p,
+ BIGNUM * q
+ )
+{
+ REQUIRE(prsa != NULL);
+ if (!((prsa->p || p) && (prsa->q || q)))
+ return 0;
+
+ replace_bn_nn(&prsa->p, p);
+ replace_bn_nn(&prsa->q, q);
+
+ return 1;
+}
+
+int
+sslshim_RSA_set0_crt_params(
+ RSA * prsa,
+ BIGNUM * dmp1,
+ BIGNUM * dmq1,
+ BIGNUM * iqmp
+ )
+{
+ REQUIRE(prsa != NULL);
+ if (!((prsa->dmp1 || dmp1) &&
+ (prsa->dmq1 || dmq1) &&
+ (prsa->iqmp || iqmp) ))
+ return 0;
+
+ replace_bn_nn(&prsa->dmp1, dmp1);
+ replace_bn_nn(&prsa->dmq1, dmq1);
+ replace_bn_nn(&prsa->iqmp, iqmp);
+
+ return 1;
+}
+
+/* --------------------------------------------------------------------
+ * set/get DSA signature parameters
+ */
+void
+sslshim_DSA_SIG_get0(
+ const DSA_SIG * psig,
+ const BIGNUM ** pr,
+ const BIGNUM ** ps
+ )
+{
+ REQUIRE(psig != NULL);
+
+ if (pr != NULL)
+ *pr = psig->r;
+ if (ps != NULL)
+ *ps = psig->s;
+}
+
+int
+sslshim_DSA_SIG_set0(
+ DSA_SIG * psig,
+ BIGNUM * r,
+ BIGNUM * s
+ )
+{
+ REQUIRE(psig != NULL);
+ if (!(r && s))
+ return 0;
+
+ replace_bn_nn(&psig->r, r);
+ replace_bn_nn(&psig->s, s);
+
+ return 1;
+}
+
+/* --------------------------------------------------------------------
+ * get/set DSA parameters
+ */
+void
+sslshim_DSA_get0_pqg(
+ const DSA * pdsa,
+ const BIGNUM ** pp,
+ const BIGNUM ** pq,
+ const BIGNUM ** pg
+ )
+{
+ REQUIRE(pdsa != NULL);
+
+ if (pp != NULL)
+ *pp = pdsa->p;
+ if (pq != NULL)
+ *pq = pdsa->q;
+ if (pg != NULL)
+ *pg = pdsa->g;
+}
+
+int
+sslshim_DSA_set0_pqg(
+ DSA * pdsa,
+ BIGNUM * p,
+ BIGNUM * q,
+ BIGNUM * g
+ )
+{
+ if (!((pdsa->p || p) && (pdsa->q || q) && (pdsa->g || g)))
+ return 0;
+
+ replace_bn_nn(&pdsa->p, p);
+ replace_bn_nn(&pdsa->q, q);
+ replace_bn_nn(&pdsa->g, g);
+
+ return 1;
+}
+
+void
+sslshim_DSA_get0_key(
+ const DSA * pdsa,
+ const BIGNUM ** ppub_key,
+ const BIGNUM ** ppriv_key
+ )
+{
+ REQUIRE(pdsa != NULL);
+
+ if (ppub_key != NULL)
+ *ppub_key = pdsa->pub_key;
+ if (ppriv_key != NULL)
+ *ppriv_key = pdsa->priv_key;
+}
+
+int
+sslshim_DSA_set0_key(
+ DSA * pdsa,
+ BIGNUM * pub_key,
+ BIGNUM * priv_key
+ )
+{
+ REQUIRE(pdsa != NULL);
+ if (!(pdsa->pub_key || pub_key))
+ return 0;
+
+ replace_bn_nn(&pdsa->pub_key, pub_key);
+ replace_bn_nn(&pdsa->priv_key, priv_key);
+
+ return 1;
+}
+
+int
+sslshim_X509_get_signature_nid(
+ const X509 *x
+ )
+{
+ return OBJ_obj2nid(x->sig_alg->algorithm);
+}
+
+/* ----------------------------------------------------------------- */
+#else /* OPENSSL_VERSION_NUMBER >= v1.1.0 */
+/* ----------------------------------------------------------------- */
+
+NONEMPTY_TRANSLATION_UNIT
+
+/* ----------------------------------------------------------------- */
+#endif
+/* ----------------------------------------------------------------- */
diff --git a/contrib/ntp/libntp/ntp_calendar.c b/contrib/ntp/libntp/ntp_calendar.c
index ff6ead3..4bfb0e7 100644
--- a/contrib/ntp/libntp/ntp_calendar.c
+++ b/contrib/ntp/libntp/ntp_calendar.c
@@ -91,7 +91,7 @@
/*
*---------------------------------------------------------------------
* replacing the 'time()' function
- * --------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
static systime_func_ptr systime_func = &time;
@@ -395,7 +395,7 @@ ntpcal_get_build_date(
/*
*---------------------------------------------------------------------
* basic calendar stuff
- * --------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
/* month table for a year starting with March,1st */
@@ -443,11 +443,11 @@ static const uint16_t real_month_table[2][13] = {
*/
/*
- * ==================================================================
+ * ====================================================================
*
* General algorithmic stuff
*
- * ==================================================================
+ * ====================================================================
*/
/*
@@ -495,7 +495,7 @@ static const uint16_t real_month_table[2][13] = {
* 32/16bit divisions and is still performant is a bit more
* difficult. Since most usecases can be coded in a way that does only
* require the 32-bit version a 64bit version is NOT provided here.
- * ---------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
int32_t
ntpcal_periodic_extend(
@@ -542,8 +542,35 @@ ntpcal_periodic_extend(
return pivot;
}
+/*---------------------------------------------------------------------
+ * Note to the casual reader
+ *
+ * In the next two functions you will find (or would have found...)
+ * the expression
+ *
+ * res.Q_s -= 0x80000000;
+ *
+ * There was some ruckus about a possible programming error due to
+ * integer overflow and sign propagation.
+ *
+ * This assumption is based on a lack of understanding of the C
+ * standard. (Though this is admittedly not one of the most 'natural'
+ * aspects of the 'C' language and easily to get wrong.)
+ *
+ * see
+ * http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf
+ * "ISO/IEC 9899:201x Committee Draft — April 12, 2011"
+ * 6.4.4.1 Integer constants, clause 5
+ *
+ * why there is no sign extension/overflow problem here.
+ *
+ * But to ease the minds of the doubtful, I added back the 'u' qualifiers
+ * that somehow got lost over the last years.
+ */
+
+
/*
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
* Convert a timestamp in NTP scale to a 64bit seconds value in the UN*X
* scale with proper epoch unfolding around a given pivot or the current
* system time. This function happily accepts negative pivot values as
@@ -553,7 +580,7 @@ ntpcal_periodic_extend(
* This is also a periodic extension, but since the cycle is 2^32 and
* the shift is 2^31, we can do some *very* fast math without explicit
* divisions.
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
vint64
ntpcal_ntp_to_time(
@@ -568,7 +595,7 @@ ntpcal_ntp_to_time(
res.q_s = (pivot != NULL)
? *pivot
: now();
- res.Q_s -= 0x80000000; /* unshift of half range */
+ res.Q_s -= 0x80000000u; /* unshift of half range */
ntp -= (uint32_t)JAN_1970; /* warp into UN*X domain */
ntp -= res.D_s.lo; /* cycle difference */
res.Q_s += (uint64_t)ntp; /* get expanded time */
@@ -581,7 +608,7 @@ ntpcal_ntp_to_time(
? *pivot
: now();
res = time_to_vint64(&tmp);
- M_SUB(res.D_s.hi, res.D_s.lo, 0, 0x80000000);
+ M_SUB(res.D_s.hi, res.D_s.lo, 0, 0x80000000u);
ntp -= (uint32_t)JAN_1970; /* warp into UN*X domain */
ntp -= res.D_s.lo; /* cycle difference */
M_ADD(res.D_s.hi, res.D_s.lo, 0, ntp);
@@ -592,7 +619,7 @@ ntpcal_ntp_to_time(
}
/*
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
* Convert a timestamp in NTP scale to a 64bit seconds value in the NTP
* scale with proper epoch unfolding around a given pivot or the current
* system time.
@@ -602,7 +629,7 @@ ntpcal_ntp_to_time(
* This is also a periodic extension, but since the cycle is 2^32 and
* the shift is 2^31, we can do some *very* fast math without explicit
* divisions.
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
vint64
ntpcal_ntp_to_ntp(
@@ -617,7 +644,7 @@ ntpcal_ntp_to_ntp(
res.q_s = (pivot)
? *pivot
: now();
- res.Q_s -= 0x80000000; /* unshift of half range */
+ res.Q_s -= 0x80000000u; /* unshift of half range */
res.Q_s += (uint32_t)JAN_1970; /* warp into NTP domain */
ntp -= res.D_s.lo; /* cycle difference */
res.Q_s += (uint64_t)ntp; /* get expanded time */
@@ -642,20 +669,20 @@ ntpcal_ntp_to_ntp(
/*
- * ==================================================================
+ * ====================================================================
*
* Splitting values to composite entities
*
- * ==================================================================
+ * ====================================================================
*/
/*
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
* Split a 64bit seconds value into elapsed days in 'res.hi' and
* elapsed seconds since midnight in 'res.lo' using explicit floor
* division. This function happily accepts negative time values as
* timestamps before the respective epoch start.
- * -------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
ntpcal_split
ntpcal_daysplit(
@@ -736,11 +763,11 @@ ntpcal_daysplit(
}
/*
- *-------------------------------------------------------------------
+ *---------------------------------------------------------------------
* Split a 32bit seconds value into h/m/s and excessive days. This
* function happily accepts negative time values as timestamps before
* midnight.
- * -------------------------------------------------------------------
+ *---------------------------------------------------------------------
*/
static int32_t
priv_timesplit(
@@ -773,7 +800,7 @@ priv_timesplit(
}
/*
- * ---------------------------------------------------------------------
+ *---------------------------------------------------------------------
* Given the number of elapsed days in the calendar era, split this
* number into the number of elapsed years in 'res.hi' and the number
* of elapsed days of that year in 'res.lo'.
@@ -1053,11 +1080,11 @@ ntpcal_time_to_date(
/*
- * ==================================================================
+ * ====================================================================
*
* merging composite entities
*
- * ==================================================================
+ * ====================================================================
*/
/*
@@ -1251,8 +1278,8 @@ ntpcal_edate_to_eradays(
* Convert ELAPSED years/months/days of gregorian calendar to elapsed
* days in year.
*
- * Note: This will give the true difference to the start of the given year,
- * even if months & days are off-scale.
+ * Note: This will give the true difference to the start of the given
+ * year, even if months & days are off-scale.
*---------------------------------------------------------------------
*/
int32_t
@@ -1434,11 +1461,11 @@ ntpcal_date_to_time(
/*
- * ==================================================================
+ * ====================================================================
*
* extended and unchecked variants of caljulian/caltontp
*
- * ==================================================================
+ * ====================================================================
*/
int
ntpcal_ntp64_to_date(
@@ -1500,11 +1527,11 @@ ntpcal_date_to_ntp(
/*
- * ==================================================================
+ * ====================================================================
*
* day-of-week calculations
*
- * ==================================================================
+ * ====================================================================
*/
/*
* Given a RataDie and a day-of-week, calculate a RDN that is reater-than,
@@ -1557,7 +1584,7 @@ ntpcal_weekday_lt(
}
/*
- * ==================================================================
+ * ====================================================================
*
* ISO week-calendar conversions
*
@@ -1601,7 +1628,7 @@ ntpcal_weekday_lt(
* smallest possible powers of two, so the division can be implemented
* as shifts if the optimiser chooses to do so.
*
- * ==================================================================
+ * ====================================================================
*/
/*
diff --git a/contrib/ntp/libntp/ntp_intres.c b/contrib/ntp/libntp/ntp_intres.c
index 0b5bb75..7aa288a 100644
--- a/contrib/ntp/libntp/ntp_intres.c
+++ b/contrib/ntp/libntp/ntp_intres.c
@@ -118,14 +118,16 @@
* is managed by the code which calls the *_complete routines.
*/
+
/* === typedefs === */
typedef struct blocking_gai_req_tag { /* marshalled args */
size_t octets;
u_int dns_idx;
time_t scheduled;
time_t earliest;
- struct addrinfo hints;
int retry;
+ struct addrinfo hints;
+ u_int qflags;
gai_sometime_callback callback;
void * context;
size_t nodesize;
@@ -205,8 +207,8 @@ static dnsworker_ctx * get_worker_context(blocking_child *, u_int);
static void scheduled_sleep(time_t, time_t,
dnsworker_ctx *);
static void manage_dns_retry_interval(time_t *, time_t *,
- int *,
- time_t *);
+ int *, time_t *,
+ int/*BOOL*/);
static int should_retry_dns(int, int);
#ifdef HAVE_RES_INIT
static void reload_resolv_conf(dnsworker_ctx *);
@@ -230,13 +232,14 @@ static void getnameinfo_sometime_complete(blocking_work_req,
* invokes provided callback completion function.
*/
int
-getaddrinfo_sometime(
+getaddrinfo_sometime_ex(
const char * node,
const char * service,
const struct addrinfo * hints,
int retry,
gai_sometime_callback callback,
- void * context
+ void * context,
+ u_int qflags
)
{
blocking_gai_req * gai_req;
@@ -277,6 +280,7 @@ getaddrinfo_sometime(
gai_req->context = context;
gai_req->nodesize = nodesize;
gai_req->servsize = servsize;
+ gai_req->qflags = qflags;
memcpy((char *)gai_req + sizeof(*gai_req), node, nodesize);
memcpy((char *)gai_req + sizeof(*gai_req) + nodesize, service,
@@ -451,6 +455,20 @@ blocking_getaddrinfo(
return 0;
}
+int
+getaddrinfo_sometime(
+ const char * node,
+ const char * service,
+ const struct addrinfo * hints,
+ int retry,
+ gai_sometime_callback callback,
+ void * context
+ )
+{
+ return getaddrinfo_sometime_ex(node, service, hints, retry,
+ callback, context, 0);
+}
+
static void
getaddrinfo_sometime_complete(
@@ -470,7 +488,7 @@ getaddrinfo_sometime_complete(
char * service;
char * canon_start;
time_t time_now;
- int again;
+ int again, noerr;
int af;
const char * fam_spec;
int i;
@@ -498,8 +516,9 @@ getaddrinfo_sometime_complete(
gai_req->dns_idx, humantime(time_now)));
}
} else {
- again = should_retry_dns(gai_resp->retcode,
- gai_resp->gai_errno);
+ noerr = !!(gai_req->qflags & GAIR_F_IGNDNSERR);
+ again = noerr || should_retry_dns(
+ gai_resp->retcode, gai_resp->gai_errno);
/*
* exponential backoff of DNS retries to 64s
*/
@@ -528,9 +547,10 @@ getaddrinfo_sometime_complete(
gai_strerror(gai_resp->retcode),
gai_resp->retcode);
}
- manage_dns_retry_interval(&gai_req->scheduled,
- &gai_req->earliest, &gai_req->retry,
- &child_ctx->next_dns_timeslot);
+ manage_dns_retry_interval(
+ &gai_req->scheduled, &gai_req->earliest,
+ &gai_req->retry, &child_ctx->next_dns_timeslot,
+ noerr);
if (!queue_blocking_request(
BLOCKING_GETADDRINFO,
gai_req,
@@ -826,7 +846,7 @@ getnameinfo_sometime_complete(
if (gni_req->retry > 0)
manage_dns_retry_interval(&gni_req->scheduled,
&gni_req->earliest, &gni_req->retry,
- &child_ctx->next_dns_timeslot);
+ &child_ctx->next_dns_timeslot, FALSE);
if (gni_req->retry > 0 && again) {
if (!queue_blocking_request(
@@ -1033,18 +1053,32 @@ manage_dns_retry_interval(
time_t * pscheduled,
time_t * pwhen,
int * pretry,
- time_t * pnext_timeslot
+ time_t * pnext_timeslot,
+ int forever
)
{
time_t now;
time_t when;
int retry;
+ int retmax;
now = time(NULL);
retry = *pretry;
when = max(now + retry, *pnext_timeslot);
*pnext_timeslot = when;
- retry = min(64, retry << 1);
+
+ /* this exponential backoff is slower than doubling up: The
+ * sequence goes 2-3-4-6-8-12-16-24-32... and the upper limit is
+ * 64 seconds for things that should not repeat forever, and
+ * 1024 when repeated forever.
+ */
+ retmax = forever ? 1024 : 64;
+ retry <<= 1;
+ if (retry & (retry - 1))
+ retry &= (retry - 1);
+ else
+ retry -= (retry >> 2);
+ retry = min(retmax, retry);
*pscheduled = now;
*pwhen = when;
diff --git a/contrib/ntp/libntp/ssl_init.c b/contrib/ntp/libntp/ssl_init.c
index a9d1d54..ef0f1c1 100644
--- a/contrib/ntp/libntp/ssl_init.c
+++ b/contrib/ntp/libntp/ssl_init.c
@@ -15,6 +15,7 @@
#ifdef OPENSSL
#include "openssl/err.h"
#include "openssl/evp.h"
+#include "libssl_compat.h"
void atexit_ssl_cleanup(void);
@@ -62,6 +63,7 @@ ssl_check_version(void)
INIT_SSL();
}
+
#endif /* OPENSSL */
@@ -84,7 +86,6 @@ keytype_from_text(
u_char digest[EVP_MAX_MD_SIZE];
char * upcased;
char * pch;
- EVP_MD_CTX ctx;
/*
* OpenSSL digest short names are capitalized, so uppercase the
@@ -110,8 +111,12 @@ keytype_from_text(
if (NULL != pdigest_len) {
#ifdef OPENSSL
- EVP_DigestInit(&ctx, EVP_get_digestbynid(key_type));
- EVP_DigestFinal(&ctx, digest, &digest_len);
+ EVP_MD_CTX *ctx;
+
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_get_digestbynid(key_type));
+ EVP_DigestFinal(ctx, digest, &digest_len);
+ EVP_MD_CTX_free(ctx);
if (digest_len > max_digest_len) {
fprintf(stderr,
"key type %s %u octet digests are too big, max %lu\n",
diff --git a/contrib/ntp/libntp/work_fork.c b/contrib/ntp/libntp/work_fork.c
index 6c9545a..8223fdd 100644
--- a/contrib/ntp/libntp/work_fork.c
+++ b/contrib/ntp/libntp/work_fork.c
@@ -114,18 +114,24 @@ interrupt_worker_sleep(void)
/*
* harvest_child_status() runs in the parent.
+ *
+ * Note the error handling -- this is an interaction with SIGCHLD.
+ * SIG_IGN on SIGCHLD on some OSes means do not wait but reap
+ * automatically. Since we're not really interested in the result code,
+ * we simply ignore the error.
*/
static void
harvest_child_status(
blocking_child * c
)
{
- if (c->pid)
- {
+ if (c->pid) {
/* Wait on the child so it can finish terminating */
if (waitpid(c->pid, NULL, 0) == c->pid)
TRACE(4, ("harvested child %d\n", c->pid));
- else msyslog(LOG_ERR, "error waiting on child %d: %m", c->pid);
+ else if (errno != ECHILD)
+ msyslog(LOG_ERR, "error waiting on child %d: %m", c->pid);
+ c->pid = 0;
}
}
@@ -162,7 +168,6 @@ cleanup_after_child(
close(c->resp_read_pipe);
c->resp_read_pipe = -1;
}
- c->pid = 0;
c->resp_read_ctx = NULL;
DEBUG_INSIST(-1 == c->req_read_pipe);
DEBUG_INSIST(-1 == c->resp_write_pipe);
@@ -461,7 +466,10 @@ fork_blocking_child(
fflush(stdout);
fflush(stderr);
- signal_no_reset(SIGCHLD, SIG_IGN);
+ /* [BUG 3050] setting SIGCHLD to SIG_IGN likely causes unwanted
+ * or undefined effects. We don't do it and leave SIGCHLD alone.
+ */
+ /* signal_no_reset(SIGCHLD, SIG_IGN); */
childpid = fork();
if (-1 == childpid) {
diff --git a/contrib/ntp/libparse/clk_hopf6021.c b/contrib/ntp/libparse/clk_hopf6021.c
index 2359628..c5980ef 100644
--- a/contrib/ntp/libparse/clk_hopf6021.c
+++ b/contrib/ntp/libparse/clk_hopf6021.c
@@ -113,13 +113,10 @@ static struct format hopf6021_fmt =
#define OFFS(x) format->field_offsets[(x)].offset
#define STOI(x, y) Stoi(&buffer[OFFS(x)], y, format->field_offsets[(x)].length)
-#define hexval(x) (('0' <= (x) && (x) <= '9') ? (x) - '0' : \
- ('a' <= (x) && (x) <= 'f') ? (x) - 'a' + 10 : \
- ('A' <= (x) && (x) <= 'F') ? (x) - 'A' + 10 : \
- -1)
static parse_cvt_fnc_t cvt_hopf6021;
static parse_inp_fnc_t inp_hopf6021;
+static unsigned char hexval(unsigned char);
clockformat_t clock_hopf6021 =
{
@@ -160,40 +157,40 @@ cvt_hopf6021(
return CVT_FAIL|CVT_BADFMT;
}
- clock_time->usecond = 0;
- clock_time->utcoffset = 0;
+ clock_time->usecond = 0;
+ clock_time->flags = 0;
- status = (u_char) hexval(buffer[OFFS(O_FLAGS)]);
- weekday= (u_char) hexval(buffer[OFFS(O_WDAY)]);
+ status = hexval(buffer[OFFS(O_FLAGS)]);
+ weekday = hexval(buffer[OFFS(O_WDAY)]);
if ((status == 0xFF) || (weekday == 0xFF))
{
return CVT_FAIL|CVT_BADFMT;
}
- clock_time->flags = 0;
-
if (weekday & HOPF_UTC)
{
- clock_time->flags |= PARSEB_UTC;
+ clock_time->flags |= PARSEB_UTC;
+ clock_time->utcoffset = 0;
+ }
+ else if (status & HOPF_DST)
+ {
+ clock_time->flags |= PARSEB_DST;
+ clock_time->utcoffset = -2*60*60; /* MET DST */
}
else
{
- if (status & HOPF_DST)
- {
- clock_time->flags |= PARSEB_DST;
- clock_time->utcoffset = -2*60*60; /* MET DST */
- }
- else
- {
- clock_time->utcoffset = -1*60*60; /* MET */
- }
+ clock_time->utcoffset = -1*60*60; /* MET */
}
- clock_time->flags |= (status & HOPF_DSTWARN) ? PARSEB_ANNOUNCE : 0;
-
+ if (status & HOPF_DSTWARN)
+ {
+ clock_time->flags |= PARSEB_ANNOUNCE;
+ }
+
switch (status & HOPF_MODE)
{
+ default: /* dummy: we cover all 4 cases. */
case HOPF_INVALID: /* Time/Date invalid */
clock_time->flags |= PARSEB_POWERUP;
break;
@@ -205,9 +202,6 @@ cvt_hopf6021(
case HOPF_RADIO: /* Radio clock */
case HOPF_RADIOHP: /* Radio clock high precision */
break;
-
- default:
- return CVT_FAIL|CVT_BADFMT;
}
return CVT_OK;
@@ -244,6 +238,30 @@ inp_hopf6021(
}
}
+/*
+ * convert a hex-digit to numeric value
+ */
+static unsigned char
+hexval(
+ unsigned char ch
+ )
+{
+ unsigned int dv;
+
+ if ((dv = ch - '0') >= 10u)
+ {
+ if ((dv -= 'A'-'0') < 6u || (dv -= 'a'-'A') < 6u)
+ {
+ dv += 10;
+ }
+ else
+ {
+ dv = 0xFF;
+ }
+ }
+ return (unsigned char)dv;
+}
+
#else /* not (REFCLOCK && CLOCK_PARSE && CLOCK_HOPF6021) */
int clk_hopf6021_bs;
#endif /* not (REFCLOCK && CLOCK_PARSE && CLOCK_HOPF6021) */
diff --git a/contrib/ntp/ntpd/complete.conf.in b/contrib/ntp/ntpd/complete.conf.in
index 2c547fa..4c6c045 100644
--- a/contrib/ntp/ntpd/complete.conf.in
+++ b/contrib/ntp/ntpd/complete.conf.in
@@ -26,7 +26,7 @@ controlkey 12
requestkey 12
enable auth ntp monitor stats
disable bclient calibrate kernel mode7 peer_clear_digest_early unpeer_crypto_early unpeer_crypto_nak_early unpeer_digest_early
-tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 orphan 16 orphanwait 300
+tos beacon 3600 ceiling 16 cohort 0 floor 1 maxclock 10 maxdist 1.5 minclock 3 mindist 0.001 minsane 1 orphan 16 orphanwait 300 bcpollbstep 3
rlimit@HAVE_RLIMIT_MEMLOCK@@HAVE_RLIMIT_STACK@
tinker allan 1500 dispersion 15 freq 0 huffpuff 7200 panic 1000 step 0.128 stepout 900 tick 0.01
broadcastclient
diff --git a/contrib/ntp/ntpd/invoke-ntp.conf.texi b/contrib/ntp/ntpd/invoke-ntp.conf.texi
index 7efecee..afd92ff 100644
--- a/contrib/ntp/ntpd/invoke-ntp.conf.texi
+++ b/contrib/ntp/ntpd/invoke-ntp.conf.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.conf.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:36:07 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:01:55 AM by AutoGen 5.18.5
# From the definitions ntp.conf.def
# and the template file agtexi-file.tpl
@end ignore
@@ -1925,6 +1925,21 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+@subsubsection Broadcast Options
+@table @asis
+@item @code{tos} @code{[@code{bcpollbstep} @kbd{gate}]}
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
@subsubsection Manycast Options
@table @asis
@item @code{tos} @code{[@code{ceiling} @kbd{ceiling} | @code{cohort} @code{@{} @code{0} | @code{1} @code{@}} | @code{floor} @kbd{floor} | @code{minclock} @kbd{minclock} | @code{minsane} @kbd{minsane}]}
diff --git a/contrib/ntp/ntpd/invoke-ntp.keys.texi b/contrib/ntp/ntpd/invoke-ntp.keys.texi
index 8585e65..5982f03 100644
--- a/contrib/ntp/ntpd/invoke-ntp.keys.texi
+++ b/contrib/ntp/ntpd/invoke-ntp.keys.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.keys.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:36:10 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:01:58 AM by AutoGen 5.18.5
# From the definitions ntp.keys.def
# and the template file agtexi-file.tpl
@end ignore
diff --git a/contrib/ntp/ntpd/invoke-ntpd.texi b/contrib/ntp/ntpd/invoke-ntpd.texi
index 7c1275a..975494b 100644
--- a/contrib/ntp/ntpd/invoke-ntpd.texi
+++ b/contrib/ntp/ntpd/invoke-ntpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpd.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:36:12 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:02:00 AM by AutoGen 5.18.5
# From the definitions ntpd-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -142,7 +142,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpd - NTP daemon program - Ver. 4.2.8p8
+ntpd - NTP daemon program - Ver. 4.2.8p9
Usage: ntpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ <server1> ... <serverN> ]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/ntpd/keyword-gen-utd b/contrib/ntp/ntpd/keyword-gen-utd
index 69665c2..683453d 100644
--- a/contrib/ntp/ntpd/keyword-gen-utd
+++ b/contrib/ntp/ntpd/keyword-gen-utd
@@ -1 +1 @@
- * Generated 2016-05-19 06:35:34 UTC diff_ignore_line
+ * Generated 2016-11-09 11:39:28 UTC diff_ignore_line
diff --git a/contrib/ntp/ntpd/keyword-gen.c b/contrib/ntp/ntpd/keyword-gen.c
index 648b3ae..c9d30be 100644
--- a/contrib/ntp/ntpd/keyword-gen.c
+++ b/contrib/ntp/ntpd/keyword-gen.c
@@ -148,6 +148,7 @@ struct key_tok ntp_keywords[] = {
{ "cohort", T_Cohort, FOLLBY_TOKEN },
{ "mindist", T_Mindist, FOLLBY_TOKEN },
{ "maxdist", T_Maxdist, FOLLBY_TOKEN },
+{ "bcpollbstep", T_Bcpollbstep, FOLLBY_TOKEN },
{ "beacon", T_Beacon, FOLLBY_TOKEN },
{ "orphan", T_Orphan, FOLLBY_TOKEN },
{ "orphanwait", T_Orphanwait, FOLLBY_TOKEN },
diff --git a/contrib/ntp/ntpd/ntp.conf.5man b/contrib/ntp/ntpd/ntp.conf.5man
index b3fc3d8..35fa0aa 100644
--- a/contrib/ntp/ntpd/ntp.conf.5man
+++ b/contrib/ntp/ntpd/ntp.conf.5man
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp.conf 5man "02 Jun 2016" "4.2.8p8" "File Formats"
+.TH ntp.conf 5man "21 Nov 2016" "4.2.8p9" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OzaOIT/ag-3zaGHT)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Q_ai3f/ag-2_aa2f)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:35:50 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:41 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2174,7 +2174,23 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.SS Broadcast Options
+.TP 7
+.NOP \f\*[B-Font]tos\f[] [\f\*[B-Font]bcpollbstep\f[] \f\*[I-Font]gate\f[]]
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.SS Manycast Options
+.RS
.TP 7
.NOP \f\*[B-Font]tos\f[] [\f\*[B-Font]ceiling\f[] \f\*[I-Font]ceiling\f[] | \f\*[B-Font]cohort\f[] { \f\*[B-Font]0\f[] | \f\*[B-Font]1\f[] } | \f\*[B-Font]floor\f[] \f\*[I-Font]floor\f[] | \f\*[B-Font]minclock\f[] \f\*[I-Font]minclock\f[] | \f\*[B-Font]minsane\f[] \f\*[I-Font]minsane\f[]]
This command affects the clock selection and clustering
@@ -2244,7 +2260,7 @@ In manycast mode these values are used in turn
in an expanding-ring search.
The default is eight
multiples of 32 starting at 31.
-.PP
+.RE
.SH Reference Clock Support
The NTP Version 4 daemon supports some three dozen different radio,
satellite and modem reference clocks plus a special pseudo-clock
@@ -2411,6 +2427,7 @@ option is used for this purpose.
Except where noted,
these options apply to all clock drivers.
.SS Reference Clock Commands
+.RS
.TP 7
.NOP \f\*[B-Font]server\f[] \f[C]127.127.\f[]\f\*[I-Font]t\f[].\f\*[I-Font]u\f[] [\f\*[B-Font]prefer\f[]] [\f\*[B-Font]mode\f[] \f\*[I-Font]int\f[]] [\f\*[B-Font]minpoll\f[] \f\*[I-Font]int\f[]] [\f\*[B-Font]maxpoll\f[] \f\*[I-Font]int\f[]]
This command can be used to configure reference clocks in
@@ -2559,8 +2576,9 @@ Further information on the
command can be found in
\fIMonitoring\f[] \fIOptions\f[].
.RE
-.PP
+.RE
.SH Miscellaneous Options
+.RS
.TP 7
.NOP \f\*[B-Font]broadcastdelay\f[] \f\*[I-Font]seconds\f[]
The broadcast and multicast modes require a special calibration
@@ -3079,8 +3097,9 @@ In manycast mode these values are used in turn in
an expanding-ring search.
The default is eight multiples of 32 starting at
31.
-.PP
+.RE
.SH "OPTIONS"
+.RS
.TP
.NOP \f\*[B-Font]\-\-help\f[]
Display usage information and exit.
@@ -3092,7 +3111,7 @@ Pass the extended usage information through a pager.
Output version of program and exit. The default mode is `v', a simple
version. The `c' mode will print copyright information and `n' will
print the full copyright notice.
-.PP
+.RE
.SH "OPTION PRESETS"
Any option that is not marked as \fInot presettable\fP may be preset
by loading values from environment variables named:
@@ -3103,6 +3122,7 @@ by loading values from environment variables named:
.SH "ENVIRONMENT"
See \fBOPTION PRESETS\fP for configuration environment variables.
.SH FILES
+.RS
.TP 15
.NOP \fI/etc/ntp.conf\f[]
the default name of the configuration file
@@ -3126,9 +3146,10 @@ RSA public key
.TP 15
.NOP \fIntp_dh\f[]
Diffie-Hellman agreement parameters
-.PP
+.RE
.SH "EXIT STATUS"
One of the following exit values will be returned:
+.RS
.TP
.NOP 0 " (EXIT_SUCCESS)"
Successful program execution.
@@ -3139,7 +3160,7 @@ The operation failed or the command syntax was not valid.
.NOP 70 " (EX_SOFTWARE)"
libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
-.PP
+.RE
.SH "SEE ALSO"
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
\fCntpdc\f[]\fR(1ntpdcmdoc)\f[],
diff --git a/contrib/ntp/ntpd/ntp.conf.5mdoc b/contrib/ntp/ntpd/ntp.conf.5mdoc
index 21806bc..3d328eb 100644
--- a/contrib/ntp/ntpd/ntp.conf.5mdoc
+++ b/contrib/ntp/ntpd/ntp.conf.5mdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_CONF 5mdoc File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:16 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:03 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1995,6 +1995,25 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.Ss Broadcast Options
+.Bl -tag -width indent
+.It Xo Ic tos
+.Oo
+.Cm bcpollbstep Ar gate
+.Oc
+.Xc
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.Ss Manycast Options
.Bl -tag -width indent
.It Xo Ic tos
diff --git a/contrib/ntp/ntpd/ntp.conf.def b/contrib/ntp/ntpd/ntp.conf.def
index a62e976..5ae8c38 100644
--- a/contrib/ntp/ntpd/ntp.conf.def
+++ b/contrib/ntp/ntpd/ntp.conf.def
@@ -1997,6 +1997,25 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.Ss Broadcast Options
+.Bl -tag -width indent
+.It Xo Ic tos
+.Oo
+.Cm bcpollbstep Ar gate
+.Oc
+.Xc
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.Ss Manycast Options
.Bl -tag -width indent
.It Xo Ic tos
diff --git a/contrib/ntp/ntpd/ntp.conf.html b/contrib/ntp/ntpd/ntp.conf.html
index 2f0db05..31cf87e 100644
--- a/contrib/ntp/ntpd/ntp.conf.html
+++ b/contrib/ntp/ntpd/ntp.conf.html
@@ -33,9 +33,9 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the configuration file for the NTP Project's
<code>ntpd</code> program.
- <p>This document applies to version 4.2.8p8 of <code>ntp.conf</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntp.conf</code>.
- <div class="shortcontents">
+ <div class="shortcontents">
<h2>Short Contents</h2>
<ul>
<a href="#Top">NTP's Configuration File User Manual</a>
@@ -1926,9 +1926,25 @@ scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
-<h5 class="subsubsection">Manycast Options</h5>
+<h5 class="subsubsection">Broadcast Options</h5>
<dl>
+<dt><code>tos</code> <code>[bcpollbstep </code><kbd>gate</kbd><code>]</code><dd>This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
+
+<h5 class="subsubsection">Manycast Options</h5>
+
+ <dl>
<dt><code>tos</code> <code>[ceiling </code><kbd>ceiling</kbd><code> | cohort { 0 | 1 } | floor </code><kbd>floor</kbd><code> | minclock </code><kbd>minclock</kbd><code> | minsane </code><kbd>minsane</kbd><code>]</code><dd>This command affects the clock selection and clustering
algorithms.
It can be used to select the quality and
@@ -1936,7 +1952,7 @@ quantity of peers used to synchronize the system clock
and is most useful in manycast mode.
The variables operate
as follows:
- <dl>
+ <dl>
<dt><code>ceiling</code> <kbd>ceiling</kbd><dd>Peers with strata above
<code>ceiling</code>
will be discarded if there are at least
@@ -1978,14 +1994,14 @@ Byzantine agreement,
should be at least 4 in order to detect and discard
a single falseticker.
</dl>
- <br><dt><code>ttl</code> <kbd>hop</kbd> <kbd>...</kbd><dd>This command specifies a list of TTL values in increasing
+ <br><dt><code>ttl</code> <kbd>hop</kbd> <kbd>...</kbd><dd>This command specifies a list of TTL values in increasing
order, up to 8 values can be specified.
In manycast mode these values are used in turn
in an expanding-ring search.
The default is eight
multiples of 32 starting at 31.
</dl>
-<div class="node">
+ <div class="node">
<p><hr>
<a name="Reference-Clock-Support"></a>
<br>
@@ -1993,7 +2009,7 @@ multiples of 32 starting at 31.
<h4 class="subsection">Reference Clock Support</h4>
-<p>The NTP Version 4 daemon supports some three dozen different radio,
+ <p>The NTP Version 4 daemon supports some three dozen different radio,
satellite and modem reference clocks plus a special pseudo-clock
used for backup or when no other clock source is available.
Detailed descriptions of individual device drivers and options can
@@ -2030,7 +2046,7 @@ page
provided in
<span class="file">/usr/share/doc/ntp</span>).
- <p>A reference clock will generally (though not always) be a radio
+ <p>A reference clock will generally (though not always) be a radio
timecode receiver which is synchronized to a source of standard
time such as the services offered by the NRC in Canada and NIST and
USNO in the US.
@@ -2046,7 +2062,7 @@ or the hardware port has not been appropriately configured results
in a scalding remark to the system log file, but is otherwise non
hazardous.
- <p>For the purposes of configuration,
+ <p>For the purposes of configuration,
<code>ntpd(1ntpdmdoc)</code>
treats
reference clocks in a manner analogous to normal NTP peers as much
@@ -2067,7 +2083,7 @@ While it may seem overkill, it is in fact
sometimes useful to configure multiple reference clocks of the same
type, in which case the unit numbers must be unique.
- <p>The
+ <p>The
<code>server</code>
command is used to configure a reference
clock, where the
@@ -2105,7 +2121,7 @@ meaning only for selected clock drivers.
See the individual clock
driver document pages for additional information.
- <p>The
+ <p>The
<code>fudge</code>
command is used to provide additional
information for individual clock drivers and normally follows
@@ -2127,7 +2143,7 @@ in the
<code>fudge</code>
command as well.
- <p>The stratum number of a reference clock is by default zero.
+ <p>The stratum number of a reference clock is by default zero.
Since the
<code>ntpd(1ntpdmdoc)</code>
daemon adds one to the stratum of each
@@ -2150,11 +2166,11 @@ these options apply to all clock drivers.
<h5 class="subsubsection">Reference Clock Commands</h5>
- <dl>
+ <dl>
<dt><code>server</code> <code>127.127.</code><kbd>t</kbd>.<kbd>u</kbd> <code>[prefer]</code> <code>[mode </code><kbd>int</kbd><code>]</code> <code>[minpoll </code><kbd>int</kbd><code>]</code> <code>[maxpoll </code><kbd>int</kbd><code>]</code><dd>This command can be used to configure reference clocks in
special ways.
The options are interpreted as follows:
- <dl>
+ <dl>
<dt><code>prefer</code><dd>Marks the reference clock as preferred.
All other things being
equal, this host will be chosen for synchronization among a set of
@@ -2187,7 +2203,7 @@ defaults to 10 (17.1 m) and
defaults to 14 (4.5 h).
The allowable range is 4 (16 s) to 17 (36.4 h) inclusive.
</dl>
- <br><dt><code>fudge</code> <code>127.127.</code><kbd>t</kbd>.<kbd>u</kbd> <code>[time1 </code><kbd>sec</kbd><code>]</code> <code>[time2 </code><kbd>sec</kbd><code>]</code> <code>[stratum </code><kbd>int</kbd><code>]</code> <code>[refid </code><kbd>string</kbd><code>]</code> <code>[mode </code><kbd>int</kbd><code>]</code> <code>[flag1 0 | 1]</code> <code>[flag2 0 | 1]</code> <code>[flag3 0 | 1]</code> <code>[flag4 0 | 1]</code><dd>This command can be used to configure reference clocks in
+ <br><dt><code>fudge</code> <code>127.127.</code><kbd>t</kbd>.<kbd>u</kbd> <code>[time1 </code><kbd>sec</kbd><code>]</code> <code>[time2 </code><kbd>sec</kbd><code>]</code> <code>[stratum </code><kbd>int</kbd><code>]</code> <code>[refid </code><kbd>string</kbd><code>]</code> <code>[mode </code><kbd>int</kbd><code>]</code> <code>[flag1 0 | 1]</code> <code>[flag2 0 | 1]</code> <code>[flag3 0 | 1]</code> <code>[flag4 0 | 1]</code><dd>This command can be used to configure reference clocks in
special ways.
It must immediately follow the
<code>server</code>
@@ -2198,7 +2214,7 @@ is possible at run time using the
program.
The options are interpreted as
follows:
- <dl>
+ <dl>
<dt><code>time1</code> <kbd>sec</kbd><dd>Specifies a constant to be added to the time offset produced by
the driver, a fixed-point decimal number in seconds.
This is used
@@ -2269,8 +2285,8 @@ Further information on the
command can be found in
<a href="#Monitoring-Options">Monitoring Options</a>.
</dl>
- </dl>
-<div class="node">
+ </dl>
+ <div class="node">
<p><hr>
<a name="Miscellaneous-Options"></a>
<br>
@@ -2278,7 +2294,7 @@ command can be found in
<h4 class="subsection">Miscellaneous Options</h4>
- <dl>
+ <dl>
<dt><code>broadcastdelay</code> <kbd>seconds</kbd><dd>The broadcast and multicast modes require a special calibration
to determine the network delay between the local and remote
servers.
@@ -2311,7 +2327,7 @@ frequency of zero and creates the file when writing it for the first time.
If this command is not given, the daemon will always start with an initial
frequency of zero.
- <p>The file format consists of a single line containing a single
+ <p>The file format consists of a single line containing a single
floating point number, which records the frequency offset measured
in parts-per-million (PPM).
The file is updated by first writing
@@ -2331,7 +2347,7 @@ Note that all of these flags
can be controlled remotely using the
<code>ntpdc(1ntpdcmdoc)</code>
utility program.
- <dl>
+ <dl>
<dt><code>auth</code><dd>Enables the server to synchronize with unconfigured peers only if the
peer has been correctly authenticated using either public key or
private key cryptography.
@@ -2466,7 +2482,7 @@ The
default for this flag is
<code>enable</code>.
</dl>
- <br><dt><code>includefile</code> <kbd>includefile</kbd><dd>This command allows additional configuration commands
+ <br><dt><code>includefile</code> <kbd>includefile</kbd><dd>This command allows additional configuration commands
to be included from a separate file.
Include files may
be nested to a depth of five; upon reaching the end of any
@@ -2527,7 +2543,7 @@ and
status messages
(<code>status</code>).
- <p>Configuration keywords are formed by concatenating the message class with
+ <p>Configuration keywords are formed by concatenating the message class with
the event class.
The
<code>all</code>
@@ -2539,20 +2555,20 @@ keyword to enable/disable all
messages of the respective message class.
Thus, a minimal log configuration
could look like this:
-<pre class="verbatim">
- logconfig =syncstatus +sysevents
-</pre>
+<pre class="verbatim">
+ logconfig =syncstatus +sysevents
+ </pre>
- <p>This would just list the synchronizations state of
+ <p>This would just list the synchronizations state of
<code>ntpd(1ntpdmdoc)</code>
and the major system events.
For a simple reference server, the
following minimum message configuration could be useful:
-<pre class="verbatim">
- logconfig =syncall +clockall
-</pre>
+<pre class="verbatim">
+ logconfig =syncall +clockall
+ </pre>
- <p>This configuration will list all clock information and
+ <p>This configuration will list all clock information and
synchronization information.
All other events and messages about
peers, system events and so on is suppressed.
@@ -2611,8 +2627,8 @@ for them.
Emphasis added: twisters are on their own and can expect
no help from the support group.
- <p>The variables operate as follows:
- <dl>
+ <p>The variables operate as follows:
+ <dl>
<dt><code>allan</code> <kbd>allan</kbd><dd>The argument becomes the new value for the minimum Allan
intercept, which is a parameter of the PLL/FLL clock discipline
algorithm.
@@ -2661,8 +2677,8 @@ be set to any positive number in seconds.
If set to zero, the stepout
pulses will not be suppressed.
</dl>
- <br><dt><code>rlimit</code> <code>[memlock </code><kbd>Nmegabytes</kbd><code> | stacksize </code><kbd>N4kPages</kbd><code> filenum </code><kbd>Nfiledescriptors</kbd><code>]</code><dd>
- <dl>
+ <br><dt><code>rlimit</code> <code>[memlock </code><kbd>Nmegabytes</kbd><code> | stacksize </code><kbd>N4kPages</kbd><code> filenum </code><kbd>Nfiledescriptors</kbd><code>]</code><dd>
+ <dl>
<dt><code>memlock</code> <kbd>Nmegabytes</kbd><dd>Specify the number of megabytes of memory that should be
allocated and locked.
Probably only available under Linux, this option may be useful
@@ -2679,7 +2695,7 @@ Defaults to 50 4k pages (200 4k pages in OpenBSD).
<br><dt><code>filenum</code> <kbd>Nfiledescriptors</kbd><dd>Specifies the maximum number of file descriptors ntpd may have open at once.
Defaults to the system default.
</dl>
- <br><dt><code>trap</code> <kbd>host_address</kbd> <code>[port </code><kbd>port_number</kbd><code>]</code> <code>[interface </code><kbd>interface_address</kbd><code>]</code><dd>This command configures a trap receiver at the given host
+ <br><dt><code>trap</code> <kbd>host_address</kbd> <code>[port </code><kbd>port_number</kbd><code>]</code> <code>[interface </code><kbd>interface_address</kbd><code>]</code><dd>This command configures a trap receiver at the given host
address and port number for sending messages with the specified
local interface address.
If the port number is unspecified, a value
@@ -2690,7 +2706,7 @@ message is sent through.
Note that on a multihomed host the
interface used may vary from time to time with routing changes.
- <p>The trap receiver will generally log event messages and other
+ <p>The trap receiver will generally log event messages and other
information from the server in a log file.
While such monitor
programs may also request their own trap dynamically, configuring a
@@ -2704,11 +2720,11 @@ The default is eight multiples of 32 starting at
31.
</dl>
- <p>This section was generated by <strong>AutoGen</strong>,
+ <p>This section was generated by <strong>AutoGen</strong>,
using the <code>agtexi-cmd</code> template and the option descriptions for the <code>ntp.conf</code> program.
This software is released under the NTP license, &lt;http://ntp.org/license&gt;.
-<ul class="menu">
+ <ul class="menu">
<li><a accesskey="1" href="#ntp_002econf-Files">ntp.conf Files</a>: Files
<li><a accesskey="2" href="#ntp_002econf-See-Also">ntp.conf See Also</a>: See Also
<li><a accesskey="3" href="#ntp_002econf-Bugs">ntp.conf Bugs</a>: Bugs
@@ -2723,14 +2739,14 @@ This software is released under the NTP license, &lt;http://ntp.org/license&gt;.
<h4 class="subsection">ntp.conf Files</h4>
- <dl>
+ <dl>
<dt><span class="file">/etc/ntp.conf</span><dd>the default name of the configuration file
<br><dt><span class="file">ntp.keys</span><dd>private MD5 keys
<br><dt><span class="file">ntpkey</span><dd>RSA private key
<br><dt><span class="file">ntpkey_</span><kbd>host</kbd><dd>RSA public key
<br><dt><span class="file">ntp_dh</span><dd>Diffie-Hellman agreement parameters
</dl>
-<div class="node">
+ <div class="node">
<p><hr>
<a name="ntp_002econf-See-Also"></a>
<br>
@@ -2738,11 +2754,11 @@ This software is released under the NTP license, &lt;http://ntp.org/license&gt;.
<h4 class="subsection">ntp.conf See Also</h4>
-<p><code>ntpd(1ntpdmdoc)</code>,
+ <p><code>ntpd(1ntpdmdoc)</code>,
<code>ntpdc(1ntpdcmdoc)</code>,
<code>ntpq(1ntpqmdoc)</code>
- <p>In addition to the manual pages provided,
+ <p>In addition to the manual pages provided,
comprehensive documentation is available on the world wide web
at
<code>http://www.ntp.org/</code>.
@@ -2750,7 +2766,7 @@ A snapshot of this documentation is available in HTML format in
<span class="file">/usr/share/doc/ntp</span>.
<br>
- <p><br>
+ <p><br>
David L. Mills, <em>Network Time Protocol (Version 4)</em>, RFC5905
<div class="node">
<p><hr>
@@ -2760,11 +2776,11 @@ David L. Mills, <em>Network Time Protocol (Version 4)</em>, RFC5905
<h4 class="subsection">ntp.conf Bugs</h4>
-<p>The syntax checking is not picky; some combinations of
+ <p>The syntax checking is not picky; some combinations of
ridiculous and even hilarious options and modes may not be
detected.
- <p>The
+ <p>The
<span class="file">ntpkey_</span><kbd>host</kbd>
files are really digital
certificates.
@@ -2778,7 +2794,7 @@ services when they become universally available.
<h4 class="subsection">ntp.conf Notes</h4>
-<p>This document was derived from FreeBSD.
+ <p>This document was derived from FreeBSD.
</body></html>
diff --git a/contrib/ntp/ntpd/ntp.conf.man.in b/contrib/ntp/ntpd/ntp.conf.man.in
index 8b794da..d6ee791 100644
--- a/contrib/ntp/ntpd/ntp.conf.man.in
+++ b/contrib/ntp/ntpd/ntp.conf.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp.conf 5 "02 Jun 2016" "4.2.8p8" "File Formats"
+.TH ntp.conf 5 "21 Nov 2016" "4.2.8p9" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OzaOIT/ag-3zaGHT)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Q_ai3f/ag-2_aa2f)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:35:50 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:41 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2174,7 +2174,23 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.SS Broadcast Options
+.TP 7
+.NOP \f\*[B-Font]tos\f[] [\f\*[B-Font]bcpollbstep\f[] \f\*[I-Font]gate\f[]]
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.SS Manycast Options
+.RS
.TP 7
.NOP \f\*[B-Font]tos\f[] [\f\*[B-Font]ceiling\f[] \f\*[I-Font]ceiling\f[] | \f\*[B-Font]cohort\f[] { \f\*[B-Font]0\f[] | \f\*[B-Font]1\f[] } | \f\*[B-Font]floor\f[] \f\*[I-Font]floor\f[] | \f\*[B-Font]minclock\f[] \f\*[I-Font]minclock\f[] | \f\*[B-Font]minsane\f[] \f\*[I-Font]minsane\f[]]
This command affects the clock selection and clustering
@@ -2244,7 +2260,7 @@ In manycast mode these values are used in turn
in an expanding-ring search.
The default is eight
multiples of 32 starting at 31.
-.PP
+.RE
.SH Reference Clock Support
The NTP Version 4 daemon supports some three dozen different radio,
satellite and modem reference clocks plus a special pseudo-clock
@@ -2411,6 +2427,7 @@ option is used for this purpose.
Except where noted,
these options apply to all clock drivers.
.SS Reference Clock Commands
+.RS
.TP 7
.NOP \f\*[B-Font]server\f[] \f[C]127.127.\f[]\f\*[I-Font]t\f[].\f\*[I-Font]u\f[] [\f\*[B-Font]prefer\f[]] [\f\*[B-Font]mode\f[] \f\*[I-Font]int\f[]] [\f\*[B-Font]minpoll\f[] \f\*[I-Font]int\f[]] [\f\*[B-Font]maxpoll\f[] \f\*[I-Font]int\f[]]
This command can be used to configure reference clocks in
@@ -2559,8 +2576,9 @@ Further information on the
command can be found in
\fIMonitoring\f[] \fIOptions\f[].
.RE
-.PP
+.RE
.SH Miscellaneous Options
+.RS
.TP 7
.NOP \f\*[B-Font]broadcastdelay\f[] \f\*[I-Font]seconds\f[]
The broadcast and multicast modes require a special calibration
@@ -3079,8 +3097,9 @@ In manycast mode these values are used in turn in
an expanding-ring search.
The default is eight multiples of 32 starting at
31.
-.PP
+.RE
.SH "OPTIONS"
+.RS
.TP
.NOP \f\*[B-Font]\-\-help\f[]
Display usage information and exit.
@@ -3092,7 +3111,7 @@ Pass the extended usage information through a pager.
Output version of program and exit. The default mode is `v', a simple
version. The `c' mode will print copyright information and `n' will
print the full copyright notice.
-.PP
+.RE
.SH "OPTION PRESETS"
Any option that is not marked as \fInot presettable\fP may be preset
by loading values from environment variables named:
@@ -3103,6 +3122,7 @@ by loading values from environment variables named:
.SH "ENVIRONMENT"
See \fBOPTION PRESETS\fP for configuration environment variables.
.SH FILES
+.RS
.TP 15
.NOP \fI/etc/ntp.conf\f[]
the default name of the configuration file
@@ -3126,9 +3146,10 @@ RSA public key
.TP 15
.NOP \fIntp_dh\f[]
Diffie-Hellman agreement parameters
-.PP
+.RE
.SH "EXIT STATUS"
One of the following exit values will be returned:
+.RS
.TP
.NOP 0 " (EXIT_SUCCESS)"
Successful program execution.
@@ -3139,7 +3160,7 @@ The operation failed or the command syntax was not valid.
.NOP 70 " (EX_SOFTWARE)"
libopts had an internal operational error. Please report
it to autogen-users@lists.sourceforge.net. Thank you.
-.PP
+.RE
.SH "SEE ALSO"
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
\fCntpdc\f[]\fR(@NTPDC_MS@)\f[],
diff --git a/contrib/ntp/ntpd/ntp.conf.mdoc.in b/contrib/ntp/ntpd/ntp.conf.mdoc.in
index a9a3424..ea6fe4e 100644
--- a/contrib/ntp/ntpd/ntp.conf.mdoc.in
+++ b/contrib/ntp/ntpd/ntp.conf.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:16 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:03 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1995,6 +1995,25 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.Ss Broadcast Options
+.Bl -tag -width indent
+.It Xo Ic tos
+.Oo
+.Cm bcpollbstep Ar gate
+.Oc
+.Xc
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.Ss Manycast Options
.Bl -tag -width indent
.It Xo Ic tos
diff --git a/contrib/ntp/ntpd/ntp.keys.5man b/contrib/ntp/ntpd/ntp.keys.5man
index 3e02861..2125af0 100644
--- a/contrib/ntp/ntpd/ntp.keys.5man
+++ b/contrib/ntp/ntpd/ntp.keys.5man
@@ -1,8 +1,8 @@
-.TH ntp.keys 5man "02 Jun 2016" "4.2.8p8" "File Formats"
+.TH ntp.keys 5man "21 Nov 2016" "4.2.8p9" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:35:57 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:46 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.5mdoc b/contrib/ntp/ntpd/ntp.keys.5mdoc
index 275b0d5..33d1b8b 100644
--- a/contrib/ntp/ntpd/ntp.keys.5mdoc
+++ b/contrib/ntp/ntpd/ntp.keys.5mdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYS 5mdoc File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:20 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:06 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.html b/contrib/ntp/ntpd/ntp.keys.html
index 5952608..63e7002 100644
--- a/contrib/ntp/ntpd/ntp.keys.html
+++ b/contrib/ntp/ntpd/ntp.keys.html
@@ -33,7 +33,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the symmetric key file for the NTP Project's
<code>ntpd</code> program.
- <p>This document applies to version 4.2.8p8 of <code>ntp.keys</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntp.keys</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/ntpd/ntp.keys.man.in b/contrib/ntp/ntpd/ntp.keys.man.in
index 692a4e2..49465e0 100644
--- a/contrib/ntp/ntpd/ntp.keys.man.in
+++ b/contrib/ntp/ntpd/ntp.keys.man.in
@@ -1,8 +1,8 @@
-.TH ntp.keys 5 "02 Jun 2016" "4.2.8p8" "File Formats"
+.TH ntp.keys 5 "21 Nov 2016" "4.2.8p9" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:35:57 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:46 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.mdoc.in b/contrib/ntp/ntpd/ntp.keys.mdoc.in
index 7881296..3ace854 100644
--- a/contrib/ntp/ntpd/ntp.keys.mdoc.in
+++ b/contrib/ntp/ntpd/ntp.keys.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:20 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:06 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp_config.c b/contrib/ntp/ntpd/ntp_config.c
index 2d4ab52..c36a218 100644
--- a/contrib/ntp/ntpd/ntp_config.c
+++ b/contrib/ntp/ntpd/ntp_config.c
@@ -53,6 +53,12 @@
#include "ntp_parser.h"
#include "ntpd-opts.h"
+#ifndef IGNORE_DNS_ERRORS
+# define DNSFLAGS 0
+#else
+# define DNSFLAGS GAIR_F_IGNDNSERR
+#endif
+
extern int yyparse(void);
/* Bug 2817 */
@@ -2002,6 +2008,21 @@ config_tos(
INSIST(0);
break;
+ case T_Bcpollbstep:
+ if (val > 4) {
+ msyslog(LOG_WARNING,
+ "Using maximum bcpollbstep ceiling %d, %g requested",
+ 4, val);
+ val = 4;
+ } else if (val < 0) {
+ msyslog(LOG_WARNING,
+ "Using minimum bcpollbstep floor %d, %g requested",
+ 0, val);
+ val = 0;
+ }
+ item = PROTO_BCPOLLBSTEP;
+ break;
+
case T_Ceiling:
if (val > STRATUM_UNSPEC - 1) {
msyslog(LOG_WARNING,
@@ -3813,11 +3834,11 @@ config_peers(
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
- getaddrinfo_sometime(*cmdline_servers,
+ getaddrinfo_sometime_ex(*cmdline_servers,
"ntp", &hints,
INITIAL_DNS_RETRY,
&peer_name_resolved,
- (void *)ctx);
+ (void *)ctx, DNSFLAGS);
# else /* !WORKER follows */
msyslog(LOG_ERR,
"hostname %s can not be used, please use IP address instead.",
@@ -3891,10 +3912,11 @@ config_peers(
hints.ai_socktype = SOCK_DGRAM;
hints.ai_protocol = IPPROTO_UDP;
- getaddrinfo_sometime(curr_peer->addr->address,
+ getaddrinfo_sometime_ex(curr_peer->addr->address,
"ntp", &hints,
INITIAL_DNS_RETRY,
- &peer_name_resolved, ctx);
+ &peer_name_resolved, ctx,
+ DNSFLAGS);
# else /* !WORKER follows */
msyslog(LOG_ERR,
"hostname %s can not be used, please use IP address instead.",
@@ -3935,16 +3957,10 @@ peer_name_resolved(
DPRINTF(1, ("peer_name_resolved(%s) rescode %d\n", name, rescode));
if (rescode) {
-#ifndef IGNORE_DNS_ERRORS
free(ctx);
msyslog(LOG_ERR,
"giving up resolving host %s: %s (%d)",
name, gai_strerror(rescode), rescode);
-#else /* IGNORE_DNS_ERRORS follows */
- getaddrinfo_sometime(name, service, hints,
- INITIAL_DNS_RETRY,
- &peer_name_resolved, context);
-#endif
return;
}
diff --git a/contrib/ntp/ntpd/ntp_control.c b/contrib/ntp/ntpd/ntp_control.c
index 07b5697..fac17a7 100644
--- a/contrib/ntp/ntpd/ntp_control.c
+++ b/contrib/ntp/ntpd/ntp_control.c
@@ -33,6 +33,7 @@
# include "ntp_syscall.h"
#endif
+#include "libssl_compat.h"
/*
* Structure to hold request procedure information
@@ -120,14 +121,14 @@ static const struct ctl_proc control_codes[] = {
{ CTL_OP_READVAR, NOAUTH, read_variables },
{ CTL_OP_WRITEVAR, AUTH, write_variables },
{ CTL_OP_READCLOCK, NOAUTH, read_clockstatus },
- { CTL_OP_WRITECLOCK, NOAUTH, write_clockstatus },
- { CTL_OP_SETTRAP, NOAUTH, set_trap },
+ { CTL_OP_WRITECLOCK, AUTH, write_clockstatus },
+ { CTL_OP_SETTRAP, AUTH, set_trap },
{ CTL_OP_CONFIGURE, AUTH, configure },
{ CTL_OP_SAVECONFIG, AUTH, save_config },
{ CTL_OP_READ_MRU, NOAUTH, read_mru_list },
{ CTL_OP_READ_ORDLIST_A, AUTH, read_ordlist },
{ CTL_OP_REQ_NONCE, NOAUTH, req_nonce },
- { CTL_OP_UNSETTRAP, NOAUTH, unset_trap },
+ { CTL_OP_UNSETTRAP, AUTH, unset_trap },
{ NO_REQUEST, 0, NULL }
};
@@ -3158,15 +3159,21 @@ ctl_getitem(
for (v = var_list; !(EOV & v->flags); ++v)
if (!(PADDING & v->flags)) {
- /* check if the var name matches the buffer */
+ /* Check if the var name matches the buffer. The
+ * name is bracketed by [reqpt..tp] and not NUL
+ * terminated, and it contains no '=' char. The
+ * lookup value IS NUL-terminated but might
+ * include a '='... We have to look out for
+ * that!
+ */
const char *sp1 = reqpt;
const char *sp2 = v->text;
-
- while ((sp1 != tp) && *sp2 && (*sp1 == *sp2)) {
+
+ while ((sp1 != tp) && (*sp1 == *sp2)) {
++sp1;
++sp2;
}
- if (sp1 == tp && !*sp2)
+ if (sp1 == tp && (*sp2 == '\0' || *sp2 == '='))
break;
}
@@ -3649,7 +3656,7 @@ static u_int32 derive_nonce(
u_char digest[EVP_MAX_MD_SIZE];
u_int32 extract;
} d;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx;
u_int len;
while (!salt[0] || current_time - last_salt_update >= 3600) {
@@ -3660,19 +3667,21 @@ static u_int32 derive_nonce(
last_salt_update = current_time;
}
- EVP_DigestInit(&ctx, EVP_get_digestbynid(NID_md5));
- EVP_DigestUpdate(&ctx, salt, sizeof(salt));
- EVP_DigestUpdate(&ctx, &ts_i, sizeof(ts_i));
- EVP_DigestUpdate(&ctx, &ts_f, sizeof(ts_f));
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_get_digestbynid(NID_md5));
+ EVP_DigestUpdate(ctx, salt, sizeof(salt));
+ EVP_DigestUpdate(ctx, &ts_i, sizeof(ts_i));
+ EVP_DigestUpdate(ctx, &ts_f, sizeof(ts_f));
if (IS_IPV4(addr))
- EVP_DigestUpdate(&ctx, &SOCK_ADDR4(addr),
+ EVP_DigestUpdate(ctx, &SOCK_ADDR4(addr),
sizeof(SOCK_ADDR4(addr)));
else
- EVP_DigestUpdate(&ctx, &SOCK_ADDR6(addr),
+ EVP_DigestUpdate(ctx, &SOCK_ADDR6(addr),
sizeof(SOCK_ADDR6(addr)));
- EVP_DigestUpdate(&ctx, &NSRCPORT(addr), sizeof(NSRCPORT(addr)));
- EVP_DigestUpdate(&ctx, salt, sizeof(salt));
- EVP_DigestFinal(&ctx, d.digest, &len);
+ EVP_DigestUpdate(ctx, &NSRCPORT(addr), sizeof(NSRCPORT(addr)));
+ EVP_DigestUpdate(ctx, salt, sizeof(salt));
+ EVP_DigestFinal(ctx, d.digest, &len);
+ EVP_MD_CTX_free(ctx);
return d.extract;
}
@@ -3954,15 +3963,17 @@ static void read_mru_list(
int restrict_mask
)
{
- const char nonce_text[] = "nonce";
- const char frags_text[] = "frags";
- const char limit_text[] = "limit";
- const char mincount_text[] = "mincount";
- const char resall_text[] = "resall";
- const char resany_text[] = "resany";
- const char maxlstint_text[] = "maxlstint";
- const char laddr_text[] = "laddr";
- const char resaxx_fmt[] = "0x%hx";
+ static const char nulltxt[1] = { '\0' };
+ static const char nonce_text[] = "nonce";
+ static const char frags_text[] = "frags";
+ static const char limit_text[] = "limit";
+ static const char mincount_text[] = "mincount";
+ static const char resall_text[] = "resall";
+ static const char resany_text[] = "resany";
+ static const char maxlstint_text[] = "maxlstint";
+ static const char laddr_text[] = "laddr";
+ static const char resaxx_fmt[] = "0x%hx";
+
u_int limit;
u_short frags;
u_short resall;
@@ -3979,7 +3990,7 @@ static void read_mru_list(
char buf[128];
struct ctl_var * in_parms;
const struct ctl_var * v;
- char * val;
+ const char * val;
const char * pch;
char * pnonce;
int nonce_valid;
@@ -4031,46 +4042,68 @@ static void read_mru_list(
ZERO(last);
ZERO(addr);
- while (NULL != (v = ctl_getitem(in_parms, &val)) &&
+ /* have to go through '(void*)' to drop 'const' property from pointer.
+ * ctl_getitem()' needs some cleanup, too.... perlinger@ntp.org
+ */
+ while (NULL != (v = ctl_getitem(in_parms, (void*)&val)) &&
!(EOV & v->flags)) {
int si;
+ if (NULL == val)
+ val = nulltxt;
+
if (!strcmp(nonce_text, v->text)) {
- if (NULL != pnonce)
- free(pnonce);
- pnonce = estrdup(val);
+ free(pnonce);
+ pnonce = (*val) ? estrdup(val) : NULL;
} else if (!strcmp(frags_text, v->text)) {
- sscanf(val, "%hu", &frags);
+ if (1 != sscanf(val, "%hu", &frags))
+ goto blooper;
} else if (!strcmp(limit_text, v->text)) {
- sscanf(val, "%u", &limit);
+ if (1 != sscanf(val, "%u", &limit))
+ goto blooper;
} else if (!strcmp(mincount_text, v->text)) {
- if (1 != sscanf(val, "%d", &mincount) ||
- mincount < 0)
+ if (1 != sscanf(val, "%d", &mincount))
+ goto blooper;
+ if (mincount < 0)
mincount = 0;
} else if (!strcmp(resall_text, v->text)) {
- sscanf(val, resaxx_fmt, &resall);
+ if (1 != sscanf(val, resaxx_fmt, &resall))
+ goto blooper;
} else if (!strcmp(resany_text, v->text)) {
- sscanf(val, resaxx_fmt, &resany);
+ if (1 != sscanf(val, resaxx_fmt, &resany))
+ goto blooper;
} else if (!strcmp(maxlstint_text, v->text)) {
- sscanf(val, "%u", &maxlstint);
+ if (1 != sscanf(val, "%u", &maxlstint))
+ goto blooper;
} else if (!strcmp(laddr_text, v->text)) {
- if (decodenetnum(val, &laddr))
- lcladr = getinterface(&laddr, 0);
+ if (!decodenetnum(val, &laddr))
+ goto blooper;
+ lcladr = getinterface(&laddr, 0);
} else if (1 == sscanf(v->text, last_fmt, &si) &&
(size_t)si < COUNTOF(last)) {
- if (2 == sscanf(val, "0x%08x.%08x", &ui, &uf)) {
- last[si].l_ui = ui;
- last[si].l_uf = uf;
- if (!SOCK_UNSPEC(&addr[si]) &&
- si == priors)
- priors++;
- }
+ if (2 != sscanf(val, "0x%08x.%08x", &ui, &uf))
+ goto blooper;
+ last[si].l_ui = ui;
+ last[si].l_uf = uf;
+ if (!SOCK_UNSPEC(&addr[si]) && si == priors)
+ priors++;
} else if (1 == sscanf(v->text, addr_fmt, &si) &&
(size_t)si < COUNTOF(addr)) {
- if (decodenetnum(val, &addr[si])
- && last[si].l_ui && last[si].l_uf &&
- si == priors)
+ if (!decodenetnum(val, &addr[si]))
+ goto blooper;
+ if (last[si].l_ui && last[si].l_uf && si == priors)
priors++;
+ } else {
+ DPRINTF(1, ("read_mru_list: invalid key item: '%s' (ignored)\n",
+ v->text));
+ continue;
+
+ blooper:
+ DPRINTF(1, ("read_mru_list: invalid param for '%s': '%s' (bailing)\n",
+ v->text, val));
+ free(pnonce);
+ pnonce = NULL;
+ break;
}
}
free_varlist(in_parms);
@@ -4997,6 +5030,22 @@ report_event(
if (num_ctl_traps <= 0)
return;
+ /* [Bug 3119]
+ * Peer Events should be associated with a peer -- hence the
+ * name. But there are instances where this function is called
+ * *without* a valid peer. This happens e.g. with an unsolicited
+ * CryptoNAK, or when a leap second alarm is going off while
+ * currently without a system peer.
+ *
+ * The most sensible approach to this seems to bail out here if
+ * this happens. Avoiding to call this function would also
+ * bypass the log reporting in the first part of this function,
+ * and this is probably not the best of all options.
+ * -*-perlinger@ntp.org-*-
+ */
+ if ((err & PEER_EVENT) && !peer)
+ return;
+
/*
* Set up the outgoing packet variables
*/
@@ -5013,15 +5062,14 @@ report_event(
/* Include the core system variables and the list. */
for (i = 1; i <= CS_VARLIST; i++)
ctl_putsys(i);
- } else {
- INSIST(peer != NULL);
+ } else if (NULL != peer) { /* paranoia -- skip output */
rpkt.associd = htons(peer->associd);
rpkt.status = htons(ctlpeerstatus(peer));
/* Dump it all. Later, maybe less. */
for (i = 1; i <= CP_MAX_NOAUTOKEY; i++)
ctl_putpeer(i, peer);
-#ifdef REFCLOCK
+# ifdef REFCLOCK
/*
* for clock exception events: add clock variables to
* reflect info on exception
@@ -5047,7 +5095,7 @@ report_event(
FALSE);
free_varlist(cs.kv_list);
}
-#endif /* REFCLOCK */
+# endif /* REFCLOCK */
}
/*
diff --git a/contrib/ntp/ntpd/ntp_crypto.c b/contrib/ntp/ntpd/ntp_crypto.c
index 5b87f19..956875d 100644
--- a/contrib/ntp/ntpd/ntp_crypto.c
+++ b/contrib/ntp/ntpd/ntp_crypto.c
@@ -22,13 +22,13 @@
#include "ntp_calendar.h"
#include "ntp_leapsec.h"
-#include "openssl/asn1_mac.h"
#include "openssl/bn.h"
#include "openssl/err.h"
#include "openssl/evp.h"
#include "openssl/pem.h"
#include "openssl/rand.h"
#include "openssl/x509v3.h"
+#include "libssl_compat.h"
#ifdef KERNEL_PLL
#include "ntp_syscall.h"
@@ -230,7 +230,7 @@ session_key(
u_long lifetime /* key lifetime */
)
{
- EVP_MD_CTX ctx; /* message digest context */
+ EVP_MD_CTX *ctx; /* message digest context */
u_char dgst[EVP_MAX_MD_SIZE]; /* message digest */
keyid_t keyid; /* key identifer */
u_int32 header[10]; /* data in network byte order */
@@ -263,9 +263,11 @@ session_key(
hdlen = 10 * sizeof(u_int32);
break;
}
- EVP_DigestInit(&ctx, EVP_get_digestbynid(crypto_nid));
- EVP_DigestUpdate(&ctx, (u_char *)header, hdlen);
- EVP_DigestFinal(&ctx, dgst, &len);
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_get_digestbynid(crypto_nid));
+ EVP_DigestUpdate(ctx, (u_char *)header, hdlen);
+ EVP_DigestFinal(ctx, dgst, &len);
+ EVP_MD_CTX_free(ctx);
memcpy(&keyid, dgst, 4);
keyid = ntohl(keyid);
if (lifetime != 0) {
@@ -299,7 +301,7 @@ make_keylist(
struct interface *dstadr /* interface */
)
{
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp; /* NTP timestamp */
struct autokey *ap; /* autokey pointer */
struct value *vp; /* value pointer */
@@ -377,14 +379,16 @@ make_keylist(
if (tstamp != 0) {
if (vp->sig == NULL)
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)vp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, sizeof(struct autokey));
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)vp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, sizeof(struct autokey));
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
peer->flags |= FLAG_ASSOC;
}
+ EVP_MD_CTX_free(ctx);
}
DPRINTF(1, ("make_keys: %d %08x %08x ts %u fs %u poll %d\n",
peer->keynumber, keyid, cookie, ntohl(vp->tstamp),
@@ -820,8 +824,8 @@ crypto_recv(
* errors.
*/
if (vallen == (u_int)EVP_PKEY_size(host_pkey)) {
- u_int32 *cookiebuf = malloc(
- RSA_size(host_pkey->pkey.rsa));
+ RSA *rsa = EVP_PKEY_get0_RSA(host_pkey);
+ u_int32 *cookiebuf = malloc(RSA_size(rsa));
if (!cookiebuf) {
rval = XEVNT_CKY;
break;
@@ -830,7 +834,7 @@ crypto_recv(
if (RSA_private_decrypt(vallen,
(u_char *)ep->pkt,
(u_char *)cookiebuf,
- host_pkey->pkey.rsa,
+ rsa,
RSA_PKCS1_OAEP_PADDING) != 4) {
rval = XEVNT_CKY;
free(cookiebuf);
@@ -1421,7 +1425,7 @@ crypto_verify(
)
{
EVP_PKEY *pkey; /* server public key */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp, tstamp1 = 0; /* timestamp */
tstamp_t fstamp, fstamp1 = 0; /* filestamp */
u_int vallen; /* value length */
@@ -1533,12 +1537,16 @@ crypto_verify(
* signature. If the identity exchange is verified, light the
* proventic bit. What a relief.
*/
- EVP_VerifyInit(&ctx, peer->digest);
+ ctx = EVP_MD_CTX_new();
+ EVP_VerifyInit(ctx, peer->digest);
/* XXX: the "+ 12" needs to be at least documented... */
- EVP_VerifyUpdate(&ctx, (u_char *)&ep->tstamp, vallen + 12);
- if (EVP_VerifyFinal(&ctx, (u_char *)&ep->pkt[i], siglen,
- pkey) <= 0)
+ EVP_VerifyUpdate(ctx, (u_char *)&ep->tstamp, vallen + 12);
+ if (EVP_VerifyFinal(ctx, (u_char *)&ep->pkt[i], siglen,
+ pkey) <= 0) {
+ EVP_MD_CTX_free(ctx);
return (XEVNT_SIG);
+ }
+ EVP_MD_CTX_free(ctx);
if (peer->crypto & CRYPTO_FLAG_VRFY)
peer->crypto |= CRYPTO_FLAG_PROV;
@@ -1564,7 +1572,7 @@ crypto_encrypt(
)
{
EVP_PKEY *pkey; /* public key */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp; /* NTP timestamp */
u_int32 temp32;
u_char *puch;
@@ -1592,7 +1600,7 @@ crypto_encrypt(
puch = vp->ptr;
temp32 = htonl(*cookie);
if (RSA_public_encrypt(4, (u_char *)&temp32, puch,
- pkey->pkey.rsa, RSA_PKCS1_OAEP_PADDING) <= 0) {
+ EVP_PKEY_get0_RSA(pkey), RSA_PKCS1_OAEP_PADDING) <= 0) {
msyslog(LOG_ERR, "crypto_encrypt: %s",
ERR_error_string(ERR_get_error(), NULL));
free(vp->ptr);
@@ -1604,13 +1612,15 @@ crypto_encrypt(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, vallen);
- if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, vallen);
+ if (EVP_SignFinal(ctx, vp->sig, &vallen, sign_pkey)) {
INSIST(vallen <= sign_siglen);
vp->siglen = htonl(vallen);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -1817,7 +1827,7 @@ crypto_send(
void
crypto_update(void)
{
- EVP_MD_CTX ctx; /* message digest context */
+ EVP_MD_CTX *ctx; /* message digest context */
struct cert_info *cp; /* certificate info/value */
char statstr[NTP_MAXSTRLEN]; /* statistics for filegen */
u_int32 *ptr;
@@ -1828,6 +1838,8 @@ crypto_update(void)
if (hostval.tstamp == 0)
return;
+ ctx = EVP_MD_CTX_new();
+
/*
* Sign public key and timestamps. The filestamp is derived from
* the host key file extension from wherever the file was
@@ -1838,10 +1850,10 @@ crypto_update(void)
pubkey.siglen = 0;
if (pubkey.sig == NULL)
pubkey.sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&pubkey, 12);
- EVP_SignUpdate(&ctx, pubkey.ptr, ntohl(pubkey.vallen));
- if (EVP_SignFinal(&ctx, pubkey.sig, &len, sign_pkey)) {
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&pubkey, 12);
+ EVP_SignUpdate(ctx, pubkey.ptr, ntohl(pubkey.vallen));
+ if (EVP_SignFinal(ctx, pubkey.sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
pubkey.siglen = htonl(len);
}
@@ -1858,11 +1870,11 @@ crypto_update(void)
cp->cert.siglen = 0;
if (cp->cert.sig == NULL)
cp->cert.sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&cp->cert, 12);
- EVP_SignUpdate(&ctx, cp->cert.ptr,
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&cp->cert, 12);
+ EVP_SignUpdate(ctx, cp->cert.ptr,
ntohl(cp->cert.vallen));
- if (EVP_SignFinal(&ctx, cp->cert.sig, &len, sign_pkey)) {
+ if (EVP_SignFinal(ctx, cp->cert.sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
cp->cert.siglen = htonl(len);
}
@@ -1909,10 +1921,10 @@ crypto_update(void)
}
if (tai_leap.sig == NULL)
tai_leap.sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&tai_leap, 12);
- EVP_SignUpdate(&ctx, tai_leap.ptr, len);
- if (EVP_SignFinal(&ctx, tai_leap.sig, &len, sign_pkey)) {
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&tai_leap, 12);
+ EVP_SignUpdate(ctx, tai_leap.ptr, len);
+ if (EVP_SignFinal(ctx, tai_leap.sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
tai_leap.siglen = htonl(len);
}
@@ -1922,6 +1934,7 @@ crypto_update(void)
ntohl(hostval.tstamp));
record_crypto_stats(NULL, statstr);
DPRINTF(1, ("crypto_update: %s\n", statstr));
+ EVP_MD_CTX_free(ctx);
}
/*
@@ -2061,7 +2074,7 @@ bighash(
BIGNUM *bk /* BIGNUM * to */
)
{
- EVP_MD_CTX ctx; /* message digest context */
+ EVP_MD_CTX *ctx; /* message digest context */
u_char dgst[EVP_MAX_MD_SIZE]; /* message digest */
u_char *ptr; /* a BIGNUM as binary string */
u_int len;
@@ -2069,9 +2082,11 @@ bighash(
len = BN_num_bytes(bn);
ptr = emalloc(len);
BN_bn2bin(bn, ptr);
- EVP_DigestInit(&ctx, EVP_md5());
- EVP_DigestUpdate(&ctx, ptr, len);
- EVP_DigestFinal(&ctx, dgst, &len);
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_md5());
+ EVP_DigestUpdate(ctx, ptr, len);
+ EVP_DigestFinal(ctx, dgst, &len);
+ EVP_MD_CTX_free(ctx);
BN_bin2bn(dgst, len, bk);
free(ptr);
}
@@ -2139,9 +2154,10 @@ crypto_alice(
{
DSA *dsa; /* IFF parameters */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp;
u_int len;
+ const BIGNUM *q;
/*
* The identity parameters must have correct format and content.
@@ -2151,7 +2167,7 @@ crypto_alice(
return (XEVNT_ID);
}
- if ((dsa = peer->ident_pkey->pkey->pkey.dsa) == NULL) {
+ if ((dsa = EVP_PKEY_get0_DSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_alice: defective key");
return (XEVNT_PUB);
}
@@ -2162,10 +2178,11 @@ crypto_alice(
if (peer->iffval != NULL)
BN_free(peer->iffval);
peer->iffval = BN_new();
- len = BN_num_bytes(dsa->q);
+ DSA_get0_pqg(dsa, NULL, &q, NULL);
+ len = BN_num_bytes(q);
BN_rand(peer->iffval, len * 8, -1, 1); /* r mod q*/
bctx = BN_CTX_new();
- BN_mod(peer->iffval, peer->iffval, dsa->q, bctx);
+ BN_mod(peer->iffval, peer->iffval, q, bctx);
BN_CTX_free(bctx);
/*
@@ -2182,13 +2199,15 @@ crypto_alice(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2210,11 +2229,13 @@ crypto_bob(
DSA *dsa; /* IFF parameters */
DSA_SIG *sdsa; /* DSA signature context fake */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp; /* NTP timestamp */
BIGNUM *bn, *bk, *r;
u_char *ptr;
u_int len; /* extension field value length */
+ const BIGNUM *p, *q, *g;
+ const BIGNUM *priv_key;
/*
* If the IFF parameters are not valid, something awful
@@ -2224,7 +2245,9 @@ crypto_bob(
msyslog(LOG_NOTICE, "crypto_bob: scheme unavailable");
return (XEVNT_ID);
}
- dsa = iffkey_info->pkey->pkey.dsa;
+ dsa = EVP_PKEY_get0_DSA(iffkey_info->pkey);
+ DSA_get0_pqg(dsa, &p, &q, &g);
+ DSA_get0_key(dsa, NULL, &priv_key);
/*
* Extract r from the challenge.
@@ -2245,15 +2268,14 @@ crypto_bob(
bctx = BN_CTX_new(); bk = BN_new(); bn = BN_new();
sdsa = DSA_SIG_new();
BN_rand(bk, len * 8, -1, 1); /* k */
- BN_mod_mul(bn, dsa->priv_key, r, dsa->q, bctx); /* b r mod q */
+ BN_mod_mul(bn, priv_key, r, q, bctx); /* b r mod q */
BN_add(bn, bn, bk);
- BN_mod(bn, bn, dsa->q, bctx); /* k + b r mod q */
- sdsa->r = BN_dup(bn);
- BN_mod_exp(bk, dsa->g, bk, dsa->p, bctx); /* g^k mod p */
+ BN_mod(bn, bn, q, bctx); /* k + b r mod q */
+ BN_mod_exp(bk, g, bk, p, bctx); /* g^k mod p */
bighash(bk, bk);
- sdsa->s = BN_dup(bk);
+ DSA_SIG_set0(sdsa, bn, bk);
BN_CTX_free(bctx);
- BN_free(r); BN_free(bn); BN_free(bk);
+ BN_free(r);
#ifdef DEBUG
if (debug > 1)
DSA_print_fp(stdout, dsa, 0);
@@ -2290,13 +2312,15 @@ crypto_bob(
/* XXX: more validation to make sure the sign fits... */
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2323,6 +2347,9 @@ crypto_iff(
u_int len;
const u_char *ptr;
int temp;
+ const BIGNUM *p, *g;
+ const BIGNUM *r, *s;
+ const BIGNUM *pub_key;
/*
* If the IFF parameters are not valid or no challenge was sent,
@@ -2337,7 +2364,7 @@ crypto_iff(
ntohl(ep->fstamp));
return (XEVNT_FSP);
}
- if ((dsa = peer->ident_pkey->pkey->pkey.dsa) == NULL) {
+ if ((dsa = EVP_PKEY_get0_DSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_iff: defective key");
return (XEVNT_PUB);
}
@@ -2362,15 +2389,18 @@ crypto_iff(
/*
* Compute g^(k + b r) g^(q - b)r mod p.
*/
- BN_mod_exp(bn, dsa->pub_key, peer->iffval, dsa->p, bctx);
- BN_mod_exp(bk, dsa->g, sdsa->r, dsa->p, bctx);
- BN_mod_mul(bn, bn, bk, dsa->p, bctx);
+ DSA_get0_key(dsa, &pub_key, NULL);
+ DSA_get0_pqg(dsa, &p, NULL, &g);
+ DSA_SIG_get0(sdsa, &r, &s);
+ BN_mod_exp(bn, pub_key, peer->iffval, p, bctx);
+ BN_mod_exp(bk, g, r, p, bctx);
+ BN_mod_mul(bn, bn, bk, p, bctx);
/*
* Verify the hash of the result matches hash(x).
*/
bighash(bn, bn);
- temp = BN_cmp(bn, sdsa->s);
+ temp = BN_cmp(bn, s);
BN_free(bn); BN_free(bk); BN_CTX_free(bctx);
BN_free(peer->iffval);
peer->iffval = NULL;
@@ -2456,9 +2486,10 @@ crypto_alice2(
{
RSA *rsa; /* GQ parameters */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp;
u_int len;
+ const BIGNUM *n;
/*
* The identity parameters must have correct format and content.
@@ -2466,7 +2497,7 @@ crypto_alice2(
if (peer->ident_pkey == NULL)
return (XEVNT_ID);
- if ((rsa = peer->ident_pkey->pkey->pkey.rsa) == NULL) {
+ if ((rsa = EVP_PKEY_get0_RSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_alice2: defective key");
return (XEVNT_PUB);
}
@@ -2477,10 +2508,11 @@ crypto_alice2(
if (peer->iffval != NULL)
BN_free(peer->iffval);
peer->iffval = BN_new();
- len = BN_num_bytes(rsa->n);
+ RSA_get0_key(rsa, &n, NULL, NULL);
+ len = BN_num_bytes(n);
BN_rand(peer->iffval, len * 8, -1, 1); /* r mod n */
bctx = BN_CTX_new();
- BN_mod(peer->iffval, peer->iffval, rsa->n, bctx);
+ BN_mod(peer->iffval, peer->iffval, n, bctx);
BN_CTX_free(bctx);
/*
@@ -2497,13 +2529,15 @@ crypto_alice2(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2525,12 +2559,13 @@ crypto_bob2(
RSA *rsa; /* GQ parameters */
DSA_SIG *sdsa; /* DSA parameters */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp; /* NTP timestamp */
BIGNUM *r, *k, *g, *y;
u_char *ptr;
u_int len;
int s_len;
+ const BIGNUM *n, *p, *e;
/*
* If the GQ parameters are not valid, something awful
@@ -2540,7 +2575,8 @@ crypto_bob2(
msyslog(LOG_NOTICE, "crypto_bob2: scheme unavailable");
return (XEVNT_ID);
}
- rsa = gqkey_info->pkey->pkey.rsa;
+ rsa = EVP_PKEY_get0_RSA(gqkey_info->pkey);
+ RSA_get0_key(rsa, &n, &p, &e);
/*
* Extract r from the challenge.
@@ -2561,15 +2597,14 @@ crypto_bob2(
bctx = BN_CTX_new(); k = BN_new(); g = BN_new(); y = BN_new();
sdsa = DSA_SIG_new();
BN_rand(k, len * 8, -1, 1); /* k */
- BN_mod(k, k, rsa->n, bctx);
- BN_mod_exp(y, rsa->p, r, rsa->n, bctx); /* u^r mod n */
- BN_mod_mul(y, k, y, rsa->n, bctx); /* k u^r mod n */
- sdsa->r = BN_dup(y);
- BN_mod_exp(g, k, rsa->e, rsa->n, bctx); /* k^b mod n */
+ BN_mod(k, k, n, bctx);
+ BN_mod_exp(y, p, r, n, bctx); /* u^r mod n */
+ BN_mod_mul(y, k, y, n, bctx); /* k u^r mod n */
+ BN_mod_exp(g, k, e, n, bctx); /* k^b mod n */
bighash(g, g);
- sdsa->s = BN_dup(g);
+ DSA_SIG_set0(sdsa, y, g);
BN_CTX_free(bctx);
- BN_free(r); BN_free(k); BN_free(g); BN_free(y);
+ BN_free(r); BN_free(k);
#ifdef DEBUG
if (debug > 1)
RSA_print_fp(stdout, rsa, 0);
@@ -2599,13 +2634,15 @@ crypto_bob2(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2633,6 +2670,8 @@ crypto_gq(
const u_char *ptr;
long len;
u_int temp;
+ const BIGNUM *n, *e;
+ const BIGNUM *r, *s;
/*
* If the GQ parameters are not valid or no challenge was sent,
@@ -2649,10 +2688,11 @@ crypto_gq(
ntohl(ep->fstamp));
return (XEVNT_FSP);
}
- if ((rsa = peer->ident_pkey->pkey->pkey.rsa) == NULL) {
+ if ((rsa = EVP_PKEY_get0_RSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_gq: defective key");
return (XEVNT_PUB);
}
+ RSA_get0_key(rsa, &n, NULL, &e);
if (peer->iffval == NULL) {
msyslog(LOG_NOTICE, "crypto_gq: missing challenge");
return (XEVNT_ID);
@@ -2671,6 +2711,7 @@ crypto_gq(
ERR_error_string(ERR_get_error(), NULL));
return (XEVNT_ERR);
}
+ DSA_SIG_get0(sdsa, &r, &s);
/*
* Compute v^r y^b mod n.
@@ -2679,16 +2720,16 @@ crypto_gq(
msyslog(LOG_NOTICE, "crypto_gq: missing group key");
return (XEVNT_ID);
}
- BN_mod_exp(v, peer->grpkey, peer->iffval, rsa->n, bctx);
+ BN_mod_exp(v, peer->grpkey, peer->iffval, n, bctx);
/* v^r mod n */
- BN_mod_exp(y, sdsa->r, rsa->e, rsa->n, bctx); /* y^b mod n */
- BN_mod_mul(y, v, y, rsa->n, bctx); /* v^r y^b mod n */
+ BN_mod_exp(y, r, e, n, bctx); /* y^b mod n */
+ BN_mod_mul(y, v, y, n, bctx); /* v^r y^b mod n */
/*
* Verify the hash of the result matches hash(x).
*/
bighash(y, y);
- temp = BN_cmp(y, sdsa->s);
+ temp = BN_cmp(y, s);
BN_CTX_free(bctx); BN_free(y); BN_free(v);
BN_free(peer->iffval);
peer->iffval = NULL;
@@ -2789,9 +2830,10 @@ crypto_alice3(
{
DSA *dsa; /* MV parameters */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp;
u_int len;
+ const BIGNUM *p;
/*
* The identity parameters must have correct format and content.
@@ -2799,10 +2841,11 @@ crypto_alice3(
if (peer->ident_pkey == NULL)
return (XEVNT_ID);
- if ((dsa = peer->ident_pkey->pkey->pkey.dsa) == NULL) {
+ if ((dsa = EVP_PKEY_get0_DSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_alice3: defective key");
return (XEVNT_PUB);
}
+ DSA_get0_pqg(dsa, &p, NULL, NULL);
/*
* Roll new random r (0 < r < q).
@@ -2810,10 +2853,10 @@ crypto_alice3(
if (peer->iffval != NULL)
BN_free(peer->iffval);
peer->iffval = BN_new();
- len = BN_num_bytes(dsa->p);
+ len = BN_num_bytes(p);
BN_rand(peer->iffval, len * 8, -1, 1); /* r mod p */
bctx = BN_CTX_new();
- BN_mod(peer->iffval, peer->iffval, dsa->p, bctx);
+ BN_mod(peer->iffval, peer->iffval, p, bctx);
BN_CTX_free(bctx);
/*
@@ -2830,13 +2873,15 @@ crypto_alice3(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2857,11 +2902,14 @@ crypto_bob3(
DSA *dsa; /* MV parameters */
DSA *sdsa; /* DSA signature context fake */
BN_CTX *bctx; /* BIGNUM context */
- EVP_MD_CTX ctx; /* signature context */
+ EVP_MD_CTX *ctx; /* signature context */
tstamp_t tstamp; /* NTP timestamp */
BIGNUM *r, *k, *u;
u_char *ptr;
u_int len;
+ const BIGNUM *p, *q, *g;
+ const BIGNUM *pub_key, *priv_key;
+ BIGNUM *sp, *sq, *sg;
/*
* If the MV parameters are not valid, something awful
@@ -2871,7 +2919,9 @@ crypto_bob3(
msyslog(LOG_NOTICE, "crypto_bob3: scheme unavailable");
return (XEVNT_ID);
}
- dsa = mvkey_info->pkey->pkey.dsa;
+ dsa = EVP_PKEY_get0_DSA(mvkey_info->pkey);
+ DSA_get0_pqg(dsa, &p, &q, &g);
+ DSA_get0_key(dsa, &pub_key, &priv_key);
/*
* Extract r from the challenge.
@@ -2892,18 +2942,20 @@ crypto_bob3(
*/
bctx = BN_CTX_new(); k = BN_new(); u = BN_new();
sdsa = DSA_new();
- sdsa->p = BN_new(); sdsa->q = BN_new(); sdsa->g = BN_new();
+ sp = BN_new(); sq = BN_new(); sg = BN_new();
while (1) {
- BN_rand(k, BN_num_bits(dsa->q), 0, 0);
- BN_mod(k, k, dsa->q, bctx);
- BN_gcd(u, k, dsa->q, bctx);
+ BN_rand(k, BN_num_bits(q), 0, 0);
+ BN_mod(k, k, q, bctx);
+ BN_gcd(u, k, q, bctx);
if (BN_is_one(u))
break;
}
- BN_mod_exp(u, dsa->g, k, dsa->p, bctx); /* A^k r */
- BN_mod_mul(sdsa->p, u, r, dsa->p, bctx);
- BN_mod_exp(sdsa->q, dsa->priv_key, k, dsa->p, bctx); /* gbar */
- BN_mod_exp(sdsa->g, dsa->pub_key, k, dsa->p, bctx); /* ghat */
+ BN_mod_exp(u, g, k, p, bctx); /* A^k r */
+ BN_mod_mul(sp, u, r, p, bctx);
+ BN_mod_exp(sq, priv_key, k, p, bctx); /* gbar */
+ BN_mod_exp(sg, pub_key, k, p, bctx); /* ghat */
+ DSA_set0_key(sdsa, BN_dup(pub_key), NULL);
+ DSA_set0_pqg(sdsa, sp, sq, sg);
BN_CTX_free(bctx); BN_free(k); BN_free(r); BN_free(u);
#ifdef DEBUG
if (debug > 1)
@@ -2934,13 +2986,15 @@ crypto_bob3(
return (XEVNT_OK);
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)&vp->tstamp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
return (XEVNT_OK);
}
@@ -2968,6 +3022,9 @@ crypto_mv(
u_int len;
const u_char *ptr;
int temp;
+ const BIGNUM *p;
+ const BIGNUM *pub_key, *priv_key;
+ const BIGNUM *sp, *sq, *sg;
/*
* If the MV parameters are not valid or no challenge was sent,
@@ -2982,10 +3039,12 @@ crypto_mv(
ntohl(ep->fstamp));
return (XEVNT_FSP);
}
- if ((dsa = peer->ident_pkey->pkey->pkey.dsa) == NULL) {
+ if ((dsa = EVP_PKEY_get0_DSA(peer->ident_pkey->pkey)) == NULL) {
msyslog(LOG_NOTICE, "crypto_mv: defective key");
return (XEVNT_PUB);
}
+ DSA_get0_pqg(dsa, &p, NULL, NULL);
+ DSA_get0_key(dsa, &pub_key, &priv_key);
if (peer->iffval == NULL) {
msyslog(LOG_NOTICE, "crypto_mv: missing challenge");
return (XEVNT_ID);
@@ -3002,14 +3061,15 @@ crypto_mv(
ERR_error_string(ERR_get_error(), NULL));
return (XEVNT_ERR);
}
+ DSA_get0_pqg(sdsa, &sp, &sq, &sg);
/*
* Compute (gbar^xhat ghat^xbar) mod p.
*/
- BN_mod_exp(u, sdsa->q, dsa->pub_key, dsa->p, bctx);
- BN_mod_exp(v, sdsa->g, dsa->priv_key, dsa->p, bctx);
- BN_mod_mul(u, u, v, dsa->p, bctx);
- BN_mod_mul(u, u, sdsa->p, dsa->p, bctx);
+ BN_mod_exp(u, sq, pub_key, p, bctx);
+ BN_mod_exp(v, sg, priv_key, p, bctx);
+ BN_mod_mul(u, u, v, p, bctx);
+ BN_mod_mul(u, u, sp, p, bctx);
/*
* The result should match r.
@@ -3080,7 +3140,7 @@ cert_sign(
ASN1_INTEGER *serial; /* serial number */
X509_NAME *subj; /* distinguished (common) name */
EVP_PKEY *pkey; /* public key */
- EVP_MD_CTX ctx; /* message digest context */
+ EVP_MD_CTX *ctx; /* message digest context */
tstamp_t tstamp; /* NTP timestamp */
struct calendar tscal;
u_int len;
@@ -3176,13 +3236,15 @@ cert_sign(
vp->siglen = 0;
if (tstamp != 0) {
vp->sig = emalloc(sign_siglen);
- EVP_SignInit(&ctx, sign_digest);
- EVP_SignUpdate(&ctx, (u_char *)vp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, len);
- if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ ctx = EVP_MD_CTX_new();
+ EVP_SignInit(ctx, sign_digest);
+ EVP_SignUpdate(ctx, (u_char *)vp, 12);
+ EVP_SignUpdate(ctx, vp->ptr, len);
+ if (EVP_SignFinal(ctx, vp->sig, &len, sign_pkey)) {
INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
+ EVP_MD_CTX_free(ctx);
}
#ifdef DEBUG
if (debug > 1)
@@ -3368,13 +3430,12 @@ cert_parse(
)
{
X509 *cert; /* X509 certificate */
- X509_EXTENSION *ext; /* X509v3 extension */
struct cert_info *ret; /* certificate info/value */
BIO *bp;
char pathbuf[MAXFILENAME];
const u_char *ptr;
char *pch;
- int temp, cnt, i;
+ int cnt, i;
struct calendar fscal;
/*
@@ -3422,7 +3483,7 @@ cert_parse(
* objects at this time, since the real crunch can happen only
* when the time is valid but not yet certificated.
*/
- ret->nid = OBJ_obj2nid(cert->cert_info->signature->algorithm);
+ ret->nid = X509_get_signature_nid(cert);
ret->digest = (const EVP_MD *)EVP_get_digestbynid(ret->nid);
ret->serial =
(u_long)ASN1_INTEGER_get(X509_get_serialNumber(cert));
@@ -3446,9 +3507,16 @@ cert_parse(
*/
cnt = X509_get_ext_count(cert);
for (i = 0; i < cnt; i++) {
+ X509_EXTENSION *ext;
+ ASN1_OBJECT *obj;
+ int nid;
+ ASN1_OCTET_STRING *data;
+
ext = X509_get_ext(cert, i);
- temp = OBJ_obj2nid(ext->object);
- switch (temp) {
+ obj = X509_EXTENSION_get_object(ext);
+ nid = OBJ_obj2nid(obj);
+
+ switch (nid) {
/*
* If a key_usage field is present, we decode whether
@@ -3466,7 +3534,7 @@ cert_parse(
else if (strcmp(pathbuf, "Private") == 0)
ret->flags |= CERT_PRIV;
DPRINTF(1, ("cert_parse: %s: %s\n",
- OBJ_nid2ln(temp), pathbuf));
+ OBJ_nid2ln(nid), pathbuf));
break;
/*
@@ -3474,12 +3542,13 @@ cert_parse(
* contains the GQ public key.
*/
case NID_subject_key_identifier:
- ret->grpkey = BN_bin2bn(&ext->value->data[2],
- ext->value->length - 2, NULL);
+ data = X509_EXTENSION_get_data(ext);
+ ret->grpkey = BN_bin2bn(&data->data[2],
+ data->length - 2, NULL);
/* fall through */
default:
DPRINTF(1, ("cert_parse: %s\n",
- OBJ_nid2ln(temp)));
+ OBJ_nid2ln(nid)));
break;
}
}
@@ -3669,10 +3738,10 @@ crypto_key(
DPRINTF(1, ("crypto_key: %s\n", statstr));
#ifdef DEBUG
if (debug > 1) {
- if (pkey->type == EVP_PKEY_DSA)
- DSA_print_fp(stdout, pkey->pkey.dsa, 0);
- else if (pkey->type == EVP_PKEY_RSA)
- RSA_print_fp(stdout, pkey->pkey.rsa, 0);
+ if (EVP_PKEY_base_id(pkey) == EVP_PKEY_DSA)
+ DSA_print_fp(stdout, EVP_PKEY_get0_DSA(pkey), 0);
+ else if (EVP_PKEY_base_id(pkey) == EVP_PKEY_RSA)
+ RSA_print_fp(stdout, EVP_PKEY_get0_RSA(pkey), 0);
}
#endif
return (pkp);
@@ -3882,7 +3951,7 @@ crypto_setup(void)
filename);
exit (-1);
}
- if (pinfo->pkey->type != EVP_PKEY_RSA) {
+ if (EVP_PKEY_base_id(pinfo->pkey) != EVP_PKEY_RSA) {
msyslog(LOG_ERR,
"crypto_setup: host key is not RSA key type");
exit (-1);
diff --git a/contrib/ntp/ntpd/ntp_keyword.h b/contrib/ntp/ntpd/ntp_keyword.h
index ec373cf..57ec764 100644
--- a/contrib/ntp/ntpd/ntp_keyword.h
+++ b/contrib/ntp/ntpd/ntp_keyword.h
@@ -2,7 +2,7 @@
* ntp_keyword.h
*
* NOTE: edit this file with caution, it is generated by keyword-gen.c
- * Generated 2016-05-19 06:35:34 UTC diff_ignore_line
+ * Generated 2016-11-09 11:39:28 UTC diff_ignore_line
*
*/
#include "ntp_scanner.h"
@@ -10,7 +10,7 @@
#define LOWEST_KEYWORD_ID 258
-const char * const keyword_text[195] = {
+const char * const keyword_text[196] = {
/* 0 258 T_Abbrev */ "abbrev",
/* 1 259 T_Age */ "age",
/* 2 260 T_All */ "all",
@@ -21,201 +21,202 @@ const char * const keyword_text[195] = {
/* 7 265 T_Automax */ "automax",
/* 8 266 T_Average */ "average",
/* 9 267 T_Bclient */ "bclient",
- /* 10 268 T_Beacon */ "beacon",
- /* 11 269 T_Broadcast */ "broadcast",
- /* 12 270 T_Broadcastclient */ "broadcastclient",
- /* 13 271 T_Broadcastdelay */ "broadcastdelay",
- /* 14 272 T_Burst */ "burst",
- /* 15 273 T_Calibrate */ "calibrate",
- /* 16 274 T_Ceiling */ "ceiling",
- /* 17 275 T_Clockstats */ "clockstats",
- /* 18 276 T_Cohort */ "cohort",
- /* 19 277 T_ControlKey */ "controlkey",
- /* 20 278 T_Crypto */ "crypto",
- /* 21 279 T_Cryptostats */ "cryptostats",
- /* 22 280 T_Ctl */ "ctl",
- /* 23 281 T_Day */ "day",
- /* 24 282 T_Default */ "default",
- /* 25 283 T_Digest */ "digest",
- /* 26 284 T_Disable */ "disable",
- /* 27 285 T_Discard */ "discard",
- /* 28 286 T_Dispersion */ "dispersion",
- /* 29 287 T_Double */ NULL,
- /* 30 288 T_Driftfile */ "driftfile",
- /* 31 289 T_Drop */ "drop",
- /* 32 290 T_Dscp */ "dscp",
- /* 33 291 T_Ellipsis */ "...",
- /* 34 292 T_Enable */ "enable",
- /* 35 293 T_End */ "end",
- /* 36 294 T_False */ NULL,
- /* 37 295 T_File */ "file",
- /* 38 296 T_Filegen */ "filegen",
- /* 39 297 T_Filenum */ "filenum",
- /* 40 298 T_Flag1 */ "flag1",
- /* 41 299 T_Flag2 */ "flag2",
- /* 42 300 T_Flag3 */ "flag3",
- /* 43 301 T_Flag4 */ "flag4",
- /* 44 302 T_Flake */ "flake",
- /* 45 303 T_Floor */ "floor",
- /* 46 304 T_Freq */ "freq",
- /* 47 305 T_Fudge */ "fudge",
- /* 48 306 T_Host */ "host",
- /* 49 307 T_Huffpuff */ "huffpuff",
- /* 50 308 T_Iburst */ "iburst",
- /* 51 309 T_Ident */ "ident",
- /* 52 310 T_Ignore */ "ignore",
- /* 53 311 T_Incalloc */ "incalloc",
- /* 54 312 T_Incmem */ "incmem",
- /* 55 313 T_Initalloc */ "initalloc",
- /* 56 314 T_Initmem */ "initmem",
- /* 57 315 T_Includefile */ "includefile",
- /* 58 316 T_Integer */ NULL,
- /* 59 317 T_Interface */ "interface",
- /* 60 318 T_Intrange */ NULL,
- /* 61 319 T_Io */ "io",
- /* 62 320 T_Ipv4 */ "ipv4",
- /* 63 321 T_Ipv4_flag */ "-4",
- /* 64 322 T_Ipv6 */ "ipv6",
- /* 65 323 T_Ipv6_flag */ "-6",
- /* 66 324 T_Kernel */ "kernel",
- /* 67 325 T_Key */ "key",
- /* 68 326 T_Keys */ "keys",
- /* 69 327 T_Keysdir */ "keysdir",
- /* 70 328 T_Kod */ "kod",
- /* 71 329 T_Mssntp */ "mssntp",
- /* 72 330 T_Leapfile */ "leapfile",
- /* 73 331 T_Leapsmearinterval */ "leapsmearinterval",
- /* 74 332 T_Limited */ "limited",
- /* 75 333 T_Link */ "link",
- /* 76 334 T_Listen */ "listen",
- /* 77 335 T_Logconfig */ "logconfig",
- /* 78 336 T_Logfile */ "logfile",
- /* 79 337 T_Loopstats */ "loopstats",
- /* 80 338 T_Lowpriotrap */ "lowpriotrap",
- /* 81 339 T_Manycastclient */ "manycastclient",
- /* 82 340 T_Manycastserver */ "manycastserver",
- /* 83 341 T_Mask */ "mask",
- /* 84 342 T_Maxage */ "maxage",
- /* 85 343 T_Maxclock */ "maxclock",
- /* 86 344 T_Maxdepth */ "maxdepth",
- /* 87 345 T_Maxdist */ "maxdist",
- /* 88 346 T_Maxmem */ "maxmem",
- /* 89 347 T_Maxpoll */ "maxpoll",
- /* 90 348 T_Mdnstries */ "mdnstries",
- /* 91 349 T_Mem */ "mem",
- /* 92 350 T_Memlock */ "memlock",
- /* 93 351 T_Minclock */ "minclock",
- /* 94 352 T_Mindepth */ "mindepth",
- /* 95 353 T_Mindist */ "mindist",
- /* 96 354 T_Minimum */ "minimum",
- /* 97 355 T_Minpoll */ "minpoll",
- /* 98 356 T_Minsane */ "minsane",
- /* 99 357 T_Mode */ "mode",
- /* 100 358 T_Mode7 */ "mode7",
- /* 101 359 T_Monitor */ "monitor",
- /* 102 360 T_Month */ "month",
- /* 103 361 T_Mru */ "mru",
- /* 104 362 T_Multicastclient */ "multicastclient",
- /* 105 363 T_Nic */ "nic",
- /* 106 364 T_Nolink */ "nolink",
- /* 107 365 T_Nomodify */ "nomodify",
- /* 108 366 T_Nomrulist */ "nomrulist",
- /* 109 367 T_None */ "none",
- /* 110 368 T_Nonvolatile */ "nonvolatile",
- /* 111 369 T_Nopeer */ "nopeer",
- /* 112 370 T_Noquery */ "noquery",
- /* 113 371 T_Noselect */ "noselect",
- /* 114 372 T_Noserve */ "noserve",
- /* 115 373 T_Notrap */ "notrap",
- /* 116 374 T_Notrust */ "notrust",
- /* 117 375 T_Ntp */ "ntp",
- /* 118 376 T_Ntpport */ "ntpport",
- /* 119 377 T_NtpSignDsocket */ "ntpsigndsocket",
- /* 120 378 T_Orphan */ "orphan",
- /* 121 379 T_Orphanwait */ "orphanwait",
- /* 122 380 T_PCEdigest */ "peer_clear_digest_early",
- /* 123 381 T_Panic */ "panic",
- /* 124 382 T_Peer */ "peer",
- /* 125 383 T_Peerstats */ "peerstats",
- /* 126 384 T_Phone */ "phone",
- /* 127 385 T_Pid */ "pid",
- /* 128 386 T_Pidfile */ "pidfile",
- /* 129 387 T_Pool */ "pool",
- /* 130 388 T_Port */ "port",
- /* 131 389 T_Preempt */ "preempt",
- /* 132 390 T_Prefer */ "prefer",
- /* 133 391 T_Protostats */ "protostats",
- /* 134 392 T_Pw */ "pw",
- /* 135 393 T_Randfile */ "randfile",
- /* 136 394 T_Rawstats */ "rawstats",
- /* 137 395 T_Refid */ "refid",
- /* 138 396 T_Requestkey */ "requestkey",
- /* 139 397 T_Reset */ "reset",
- /* 140 398 T_Restrict */ "restrict",
- /* 141 399 T_Revoke */ "revoke",
- /* 142 400 T_Rlimit */ "rlimit",
- /* 143 401 T_Saveconfigdir */ "saveconfigdir",
- /* 144 402 T_Server */ "server",
- /* 145 403 T_Setvar */ "setvar",
- /* 146 404 T_Source */ "source",
- /* 147 405 T_Stacksize */ "stacksize",
- /* 148 406 T_Statistics */ "statistics",
- /* 149 407 T_Stats */ "stats",
- /* 150 408 T_Statsdir */ "statsdir",
- /* 151 409 T_Step */ "step",
- /* 152 410 T_Stepback */ "stepback",
- /* 153 411 T_Stepfwd */ "stepfwd",
- /* 154 412 T_Stepout */ "stepout",
- /* 155 413 T_Stratum */ "stratum",
- /* 156 414 T_String */ NULL,
- /* 157 415 T_Sys */ "sys",
- /* 158 416 T_Sysstats */ "sysstats",
- /* 159 417 T_Tick */ "tick",
- /* 160 418 T_Time1 */ "time1",
- /* 161 419 T_Time2 */ "time2",
- /* 162 420 T_Timer */ "timer",
- /* 163 421 T_Timingstats */ "timingstats",
- /* 164 422 T_Tinker */ "tinker",
- /* 165 423 T_Tos */ "tos",
- /* 166 424 T_Trap */ "trap",
- /* 167 425 T_True */ "true",
- /* 168 426 T_Trustedkey */ "trustedkey",
- /* 169 427 T_Ttl */ "ttl",
- /* 170 428 T_Type */ "type",
- /* 171 429 T_U_int */ NULL,
- /* 172 430 T_UEcrypto */ "unpeer_crypto_early",
- /* 173 431 T_UEcryptonak */ "unpeer_crypto_nak_early",
- /* 174 432 T_UEdigest */ "unpeer_digest_early",
- /* 175 433 T_Unconfig */ "unconfig",
- /* 176 434 T_Unpeer */ "unpeer",
- /* 177 435 T_Version */ "version",
- /* 178 436 T_WanderThreshold */ NULL,
- /* 179 437 T_Week */ "week",
- /* 180 438 T_Wildcard */ "wildcard",
- /* 181 439 T_Xleave */ "xleave",
- /* 182 440 T_Year */ "year",
- /* 183 441 T_Flag */ NULL,
- /* 184 442 T_EOC */ NULL,
- /* 185 443 T_Simulate */ "simulate",
- /* 186 444 T_Beep_Delay */ "beep_delay",
- /* 187 445 T_Sim_Duration */ "simulation_duration",
- /* 188 446 T_Server_Offset */ "server_offset",
- /* 189 447 T_Duration */ "duration",
- /* 190 448 T_Freq_Offset */ "freq_offset",
- /* 191 449 T_Wander */ "wander",
- /* 192 450 T_Jitter */ "jitter",
- /* 193 451 T_Prop_Delay */ "prop_delay",
- /* 194 452 T_Proc_Delay */ "proc_delay"
+ /* 10 268 T_Bcpollbstep */ "bcpollbstep",
+ /* 11 269 T_Beacon */ "beacon",
+ /* 12 270 T_Broadcast */ "broadcast",
+ /* 13 271 T_Broadcastclient */ "broadcastclient",
+ /* 14 272 T_Broadcastdelay */ "broadcastdelay",
+ /* 15 273 T_Burst */ "burst",
+ /* 16 274 T_Calibrate */ "calibrate",
+ /* 17 275 T_Ceiling */ "ceiling",
+ /* 18 276 T_Clockstats */ "clockstats",
+ /* 19 277 T_Cohort */ "cohort",
+ /* 20 278 T_ControlKey */ "controlkey",
+ /* 21 279 T_Crypto */ "crypto",
+ /* 22 280 T_Cryptostats */ "cryptostats",
+ /* 23 281 T_Ctl */ "ctl",
+ /* 24 282 T_Day */ "day",
+ /* 25 283 T_Default */ "default",
+ /* 26 284 T_Digest */ "digest",
+ /* 27 285 T_Disable */ "disable",
+ /* 28 286 T_Discard */ "discard",
+ /* 29 287 T_Dispersion */ "dispersion",
+ /* 30 288 T_Double */ NULL,
+ /* 31 289 T_Driftfile */ "driftfile",
+ /* 32 290 T_Drop */ "drop",
+ /* 33 291 T_Dscp */ "dscp",
+ /* 34 292 T_Ellipsis */ "...",
+ /* 35 293 T_Enable */ "enable",
+ /* 36 294 T_End */ "end",
+ /* 37 295 T_False */ NULL,
+ /* 38 296 T_File */ "file",
+ /* 39 297 T_Filegen */ "filegen",
+ /* 40 298 T_Filenum */ "filenum",
+ /* 41 299 T_Flag1 */ "flag1",
+ /* 42 300 T_Flag2 */ "flag2",
+ /* 43 301 T_Flag3 */ "flag3",
+ /* 44 302 T_Flag4 */ "flag4",
+ /* 45 303 T_Flake */ "flake",
+ /* 46 304 T_Floor */ "floor",
+ /* 47 305 T_Freq */ "freq",
+ /* 48 306 T_Fudge */ "fudge",
+ /* 49 307 T_Host */ "host",
+ /* 50 308 T_Huffpuff */ "huffpuff",
+ /* 51 309 T_Iburst */ "iburst",
+ /* 52 310 T_Ident */ "ident",
+ /* 53 311 T_Ignore */ "ignore",
+ /* 54 312 T_Incalloc */ "incalloc",
+ /* 55 313 T_Incmem */ "incmem",
+ /* 56 314 T_Initalloc */ "initalloc",
+ /* 57 315 T_Initmem */ "initmem",
+ /* 58 316 T_Includefile */ "includefile",
+ /* 59 317 T_Integer */ NULL,
+ /* 60 318 T_Interface */ "interface",
+ /* 61 319 T_Intrange */ NULL,
+ /* 62 320 T_Io */ "io",
+ /* 63 321 T_Ipv4 */ "ipv4",
+ /* 64 322 T_Ipv4_flag */ "-4",
+ /* 65 323 T_Ipv6 */ "ipv6",
+ /* 66 324 T_Ipv6_flag */ "-6",
+ /* 67 325 T_Kernel */ "kernel",
+ /* 68 326 T_Key */ "key",
+ /* 69 327 T_Keys */ "keys",
+ /* 70 328 T_Keysdir */ "keysdir",
+ /* 71 329 T_Kod */ "kod",
+ /* 72 330 T_Mssntp */ "mssntp",
+ /* 73 331 T_Leapfile */ "leapfile",
+ /* 74 332 T_Leapsmearinterval */ "leapsmearinterval",
+ /* 75 333 T_Limited */ "limited",
+ /* 76 334 T_Link */ "link",
+ /* 77 335 T_Listen */ "listen",
+ /* 78 336 T_Logconfig */ "logconfig",
+ /* 79 337 T_Logfile */ "logfile",
+ /* 80 338 T_Loopstats */ "loopstats",
+ /* 81 339 T_Lowpriotrap */ "lowpriotrap",
+ /* 82 340 T_Manycastclient */ "manycastclient",
+ /* 83 341 T_Manycastserver */ "manycastserver",
+ /* 84 342 T_Mask */ "mask",
+ /* 85 343 T_Maxage */ "maxage",
+ /* 86 344 T_Maxclock */ "maxclock",
+ /* 87 345 T_Maxdepth */ "maxdepth",
+ /* 88 346 T_Maxdist */ "maxdist",
+ /* 89 347 T_Maxmem */ "maxmem",
+ /* 90 348 T_Maxpoll */ "maxpoll",
+ /* 91 349 T_Mdnstries */ "mdnstries",
+ /* 92 350 T_Mem */ "mem",
+ /* 93 351 T_Memlock */ "memlock",
+ /* 94 352 T_Minclock */ "minclock",
+ /* 95 353 T_Mindepth */ "mindepth",
+ /* 96 354 T_Mindist */ "mindist",
+ /* 97 355 T_Minimum */ "minimum",
+ /* 98 356 T_Minpoll */ "minpoll",
+ /* 99 357 T_Minsane */ "minsane",
+ /* 100 358 T_Mode */ "mode",
+ /* 101 359 T_Mode7 */ "mode7",
+ /* 102 360 T_Monitor */ "monitor",
+ /* 103 361 T_Month */ "month",
+ /* 104 362 T_Mru */ "mru",
+ /* 105 363 T_Multicastclient */ "multicastclient",
+ /* 106 364 T_Nic */ "nic",
+ /* 107 365 T_Nolink */ "nolink",
+ /* 108 366 T_Nomodify */ "nomodify",
+ /* 109 367 T_Nomrulist */ "nomrulist",
+ /* 110 368 T_None */ "none",
+ /* 111 369 T_Nonvolatile */ "nonvolatile",
+ /* 112 370 T_Nopeer */ "nopeer",
+ /* 113 371 T_Noquery */ "noquery",
+ /* 114 372 T_Noselect */ "noselect",
+ /* 115 373 T_Noserve */ "noserve",
+ /* 116 374 T_Notrap */ "notrap",
+ /* 117 375 T_Notrust */ "notrust",
+ /* 118 376 T_Ntp */ "ntp",
+ /* 119 377 T_Ntpport */ "ntpport",
+ /* 120 378 T_NtpSignDsocket */ "ntpsigndsocket",
+ /* 121 379 T_Orphan */ "orphan",
+ /* 122 380 T_Orphanwait */ "orphanwait",
+ /* 123 381 T_PCEdigest */ "peer_clear_digest_early",
+ /* 124 382 T_Panic */ "panic",
+ /* 125 383 T_Peer */ "peer",
+ /* 126 384 T_Peerstats */ "peerstats",
+ /* 127 385 T_Phone */ "phone",
+ /* 128 386 T_Pid */ "pid",
+ /* 129 387 T_Pidfile */ "pidfile",
+ /* 130 388 T_Pool */ "pool",
+ /* 131 389 T_Port */ "port",
+ /* 132 390 T_Preempt */ "preempt",
+ /* 133 391 T_Prefer */ "prefer",
+ /* 134 392 T_Protostats */ "protostats",
+ /* 135 393 T_Pw */ "pw",
+ /* 136 394 T_Randfile */ "randfile",
+ /* 137 395 T_Rawstats */ "rawstats",
+ /* 138 396 T_Refid */ "refid",
+ /* 139 397 T_Requestkey */ "requestkey",
+ /* 140 398 T_Reset */ "reset",
+ /* 141 399 T_Restrict */ "restrict",
+ /* 142 400 T_Revoke */ "revoke",
+ /* 143 401 T_Rlimit */ "rlimit",
+ /* 144 402 T_Saveconfigdir */ "saveconfigdir",
+ /* 145 403 T_Server */ "server",
+ /* 146 404 T_Setvar */ "setvar",
+ /* 147 405 T_Source */ "source",
+ /* 148 406 T_Stacksize */ "stacksize",
+ /* 149 407 T_Statistics */ "statistics",
+ /* 150 408 T_Stats */ "stats",
+ /* 151 409 T_Statsdir */ "statsdir",
+ /* 152 410 T_Step */ "step",
+ /* 153 411 T_Stepback */ "stepback",
+ /* 154 412 T_Stepfwd */ "stepfwd",
+ /* 155 413 T_Stepout */ "stepout",
+ /* 156 414 T_Stratum */ "stratum",
+ /* 157 415 T_String */ NULL,
+ /* 158 416 T_Sys */ "sys",
+ /* 159 417 T_Sysstats */ "sysstats",
+ /* 160 418 T_Tick */ "tick",
+ /* 161 419 T_Time1 */ "time1",
+ /* 162 420 T_Time2 */ "time2",
+ /* 163 421 T_Timer */ "timer",
+ /* 164 422 T_Timingstats */ "timingstats",
+ /* 165 423 T_Tinker */ "tinker",
+ /* 166 424 T_Tos */ "tos",
+ /* 167 425 T_Trap */ "trap",
+ /* 168 426 T_True */ "true",
+ /* 169 427 T_Trustedkey */ "trustedkey",
+ /* 170 428 T_Ttl */ "ttl",
+ /* 171 429 T_Type */ "type",
+ /* 172 430 T_U_int */ NULL,
+ /* 173 431 T_UEcrypto */ "unpeer_crypto_early",
+ /* 174 432 T_UEcryptonak */ "unpeer_crypto_nak_early",
+ /* 175 433 T_UEdigest */ "unpeer_digest_early",
+ /* 176 434 T_Unconfig */ "unconfig",
+ /* 177 435 T_Unpeer */ "unpeer",
+ /* 178 436 T_Version */ "version",
+ /* 179 437 T_WanderThreshold */ NULL,
+ /* 180 438 T_Week */ "week",
+ /* 181 439 T_Wildcard */ "wildcard",
+ /* 182 440 T_Xleave */ "xleave",
+ /* 183 441 T_Year */ "year",
+ /* 184 442 T_Flag */ NULL,
+ /* 185 443 T_EOC */ NULL,
+ /* 186 444 T_Simulate */ "simulate",
+ /* 187 445 T_Beep_Delay */ "beep_delay",
+ /* 188 446 T_Sim_Duration */ "simulation_duration",
+ /* 189 447 T_Server_Offset */ "server_offset",
+ /* 190 448 T_Duration */ "duration",
+ /* 191 449 T_Freq_Offset */ "freq_offset",
+ /* 192 450 T_Wander */ "wander",
+ /* 193 451 T_Jitter */ "jitter",
+ /* 194 452 T_Prop_Delay */ "prop_delay",
+ /* 195 453 T_Proc_Delay */ "proc_delay"
};
-#define SCANNER_INIT_S 906
+#define SCANNER_INIT_S 915
-const scan_state sst[909] = {
+const scan_state sst[918] = {
/*SS_T( ch, f-by, match, other ), */
0, /* 0 */
- S_ST( '-', 3, 323, 0 ), /* 1 */
+ S_ST( '-', 3, 324, 0 ), /* 1 */
S_ST( '.', 3, 3, 1 ), /* 2 */
- S_ST( '.', 3, 291, 0 ), /* 3 . */
+ S_ST( '.', 3, 292, 0 ), /* 3 . */
S_ST( 'a', 3, 23, 2 ), /* 4 */
S_ST( 'b', 3, 6, 0 ), /* 5 a */
S_ST( 'b', 3, 7, 0 ), /* 6 ab */
@@ -240,236 +241,236 @@ const scan_state sst[909] = {
S_ST( 'r', 3, 26, 0 ), /* 25 ave */
S_ST( 'a', 3, 27, 0 ), /* 26 aver */
S_ST( 'g', 3, 266, 0 ), /* 27 avera */
- S_ST( 'b', 3, 61, 4 ), /* 28 */
- S_ST( 'c', 3, 30, 0 ), /* 29 b */
+ S_ST( 'b', 3, 69, 4 ), /* 28 */
+ S_ST( 'c', 3, 34, 0 ), /* 29 b */
S_ST( 'l', 3, 31, 0 ), /* 30 bc */
S_ST( 'i', 3, 32, 0 ), /* 31 bcl */
S_ST( 'e', 3, 33, 0 ), /* 32 bcli */
S_ST( 'n', 3, 267, 0 ), /* 33 bclie */
- S_ST( 'e', 3, 38, 29 ), /* 34 b */
- S_ST( 'a', 3, 36, 0 ), /* 35 be */
- S_ST( 'c', 3, 37, 0 ), /* 36 bea */
- S_ST( 'o', 3, 268, 0 ), /* 37 beac */
- S_ST( 'e', 3, 39, 35 ), /* 38 be */
- S_ST( 'p', 3, 40, 0 ), /* 39 bee */
- S_ST( '_', 3, 41, 0 ), /* 40 beep */
- S_ST( 'd', 3, 42, 0 ), /* 41 beep_ */
- S_ST( 'e', 3, 43, 0 ), /* 42 beep_d */
- S_ST( 'l', 3, 44, 0 ), /* 43 beep_de */
- S_ST( 'a', 3, 444, 0 ), /* 44 beep_del */
- S_ST( 'r', 3, 46, 34 ), /* 45 b */
- S_ST( 'o', 3, 47, 0 ), /* 46 br */
- S_ST( 'a', 3, 48, 0 ), /* 47 bro */
- S_ST( 'd', 3, 49, 0 ), /* 48 broa */
- S_ST( 'c', 3, 50, 0 ), /* 49 broad */
- S_ST( 'a', 3, 51, 0 ), /* 50 broadc */
- S_ST( 's', 3, 269, 0 ), /* 51 broadca */
- S_ST( 'c', 3, 53, 0 ), /* 52 broadcast */
- S_ST( 'l', 3, 54, 0 ), /* 53 broadcastc */
- S_ST( 'i', 3, 55, 0 ), /* 54 broadcastcl */
- S_ST( 'e', 3, 56, 0 ), /* 55 broadcastcli */
- S_ST( 'n', 3, 270, 0 ), /* 56 broadcastclie */
- S_ST( 'd', 3, 58, 52 ), /* 57 broadcast */
- S_ST( 'e', 3, 59, 0 ), /* 58 broadcastd */
- S_ST( 'l', 3, 60, 0 ), /* 59 broadcastde */
- S_ST( 'a', 3, 271, 0 ), /* 60 broadcastdel */
- S_ST( 'u', 3, 62, 45 ), /* 61 b */
- S_ST( 'r', 3, 63, 0 ), /* 62 bu */
- S_ST( 's', 3, 272, 0 ), /* 63 bur */
- S_ST( 'c', 3, 104, 28 ), /* 64 */
- S_ST( 'a', 3, 66, 0 ), /* 65 c */
- S_ST( 'l', 3, 67, 0 ), /* 66 ca */
- S_ST( 'i', 3, 68, 0 ), /* 67 cal */
- S_ST( 'b', 3, 69, 0 ), /* 68 cali */
- S_ST( 'r', 3, 70, 0 ), /* 69 calib */
- S_ST( 'a', 3, 71, 0 ), /* 70 calibr */
- S_ST( 't', 3, 273, 0 ), /* 71 calibra */
- S_ST( 'e', 3, 73, 65 ), /* 72 c */
- S_ST( 'i', 3, 74, 0 ), /* 73 ce */
- S_ST( 'l', 3, 75, 0 ), /* 74 cei */
- S_ST( 'i', 3, 76, 0 ), /* 75 ceil */
- S_ST( 'n', 3, 274, 0 ), /* 76 ceili */
- S_ST( 'l', 3, 78, 72 ), /* 77 c */
- S_ST( 'o', 3, 79, 0 ), /* 78 cl */
- S_ST( 'c', 3, 80, 0 ), /* 79 clo */
- S_ST( 'k', 3, 81, 0 ), /* 80 cloc */
- S_ST( 's', 3, 82, 0 ), /* 81 clock */
- S_ST( 't', 3, 83, 0 ), /* 82 clocks */
- S_ST( 'a', 3, 84, 0 ), /* 83 clockst */
- S_ST( 't', 3, 275, 0 ), /* 84 clocksta */
- S_ST( 'o', 3, 89, 77 ), /* 85 c */
- S_ST( 'h', 3, 87, 0 ), /* 86 co */
- S_ST( 'o', 3, 88, 0 ), /* 87 coh */
- S_ST( 'r', 3, 276, 0 ), /* 88 coho */
- S_ST( 'n', 3, 90, 86 ), /* 89 co */
- S_ST( 't', 3, 91, 0 ), /* 90 con */
- S_ST( 'r', 3, 92, 0 ), /* 91 cont */
- S_ST( 'o', 3, 93, 0 ), /* 92 contr */
- S_ST( 'l', 3, 94, 0 ), /* 93 contro */
- S_ST( 'k', 3, 95, 0 ), /* 94 control */
- S_ST( 'e', 3, 277, 0 ), /* 95 controlk */
- S_ST( 'r', 3, 97, 85 ), /* 96 c */
- S_ST( 'y', 3, 98, 0 ), /* 97 cr */
- S_ST( 'p', 3, 99, 0 ), /* 98 cry */
- S_ST( 't', 3, 278, 0 ), /* 99 cryp */
- S_ST( 's', 3, 101, 0 ), /* 100 crypto */
- S_ST( 't', 3, 102, 0 ), /* 101 cryptos */
- S_ST( 'a', 3, 103, 0 ), /* 102 cryptost */
- S_ST( 't', 3, 279, 0 ), /* 103 cryptosta */
- S_ST( 't', 3, 280, 96 ), /* 104 c */
- S_ST( 'd', 3, 139, 64 ), /* 105 */
- S_ST( 'a', 3, 281, 0 ), /* 106 d */
- S_ST( 'e', 3, 108, 106 ), /* 107 d */
- S_ST( 'f', 3, 109, 0 ), /* 108 de */
- S_ST( 'a', 3, 110, 0 ), /* 109 def */
- S_ST( 'u', 3, 111, 0 ), /* 110 defa */
- S_ST( 'l', 3, 282, 0 ), /* 111 defau */
- S_ST( 'i', 3, 116, 107 ), /* 112 d */
- S_ST( 'g', 3, 114, 0 ), /* 113 di */
- S_ST( 'e', 3, 115, 0 ), /* 114 dig */
- S_ST( 's', 3, 283, 0 ), /* 115 dige */
- S_ST( 's', 3, 123, 113 ), /* 116 di */
- S_ST( 'a', 3, 118, 0 ), /* 117 dis */
- S_ST( 'b', 3, 119, 0 ), /* 118 disa */
- S_ST( 'l', 3, 284, 0 ), /* 119 disab */
- S_ST( 'c', 3, 121, 117 ), /* 120 dis */
- S_ST( 'a', 3, 122, 0 ), /* 121 disc */
- S_ST( 'r', 3, 285, 0 ), /* 122 disca */
- S_ST( 'p', 3, 124, 120 ), /* 123 dis */
- S_ST( 'e', 3, 125, 0 ), /* 124 disp */
- S_ST( 'r', 3, 126, 0 ), /* 125 dispe */
- S_ST( 's', 3, 127, 0 ), /* 126 disper */
- S_ST( 'i', 3, 128, 0 ), /* 127 dispers */
- S_ST( 'o', 3, 286, 0 ), /* 128 dispersi */
- S_ST( 'r', 3, 136, 112 ), /* 129 d */
- S_ST( 'i', 3, 131, 0 ), /* 130 dr */
- S_ST( 'f', 3, 132, 0 ), /* 131 dri */
- S_ST( 't', 3, 133, 0 ), /* 132 drif */
- S_ST( 'f', 3, 134, 0 ), /* 133 drift */
- S_ST( 'i', 3, 135, 0 ), /* 134 driftf */
- S_ST( 'l', 3, 288, 0 ), /* 135 driftfi */
- S_ST( 'o', 3, 289, 130 ), /* 136 dr */
- S_ST( 's', 3, 138, 129 ), /* 137 d */
- S_ST( 'c', 3, 290, 0 ), /* 138 ds */
- S_ST( 'u', 3, 140, 137 ), /* 139 d */
- S_ST( 'r', 3, 141, 0 ), /* 140 du */
- S_ST( 'a', 3, 142, 0 ), /* 141 dur */
- S_ST( 't', 3, 143, 0 ), /* 142 dura */
- S_ST( 'i', 3, 144, 0 ), /* 143 durat */
- S_ST( 'o', 3, 447, 0 ), /* 144 durati */
- S_ST( 'e', 3, 146, 105 ), /* 145 */
- S_ST( 'n', 3, 293, 0 ), /* 146 e */
- S_ST( 'a', 3, 148, 0 ), /* 147 en */
- S_ST( 'b', 3, 149, 0 ), /* 148 ena */
- S_ST( 'l', 3, 292, 0 ), /* 149 enab */
- S_ST( 'f', 3, 171, 145 ), /* 150 */
- S_ST( 'i', 3, 152, 0 ), /* 151 f */
- S_ST( 'l', 3, 295, 0 ), /* 152 fi */
- S_ST( 'g', 3, 154, 0 ), /* 153 file */
- S_ST( 'e', 3, 296, 0 ), /* 154 fileg */
- S_ST( 'n', 3, 156, 153 ), /* 155 file */
- S_ST( 'u', 3, 297, 0 ), /* 156 filen */
- S_ST( 'l', 3, 161, 151 ), /* 157 f */
- S_ST( 'a', 3, 160, 0 ), /* 158 fl */
- S_ST( 'g', 3, 301, 0 ), /* 159 fla */
- S_ST( 'k', 3, 302, 159 ), /* 160 fla */
- S_ST( 'o', 3, 162, 158 ), /* 161 fl */
- S_ST( 'o', 3, 303, 0 ), /* 162 flo */
- S_ST( 'r', 3, 164, 157 ), /* 163 f */
- S_ST( 'e', 3, 304, 0 ), /* 164 fr */
- S_ST( '_', 3, 166, 0 ), /* 165 freq */
- S_ST( 'o', 3, 167, 0 ), /* 166 freq_ */
- S_ST( 'f', 3, 168, 0 ), /* 167 freq_o */
- S_ST( 'f', 3, 169, 0 ), /* 168 freq_of */
- S_ST( 's', 3, 170, 0 ), /* 169 freq_off */
- S_ST( 'e', 3, 448, 0 ), /* 170 freq_offs */
- S_ST( 'u', 3, 172, 163 ), /* 171 f */
- S_ST( 'd', 3, 173, 0 ), /* 172 fu */
- S_ST( 'g', 3, 305, 0 ), /* 173 fud */
- S_ST( 'h', 3, 177, 150 ), /* 174 */
- S_ST( 'o', 3, 176, 0 ), /* 175 h */
- S_ST( 's', 3, 306, 0 ), /* 176 ho */
- S_ST( 'u', 3, 178, 175 ), /* 177 h */
- S_ST( 'f', 3, 179, 0 ), /* 178 hu */
- S_ST( 'f', 3, 180, 0 ), /* 179 huf */
- S_ST( 'p', 3, 181, 0 ), /* 180 huff */
- S_ST( 'u', 3, 182, 0 ), /* 181 huffp */
- S_ST( 'f', 3, 307, 0 ), /* 182 huffpu */
- S_ST( 'i', 3, 224, 174 ), /* 183 */
- S_ST( 'b', 3, 185, 0 ), /* 184 i */
- S_ST( 'u', 3, 186, 0 ), /* 185 ib */
- S_ST( 'r', 3, 187, 0 ), /* 186 ibu */
- S_ST( 's', 3, 308, 0 ), /* 187 ibur */
- S_ST( 'd', 3, 189, 184 ), /* 188 i */
- S_ST( 'e', 3, 190, 0 ), /* 189 id */
- S_ST( 'n', 3, 309, 0 ), /* 190 ide */
- S_ST( 'g', 3, 192, 188 ), /* 191 i */
- S_ST( 'n', 3, 193, 0 ), /* 192 ig */
- S_ST( 'o', 3, 194, 0 ), /* 193 ign */
- S_ST( 'r', 3, 310, 0 ), /* 194 igno */
- S_ST( 'n', 3, 218, 191 ), /* 195 i */
- S_ST( 'c', 3, 208, 0 ), /* 196 in */
- S_ST( 'a', 3, 198, 0 ), /* 197 inc */
- S_ST( 'l', 3, 199, 0 ), /* 198 inca */
- S_ST( 'l', 3, 200, 0 ), /* 199 incal */
- S_ST( 'o', 3, 311, 0 ), /* 200 incall */
- S_ST( 'l', 3, 202, 197 ), /* 201 inc */
- S_ST( 'u', 3, 203, 0 ), /* 202 incl */
- S_ST( 'd', 3, 204, 0 ), /* 203 inclu */
- S_ST( 'e', 3, 205, 0 ), /* 204 includ */
- S_ST( 'f', 3, 206, 0 ), /* 205 include */
- S_ST( 'i', 3, 207, 0 ), /* 206 includef */
- S_ST( 'l', 3, 315, 0 ), /* 207 includefi */
- S_ST( 'm', 3, 209, 201 ), /* 208 inc */
- S_ST( 'e', 3, 312, 0 ), /* 209 incm */
- S_ST( 'i', 3, 211, 196 ), /* 210 in */
- S_ST( 't', 3, 216, 0 ), /* 211 ini */
- S_ST( 'a', 3, 213, 0 ), /* 212 init */
- S_ST( 'l', 3, 214, 0 ), /* 213 inita */
- S_ST( 'l', 3, 215, 0 ), /* 214 inital */
- S_ST( 'o', 3, 313, 0 ), /* 215 initall */
- S_ST( 'm', 3, 217, 212 ), /* 216 init */
- S_ST( 'e', 3, 314, 0 ), /* 217 initm */
- S_ST( 't', 3, 219, 210 ), /* 218 in */
- S_ST( 'e', 3, 220, 0 ), /* 219 int */
- S_ST( 'r', 3, 221, 0 ), /* 220 inte */
- S_ST( 'f', 3, 222, 0 ), /* 221 inter */
- S_ST( 'a', 3, 223, 0 ), /* 222 interf */
- S_ST( 'c', 3, 317, 0 ), /* 223 interfa */
- S_ST( 'p', 3, 225, 319 ), /* 224 i */
- S_ST( 'v', 3, 322, 0 ), /* 225 ip */
- S_ST( 'j', 3, 227, 183 ), /* 226 */
- S_ST( 'i', 3, 228, 0 ), /* 227 j */
- S_ST( 't', 3, 229, 0 ), /* 228 ji */
- S_ST( 't', 3, 230, 0 ), /* 229 jit */
- S_ST( 'e', 3, 450, 0 ), /* 230 jitt */
- S_ST( 'k', 3, 238, 226 ), /* 231 */
- S_ST( 'e', 3, 325, 0 ), /* 232 k */
- S_ST( 'r', 3, 234, 0 ), /* 233 ke */
- S_ST( 'n', 3, 235, 0 ), /* 234 ker */
- S_ST( 'e', 3, 324, 0 ), /* 235 kern */
- S_ST( 'd', 3, 237, 0 ), /* 236 keys */
- S_ST( 'i', 3, 327, 0 ), /* 237 keysd */
- S_ST( 'o', 3, 328, 232 ), /* 238 k */
- S_ST( 'l', 3, 453, 231 ), /* 239 */
- S_ST( 'e', 3, 241, 0 ), /* 240 l */
- S_ST( 'a', 3, 242, 0 ), /* 241 le */
- S_ST( 'p', 3, 246, 0 ), /* 242 lea */
- S_ST( 'f', 3, 244, 0 ), /* 243 leap */
- S_ST( 'i', 3, 245, 0 ), /* 244 leapf */
- S_ST( 'l', 3, 330, 0 ), /* 245 leapfi */
- S_ST( 's', 3, 247, 243 ), /* 246 leap */
- S_ST( 'm', 3, 248, 0 ), /* 247 leaps */
- S_ST( 'e', 3, 249, 0 ), /* 248 leapsm */
- S_ST( 'a', 3, 250, 0 ), /* 249 leapsme */
- S_ST( 'r', 3, 251, 0 ), /* 250 leapsmea */
- S_ST( 'i', 3, 252, 0 ), /* 251 leapsmear */
- S_ST( 'n', 3, 253, 0 ), /* 252 leapsmeari */
- S_ST( 't', 3, 254, 0 ), /* 253 leapsmearin */
- S_ST( 'e', 3, 255, 0 ), /* 254 leapsmearint */
- S_ST( 'r', 3, 256, 0 ), /* 255 leapsmearinte */
- S_ST( 'v', 3, 257, 0 ), /* 256 leapsmearinter */
- S_ST( 'a', 3, 331, 0 ), /* 257 leapsmearinterv */
+ S_ST( 'p', 3, 35, 30 ), /* 34 bc */
+ S_ST( 'o', 3, 36, 0 ), /* 35 bcp */
+ S_ST( 'l', 3, 37, 0 ), /* 36 bcpo */
+ S_ST( 'l', 3, 38, 0 ), /* 37 bcpol */
+ S_ST( 'b', 3, 39, 0 ), /* 38 bcpoll */
+ S_ST( 's', 3, 40, 0 ), /* 39 bcpollb */
+ S_ST( 't', 3, 41, 0 ), /* 40 bcpollbs */
+ S_ST( 'e', 3, 268, 0 ), /* 41 bcpollbst */
+ S_ST( 'e', 3, 46, 29 ), /* 42 b */
+ S_ST( 'a', 3, 44, 0 ), /* 43 be */
+ S_ST( 'c', 3, 45, 0 ), /* 44 bea */
+ S_ST( 'o', 3, 269, 0 ), /* 45 beac */
+ S_ST( 'e', 3, 47, 43 ), /* 46 be */
+ S_ST( 'p', 3, 48, 0 ), /* 47 bee */
+ S_ST( '_', 3, 49, 0 ), /* 48 beep */
+ S_ST( 'd', 3, 50, 0 ), /* 49 beep_ */
+ S_ST( 'e', 3, 51, 0 ), /* 50 beep_d */
+ S_ST( 'l', 3, 52, 0 ), /* 51 beep_de */
+ S_ST( 'a', 3, 445, 0 ), /* 52 beep_del */
+ S_ST( 'r', 3, 54, 42 ), /* 53 b */
+ S_ST( 'o', 3, 55, 0 ), /* 54 br */
+ S_ST( 'a', 3, 56, 0 ), /* 55 bro */
+ S_ST( 'd', 3, 57, 0 ), /* 56 broa */
+ S_ST( 'c', 3, 58, 0 ), /* 57 broad */
+ S_ST( 'a', 3, 59, 0 ), /* 58 broadc */
+ S_ST( 's', 3, 270, 0 ), /* 59 broadca */
+ S_ST( 'c', 3, 61, 0 ), /* 60 broadcast */
+ S_ST( 'l', 3, 62, 0 ), /* 61 broadcastc */
+ S_ST( 'i', 3, 63, 0 ), /* 62 broadcastcl */
+ S_ST( 'e', 3, 64, 0 ), /* 63 broadcastcli */
+ S_ST( 'n', 3, 271, 0 ), /* 64 broadcastclie */
+ S_ST( 'd', 3, 66, 60 ), /* 65 broadcast */
+ S_ST( 'e', 3, 67, 0 ), /* 66 broadcastd */
+ S_ST( 'l', 3, 68, 0 ), /* 67 broadcastde */
+ S_ST( 'a', 3, 272, 0 ), /* 68 broadcastdel */
+ S_ST( 'u', 3, 70, 53 ), /* 69 b */
+ S_ST( 'r', 3, 71, 0 ), /* 70 bu */
+ S_ST( 's', 3, 273, 0 ), /* 71 bur */
+ S_ST( 'c', 3, 112, 28 ), /* 72 */
+ S_ST( 'a', 3, 74, 0 ), /* 73 c */
+ S_ST( 'l', 3, 75, 0 ), /* 74 ca */
+ S_ST( 'i', 3, 76, 0 ), /* 75 cal */
+ S_ST( 'b', 3, 77, 0 ), /* 76 cali */
+ S_ST( 'r', 3, 78, 0 ), /* 77 calib */
+ S_ST( 'a', 3, 79, 0 ), /* 78 calibr */
+ S_ST( 't', 3, 274, 0 ), /* 79 calibra */
+ S_ST( 'e', 3, 81, 73 ), /* 80 c */
+ S_ST( 'i', 3, 82, 0 ), /* 81 ce */
+ S_ST( 'l', 3, 83, 0 ), /* 82 cei */
+ S_ST( 'i', 3, 84, 0 ), /* 83 ceil */
+ S_ST( 'n', 3, 275, 0 ), /* 84 ceili */
+ S_ST( 'l', 3, 86, 80 ), /* 85 c */
+ S_ST( 'o', 3, 87, 0 ), /* 86 cl */
+ S_ST( 'c', 3, 88, 0 ), /* 87 clo */
+ S_ST( 'k', 3, 89, 0 ), /* 88 cloc */
+ S_ST( 's', 3, 90, 0 ), /* 89 clock */
+ S_ST( 't', 3, 91, 0 ), /* 90 clocks */
+ S_ST( 'a', 3, 92, 0 ), /* 91 clockst */
+ S_ST( 't', 3, 276, 0 ), /* 92 clocksta */
+ S_ST( 'o', 3, 97, 85 ), /* 93 c */
+ S_ST( 'h', 3, 95, 0 ), /* 94 co */
+ S_ST( 'o', 3, 96, 0 ), /* 95 coh */
+ S_ST( 'r', 3, 277, 0 ), /* 96 coho */
+ S_ST( 'n', 3, 98, 94 ), /* 97 co */
+ S_ST( 't', 3, 99, 0 ), /* 98 con */
+ S_ST( 'r', 3, 100, 0 ), /* 99 cont */
+ S_ST( 'o', 3, 101, 0 ), /* 100 contr */
+ S_ST( 'l', 3, 102, 0 ), /* 101 contro */
+ S_ST( 'k', 3, 103, 0 ), /* 102 control */
+ S_ST( 'e', 3, 278, 0 ), /* 103 controlk */
+ S_ST( 'r', 3, 105, 93 ), /* 104 c */
+ S_ST( 'y', 3, 106, 0 ), /* 105 cr */
+ S_ST( 'p', 3, 107, 0 ), /* 106 cry */
+ S_ST( 't', 3, 279, 0 ), /* 107 cryp */
+ S_ST( 's', 3, 109, 0 ), /* 108 crypto */
+ S_ST( 't', 3, 110, 0 ), /* 109 cryptos */
+ S_ST( 'a', 3, 111, 0 ), /* 110 cryptost */
+ S_ST( 't', 3, 280, 0 ), /* 111 cryptosta */
+ S_ST( 't', 3, 281, 104 ), /* 112 c */
+ S_ST( 'd', 3, 147, 72 ), /* 113 */
+ S_ST( 'a', 3, 282, 0 ), /* 114 d */
+ S_ST( 'e', 3, 116, 114 ), /* 115 d */
+ S_ST( 'f', 3, 117, 0 ), /* 116 de */
+ S_ST( 'a', 3, 118, 0 ), /* 117 def */
+ S_ST( 'u', 3, 119, 0 ), /* 118 defa */
+ S_ST( 'l', 3, 283, 0 ), /* 119 defau */
+ S_ST( 'i', 3, 124, 115 ), /* 120 d */
+ S_ST( 'g', 3, 122, 0 ), /* 121 di */
+ S_ST( 'e', 3, 123, 0 ), /* 122 dig */
+ S_ST( 's', 3, 284, 0 ), /* 123 dige */
+ S_ST( 's', 3, 131, 121 ), /* 124 di */
+ S_ST( 'a', 3, 126, 0 ), /* 125 dis */
+ S_ST( 'b', 3, 127, 0 ), /* 126 disa */
+ S_ST( 'l', 3, 285, 0 ), /* 127 disab */
+ S_ST( 'c', 3, 129, 125 ), /* 128 dis */
+ S_ST( 'a', 3, 130, 0 ), /* 129 disc */
+ S_ST( 'r', 3, 286, 0 ), /* 130 disca */
+ S_ST( 'p', 3, 132, 128 ), /* 131 dis */
+ S_ST( 'e', 3, 133, 0 ), /* 132 disp */
+ S_ST( 'r', 3, 134, 0 ), /* 133 dispe */
+ S_ST( 's', 3, 135, 0 ), /* 134 disper */
+ S_ST( 'i', 3, 136, 0 ), /* 135 dispers */
+ S_ST( 'o', 3, 287, 0 ), /* 136 dispersi */
+ S_ST( 'r', 3, 144, 120 ), /* 137 d */
+ S_ST( 'i', 3, 139, 0 ), /* 138 dr */
+ S_ST( 'f', 3, 140, 0 ), /* 139 dri */
+ S_ST( 't', 3, 141, 0 ), /* 140 drif */
+ S_ST( 'f', 3, 142, 0 ), /* 141 drift */
+ S_ST( 'i', 3, 143, 0 ), /* 142 driftf */
+ S_ST( 'l', 3, 289, 0 ), /* 143 driftfi */
+ S_ST( 'o', 3, 290, 138 ), /* 144 dr */
+ S_ST( 's', 3, 146, 137 ), /* 145 d */
+ S_ST( 'c', 3, 291, 0 ), /* 146 ds */
+ S_ST( 'u', 3, 148, 145 ), /* 147 d */
+ S_ST( 'r', 3, 149, 0 ), /* 148 du */
+ S_ST( 'a', 3, 150, 0 ), /* 149 dur */
+ S_ST( 't', 3, 151, 0 ), /* 150 dura */
+ S_ST( 'i', 3, 152, 0 ), /* 151 durat */
+ S_ST( 'o', 3, 448, 0 ), /* 152 durati */
+ S_ST( 'e', 3, 154, 113 ), /* 153 */
+ S_ST( 'n', 3, 294, 0 ), /* 154 e */
+ S_ST( 'a', 3, 156, 0 ), /* 155 en */
+ S_ST( 'b', 3, 157, 0 ), /* 156 ena */
+ S_ST( 'l', 3, 293, 0 ), /* 157 enab */
+ S_ST( 'f', 3, 179, 153 ), /* 158 */
+ S_ST( 'i', 3, 160, 0 ), /* 159 f */
+ S_ST( 'l', 3, 296, 0 ), /* 160 fi */
+ S_ST( 'g', 3, 162, 0 ), /* 161 file */
+ S_ST( 'e', 3, 297, 0 ), /* 162 fileg */
+ S_ST( 'n', 3, 164, 161 ), /* 163 file */
+ S_ST( 'u', 3, 298, 0 ), /* 164 filen */
+ S_ST( 'l', 3, 169, 159 ), /* 165 f */
+ S_ST( 'a', 3, 168, 0 ), /* 166 fl */
+ S_ST( 'g', 3, 302, 0 ), /* 167 fla */
+ S_ST( 'k', 3, 303, 167 ), /* 168 fla */
+ S_ST( 'o', 3, 170, 166 ), /* 169 fl */
+ S_ST( 'o', 3, 304, 0 ), /* 170 flo */
+ S_ST( 'r', 3, 172, 165 ), /* 171 f */
+ S_ST( 'e', 3, 305, 0 ), /* 172 fr */
+ S_ST( '_', 3, 174, 0 ), /* 173 freq */
+ S_ST( 'o', 3, 175, 0 ), /* 174 freq_ */
+ S_ST( 'f', 3, 176, 0 ), /* 175 freq_o */
+ S_ST( 'f', 3, 177, 0 ), /* 176 freq_of */
+ S_ST( 's', 3, 178, 0 ), /* 177 freq_off */
+ S_ST( 'e', 3, 449, 0 ), /* 178 freq_offs */
+ S_ST( 'u', 3, 180, 171 ), /* 179 f */
+ S_ST( 'd', 3, 181, 0 ), /* 180 fu */
+ S_ST( 'g', 3, 306, 0 ), /* 181 fud */
+ S_ST( 'h', 3, 185, 158 ), /* 182 */
+ S_ST( 'o', 3, 184, 0 ), /* 183 h */
+ S_ST( 's', 3, 307, 0 ), /* 184 ho */
+ S_ST( 'u', 3, 186, 183 ), /* 185 h */
+ S_ST( 'f', 3, 187, 0 ), /* 186 hu */
+ S_ST( 'f', 3, 188, 0 ), /* 187 huf */
+ S_ST( 'p', 3, 189, 0 ), /* 188 huff */
+ S_ST( 'u', 3, 190, 0 ), /* 189 huffp */
+ S_ST( 'f', 3, 308, 0 ), /* 190 huffpu */
+ S_ST( 'i', 3, 232, 182 ), /* 191 */
+ S_ST( 'b', 3, 193, 0 ), /* 192 i */
+ S_ST( 'u', 3, 194, 0 ), /* 193 ib */
+ S_ST( 'r', 3, 195, 0 ), /* 194 ibu */
+ S_ST( 's', 3, 309, 0 ), /* 195 ibur */
+ S_ST( 'd', 3, 197, 192 ), /* 196 i */
+ S_ST( 'e', 3, 198, 0 ), /* 197 id */
+ S_ST( 'n', 3, 310, 0 ), /* 198 ide */
+ S_ST( 'g', 3, 200, 196 ), /* 199 i */
+ S_ST( 'n', 3, 201, 0 ), /* 200 ig */
+ S_ST( 'o', 3, 202, 0 ), /* 201 ign */
+ S_ST( 'r', 3, 311, 0 ), /* 202 igno */
+ S_ST( 'n', 3, 226, 199 ), /* 203 i */
+ S_ST( 'c', 3, 216, 0 ), /* 204 in */
+ S_ST( 'a', 3, 206, 0 ), /* 205 inc */
+ S_ST( 'l', 3, 207, 0 ), /* 206 inca */
+ S_ST( 'l', 3, 208, 0 ), /* 207 incal */
+ S_ST( 'o', 3, 312, 0 ), /* 208 incall */
+ S_ST( 'l', 3, 210, 205 ), /* 209 inc */
+ S_ST( 'u', 3, 211, 0 ), /* 210 incl */
+ S_ST( 'd', 3, 212, 0 ), /* 211 inclu */
+ S_ST( 'e', 3, 213, 0 ), /* 212 includ */
+ S_ST( 'f', 3, 214, 0 ), /* 213 include */
+ S_ST( 'i', 3, 215, 0 ), /* 214 includef */
+ S_ST( 'l', 3, 316, 0 ), /* 215 includefi */
+ S_ST( 'm', 3, 217, 209 ), /* 216 inc */
+ S_ST( 'e', 3, 313, 0 ), /* 217 incm */
+ S_ST( 'i', 3, 219, 204 ), /* 218 in */
+ S_ST( 't', 3, 224, 0 ), /* 219 ini */
+ S_ST( 'a', 3, 221, 0 ), /* 220 init */
+ S_ST( 'l', 3, 222, 0 ), /* 221 inita */
+ S_ST( 'l', 3, 223, 0 ), /* 222 inital */
+ S_ST( 'o', 3, 314, 0 ), /* 223 initall */
+ S_ST( 'm', 3, 225, 220 ), /* 224 init */
+ S_ST( 'e', 3, 315, 0 ), /* 225 initm */
+ S_ST( 't', 3, 227, 218 ), /* 226 in */
+ S_ST( 'e', 3, 228, 0 ), /* 227 int */
+ S_ST( 'r', 3, 229, 0 ), /* 228 inte */
+ S_ST( 'f', 3, 230, 0 ), /* 229 inter */
+ S_ST( 'a', 3, 231, 0 ), /* 230 interf */
+ S_ST( 'c', 3, 318, 0 ), /* 231 interfa */
+ S_ST( 'p', 3, 233, 320 ), /* 232 i */
+ S_ST( 'v', 3, 323, 0 ), /* 233 ip */
+ S_ST( 'j', 3, 235, 191 ), /* 234 */
+ S_ST( 'i', 3, 236, 0 ), /* 235 j */
+ S_ST( 't', 3, 237, 0 ), /* 236 ji */
+ S_ST( 't', 3, 238, 0 ), /* 237 jit */
+ S_ST( 'e', 3, 451, 0 ), /* 238 jitt */
+ S_ST( 'k', 3, 246, 234 ), /* 239 */
+ S_ST( 'e', 3, 326, 0 ), /* 240 k */
+ S_ST( 'r', 3, 242, 0 ), /* 241 ke */
+ S_ST( 'n', 3, 243, 0 ), /* 242 ker */
+ S_ST( 'e', 3, 325, 0 ), /* 243 kern */
+ S_ST( 'd', 3, 245, 0 ), /* 244 keys */
+ S_ST( 'i', 3, 328, 0 ), /* 245 keysd */
+ S_ST( 'o', 3, 329, 240 ), /* 246 k */
+ S_ST( 'l', 3, 462, 239 ), /* 247 */
+ S_ST( 'e', 3, 249, 0 ), /* 248 l */
+ S_ST( 'a', 3, 250, 0 ), /* 249 le */
+ S_ST( 'p', 3, 254, 0 ), /* 250 lea */
+ S_ST( 'f', 3, 252, 0 ), /* 251 leap */
+ S_ST( 'i', 3, 253, 0 ), /* 252 leapf */
+ S_ST( 'l', 3, 331, 0 ), /* 253 leapfi */
+ S_ST( 's', 3, 255, 251 ), /* 254 leap */
+ S_ST( 'm', 3, 256, 0 ), /* 255 leaps */
+ S_ST( 'e', 3, 257, 0 ), /* 256 leapsm */
+ S_ST( 'a', 3, 288, 0 ), /* 257 leapsme */
S_ST( 'v', 1, 0, 0 ), /* 258 T_Abbrev */
S_ST( 'e', 0, 0, 0 ), /* 259 T_Age */
S_ST( 'l', 0, 12, 0 ), /* 260 T_All */
@@ -480,646 +481,655 @@ const scan_state sst[909] = {
S_ST( 'x', 0, 0, 0 ), /* 265 T_Automax */
S_ST( 'e', 0, 0, 0 ), /* 266 T_Average */
S_ST( 't', 0, 0, 0 ), /* 267 T_Bclient */
- S_ST( 'n', 0, 0, 0 ), /* 268 T_Beacon */
- S_ST( 't', 1, 57, 0 ), /* 269 T_Broadcast */
- S_ST( 't', 0, 0, 0 ), /* 270 T_Broadcastclient */
- S_ST( 'y', 0, 0, 0 ), /* 271 T_Broadcastdelay */
- S_ST( 't', 0, 0, 0 ), /* 272 T_Burst */
- S_ST( 'e', 0, 0, 0 ), /* 273 T_Calibrate */
- S_ST( 'g', 0, 0, 0 ), /* 274 T_Ceiling */
- S_ST( 's', 0, 0, 0 ), /* 275 T_Clockstats */
- S_ST( 't', 0, 0, 0 ), /* 276 T_Cohort */
- S_ST( 'y', 0, 0, 0 ), /* 277 T_ControlKey */
- S_ST( 'o', 0, 100, 0 ), /* 278 T_Crypto */
- S_ST( 's', 0, 0, 0 ), /* 279 T_Cryptostats */
- S_ST( 'l', 0, 0, 0 ), /* 280 T_Ctl */
- S_ST( 'y', 0, 0, 0 ), /* 281 T_Day */
- S_ST( 't', 0, 0, 0 ), /* 282 T_Default */
- S_ST( 't', 1, 0, 0 ), /* 283 T_Digest */
- S_ST( 'e', 0, 0, 0 ), /* 284 T_Disable */
- S_ST( 'd', 0, 0, 0 ), /* 285 T_Discard */
- S_ST( 'n', 0, 0, 0 ), /* 286 T_Dispersion */
- S_ST( 'i', 3, 436, 240 ), /* 287 l */
- S_ST( 'e', 1, 0, 0 ), /* 288 T_Driftfile */
- S_ST( 'p', 0, 0, 0 ), /* 289 T_Drop */
- S_ST( 'p', 0, 0, 0 ), /* 290 T_Dscp */
- S_ST( '.', 0, 0, 0 ), /* 291 T_Ellipsis */
- S_ST( 'e', 0, 0, 0 ), /* 292 T_Enable */
- S_ST( 'd', 0, 0, 147 ), /* 293 T_End */
- S_ST( 'm', 3, 316, 0 ), /* 294 li */
- S_ST( 'e', 1, 155, 0 ), /* 295 T_File */
- S_ST( 'n', 0, 0, 0 ), /* 296 T_Filegen */
- S_ST( 'm', 0, 0, 0 ), /* 297 T_Filenum */
- S_ST( '1', 0, 0, 0 ), /* 298 T_Flag1 */
- S_ST( '2', 0, 0, 298 ), /* 299 T_Flag2 */
- S_ST( '3', 0, 0, 299 ), /* 300 T_Flag3 */
- S_ST( '4', 0, 0, 300 ), /* 301 T_Flag4 */
- S_ST( 'e', 0, 0, 0 ), /* 302 T_Flake */
- S_ST( 'r', 0, 0, 0 ), /* 303 T_Floor */
- S_ST( 'q', 0, 165, 0 ), /* 304 T_Freq */
- S_ST( 'e', 1, 0, 0 ), /* 305 T_Fudge */
- S_ST( 't', 1, 0, 0 ), /* 306 T_Host */
- S_ST( 'f', 0, 0, 0 ), /* 307 T_Huffpuff */
- S_ST( 't', 0, 0, 0 ), /* 308 T_Iburst */
- S_ST( 't', 1, 0, 0 ), /* 309 T_Ident */
- S_ST( 'e', 0, 0, 0 ), /* 310 T_Ignore */
- S_ST( 'c', 0, 0, 0 ), /* 311 T_Incalloc */
- S_ST( 'm', 0, 0, 0 ), /* 312 T_Incmem */
- S_ST( 'c', 0, 0, 0 ), /* 313 T_Initalloc */
- S_ST( 'm', 0, 0, 0 ), /* 314 T_Initmem */
- S_ST( 'e', 1, 0, 0 ), /* 315 T_Includefile */
- S_ST( 'i', 3, 318, 0 ), /* 316 lim */
- S_ST( 'e', 0, 0, 0 ), /* 317 T_Interface */
- S_ST( 't', 3, 414, 0 ), /* 318 limi */
- S_ST( 'o', 0, 0, 195 ), /* 319 T_Io */
- S_ST( '4', 0, 0, 0 ), /* 320 T_Ipv4 */
- S_ST( '4', 0, 0, 0 ), /* 321 T_Ipv4_flag */
- S_ST( '6', 0, 0, 320 ), /* 322 T_Ipv6 */
- S_ST( '6', 0, 0, 321 ), /* 323 T_Ipv6_flag */
- S_ST( 'l', 0, 0, 0 ), /* 324 T_Kernel */
- S_ST( 'y', 0, 326, 233 ), /* 325 T_Key */
- S_ST( 's', 1, 236, 0 ), /* 326 T_Keys */
- S_ST( 'r', 1, 0, 0 ), /* 327 T_Keysdir */
- S_ST( 'd', 0, 0, 0 ), /* 328 T_Kod */
- S_ST( 'p', 0, 0, 0 ), /* 329 T_Mssntp */
- S_ST( 'e', 1, 0, 0 ), /* 330 T_Leapfile */
- S_ST( 'l', 0, 0, 0 ), /* 331 T_Leapsmearinterval */
- S_ST( 'd', 0, 0, 0 ), /* 332 T_Limited */
- S_ST( 'k', 0, 0, 0 ), /* 333 T_Link */
- S_ST( 'n', 0, 0, 0 ), /* 334 T_Listen */
- S_ST( 'g', 2, 0, 0 ), /* 335 T_Logconfig */
- S_ST( 'e', 1, 0, 0 ), /* 336 T_Logfile */
- S_ST( 's', 0, 0, 0 ), /* 337 T_Loopstats */
- S_ST( 'p', 0, 0, 0 ), /* 338 T_Lowpriotrap */
- S_ST( 't', 1, 0, 0 ), /* 339 T_Manycastclient */
- S_ST( 'r', 2, 0, 0 ), /* 340 T_Manycastserver */
- S_ST( 'k', 0, 0, 0 ), /* 341 T_Mask */
- S_ST( 'e', 0, 0, 0 ), /* 342 T_Maxage */
- S_ST( 'k', 0, 0, 0 ), /* 343 T_Maxclock */
- S_ST( 'h', 0, 0, 0 ), /* 344 T_Maxdepth */
- S_ST( 't', 0, 0, 0 ), /* 345 T_Maxdist */
- S_ST( 'm', 0, 0, 0 ), /* 346 T_Maxmem */
- S_ST( 'l', 0, 0, 0 ), /* 347 T_Maxpoll */
- S_ST( 's', 0, 0, 0 ), /* 348 T_Mdnstries */
- S_ST( 'm', 0, 522, 0 ), /* 349 T_Mem */
- S_ST( 'k', 0, 0, 0 ), /* 350 T_Memlock */
- S_ST( 'k', 0, 0, 0 ), /* 351 T_Minclock */
- S_ST( 'h', 0, 0, 0 ), /* 352 T_Mindepth */
- S_ST( 't', 0, 0, 0 ), /* 353 T_Mindist */
- S_ST( 'm', 0, 0, 0 ), /* 354 T_Minimum */
- S_ST( 'l', 0, 0, 0 ), /* 355 T_Minpoll */
- S_ST( 'e', 0, 0, 0 ), /* 356 T_Minsane */
- S_ST( 'e', 0, 358, 0 ), /* 357 T_Mode */
- S_ST( '7', 0, 0, 0 ), /* 358 T_Mode7 */
- S_ST( 'r', 0, 0, 0 ), /* 359 T_Monitor */
- S_ST( 'h', 0, 0, 0 ), /* 360 T_Month */
- S_ST( 'u', 0, 0, 0 ), /* 361 T_Mru */
- S_ST( 't', 2, 0, 0 ), /* 362 T_Multicastclient */
- S_ST( 'c', 0, 0, 0 ), /* 363 T_Nic */
- S_ST( 'k', 0, 0, 0 ), /* 364 T_Nolink */
- S_ST( 'y', 0, 0, 0 ), /* 365 T_Nomodify */
- S_ST( 't', 0, 0, 0 ), /* 366 T_Nomrulist */
- S_ST( 'e', 0, 0, 0 ), /* 367 T_None */
- S_ST( 'e', 0, 0, 0 ), /* 368 T_Nonvolatile */
- S_ST( 'r', 0, 0, 0 ), /* 369 T_Nopeer */
- S_ST( 'y', 0, 0, 0 ), /* 370 T_Noquery */
- S_ST( 't', 0, 0, 0 ), /* 371 T_Noselect */
- S_ST( 'e', 0, 0, 0 ), /* 372 T_Noserve */
- S_ST( 'p', 0, 0, 0 ), /* 373 T_Notrap */
- S_ST( 't', 0, 0, 0 ), /* 374 T_Notrust */
- S_ST( 'p', 0, 618, 0 ), /* 375 T_Ntp */
- S_ST( 't', 0, 0, 0 ), /* 376 T_Ntpport */
- S_ST( 't', 1, 0, 0 ), /* 377 T_NtpSignDsocket */
- S_ST( 'n', 0, 633, 0 ), /* 378 T_Orphan */
- S_ST( 't', 0, 0, 0 ), /* 379 T_Orphanwait */
- S_ST( 'y', 0, 0, 0 ), /* 380 T_PCEdigest */
- S_ST( 'c', 0, 0, 0 ), /* 381 T_Panic */
- S_ST( 'r', 1, 660, 0 ), /* 382 T_Peer */
- S_ST( 's', 0, 0, 0 ), /* 383 T_Peerstats */
- S_ST( 'e', 2, 0, 0 ), /* 384 T_Phone */
- S_ST( 'd', 0, 668, 0 ), /* 385 T_Pid */
- S_ST( 'e', 1, 0, 0 ), /* 386 T_Pidfile */
- S_ST( 'l', 1, 0, 0 ), /* 387 T_Pool */
- S_ST( 't', 0, 0, 0 ), /* 388 T_Port */
- S_ST( 't', 0, 0, 0 ), /* 389 T_Preempt */
- S_ST( 'r', 0, 0, 0 ), /* 390 T_Prefer */
- S_ST( 's', 0, 0, 0 ), /* 391 T_Protostats */
- S_ST( 'w', 1, 0, 674 ), /* 392 T_Pw */
- S_ST( 'e', 1, 0, 0 ), /* 393 T_Randfile */
- S_ST( 's', 0, 0, 0 ), /* 394 T_Rawstats */
- S_ST( 'd', 1, 0, 0 ), /* 395 T_Refid */
- S_ST( 'y', 0, 0, 0 ), /* 396 T_Requestkey */
- S_ST( 't', 0, 0, 0 ), /* 397 T_Reset */
- S_ST( 't', 0, 0, 0 ), /* 398 T_Restrict */
- S_ST( 'e', 0, 0, 0 ), /* 399 T_Revoke */
- S_ST( 't', 0, 0, 0 ), /* 400 T_Rlimit */
- S_ST( 'r', 1, 0, 0 ), /* 401 T_Saveconfigdir */
- S_ST( 'r', 1, 751, 0 ), /* 402 T_Server */
- S_ST( 'r', 1, 0, 0 ), /* 403 T_Setvar */
- S_ST( 'e', 0, 0, 0 ), /* 404 T_Source */
- S_ST( 'e', 0, 0, 0 ), /* 405 T_Stacksize */
- S_ST( 's', 0, 0, 0 ), /* 406 T_Statistics */
- S_ST( 's', 0, 794, 789 ), /* 407 T_Stats */
- S_ST( 'r', 1, 0, 0 ), /* 408 T_Statsdir */
- S_ST( 'p', 0, 802, 0 ), /* 409 T_Step */
- S_ST( 'k', 0, 0, 0 ), /* 410 T_Stepback */
- S_ST( 'd', 0, 0, 0 ), /* 411 T_Stepfwd */
- S_ST( 't', 0, 0, 0 ), /* 412 T_Stepout */
- S_ST( 'm', 0, 0, 0 ), /* 413 T_Stratum */
- S_ST( 'e', 3, 332, 0 ), /* 414 limit */
- S_ST( 's', 0, 809, 0 ), /* 415 T_Sys */
- S_ST( 's', 0, 0, 0 ), /* 416 T_Sysstats */
- S_ST( 'k', 0, 0, 0 ), /* 417 T_Tick */
- S_ST( '1', 0, 0, 0 ), /* 418 T_Time1 */
- S_ST( '2', 0, 0, 418 ), /* 419 T_Time2 */
- S_ST( 'r', 0, 0, 419 ), /* 420 T_Timer */
- S_ST( 's', 0, 0, 0 ), /* 421 T_Timingstats */
- S_ST( 'r', 0, 0, 0 ), /* 422 T_Tinker */
- S_ST( 's', 0, 0, 0 ), /* 423 T_Tos */
- S_ST( 'p', 1, 0, 0 ), /* 424 T_Trap */
- S_ST( 'e', 0, 0, 0 ), /* 425 T_True */
- S_ST( 'y', 0, 0, 0 ), /* 426 T_Trustedkey */
- S_ST( 'l', 0, 0, 0 ), /* 427 T_Ttl */
- S_ST( 'e', 0, 0, 0 ), /* 428 T_Type */
- S_ST( 'n', 3, 333, 294 ), /* 429 li */
- S_ST( 'y', 0, 0, 0 ), /* 430 T_UEcrypto */
- S_ST( 'y', 0, 0, 0 ), /* 431 T_UEcryptonak */
- S_ST( 'y', 0, 0, 0 ), /* 432 T_UEdigest */
- S_ST( 'g', 1, 0, 0 ), /* 433 T_Unconfig */
- S_ST( 'r', 1, 851, 0 ), /* 434 T_Unpeer */
- S_ST( 'n', 0, 0, 0 ), /* 435 T_Version */
- S_ST( 's', 3, 441, 429 ), /* 436 li */
- S_ST( 'k', 0, 0, 0 ), /* 437 T_Week */
- S_ST( 'd', 0, 0, 0 ), /* 438 T_Wildcard */
- S_ST( 'e', 0, 0, 0 ), /* 439 T_Xleave */
- S_ST( 'r', 0, 0, 0 ), /* 440 T_Year */
- S_ST( 't', 3, 442, 0 ), /* 441 lis */
- S_ST( 'e', 3, 334, 0 ), /* 442 list */
- S_ST( 'e', 0, 0, 0 ), /* 443 T_Simulate */
- S_ST( 'y', 0, 0, 0 ), /* 444 T_Beep_Delay */
- S_ST( 'n', 0, 0, 0 ), /* 445 T_Sim_Duration */
- S_ST( 't', 0, 0, 0 ), /* 446 T_Server_Offset */
- S_ST( 'n', 0, 0, 0 ), /* 447 T_Duration */
- S_ST( 't', 0, 0, 0 ), /* 448 T_Freq_Offset */
- S_ST( 'r', 0, 0, 0 ), /* 449 T_Wander */
- S_ST( 'r', 0, 0, 0 ), /* 450 T_Jitter */
- S_ST( 'y', 0, 0, 0 ), /* 451 T_Prop_Delay */
- S_ST( 'y', 0, 0, 0 ), /* 452 T_Proc_Delay */
- S_ST( 'o', 3, 469, 287 ), /* 453 l */
- S_ST( 'g', 3, 460, 0 ), /* 454 lo */
- S_ST( 'c', 3, 456, 0 ), /* 455 log */
- S_ST( 'o', 3, 457, 0 ), /* 456 logc */
- S_ST( 'n', 3, 458, 0 ), /* 457 logco */
- S_ST( 'f', 3, 459, 0 ), /* 458 logcon */
- S_ST( 'i', 3, 335, 0 ), /* 459 logconf */
- S_ST( 'f', 3, 461, 455 ), /* 460 log */
- S_ST( 'i', 3, 462, 0 ), /* 461 logf */
- S_ST( 'l', 3, 336, 0 ), /* 462 logfi */
- S_ST( 'o', 3, 464, 454 ), /* 463 lo */
- S_ST( 'p', 3, 465, 0 ), /* 464 loo */
- S_ST( 's', 3, 466, 0 ), /* 465 loop */
- S_ST( 't', 3, 467, 0 ), /* 466 loops */
- S_ST( 'a', 3, 468, 0 ), /* 467 loopst */
- S_ST( 't', 3, 337, 0 ), /* 468 loopsta */
- S_ST( 'w', 3, 470, 463 ), /* 469 lo */
- S_ST( 'p', 3, 471, 0 ), /* 470 low */
- S_ST( 'r', 3, 472, 0 ), /* 471 lowp */
- S_ST( 'i', 3, 473, 0 ), /* 472 lowpr */
- S_ST( 'o', 3, 474, 0 ), /* 473 lowpri */
- S_ST( 't', 3, 475, 0 ), /* 474 lowprio */
- S_ST( 'r', 3, 476, 0 ), /* 475 lowpriot */
- S_ST( 'a', 3, 338, 0 ), /* 476 lowpriotr */
- S_ST( 'm', 3, 558, 239 ), /* 477 */
- S_ST( 'a', 3, 496, 0 ), /* 478 m */
- S_ST( 'n', 3, 480, 0 ), /* 479 ma */
- S_ST( 'y', 3, 481, 0 ), /* 480 man */
- S_ST( 'c', 3, 482, 0 ), /* 481 many */
- S_ST( 'a', 3, 483, 0 ), /* 482 manyc */
- S_ST( 's', 3, 484, 0 ), /* 483 manyca */
- S_ST( 't', 3, 490, 0 ), /* 484 manycas */
- S_ST( 'c', 3, 486, 0 ), /* 485 manycast */
- S_ST( 'l', 3, 487, 0 ), /* 486 manycastc */
- S_ST( 'i', 3, 488, 0 ), /* 487 manycastcl */
- S_ST( 'e', 3, 489, 0 ), /* 488 manycastcli */
- S_ST( 'n', 3, 339, 0 ), /* 489 manycastclie */
- S_ST( 's', 3, 491, 485 ), /* 490 manycast */
- S_ST( 'e', 3, 492, 0 ), /* 491 manycasts */
- S_ST( 'r', 3, 493, 0 ), /* 492 manycastse */
- S_ST( 'v', 3, 494, 0 ), /* 493 manycastser */
- S_ST( 'e', 3, 340, 0 ), /* 494 manycastserv */
- S_ST( 's', 3, 341, 479 ), /* 495 ma */
- S_ST( 'x', 3, 511, 495 ), /* 496 ma */
- S_ST( 'a', 3, 498, 0 ), /* 497 max */
- S_ST( 'g', 3, 342, 0 ), /* 498 maxa */
- S_ST( 'c', 3, 500, 497 ), /* 499 max */
- S_ST( 'l', 3, 501, 0 ), /* 500 maxc */
- S_ST( 'o', 3, 502, 0 ), /* 501 maxcl */
- S_ST( 'c', 3, 343, 0 ), /* 502 maxclo */
- S_ST( 'd', 3, 507, 499 ), /* 503 max */
- S_ST( 'e', 3, 505, 0 ), /* 504 maxd */
- S_ST( 'p', 3, 506, 0 ), /* 505 maxde */
- S_ST( 't', 3, 344, 0 ), /* 506 maxdep */
- S_ST( 'i', 3, 508, 504 ), /* 507 maxd */
- S_ST( 's', 3, 345, 0 ), /* 508 maxdi */
- S_ST( 'm', 3, 510, 503 ), /* 509 max */
- S_ST( 'e', 3, 346, 0 ), /* 510 maxm */
- S_ST( 'p', 3, 512, 509 ), /* 511 max */
- S_ST( 'o', 3, 513, 0 ), /* 512 maxp */
- S_ST( 'l', 3, 347, 0 ), /* 513 maxpo */
- S_ST( 'd', 3, 515, 478 ), /* 514 m */
- S_ST( 'n', 3, 516, 0 ), /* 515 md */
- S_ST( 's', 3, 517, 0 ), /* 516 mdn */
- S_ST( 't', 3, 518, 0 ), /* 517 mdns */
- S_ST( 'r', 3, 519, 0 ), /* 518 mdnst */
- S_ST( 'i', 3, 520, 0 ), /* 519 mdnstr */
- S_ST( 'e', 3, 348, 0 ), /* 520 mdnstri */
- S_ST( 'e', 3, 349, 514 ), /* 521 m */
- S_ST( 'l', 3, 523, 0 ), /* 522 mem */
- S_ST( 'o', 3, 524, 0 ), /* 523 meml */
- S_ST( 'c', 3, 350, 0 ), /* 524 memlo */
- S_ST( 'i', 3, 526, 521 ), /* 525 m */
- S_ST( 'n', 3, 543, 0 ), /* 526 mi */
- S_ST( 'c', 3, 528, 0 ), /* 527 min */
- S_ST( 'l', 3, 529, 0 ), /* 528 minc */
- S_ST( 'o', 3, 530, 0 ), /* 529 mincl */
- S_ST( 'c', 3, 351, 0 ), /* 530 minclo */
- S_ST( 'd', 3, 535, 527 ), /* 531 min */
- S_ST( 'e', 3, 533, 0 ), /* 532 mind */
- S_ST( 'p', 3, 534, 0 ), /* 533 minde */
- S_ST( 't', 3, 352, 0 ), /* 534 mindep */
- S_ST( 'i', 3, 536, 532 ), /* 535 mind */
- S_ST( 's', 3, 353, 0 ), /* 536 mindi */
- S_ST( 'i', 3, 538, 531 ), /* 537 min */
- S_ST( 'm', 3, 539, 0 ), /* 538 mini */
- S_ST( 'u', 3, 354, 0 ), /* 539 minim */
- S_ST( 'p', 3, 541, 537 ), /* 540 min */
- S_ST( 'o', 3, 542, 0 ), /* 541 minp */
- S_ST( 'l', 3, 355, 0 ), /* 542 minpo */
- S_ST( 's', 3, 544, 540 ), /* 543 min */
- S_ST( 'a', 3, 545, 0 ), /* 544 mins */
- S_ST( 'n', 3, 356, 0 ), /* 545 minsa */
- S_ST( 'o', 3, 548, 525 ), /* 546 m */
- S_ST( 'd', 3, 357, 0 ), /* 547 mo */
- S_ST( 'n', 3, 552, 547 ), /* 548 mo */
- S_ST( 'i', 3, 550, 0 ), /* 549 mon */
- S_ST( 't', 3, 551, 0 ), /* 550 moni */
- S_ST( 'o', 3, 359, 0 ), /* 551 monit */
- S_ST( 't', 3, 360, 549 ), /* 552 mon */
- S_ST( 'r', 3, 361, 546 ), /* 553 m */
- S_ST( 's', 3, 555, 553 ), /* 554 m */
- S_ST( 's', 3, 556, 0 ), /* 555 ms */
- S_ST( 'n', 3, 557, 0 ), /* 556 mss */
- S_ST( 't', 3, 329, 0 ), /* 557 mssn */
- S_ST( 'u', 3, 559, 554 ), /* 558 m */
- S_ST( 'l', 3, 560, 0 ), /* 559 mu */
- S_ST( 't', 3, 561, 0 ), /* 560 mul */
- S_ST( 'i', 3, 562, 0 ), /* 561 mult */
- S_ST( 'c', 3, 563, 0 ), /* 562 multi */
- S_ST( 'a', 3, 564, 0 ), /* 563 multic */
- S_ST( 's', 3, 565, 0 ), /* 564 multica */
- S_ST( 't', 3, 566, 0 ), /* 565 multicas */
- S_ST( 'c', 3, 567, 0 ), /* 566 multicast */
- S_ST( 'l', 3, 568, 0 ), /* 567 multicastc */
- S_ST( 'i', 3, 569, 0 ), /* 568 multicastcl */
- S_ST( 'e', 3, 570, 0 ), /* 569 multicastcli */
- S_ST( 'n', 3, 362, 0 ), /* 570 multicastclie */
- S_ST( 'n', 3, 614, 477 ), /* 571 */
- S_ST( 'i', 3, 363, 0 ), /* 572 n */
- S_ST( 'o', 3, 609, 572 ), /* 573 n */
- S_ST( 'l', 3, 575, 0 ), /* 574 no */
- S_ST( 'i', 3, 576, 0 ), /* 575 nol */
- S_ST( 'n', 3, 364, 0 ), /* 576 noli */
- S_ST( 'm', 3, 582, 574 ), /* 577 no */
- S_ST( 'o', 3, 579, 0 ), /* 578 nom */
- S_ST( 'd', 3, 580, 0 ), /* 579 nomo */
- S_ST( 'i', 3, 581, 0 ), /* 580 nomod */
- S_ST( 'f', 3, 365, 0 ), /* 581 nomodi */
- S_ST( 'r', 3, 583, 578 ), /* 582 nom */
- S_ST( 'u', 3, 584, 0 ), /* 583 nomr */
- S_ST( 'l', 3, 585, 0 ), /* 584 nomru */
- S_ST( 'i', 3, 586, 0 ), /* 585 nomrul */
- S_ST( 's', 3, 366, 0 ), /* 586 nomruli */
- S_ST( 'n', 3, 588, 577 ), /* 587 no */
- S_ST( 'v', 3, 589, 367 ), /* 588 non */
- S_ST( 'o', 3, 590, 0 ), /* 589 nonv */
- S_ST( 'l', 3, 591, 0 ), /* 590 nonvo */
- S_ST( 'a', 3, 592, 0 ), /* 591 nonvol */
- S_ST( 't', 3, 593, 0 ), /* 592 nonvola */
- S_ST( 'i', 3, 594, 0 ), /* 593 nonvolat */
- S_ST( 'l', 3, 368, 0 ), /* 594 nonvolati */
- S_ST( 'p', 3, 596, 587 ), /* 595 no */
- S_ST( 'e', 3, 597, 0 ), /* 596 nop */
- S_ST( 'e', 3, 369, 0 ), /* 597 nope */
- S_ST( 'q', 3, 599, 595 ), /* 598 no */
- S_ST( 'u', 3, 600, 0 ), /* 599 noq */
- S_ST( 'e', 3, 601, 0 ), /* 600 noqu */
- S_ST( 'r', 3, 370, 0 ), /* 601 noque */
- S_ST( 's', 3, 603, 598 ), /* 602 no */
- S_ST( 'e', 3, 607, 0 ), /* 603 nos */
- S_ST( 'l', 3, 605, 0 ), /* 604 nose */
- S_ST( 'e', 3, 606, 0 ), /* 605 nosel */
- S_ST( 'c', 3, 371, 0 ), /* 606 nosele */
- S_ST( 'r', 3, 608, 604 ), /* 607 nose */
- S_ST( 'v', 3, 372, 0 ), /* 608 noser */
- S_ST( 't', 3, 610, 602 ), /* 609 no */
- S_ST( 'r', 3, 612, 0 ), /* 610 not */
- S_ST( 'a', 3, 373, 0 ), /* 611 notr */
- S_ST( 'u', 3, 613, 611 ), /* 612 notr */
- S_ST( 's', 3, 374, 0 ), /* 613 notru */
- S_ST( 't', 3, 375, 573 ), /* 614 n */
- S_ST( 'p', 3, 616, 0 ), /* 615 ntp */
- S_ST( 'o', 3, 617, 0 ), /* 616 ntpp */
- S_ST( 'r', 3, 376, 0 ), /* 617 ntppo */
- S_ST( 's', 3, 619, 615 ), /* 618 ntp */
- S_ST( 'i', 3, 620, 0 ), /* 619 ntps */
- S_ST( 'g', 3, 621, 0 ), /* 620 ntpsi */
- S_ST( 'n', 3, 622, 0 ), /* 621 ntpsig */
- S_ST( 'd', 3, 623, 0 ), /* 622 ntpsign */
- S_ST( 's', 3, 624, 0 ), /* 623 ntpsignd */
- S_ST( 'o', 3, 625, 0 ), /* 624 ntpsignds */
- S_ST( 'c', 3, 626, 0 ), /* 625 ntpsigndso */
- S_ST( 'k', 3, 627, 0 ), /* 626 ntpsigndsoc */
- S_ST( 'e', 3, 377, 0 ), /* 627 ntpsigndsock */
- S_ST( 'o', 3, 629, 571 ), /* 628 */
- S_ST( 'r', 3, 630, 0 ), /* 629 o */
- S_ST( 'p', 3, 631, 0 ), /* 630 or */
- S_ST( 'h', 3, 632, 0 ), /* 631 orp */
- S_ST( 'a', 3, 378, 0 ), /* 632 orph */
- S_ST( 'w', 3, 634, 0 ), /* 633 orphan */
- S_ST( 'a', 3, 635, 0 ), /* 634 orphanw */
- S_ST( 'i', 3, 379, 0 ), /* 635 orphanwa */
- S_ST( 'p', 3, 392, 628 ), /* 636 */
- S_ST( 'a', 3, 638, 0 ), /* 637 p */
- S_ST( 'n', 3, 639, 0 ), /* 638 pa */
- S_ST( 'i', 3, 381, 0 ), /* 639 pan */
- S_ST( 'e', 3, 641, 637 ), /* 640 p */
- S_ST( 'e', 3, 382, 0 ), /* 641 pe */
- S_ST( '_', 3, 643, 0 ), /* 642 peer */
- S_ST( 'c', 3, 644, 0 ), /* 643 peer_ */
- S_ST( 'l', 3, 645, 0 ), /* 644 peer_c */
- S_ST( 'e', 3, 646, 0 ), /* 645 peer_cl */
- S_ST( 'a', 3, 647, 0 ), /* 646 peer_cle */
- S_ST( 'r', 3, 648, 0 ), /* 647 peer_clea */
- S_ST( '_', 3, 649, 0 ), /* 648 peer_clear */
- S_ST( 'd', 3, 650, 0 ), /* 649 peer_clear_ */
- S_ST( 'i', 3, 651, 0 ), /* 650 peer_clear_d */
- S_ST( 'g', 3, 652, 0 ), /* 651 peer_clear_di */
- S_ST( 'e', 3, 653, 0 ), /* 652 peer_clear_dig */
- S_ST( 's', 3, 654, 0 ), /* 653 peer_clear_dige */
- S_ST( 't', 3, 655, 0 ), /* 654 peer_clear_diges */
- S_ST( '_', 3, 656, 0 ), /* 655 peer_clear_digest */
- S_ST( 'e', 3, 657, 0 ), /* 656 peer_clear_digest_ */
- S_ST( 'a', 3, 658, 0 ), /* 657 peer_clear_digest_e */
- S_ST( 'r', 3, 659, 0 ), /* 658 peer_clear_digest_ea */
- S_ST( 'l', 3, 380, 0 ), /* 659 peer_clear_digest_ear */
- S_ST( 's', 3, 661, 642 ), /* 660 peer */
- S_ST( 't', 3, 662, 0 ), /* 661 peers */
- S_ST( 'a', 3, 663, 0 ), /* 662 peerst */
- S_ST( 't', 3, 383, 0 ), /* 663 peersta */
- S_ST( 'h', 3, 665, 640 ), /* 664 p */
- S_ST( 'o', 3, 666, 0 ), /* 665 ph */
- S_ST( 'n', 3, 384, 0 ), /* 666 pho */
- S_ST( 'i', 3, 385, 664 ), /* 667 p */
- S_ST( 'f', 3, 669, 0 ), /* 668 pid */
- S_ST( 'i', 3, 670, 0 ), /* 669 pidf */
- S_ST( 'l', 3, 386, 0 ), /* 670 pidfi */
- S_ST( 'o', 3, 673, 667 ), /* 671 p */
- S_ST( 'o', 3, 387, 0 ), /* 672 po */
- S_ST( 'r', 3, 388, 672 ), /* 673 po */
- S_ST( 'r', 3, 681, 671 ), /* 674 p */
- S_ST( 'e', 3, 679, 0 ), /* 675 pr */
- S_ST( 'e', 3, 677, 0 ), /* 676 pre */
- S_ST( 'm', 3, 678, 0 ), /* 677 pree */
- S_ST( 'p', 3, 389, 0 ), /* 678 preem */
- S_ST( 'f', 3, 680, 676 ), /* 679 pre */
- S_ST( 'e', 3, 390, 0 ), /* 680 pref */
- S_ST( 'o', 3, 694, 675 ), /* 681 pr */
- S_ST( 'c', 3, 683, 0 ), /* 682 pro */
- S_ST( '_', 3, 684, 0 ), /* 683 proc */
- S_ST( 'd', 3, 685, 0 ), /* 684 proc_ */
- S_ST( 'e', 3, 686, 0 ), /* 685 proc_d */
- S_ST( 'l', 3, 687, 0 ), /* 686 proc_de */
- S_ST( 'a', 3, 452, 0 ), /* 687 proc_del */
- S_ST( 'p', 3, 689, 682 ), /* 688 pro */
- S_ST( '_', 3, 690, 0 ), /* 689 prop */
- S_ST( 'd', 3, 691, 0 ), /* 690 prop_ */
- S_ST( 'e', 3, 692, 0 ), /* 691 prop_d */
- S_ST( 'l', 3, 693, 0 ), /* 692 prop_de */
- S_ST( 'a', 3, 451, 0 ), /* 693 prop_del */
- S_ST( 't', 3, 695, 688 ), /* 694 pro */
- S_ST( 'o', 3, 696, 0 ), /* 695 prot */
- S_ST( 's', 3, 697, 0 ), /* 696 proto */
- S_ST( 't', 3, 698, 0 ), /* 697 protos */
- S_ST( 'a', 3, 699, 0 ), /* 698 protost */
- S_ST( 't', 3, 391, 0 ), /* 699 protosta */
- S_ST( 'r', 3, 731, 636 ), /* 700 */
- S_ST( 'a', 3, 707, 0 ), /* 701 r */
- S_ST( 'n', 3, 703, 0 ), /* 702 ra */
- S_ST( 'd', 3, 704, 0 ), /* 703 ran */
- S_ST( 'f', 3, 705, 0 ), /* 704 rand */
- S_ST( 'i', 3, 706, 0 ), /* 705 randf */
- S_ST( 'l', 3, 393, 0 ), /* 706 randfi */
- S_ST( 'w', 3, 708, 702 ), /* 707 ra */
- S_ST( 's', 3, 709, 0 ), /* 708 raw */
- S_ST( 't', 3, 710, 0 ), /* 709 raws */
- S_ST( 'a', 3, 711, 0 ), /* 710 rawst */
- S_ST( 't', 3, 394, 0 ), /* 711 rawsta */
- S_ST( 'e', 3, 728, 701 ), /* 712 r */
- S_ST( 'f', 3, 714, 0 ), /* 713 re */
- S_ST( 'i', 3, 395, 0 ), /* 714 ref */
- S_ST( 'q', 3, 716, 713 ), /* 715 re */
- S_ST( 'u', 3, 717, 0 ), /* 716 req */
- S_ST( 'e', 3, 718, 0 ), /* 717 requ */
- S_ST( 's', 3, 719, 0 ), /* 718 reque */
- S_ST( 't', 3, 720, 0 ), /* 719 reques */
- S_ST( 'k', 3, 721, 0 ), /* 720 request */
- S_ST( 'e', 3, 396, 0 ), /* 721 requestk */
- S_ST( 's', 3, 724, 715 ), /* 722 re */
- S_ST( 'e', 3, 397, 0 ), /* 723 res */
- S_ST( 't', 3, 725, 723 ), /* 724 res */
- S_ST( 'r', 3, 726, 0 ), /* 725 rest */
- S_ST( 'i', 3, 727, 0 ), /* 726 restr */
- S_ST( 'c', 3, 398, 0 ), /* 727 restri */
- S_ST( 'v', 3, 729, 722 ), /* 728 re */
- S_ST( 'o', 3, 730, 0 ), /* 729 rev */
- S_ST( 'k', 3, 399, 0 ), /* 730 revo */
- S_ST( 'l', 3, 732, 712 ), /* 731 r */
- S_ST( 'i', 3, 733, 0 ), /* 732 rl */
- S_ST( 'm', 3, 734, 0 ), /* 733 rli */
- S_ST( 'i', 3, 400, 0 ), /* 734 rlim */
- S_ST( 's', 3, 808, 700 ), /* 735 */
- S_ST( 'a', 3, 737, 0 ), /* 736 s */
- S_ST( 'v', 3, 738, 0 ), /* 737 sa */
- S_ST( 'e', 3, 739, 0 ), /* 738 sav */
- S_ST( 'c', 3, 740, 0 ), /* 739 save */
- S_ST( 'o', 3, 741, 0 ), /* 740 savec */
- S_ST( 'n', 3, 742, 0 ), /* 741 saveco */
- S_ST( 'f', 3, 743, 0 ), /* 742 savecon */
- S_ST( 'i', 3, 744, 0 ), /* 743 saveconf */
- S_ST( 'g', 3, 745, 0 ), /* 744 saveconfi */
- S_ST( 'd', 3, 746, 0 ), /* 745 saveconfig */
- S_ST( 'i', 3, 401, 0 ), /* 746 saveconfigd */
- S_ST( 'e', 3, 757, 736 ), /* 747 s */
- S_ST( 'r', 3, 749, 0 ), /* 748 se */
- S_ST( 'v', 3, 750, 0 ), /* 749 ser */
- S_ST( 'e', 3, 402, 0 ), /* 750 serv */
- S_ST( '_', 3, 752, 0 ), /* 751 server */
- S_ST( 'o', 3, 753, 0 ), /* 752 server_ */
- S_ST( 'f', 3, 754, 0 ), /* 753 server_o */
- S_ST( 'f', 3, 755, 0 ), /* 754 server_of */
- S_ST( 's', 3, 756, 0 ), /* 755 server_off */
- S_ST( 'e', 3, 446, 0 ), /* 756 server_offs */
- S_ST( 't', 3, 758, 748 ), /* 757 se */
- S_ST( 'v', 3, 759, 0 ), /* 758 set */
- S_ST( 'a', 3, 403, 0 ), /* 759 setv */
- S_ST( 'i', 3, 761, 747 ), /* 760 s */
- S_ST( 'm', 3, 762, 0 ), /* 761 si */
- S_ST( 'u', 3, 763, 0 ), /* 762 sim */
- S_ST( 'l', 3, 764, 0 ), /* 763 simu */
- S_ST( 'a', 3, 765, 0 ), /* 764 simul */
- S_ST( 't', 3, 766, 0 ), /* 765 simula */
- S_ST( 'i', 3, 767, 443 ), /* 766 simulat */
- S_ST( 'o', 3, 768, 0 ), /* 767 simulati */
- S_ST( 'n', 3, 769, 0 ), /* 768 simulatio */
- S_ST( '_', 3, 770, 0 ), /* 769 simulation */
- S_ST( 'd', 3, 771, 0 ), /* 770 simulation_ */
- S_ST( 'u', 3, 772, 0 ), /* 771 simulation_d */
- S_ST( 'r', 3, 773, 0 ), /* 772 simulation_du */
- S_ST( 'a', 3, 774, 0 ), /* 773 simulation_dur */
- S_ST( 't', 3, 775, 0 ), /* 774 simulation_dura */
- S_ST( 'i', 3, 776, 0 ), /* 775 simulation_durat */
- S_ST( 'o', 3, 445, 0 ), /* 776 simulation_durati */
- S_ST( 'o', 3, 778, 760 ), /* 777 s */
- S_ST( 'u', 3, 779, 0 ), /* 778 so */
- S_ST( 'r', 3, 780, 0 ), /* 779 sou */
- S_ST( 'c', 3, 404, 0 ), /* 780 sour */
- S_ST( 't', 3, 804, 777 ), /* 781 s */
- S_ST( 'a', 3, 788, 0 ), /* 782 st */
- S_ST( 'c', 3, 784, 0 ), /* 783 sta */
- S_ST( 'k', 3, 785, 0 ), /* 784 stac */
- S_ST( 's', 3, 786, 0 ), /* 785 stack */
- S_ST( 'i', 3, 787, 0 ), /* 786 stacks */
- S_ST( 'z', 3, 405, 0 ), /* 787 stacksi */
- S_ST( 't', 3, 407, 783 ), /* 788 sta */
- S_ST( 'i', 3, 790, 0 ), /* 789 stat */
- S_ST( 's', 3, 791, 0 ), /* 790 stati */
- S_ST( 't', 3, 792, 0 ), /* 791 statis */
- S_ST( 'i', 3, 793, 0 ), /* 792 statist */
- S_ST( 'c', 3, 406, 0 ), /* 793 statisti */
- S_ST( 'd', 3, 795, 0 ), /* 794 stats */
- S_ST( 'i', 3, 408, 0 ), /* 795 statsd */
- S_ST( 'e', 3, 409, 782 ), /* 796 st */
- S_ST( 'b', 3, 798, 0 ), /* 797 step */
- S_ST( 'a', 3, 799, 0 ), /* 798 stepb */
- S_ST( 'c', 3, 410, 0 ), /* 799 stepba */
- S_ST( 'f', 3, 801, 797 ), /* 800 step */
- S_ST( 'w', 3, 411, 0 ), /* 801 stepf */
- S_ST( 'o', 3, 803, 800 ), /* 802 step */
- S_ST( 'u', 3, 412, 0 ), /* 803 stepo */
- S_ST( 'r', 3, 805, 796 ), /* 804 st */
- S_ST( 'a', 3, 806, 0 ), /* 805 str */
- S_ST( 't', 3, 807, 0 ), /* 806 stra */
- S_ST( 'u', 3, 413, 0 ), /* 807 strat */
- S_ST( 'y', 3, 415, 781 ), /* 808 s */
- S_ST( 's', 3, 810, 0 ), /* 809 sys */
- S_ST( 't', 3, 811, 0 ), /* 810 syss */
- S_ST( 'a', 3, 812, 0 ), /* 811 sysst */
- S_ST( 't', 3, 416, 0 ), /* 812 syssta */
- S_ST( 't', 3, 839, 735 ), /* 813 */
- S_ST( 'i', 3, 825, 0 ), /* 814 t */
- S_ST( 'c', 3, 417, 0 ), /* 815 ti */
- S_ST( 'm', 3, 818, 815 ), /* 816 ti */
- S_ST( 'e', 3, 420, 0 ), /* 817 tim */
- S_ST( 'i', 3, 819, 817 ), /* 818 tim */
- S_ST( 'n', 3, 820, 0 ), /* 819 timi */
- S_ST( 'g', 3, 821, 0 ), /* 820 timin */
- S_ST( 's', 3, 822, 0 ), /* 821 timing */
- S_ST( 't', 3, 823, 0 ), /* 822 timings */
- S_ST( 'a', 3, 824, 0 ), /* 823 timingst */
- S_ST( 't', 3, 421, 0 ), /* 824 timingsta */
- S_ST( 'n', 3, 826, 816 ), /* 825 ti */
- S_ST( 'k', 3, 827, 0 ), /* 826 tin */
- S_ST( 'e', 3, 422, 0 ), /* 827 tink */
- S_ST( 'o', 3, 423, 814 ), /* 828 t */
- S_ST( 'r', 3, 831, 828 ), /* 829 t */
- S_ST( 'a', 3, 424, 0 ), /* 830 tr */
- S_ST( 'u', 3, 832, 830 ), /* 831 tr */
- S_ST( 's', 3, 833, 425 ), /* 832 tru */
- S_ST( 't', 3, 834, 0 ), /* 833 trus */
- S_ST( 'e', 3, 835, 0 ), /* 834 trust */
- S_ST( 'd', 3, 836, 0 ), /* 835 truste */
- S_ST( 'k', 3, 837, 0 ), /* 836 trusted */
- S_ST( 'e', 3, 426, 0 ), /* 837 trustedk */
- S_ST( 't', 3, 427, 829 ), /* 838 t */
- S_ST( 'y', 3, 840, 838 ), /* 839 t */
- S_ST( 'p', 3, 428, 0 ), /* 840 ty */
- S_ST( 'u', 3, 842, 813 ), /* 841 */
- S_ST( 'n', 3, 848, 0 ), /* 842 u */
- S_ST( 'c', 3, 844, 0 ), /* 843 un */
- S_ST( 'o', 3, 845, 0 ), /* 844 unc */
- S_ST( 'n', 3, 846, 0 ), /* 845 unco */
- S_ST( 'f', 3, 847, 0 ), /* 846 uncon */
- S_ST( 'i', 3, 433, 0 ), /* 847 unconf */
- S_ST( 'p', 3, 849, 843 ), /* 848 un */
- S_ST( 'e', 3, 850, 0 ), /* 849 unp */
- S_ST( 'e', 3, 434, 0 ), /* 850 unpe */
- S_ST( '_', 3, 871, 0 ), /* 851 unpeer */
- S_ST( 'c', 3, 853, 0 ), /* 852 unpeer_ */
- S_ST( 'r', 3, 854, 0 ), /* 853 unpeer_c */
- S_ST( 'y', 3, 855, 0 ), /* 854 unpeer_cr */
- S_ST( 'p', 3, 856, 0 ), /* 855 unpeer_cry */
- S_ST( 't', 3, 857, 0 ), /* 856 unpeer_cryp */
- S_ST( 'o', 3, 858, 0 ), /* 857 unpeer_crypt */
- S_ST( '_', 3, 863, 0 ), /* 858 unpeer_crypto */
- S_ST( 'e', 3, 860, 0 ), /* 859 unpeer_crypto_ */
- S_ST( 'a', 3, 861, 0 ), /* 860 unpeer_crypto_e */
- S_ST( 'r', 3, 862, 0 ), /* 861 unpeer_crypto_ea */
- S_ST( 'l', 3, 430, 0 ), /* 862 unpeer_crypto_ear */
- S_ST( 'n', 3, 864, 859 ), /* 863 unpeer_crypto_ */
- S_ST( 'a', 3, 865, 0 ), /* 864 unpeer_crypto_n */
- S_ST( 'k', 3, 866, 0 ), /* 865 unpeer_crypto_na */
- S_ST( '_', 3, 867, 0 ), /* 866 unpeer_crypto_nak */
- S_ST( 'e', 3, 868, 0 ), /* 867 unpeer_crypto_nak_ */
- S_ST( 'a', 3, 869, 0 ), /* 868 unpeer_crypto_nak_e */
- S_ST( 'r', 3, 870, 0 ), /* 869 unpeer_crypto_nak_ea */
- S_ST( 'l', 3, 431, 0 ), /* 870 unpeer_crypto_nak_ear */
- S_ST( 'd', 3, 872, 852 ), /* 871 unpeer_ */
- S_ST( 'i', 3, 873, 0 ), /* 872 unpeer_d */
- S_ST( 'g', 3, 874, 0 ), /* 873 unpeer_di */
- S_ST( 'e', 3, 875, 0 ), /* 874 unpeer_dig */
- S_ST( 's', 3, 876, 0 ), /* 875 unpeer_dige */
- S_ST( 't', 3, 877, 0 ), /* 876 unpeer_diges */
- S_ST( '_', 3, 878, 0 ), /* 877 unpeer_digest */
- S_ST( 'e', 3, 879, 0 ), /* 878 unpeer_digest_ */
- S_ST( 'a', 3, 880, 0 ), /* 879 unpeer_digest_e */
- S_ST( 'r', 3, 881, 0 ), /* 880 unpeer_digest_ea */
- S_ST( 'l', 3, 432, 0 ), /* 881 unpeer_digest_ear */
- S_ST( 'v', 3, 883, 841 ), /* 882 */
- S_ST( 'e', 3, 884, 0 ), /* 883 v */
- S_ST( 'r', 3, 885, 0 ), /* 884 ve */
- S_ST( 's', 3, 886, 0 ), /* 885 ver */
- S_ST( 'i', 3, 887, 0 ), /* 886 vers */
- S_ST( 'o', 3, 435, 0 ), /* 887 versi */
- S_ST( 'w', 3, 895, 882 ), /* 888 */
- S_ST( 'a', 3, 890, 0 ), /* 889 w */
- S_ST( 'n', 3, 891, 0 ), /* 890 wa */
- S_ST( 'd', 3, 892, 0 ), /* 891 wan */
- S_ST( 'e', 3, 449, 0 ), /* 892 wand */
- S_ST( 'e', 3, 894, 889 ), /* 893 w */
- S_ST( 'e', 3, 437, 0 ), /* 894 we */
- S_ST( 'i', 3, 896, 893 ), /* 895 w */
- S_ST( 'l', 3, 897, 0 ), /* 896 wi */
- S_ST( 'd', 3, 898, 0 ), /* 897 wil */
- S_ST( 'c', 3, 899, 0 ), /* 898 wild */
- S_ST( 'a', 3, 900, 0 ), /* 899 wildc */
- S_ST( 'r', 3, 438, 0 ), /* 900 wildca */
- S_ST( 'x', 3, 902, 888 ), /* 901 */
- S_ST( 'l', 3, 903, 0 ), /* 902 x */
- S_ST( 'e', 3, 904, 0 ), /* 903 xl */
- S_ST( 'a', 3, 905, 0 ), /* 904 xle */
- S_ST( 'v', 3, 439, 0 ), /* 905 xlea */
- S_ST( 'y', 3, 907, 901 ), /* 906 [initial state] */
- S_ST( 'e', 3, 908, 0 ), /* 907 y */
- S_ST( 'a', 3, 440, 0 ) /* 908 ye */
+ S_ST( 'p', 0, 0, 0 ), /* 268 T_Bcpollbstep */
+ S_ST( 'n', 0, 0, 0 ), /* 269 T_Beacon */
+ S_ST( 't', 1, 65, 0 ), /* 270 T_Broadcast */
+ S_ST( 't', 0, 0, 0 ), /* 271 T_Broadcastclient */
+ S_ST( 'y', 0, 0, 0 ), /* 272 T_Broadcastdelay */
+ S_ST( 't', 0, 0, 0 ), /* 273 T_Burst */
+ S_ST( 'e', 0, 0, 0 ), /* 274 T_Calibrate */
+ S_ST( 'g', 0, 0, 0 ), /* 275 T_Ceiling */
+ S_ST( 's', 0, 0, 0 ), /* 276 T_Clockstats */
+ S_ST( 't', 0, 0, 0 ), /* 277 T_Cohort */
+ S_ST( 'y', 0, 0, 0 ), /* 278 T_ControlKey */
+ S_ST( 'o', 0, 108, 0 ), /* 279 T_Crypto */
+ S_ST( 's', 0, 0, 0 ), /* 280 T_Cryptostats */
+ S_ST( 'l', 0, 0, 0 ), /* 281 T_Ctl */
+ S_ST( 'y', 0, 0, 0 ), /* 282 T_Day */
+ S_ST( 't', 0, 0, 0 ), /* 283 T_Default */
+ S_ST( 't', 1, 0, 0 ), /* 284 T_Digest */
+ S_ST( 'e', 0, 0, 0 ), /* 285 T_Disable */
+ S_ST( 'd', 0, 0, 0 ), /* 286 T_Discard */
+ S_ST( 'n', 0, 0, 0 ), /* 287 T_Dispersion */
+ S_ST( 'r', 3, 295, 0 ), /* 288 leapsmea */
+ S_ST( 'e', 1, 0, 0 ), /* 289 T_Driftfile */
+ S_ST( 'p', 0, 0, 0 ), /* 290 T_Drop */
+ S_ST( 'p', 0, 0, 0 ), /* 291 T_Dscp */
+ S_ST( '.', 0, 0, 0 ), /* 292 T_Ellipsis */
+ S_ST( 'e', 0, 0, 0 ), /* 293 T_Enable */
+ S_ST( 'd', 0, 0, 155 ), /* 294 T_End */
+ S_ST( 'i', 3, 317, 0 ), /* 295 leapsmear */
+ S_ST( 'e', 1, 163, 0 ), /* 296 T_File */
+ S_ST( 'n', 0, 0, 0 ), /* 297 T_Filegen */
+ S_ST( 'm', 0, 0, 0 ), /* 298 T_Filenum */
+ S_ST( '1', 0, 0, 0 ), /* 299 T_Flag1 */
+ S_ST( '2', 0, 0, 299 ), /* 300 T_Flag2 */
+ S_ST( '3', 0, 0, 300 ), /* 301 T_Flag3 */
+ S_ST( '4', 0, 0, 301 ), /* 302 T_Flag4 */
+ S_ST( 'e', 0, 0, 0 ), /* 303 T_Flake */
+ S_ST( 'r', 0, 0, 0 ), /* 304 T_Floor */
+ S_ST( 'q', 0, 173, 0 ), /* 305 T_Freq */
+ S_ST( 'e', 1, 0, 0 ), /* 306 T_Fudge */
+ S_ST( 't', 1, 0, 0 ), /* 307 T_Host */
+ S_ST( 'f', 0, 0, 0 ), /* 308 T_Huffpuff */
+ S_ST( 't', 0, 0, 0 ), /* 309 T_Iburst */
+ S_ST( 't', 1, 0, 0 ), /* 310 T_Ident */
+ S_ST( 'e', 0, 0, 0 ), /* 311 T_Ignore */
+ S_ST( 'c', 0, 0, 0 ), /* 312 T_Incalloc */
+ S_ST( 'm', 0, 0, 0 ), /* 313 T_Incmem */
+ S_ST( 'c', 0, 0, 0 ), /* 314 T_Initalloc */
+ S_ST( 'm', 0, 0, 0 ), /* 315 T_Initmem */
+ S_ST( 'e', 1, 0, 0 ), /* 316 T_Includefile */
+ S_ST( 'n', 3, 319, 0 ), /* 317 leapsmeari */
+ S_ST( 'e', 0, 0, 0 ), /* 318 T_Interface */
+ S_ST( 't', 3, 415, 0 ), /* 319 leapsmearin */
+ S_ST( 'o', 0, 0, 203 ), /* 320 T_Io */
+ S_ST( '4', 0, 0, 0 ), /* 321 T_Ipv4 */
+ S_ST( '4', 0, 0, 0 ), /* 322 T_Ipv4_flag */
+ S_ST( '6', 0, 0, 321 ), /* 323 T_Ipv6 */
+ S_ST( '6', 0, 0, 322 ), /* 324 T_Ipv6_flag */
+ S_ST( 'l', 0, 0, 0 ), /* 325 T_Kernel */
+ S_ST( 'y', 0, 327, 241 ), /* 326 T_Key */
+ S_ST( 's', 1, 244, 0 ), /* 327 T_Keys */
+ S_ST( 'r', 1, 0, 0 ), /* 328 T_Keysdir */
+ S_ST( 'd', 0, 0, 0 ), /* 329 T_Kod */
+ S_ST( 'p', 0, 0, 0 ), /* 330 T_Mssntp */
+ S_ST( 'e', 1, 0, 0 ), /* 331 T_Leapfile */
+ S_ST( 'l', 0, 0, 0 ), /* 332 T_Leapsmearinterval */
+ S_ST( 'd', 0, 0, 0 ), /* 333 T_Limited */
+ S_ST( 'k', 0, 0, 0 ), /* 334 T_Link */
+ S_ST( 'n', 0, 0, 0 ), /* 335 T_Listen */
+ S_ST( 'g', 2, 0, 0 ), /* 336 T_Logconfig */
+ S_ST( 'e', 1, 0, 0 ), /* 337 T_Logfile */
+ S_ST( 's', 0, 0, 0 ), /* 338 T_Loopstats */
+ S_ST( 'p', 0, 0, 0 ), /* 339 T_Lowpriotrap */
+ S_ST( 't', 1, 0, 0 ), /* 340 T_Manycastclient */
+ S_ST( 'r', 2, 0, 0 ), /* 341 T_Manycastserver */
+ S_ST( 'k', 0, 0, 0 ), /* 342 T_Mask */
+ S_ST( 'e', 0, 0, 0 ), /* 343 T_Maxage */
+ S_ST( 'k', 0, 0, 0 ), /* 344 T_Maxclock */
+ S_ST( 'h', 0, 0, 0 ), /* 345 T_Maxdepth */
+ S_ST( 't', 0, 0, 0 ), /* 346 T_Maxdist */
+ S_ST( 'm', 0, 0, 0 ), /* 347 T_Maxmem */
+ S_ST( 'l', 0, 0, 0 ), /* 348 T_Maxpoll */
+ S_ST( 's', 0, 0, 0 ), /* 349 T_Mdnstries */
+ S_ST( 'm', 0, 531, 0 ), /* 350 T_Mem */
+ S_ST( 'k', 0, 0, 0 ), /* 351 T_Memlock */
+ S_ST( 'k', 0, 0, 0 ), /* 352 T_Minclock */
+ S_ST( 'h', 0, 0, 0 ), /* 353 T_Mindepth */
+ S_ST( 't', 0, 0, 0 ), /* 354 T_Mindist */
+ S_ST( 'm', 0, 0, 0 ), /* 355 T_Minimum */
+ S_ST( 'l', 0, 0, 0 ), /* 356 T_Minpoll */
+ S_ST( 'e', 0, 0, 0 ), /* 357 T_Minsane */
+ S_ST( 'e', 0, 359, 0 ), /* 358 T_Mode */
+ S_ST( '7', 0, 0, 0 ), /* 359 T_Mode7 */
+ S_ST( 'r', 0, 0, 0 ), /* 360 T_Monitor */
+ S_ST( 'h', 0, 0, 0 ), /* 361 T_Month */
+ S_ST( 'u', 0, 0, 0 ), /* 362 T_Mru */
+ S_ST( 't', 2, 0, 0 ), /* 363 T_Multicastclient */
+ S_ST( 'c', 0, 0, 0 ), /* 364 T_Nic */
+ S_ST( 'k', 0, 0, 0 ), /* 365 T_Nolink */
+ S_ST( 'y', 0, 0, 0 ), /* 366 T_Nomodify */
+ S_ST( 't', 0, 0, 0 ), /* 367 T_Nomrulist */
+ S_ST( 'e', 0, 0, 0 ), /* 368 T_None */
+ S_ST( 'e', 0, 0, 0 ), /* 369 T_Nonvolatile */
+ S_ST( 'r', 0, 0, 0 ), /* 370 T_Nopeer */
+ S_ST( 'y', 0, 0, 0 ), /* 371 T_Noquery */
+ S_ST( 't', 0, 0, 0 ), /* 372 T_Noselect */
+ S_ST( 'e', 0, 0, 0 ), /* 373 T_Noserve */
+ S_ST( 'p', 0, 0, 0 ), /* 374 T_Notrap */
+ S_ST( 't', 0, 0, 0 ), /* 375 T_Notrust */
+ S_ST( 'p', 0, 627, 0 ), /* 376 T_Ntp */
+ S_ST( 't', 0, 0, 0 ), /* 377 T_Ntpport */
+ S_ST( 't', 1, 0, 0 ), /* 378 T_NtpSignDsocket */
+ S_ST( 'n', 0, 642, 0 ), /* 379 T_Orphan */
+ S_ST( 't', 0, 0, 0 ), /* 380 T_Orphanwait */
+ S_ST( 'y', 0, 0, 0 ), /* 381 T_PCEdigest */
+ S_ST( 'c', 0, 0, 0 ), /* 382 T_Panic */
+ S_ST( 'r', 1, 669, 0 ), /* 383 T_Peer */
+ S_ST( 's', 0, 0, 0 ), /* 384 T_Peerstats */
+ S_ST( 'e', 2, 0, 0 ), /* 385 T_Phone */
+ S_ST( 'd', 0, 677, 0 ), /* 386 T_Pid */
+ S_ST( 'e', 1, 0, 0 ), /* 387 T_Pidfile */
+ S_ST( 'l', 1, 0, 0 ), /* 388 T_Pool */
+ S_ST( 't', 0, 0, 0 ), /* 389 T_Port */
+ S_ST( 't', 0, 0, 0 ), /* 390 T_Preempt */
+ S_ST( 'r', 0, 0, 0 ), /* 391 T_Prefer */
+ S_ST( 's', 0, 0, 0 ), /* 392 T_Protostats */
+ S_ST( 'w', 1, 0, 683 ), /* 393 T_Pw */
+ S_ST( 'e', 1, 0, 0 ), /* 394 T_Randfile */
+ S_ST( 's', 0, 0, 0 ), /* 395 T_Rawstats */
+ S_ST( 'd', 1, 0, 0 ), /* 396 T_Refid */
+ S_ST( 'y', 0, 0, 0 ), /* 397 T_Requestkey */
+ S_ST( 't', 0, 0, 0 ), /* 398 T_Reset */
+ S_ST( 't', 0, 0, 0 ), /* 399 T_Restrict */
+ S_ST( 'e', 0, 0, 0 ), /* 400 T_Revoke */
+ S_ST( 't', 0, 0, 0 ), /* 401 T_Rlimit */
+ S_ST( 'r', 1, 0, 0 ), /* 402 T_Saveconfigdir */
+ S_ST( 'r', 1, 760, 0 ), /* 403 T_Server */
+ S_ST( 'r', 1, 0, 0 ), /* 404 T_Setvar */
+ S_ST( 'e', 0, 0, 0 ), /* 405 T_Source */
+ S_ST( 'e', 0, 0, 0 ), /* 406 T_Stacksize */
+ S_ST( 's', 0, 0, 0 ), /* 407 T_Statistics */
+ S_ST( 's', 0, 803, 798 ), /* 408 T_Stats */
+ S_ST( 'r', 1, 0, 0 ), /* 409 T_Statsdir */
+ S_ST( 'p', 0, 811, 0 ), /* 410 T_Step */
+ S_ST( 'k', 0, 0, 0 ), /* 411 T_Stepback */
+ S_ST( 'd', 0, 0, 0 ), /* 412 T_Stepfwd */
+ S_ST( 't', 0, 0, 0 ), /* 413 T_Stepout */
+ S_ST( 'm', 0, 0, 0 ), /* 414 T_Stratum */
+ S_ST( 'e', 3, 430, 0 ), /* 415 leapsmearint */
+ S_ST( 's', 0, 818, 0 ), /* 416 T_Sys */
+ S_ST( 's', 0, 0, 0 ), /* 417 T_Sysstats */
+ S_ST( 'k', 0, 0, 0 ), /* 418 T_Tick */
+ S_ST( '1', 0, 0, 0 ), /* 419 T_Time1 */
+ S_ST( '2', 0, 0, 419 ), /* 420 T_Time2 */
+ S_ST( 'r', 0, 0, 420 ), /* 421 T_Timer */
+ S_ST( 's', 0, 0, 0 ), /* 422 T_Timingstats */
+ S_ST( 'r', 0, 0, 0 ), /* 423 T_Tinker */
+ S_ST( 's', 0, 0, 0 ), /* 424 T_Tos */
+ S_ST( 'p', 1, 0, 0 ), /* 425 T_Trap */
+ S_ST( 'e', 0, 0, 0 ), /* 426 T_True */
+ S_ST( 'y', 0, 0, 0 ), /* 427 T_Trustedkey */
+ S_ST( 'l', 0, 0, 0 ), /* 428 T_Ttl */
+ S_ST( 'e', 0, 0, 0 ), /* 429 T_Type */
+ S_ST( 'r', 3, 437, 0 ), /* 430 leapsmearinte */
+ S_ST( 'y', 0, 0, 0 ), /* 431 T_UEcrypto */
+ S_ST( 'y', 0, 0, 0 ), /* 432 T_UEcryptonak */
+ S_ST( 'y', 0, 0, 0 ), /* 433 T_UEdigest */
+ S_ST( 'g', 1, 0, 0 ), /* 434 T_Unconfig */
+ S_ST( 'r', 1, 860, 0 ), /* 435 T_Unpeer */
+ S_ST( 'n', 0, 0, 0 ), /* 436 T_Version */
+ S_ST( 'v', 3, 442, 0 ), /* 437 leapsmearinter */
+ S_ST( 'k', 0, 0, 0 ), /* 438 T_Week */
+ S_ST( 'd', 0, 0, 0 ), /* 439 T_Wildcard */
+ S_ST( 'e', 0, 0, 0 ), /* 440 T_Xleave */
+ S_ST( 'r', 0, 0, 0 ), /* 441 T_Year */
+ S_ST( 'a', 3, 332, 0 ), /* 442 leapsmearinterv */
+ S_ST( 'i', 3, 459, 248 ), /* 443 l */
+ S_ST( 'e', 0, 0, 0 ), /* 444 T_Simulate */
+ S_ST( 'y', 0, 0, 0 ), /* 445 T_Beep_Delay */
+ S_ST( 'n', 0, 0, 0 ), /* 446 T_Sim_Duration */
+ S_ST( 't', 0, 0, 0 ), /* 447 T_Server_Offset */
+ S_ST( 'n', 0, 0, 0 ), /* 448 T_Duration */
+ S_ST( 't', 0, 0, 0 ), /* 449 T_Freq_Offset */
+ S_ST( 'r', 0, 0, 0 ), /* 450 T_Wander */
+ S_ST( 'r', 0, 0, 0 ), /* 451 T_Jitter */
+ S_ST( 'y', 0, 0, 0 ), /* 452 T_Prop_Delay */
+ S_ST( 'y', 0, 0, 0 ), /* 453 T_Proc_Delay */
+ S_ST( 'm', 3, 455, 0 ), /* 454 li */
+ S_ST( 'i', 3, 456, 0 ), /* 455 lim */
+ S_ST( 't', 3, 457, 0 ), /* 456 limi */
+ S_ST( 'e', 3, 333, 0 ), /* 457 limit */
+ S_ST( 'n', 3, 334, 454 ), /* 458 li */
+ S_ST( 's', 3, 460, 458 ), /* 459 li */
+ S_ST( 't', 3, 461, 0 ), /* 460 lis */
+ S_ST( 'e', 3, 335, 0 ), /* 461 list */
+ S_ST( 'o', 3, 478, 443 ), /* 462 l */
+ S_ST( 'g', 3, 469, 0 ), /* 463 lo */
+ S_ST( 'c', 3, 465, 0 ), /* 464 log */
+ S_ST( 'o', 3, 466, 0 ), /* 465 logc */
+ S_ST( 'n', 3, 467, 0 ), /* 466 logco */
+ S_ST( 'f', 3, 468, 0 ), /* 467 logcon */
+ S_ST( 'i', 3, 336, 0 ), /* 468 logconf */
+ S_ST( 'f', 3, 470, 464 ), /* 469 log */
+ S_ST( 'i', 3, 471, 0 ), /* 470 logf */
+ S_ST( 'l', 3, 337, 0 ), /* 471 logfi */
+ S_ST( 'o', 3, 473, 463 ), /* 472 lo */
+ S_ST( 'p', 3, 474, 0 ), /* 473 loo */
+ S_ST( 's', 3, 475, 0 ), /* 474 loop */
+ S_ST( 't', 3, 476, 0 ), /* 475 loops */
+ S_ST( 'a', 3, 477, 0 ), /* 476 loopst */
+ S_ST( 't', 3, 338, 0 ), /* 477 loopsta */
+ S_ST( 'w', 3, 479, 472 ), /* 478 lo */
+ S_ST( 'p', 3, 480, 0 ), /* 479 low */
+ S_ST( 'r', 3, 481, 0 ), /* 480 lowp */
+ S_ST( 'i', 3, 482, 0 ), /* 481 lowpr */
+ S_ST( 'o', 3, 483, 0 ), /* 482 lowpri */
+ S_ST( 't', 3, 484, 0 ), /* 483 lowprio */
+ S_ST( 'r', 3, 485, 0 ), /* 484 lowpriot */
+ S_ST( 'a', 3, 339, 0 ), /* 485 lowpriotr */
+ S_ST( 'm', 3, 567, 247 ), /* 486 */
+ S_ST( 'a', 3, 505, 0 ), /* 487 m */
+ S_ST( 'n', 3, 489, 0 ), /* 488 ma */
+ S_ST( 'y', 3, 490, 0 ), /* 489 man */
+ S_ST( 'c', 3, 491, 0 ), /* 490 many */
+ S_ST( 'a', 3, 492, 0 ), /* 491 manyc */
+ S_ST( 's', 3, 493, 0 ), /* 492 manyca */
+ S_ST( 't', 3, 499, 0 ), /* 493 manycas */
+ S_ST( 'c', 3, 495, 0 ), /* 494 manycast */
+ S_ST( 'l', 3, 496, 0 ), /* 495 manycastc */
+ S_ST( 'i', 3, 497, 0 ), /* 496 manycastcl */
+ S_ST( 'e', 3, 498, 0 ), /* 497 manycastcli */
+ S_ST( 'n', 3, 340, 0 ), /* 498 manycastclie */
+ S_ST( 's', 3, 500, 494 ), /* 499 manycast */
+ S_ST( 'e', 3, 501, 0 ), /* 500 manycasts */
+ S_ST( 'r', 3, 502, 0 ), /* 501 manycastse */
+ S_ST( 'v', 3, 503, 0 ), /* 502 manycastser */
+ S_ST( 'e', 3, 341, 0 ), /* 503 manycastserv */
+ S_ST( 's', 3, 342, 488 ), /* 504 ma */
+ S_ST( 'x', 3, 520, 504 ), /* 505 ma */
+ S_ST( 'a', 3, 507, 0 ), /* 506 max */
+ S_ST( 'g', 3, 343, 0 ), /* 507 maxa */
+ S_ST( 'c', 3, 509, 506 ), /* 508 max */
+ S_ST( 'l', 3, 510, 0 ), /* 509 maxc */
+ S_ST( 'o', 3, 511, 0 ), /* 510 maxcl */
+ S_ST( 'c', 3, 344, 0 ), /* 511 maxclo */
+ S_ST( 'd', 3, 516, 508 ), /* 512 max */
+ S_ST( 'e', 3, 514, 0 ), /* 513 maxd */
+ S_ST( 'p', 3, 515, 0 ), /* 514 maxde */
+ S_ST( 't', 3, 345, 0 ), /* 515 maxdep */
+ S_ST( 'i', 3, 517, 513 ), /* 516 maxd */
+ S_ST( 's', 3, 346, 0 ), /* 517 maxdi */
+ S_ST( 'm', 3, 519, 512 ), /* 518 max */
+ S_ST( 'e', 3, 347, 0 ), /* 519 maxm */
+ S_ST( 'p', 3, 521, 518 ), /* 520 max */
+ S_ST( 'o', 3, 522, 0 ), /* 521 maxp */
+ S_ST( 'l', 3, 348, 0 ), /* 522 maxpo */
+ S_ST( 'd', 3, 524, 487 ), /* 523 m */
+ S_ST( 'n', 3, 525, 0 ), /* 524 md */
+ S_ST( 's', 3, 526, 0 ), /* 525 mdn */
+ S_ST( 't', 3, 527, 0 ), /* 526 mdns */
+ S_ST( 'r', 3, 528, 0 ), /* 527 mdnst */
+ S_ST( 'i', 3, 529, 0 ), /* 528 mdnstr */
+ S_ST( 'e', 3, 349, 0 ), /* 529 mdnstri */
+ S_ST( 'e', 3, 350, 523 ), /* 530 m */
+ S_ST( 'l', 3, 532, 0 ), /* 531 mem */
+ S_ST( 'o', 3, 533, 0 ), /* 532 meml */
+ S_ST( 'c', 3, 351, 0 ), /* 533 memlo */
+ S_ST( 'i', 3, 535, 530 ), /* 534 m */
+ S_ST( 'n', 3, 552, 0 ), /* 535 mi */
+ S_ST( 'c', 3, 537, 0 ), /* 536 min */
+ S_ST( 'l', 3, 538, 0 ), /* 537 minc */
+ S_ST( 'o', 3, 539, 0 ), /* 538 mincl */
+ S_ST( 'c', 3, 352, 0 ), /* 539 minclo */
+ S_ST( 'd', 3, 544, 536 ), /* 540 min */
+ S_ST( 'e', 3, 542, 0 ), /* 541 mind */
+ S_ST( 'p', 3, 543, 0 ), /* 542 minde */
+ S_ST( 't', 3, 353, 0 ), /* 543 mindep */
+ S_ST( 'i', 3, 545, 541 ), /* 544 mind */
+ S_ST( 's', 3, 354, 0 ), /* 545 mindi */
+ S_ST( 'i', 3, 547, 540 ), /* 546 min */
+ S_ST( 'm', 3, 548, 0 ), /* 547 mini */
+ S_ST( 'u', 3, 355, 0 ), /* 548 minim */
+ S_ST( 'p', 3, 550, 546 ), /* 549 min */
+ S_ST( 'o', 3, 551, 0 ), /* 550 minp */
+ S_ST( 'l', 3, 356, 0 ), /* 551 minpo */
+ S_ST( 's', 3, 553, 549 ), /* 552 min */
+ S_ST( 'a', 3, 554, 0 ), /* 553 mins */
+ S_ST( 'n', 3, 357, 0 ), /* 554 minsa */
+ S_ST( 'o', 3, 557, 534 ), /* 555 m */
+ S_ST( 'd', 3, 358, 0 ), /* 556 mo */
+ S_ST( 'n', 3, 561, 556 ), /* 557 mo */
+ S_ST( 'i', 3, 559, 0 ), /* 558 mon */
+ S_ST( 't', 3, 560, 0 ), /* 559 moni */
+ S_ST( 'o', 3, 360, 0 ), /* 560 monit */
+ S_ST( 't', 3, 361, 558 ), /* 561 mon */
+ S_ST( 'r', 3, 362, 555 ), /* 562 m */
+ S_ST( 's', 3, 564, 562 ), /* 563 m */
+ S_ST( 's', 3, 565, 0 ), /* 564 ms */
+ S_ST( 'n', 3, 566, 0 ), /* 565 mss */
+ S_ST( 't', 3, 330, 0 ), /* 566 mssn */
+ S_ST( 'u', 3, 568, 563 ), /* 567 m */
+ S_ST( 'l', 3, 569, 0 ), /* 568 mu */
+ S_ST( 't', 3, 570, 0 ), /* 569 mul */
+ S_ST( 'i', 3, 571, 0 ), /* 570 mult */
+ S_ST( 'c', 3, 572, 0 ), /* 571 multi */
+ S_ST( 'a', 3, 573, 0 ), /* 572 multic */
+ S_ST( 's', 3, 574, 0 ), /* 573 multica */
+ S_ST( 't', 3, 575, 0 ), /* 574 multicas */
+ S_ST( 'c', 3, 576, 0 ), /* 575 multicast */
+ S_ST( 'l', 3, 577, 0 ), /* 576 multicastc */
+ S_ST( 'i', 3, 578, 0 ), /* 577 multicastcl */
+ S_ST( 'e', 3, 579, 0 ), /* 578 multicastcli */
+ S_ST( 'n', 3, 363, 0 ), /* 579 multicastclie */
+ S_ST( 'n', 3, 623, 486 ), /* 580 */
+ S_ST( 'i', 3, 364, 0 ), /* 581 n */
+ S_ST( 'o', 3, 618, 581 ), /* 582 n */
+ S_ST( 'l', 3, 584, 0 ), /* 583 no */
+ S_ST( 'i', 3, 585, 0 ), /* 584 nol */
+ S_ST( 'n', 3, 365, 0 ), /* 585 noli */
+ S_ST( 'm', 3, 591, 583 ), /* 586 no */
+ S_ST( 'o', 3, 588, 0 ), /* 587 nom */
+ S_ST( 'd', 3, 589, 0 ), /* 588 nomo */
+ S_ST( 'i', 3, 590, 0 ), /* 589 nomod */
+ S_ST( 'f', 3, 366, 0 ), /* 590 nomodi */
+ S_ST( 'r', 3, 592, 587 ), /* 591 nom */
+ S_ST( 'u', 3, 593, 0 ), /* 592 nomr */
+ S_ST( 'l', 3, 594, 0 ), /* 593 nomru */
+ S_ST( 'i', 3, 595, 0 ), /* 594 nomrul */
+ S_ST( 's', 3, 367, 0 ), /* 595 nomruli */
+ S_ST( 'n', 3, 597, 586 ), /* 596 no */
+ S_ST( 'v', 3, 598, 368 ), /* 597 non */
+ S_ST( 'o', 3, 599, 0 ), /* 598 nonv */
+ S_ST( 'l', 3, 600, 0 ), /* 599 nonvo */
+ S_ST( 'a', 3, 601, 0 ), /* 600 nonvol */
+ S_ST( 't', 3, 602, 0 ), /* 601 nonvola */
+ S_ST( 'i', 3, 603, 0 ), /* 602 nonvolat */
+ S_ST( 'l', 3, 369, 0 ), /* 603 nonvolati */
+ S_ST( 'p', 3, 605, 596 ), /* 604 no */
+ S_ST( 'e', 3, 606, 0 ), /* 605 nop */
+ S_ST( 'e', 3, 370, 0 ), /* 606 nope */
+ S_ST( 'q', 3, 608, 604 ), /* 607 no */
+ S_ST( 'u', 3, 609, 0 ), /* 608 noq */
+ S_ST( 'e', 3, 610, 0 ), /* 609 noqu */
+ S_ST( 'r', 3, 371, 0 ), /* 610 noque */
+ S_ST( 's', 3, 612, 607 ), /* 611 no */
+ S_ST( 'e', 3, 616, 0 ), /* 612 nos */
+ S_ST( 'l', 3, 614, 0 ), /* 613 nose */
+ S_ST( 'e', 3, 615, 0 ), /* 614 nosel */
+ S_ST( 'c', 3, 372, 0 ), /* 615 nosele */
+ S_ST( 'r', 3, 617, 613 ), /* 616 nose */
+ S_ST( 'v', 3, 373, 0 ), /* 617 noser */
+ S_ST( 't', 3, 619, 611 ), /* 618 no */
+ S_ST( 'r', 3, 621, 0 ), /* 619 not */
+ S_ST( 'a', 3, 374, 0 ), /* 620 notr */
+ S_ST( 'u', 3, 622, 620 ), /* 621 notr */
+ S_ST( 's', 3, 375, 0 ), /* 622 notru */
+ S_ST( 't', 3, 376, 582 ), /* 623 n */
+ S_ST( 'p', 3, 625, 0 ), /* 624 ntp */
+ S_ST( 'o', 3, 626, 0 ), /* 625 ntpp */
+ S_ST( 'r', 3, 377, 0 ), /* 626 ntppo */
+ S_ST( 's', 3, 628, 624 ), /* 627 ntp */
+ S_ST( 'i', 3, 629, 0 ), /* 628 ntps */
+ S_ST( 'g', 3, 630, 0 ), /* 629 ntpsi */
+ S_ST( 'n', 3, 631, 0 ), /* 630 ntpsig */
+ S_ST( 'd', 3, 632, 0 ), /* 631 ntpsign */
+ S_ST( 's', 3, 633, 0 ), /* 632 ntpsignd */
+ S_ST( 'o', 3, 634, 0 ), /* 633 ntpsignds */
+ S_ST( 'c', 3, 635, 0 ), /* 634 ntpsigndso */
+ S_ST( 'k', 3, 636, 0 ), /* 635 ntpsigndsoc */
+ S_ST( 'e', 3, 378, 0 ), /* 636 ntpsigndsock */
+ S_ST( 'o', 3, 638, 580 ), /* 637 */
+ S_ST( 'r', 3, 639, 0 ), /* 638 o */
+ S_ST( 'p', 3, 640, 0 ), /* 639 or */
+ S_ST( 'h', 3, 641, 0 ), /* 640 orp */
+ S_ST( 'a', 3, 379, 0 ), /* 641 orph */
+ S_ST( 'w', 3, 643, 0 ), /* 642 orphan */
+ S_ST( 'a', 3, 644, 0 ), /* 643 orphanw */
+ S_ST( 'i', 3, 380, 0 ), /* 644 orphanwa */
+ S_ST( 'p', 3, 393, 637 ), /* 645 */
+ S_ST( 'a', 3, 647, 0 ), /* 646 p */
+ S_ST( 'n', 3, 648, 0 ), /* 647 pa */
+ S_ST( 'i', 3, 382, 0 ), /* 648 pan */
+ S_ST( 'e', 3, 650, 646 ), /* 649 p */
+ S_ST( 'e', 3, 383, 0 ), /* 650 pe */
+ S_ST( '_', 3, 652, 0 ), /* 651 peer */
+ S_ST( 'c', 3, 653, 0 ), /* 652 peer_ */
+ S_ST( 'l', 3, 654, 0 ), /* 653 peer_c */
+ S_ST( 'e', 3, 655, 0 ), /* 654 peer_cl */
+ S_ST( 'a', 3, 656, 0 ), /* 655 peer_cle */
+ S_ST( 'r', 3, 657, 0 ), /* 656 peer_clea */
+ S_ST( '_', 3, 658, 0 ), /* 657 peer_clear */
+ S_ST( 'd', 3, 659, 0 ), /* 658 peer_clear_ */
+ S_ST( 'i', 3, 660, 0 ), /* 659 peer_clear_d */
+ S_ST( 'g', 3, 661, 0 ), /* 660 peer_clear_di */
+ S_ST( 'e', 3, 662, 0 ), /* 661 peer_clear_dig */
+ S_ST( 's', 3, 663, 0 ), /* 662 peer_clear_dige */
+ S_ST( 't', 3, 664, 0 ), /* 663 peer_clear_diges */
+ S_ST( '_', 3, 665, 0 ), /* 664 peer_clear_digest */
+ S_ST( 'e', 3, 666, 0 ), /* 665 peer_clear_digest_ */
+ S_ST( 'a', 3, 667, 0 ), /* 666 peer_clear_digest_e */
+ S_ST( 'r', 3, 668, 0 ), /* 667 peer_clear_digest_ea */
+ S_ST( 'l', 3, 381, 0 ), /* 668 peer_clear_digest_ear */
+ S_ST( 's', 3, 670, 651 ), /* 669 peer */
+ S_ST( 't', 3, 671, 0 ), /* 670 peers */
+ S_ST( 'a', 3, 672, 0 ), /* 671 peerst */
+ S_ST( 't', 3, 384, 0 ), /* 672 peersta */
+ S_ST( 'h', 3, 674, 649 ), /* 673 p */
+ S_ST( 'o', 3, 675, 0 ), /* 674 ph */
+ S_ST( 'n', 3, 385, 0 ), /* 675 pho */
+ S_ST( 'i', 3, 386, 673 ), /* 676 p */
+ S_ST( 'f', 3, 678, 0 ), /* 677 pid */
+ S_ST( 'i', 3, 679, 0 ), /* 678 pidf */
+ S_ST( 'l', 3, 387, 0 ), /* 679 pidfi */
+ S_ST( 'o', 3, 682, 676 ), /* 680 p */
+ S_ST( 'o', 3, 388, 0 ), /* 681 po */
+ S_ST( 'r', 3, 389, 681 ), /* 682 po */
+ S_ST( 'r', 3, 690, 680 ), /* 683 p */
+ S_ST( 'e', 3, 688, 0 ), /* 684 pr */
+ S_ST( 'e', 3, 686, 0 ), /* 685 pre */
+ S_ST( 'm', 3, 687, 0 ), /* 686 pree */
+ S_ST( 'p', 3, 390, 0 ), /* 687 preem */
+ S_ST( 'f', 3, 689, 685 ), /* 688 pre */
+ S_ST( 'e', 3, 391, 0 ), /* 689 pref */
+ S_ST( 'o', 3, 703, 684 ), /* 690 pr */
+ S_ST( 'c', 3, 692, 0 ), /* 691 pro */
+ S_ST( '_', 3, 693, 0 ), /* 692 proc */
+ S_ST( 'd', 3, 694, 0 ), /* 693 proc_ */
+ S_ST( 'e', 3, 695, 0 ), /* 694 proc_d */
+ S_ST( 'l', 3, 696, 0 ), /* 695 proc_de */
+ S_ST( 'a', 3, 453, 0 ), /* 696 proc_del */
+ S_ST( 'p', 3, 698, 691 ), /* 697 pro */
+ S_ST( '_', 3, 699, 0 ), /* 698 prop */
+ S_ST( 'd', 3, 700, 0 ), /* 699 prop_ */
+ S_ST( 'e', 3, 701, 0 ), /* 700 prop_d */
+ S_ST( 'l', 3, 702, 0 ), /* 701 prop_de */
+ S_ST( 'a', 3, 452, 0 ), /* 702 prop_del */
+ S_ST( 't', 3, 704, 697 ), /* 703 pro */
+ S_ST( 'o', 3, 705, 0 ), /* 704 prot */
+ S_ST( 's', 3, 706, 0 ), /* 705 proto */
+ S_ST( 't', 3, 707, 0 ), /* 706 protos */
+ S_ST( 'a', 3, 708, 0 ), /* 707 protost */
+ S_ST( 't', 3, 392, 0 ), /* 708 protosta */
+ S_ST( 'r', 3, 740, 645 ), /* 709 */
+ S_ST( 'a', 3, 716, 0 ), /* 710 r */
+ S_ST( 'n', 3, 712, 0 ), /* 711 ra */
+ S_ST( 'd', 3, 713, 0 ), /* 712 ran */
+ S_ST( 'f', 3, 714, 0 ), /* 713 rand */
+ S_ST( 'i', 3, 715, 0 ), /* 714 randf */
+ S_ST( 'l', 3, 394, 0 ), /* 715 randfi */
+ S_ST( 'w', 3, 717, 711 ), /* 716 ra */
+ S_ST( 's', 3, 718, 0 ), /* 717 raw */
+ S_ST( 't', 3, 719, 0 ), /* 718 raws */
+ S_ST( 'a', 3, 720, 0 ), /* 719 rawst */
+ S_ST( 't', 3, 395, 0 ), /* 720 rawsta */
+ S_ST( 'e', 3, 737, 710 ), /* 721 r */
+ S_ST( 'f', 3, 723, 0 ), /* 722 re */
+ S_ST( 'i', 3, 396, 0 ), /* 723 ref */
+ S_ST( 'q', 3, 725, 722 ), /* 724 re */
+ S_ST( 'u', 3, 726, 0 ), /* 725 req */
+ S_ST( 'e', 3, 727, 0 ), /* 726 requ */
+ S_ST( 's', 3, 728, 0 ), /* 727 reque */
+ S_ST( 't', 3, 729, 0 ), /* 728 reques */
+ S_ST( 'k', 3, 730, 0 ), /* 729 request */
+ S_ST( 'e', 3, 397, 0 ), /* 730 requestk */
+ S_ST( 's', 3, 733, 724 ), /* 731 re */
+ S_ST( 'e', 3, 398, 0 ), /* 732 res */
+ S_ST( 't', 3, 734, 732 ), /* 733 res */
+ S_ST( 'r', 3, 735, 0 ), /* 734 rest */
+ S_ST( 'i', 3, 736, 0 ), /* 735 restr */
+ S_ST( 'c', 3, 399, 0 ), /* 736 restri */
+ S_ST( 'v', 3, 738, 731 ), /* 737 re */
+ S_ST( 'o', 3, 739, 0 ), /* 738 rev */
+ S_ST( 'k', 3, 400, 0 ), /* 739 revo */
+ S_ST( 'l', 3, 741, 721 ), /* 740 r */
+ S_ST( 'i', 3, 742, 0 ), /* 741 rl */
+ S_ST( 'm', 3, 743, 0 ), /* 742 rli */
+ S_ST( 'i', 3, 401, 0 ), /* 743 rlim */
+ S_ST( 's', 3, 817, 709 ), /* 744 */
+ S_ST( 'a', 3, 746, 0 ), /* 745 s */
+ S_ST( 'v', 3, 747, 0 ), /* 746 sa */
+ S_ST( 'e', 3, 748, 0 ), /* 747 sav */
+ S_ST( 'c', 3, 749, 0 ), /* 748 save */
+ S_ST( 'o', 3, 750, 0 ), /* 749 savec */
+ S_ST( 'n', 3, 751, 0 ), /* 750 saveco */
+ S_ST( 'f', 3, 752, 0 ), /* 751 savecon */
+ S_ST( 'i', 3, 753, 0 ), /* 752 saveconf */
+ S_ST( 'g', 3, 754, 0 ), /* 753 saveconfi */
+ S_ST( 'd', 3, 755, 0 ), /* 754 saveconfig */
+ S_ST( 'i', 3, 402, 0 ), /* 755 saveconfigd */
+ S_ST( 'e', 3, 766, 745 ), /* 756 s */
+ S_ST( 'r', 3, 758, 0 ), /* 757 se */
+ S_ST( 'v', 3, 759, 0 ), /* 758 ser */
+ S_ST( 'e', 3, 403, 0 ), /* 759 serv */
+ S_ST( '_', 3, 761, 0 ), /* 760 server */
+ S_ST( 'o', 3, 762, 0 ), /* 761 server_ */
+ S_ST( 'f', 3, 763, 0 ), /* 762 server_o */
+ S_ST( 'f', 3, 764, 0 ), /* 763 server_of */
+ S_ST( 's', 3, 765, 0 ), /* 764 server_off */
+ S_ST( 'e', 3, 447, 0 ), /* 765 server_offs */
+ S_ST( 't', 3, 767, 757 ), /* 766 se */
+ S_ST( 'v', 3, 768, 0 ), /* 767 set */
+ S_ST( 'a', 3, 404, 0 ), /* 768 setv */
+ S_ST( 'i', 3, 770, 756 ), /* 769 s */
+ S_ST( 'm', 3, 771, 0 ), /* 770 si */
+ S_ST( 'u', 3, 772, 0 ), /* 771 sim */
+ S_ST( 'l', 3, 773, 0 ), /* 772 simu */
+ S_ST( 'a', 3, 774, 0 ), /* 773 simul */
+ S_ST( 't', 3, 775, 0 ), /* 774 simula */
+ S_ST( 'i', 3, 776, 444 ), /* 775 simulat */
+ S_ST( 'o', 3, 777, 0 ), /* 776 simulati */
+ S_ST( 'n', 3, 778, 0 ), /* 777 simulatio */
+ S_ST( '_', 3, 779, 0 ), /* 778 simulation */
+ S_ST( 'd', 3, 780, 0 ), /* 779 simulation_ */
+ S_ST( 'u', 3, 781, 0 ), /* 780 simulation_d */
+ S_ST( 'r', 3, 782, 0 ), /* 781 simulation_du */
+ S_ST( 'a', 3, 783, 0 ), /* 782 simulation_dur */
+ S_ST( 't', 3, 784, 0 ), /* 783 simulation_dura */
+ S_ST( 'i', 3, 785, 0 ), /* 784 simulation_durat */
+ S_ST( 'o', 3, 446, 0 ), /* 785 simulation_durati */
+ S_ST( 'o', 3, 787, 769 ), /* 786 s */
+ S_ST( 'u', 3, 788, 0 ), /* 787 so */
+ S_ST( 'r', 3, 789, 0 ), /* 788 sou */
+ S_ST( 'c', 3, 405, 0 ), /* 789 sour */
+ S_ST( 't', 3, 813, 786 ), /* 790 s */
+ S_ST( 'a', 3, 797, 0 ), /* 791 st */
+ S_ST( 'c', 3, 793, 0 ), /* 792 sta */
+ S_ST( 'k', 3, 794, 0 ), /* 793 stac */
+ S_ST( 's', 3, 795, 0 ), /* 794 stack */
+ S_ST( 'i', 3, 796, 0 ), /* 795 stacks */
+ S_ST( 'z', 3, 406, 0 ), /* 796 stacksi */
+ S_ST( 't', 3, 408, 792 ), /* 797 sta */
+ S_ST( 'i', 3, 799, 0 ), /* 798 stat */
+ S_ST( 's', 3, 800, 0 ), /* 799 stati */
+ S_ST( 't', 3, 801, 0 ), /* 800 statis */
+ S_ST( 'i', 3, 802, 0 ), /* 801 statist */
+ S_ST( 'c', 3, 407, 0 ), /* 802 statisti */
+ S_ST( 'd', 3, 804, 0 ), /* 803 stats */
+ S_ST( 'i', 3, 409, 0 ), /* 804 statsd */
+ S_ST( 'e', 3, 410, 791 ), /* 805 st */
+ S_ST( 'b', 3, 807, 0 ), /* 806 step */
+ S_ST( 'a', 3, 808, 0 ), /* 807 stepb */
+ S_ST( 'c', 3, 411, 0 ), /* 808 stepba */
+ S_ST( 'f', 3, 810, 806 ), /* 809 step */
+ S_ST( 'w', 3, 412, 0 ), /* 810 stepf */
+ S_ST( 'o', 3, 812, 809 ), /* 811 step */
+ S_ST( 'u', 3, 413, 0 ), /* 812 stepo */
+ S_ST( 'r', 3, 814, 805 ), /* 813 st */
+ S_ST( 'a', 3, 815, 0 ), /* 814 str */
+ S_ST( 't', 3, 816, 0 ), /* 815 stra */
+ S_ST( 'u', 3, 414, 0 ), /* 816 strat */
+ S_ST( 'y', 3, 416, 790 ), /* 817 s */
+ S_ST( 's', 3, 819, 0 ), /* 818 sys */
+ S_ST( 't', 3, 820, 0 ), /* 819 syss */
+ S_ST( 'a', 3, 821, 0 ), /* 820 sysst */
+ S_ST( 't', 3, 417, 0 ), /* 821 syssta */
+ S_ST( 't', 3, 848, 744 ), /* 822 */
+ S_ST( 'i', 3, 834, 0 ), /* 823 t */
+ S_ST( 'c', 3, 418, 0 ), /* 824 ti */
+ S_ST( 'm', 3, 827, 824 ), /* 825 ti */
+ S_ST( 'e', 3, 421, 0 ), /* 826 tim */
+ S_ST( 'i', 3, 828, 826 ), /* 827 tim */
+ S_ST( 'n', 3, 829, 0 ), /* 828 timi */
+ S_ST( 'g', 3, 830, 0 ), /* 829 timin */
+ S_ST( 's', 3, 831, 0 ), /* 830 timing */
+ S_ST( 't', 3, 832, 0 ), /* 831 timings */
+ S_ST( 'a', 3, 833, 0 ), /* 832 timingst */
+ S_ST( 't', 3, 422, 0 ), /* 833 timingsta */
+ S_ST( 'n', 3, 835, 825 ), /* 834 ti */
+ S_ST( 'k', 3, 836, 0 ), /* 835 tin */
+ S_ST( 'e', 3, 423, 0 ), /* 836 tink */
+ S_ST( 'o', 3, 424, 823 ), /* 837 t */
+ S_ST( 'r', 3, 840, 837 ), /* 838 t */
+ S_ST( 'a', 3, 425, 0 ), /* 839 tr */
+ S_ST( 'u', 3, 841, 839 ), /* 840 tr */
+ S_ST( 's', 3, 842, 426 ), /* 841 tru */
+ S_ST( 't', 3, 843, 0 ), /* 842 trus */
+ S_ST( 'e', 3, 844, 0 ), /* 843 trust */
+ S_ST( 'd', 3, 845, 0 ), /* 844 truste */
+ S_ST( 'k', 3, 846, 0 ), /* 845 trusted */
+ S_ST( 'e', 3, 427, 0 ), /* 846 trustedk */
+ S_ST( 't', 3, 428, 838 ), /* 847 t */
+ S_ST( 'y', 3, 849, 847 ), /* 848 t */
+ S_ST( 'p', 3, 429, 0 ), /* 849 ty */
+ S_ST( 'u', 3, 851, 822 ), /* 850 */
+ S_ST( 'n', 3, 857, 0 ), /* 851 u */
+ S_ST( 'c', 3, 853, 0 ), /* 852 un */
+ S_ST( 'o', 3, 854, 0 ), /* 853 unc */
+ S_ST( 'n', 3, 855, 0 ), /* 854 unco */
+ S_ST( 'f', 3, 856, 0 ), /* 855 uncon */
+ S_ST( 'i', 3, 434, 0 ), /* 856 unconf */
+ S_ST( 'p', 3, 858, 852 ), /* 857 un */
+ S_ST( 'e', 3, 859, 0 ), /* 858 unp */
+ S_ST( 'e', 3, 435, 0 ), /* 859 unpe */
+ S_ST( '_', 3, 880, 0 ), /* 860 unpeer */
+ S_ST( 'c', 3, 862, 0 ), /* 861 unpeer_ */
+ S_ST( 'r', 3, 863, 0 ), /* 862 unpeer_c */
+ S_ST( 'y', 3, 864, 0 ), /* 863 unpeer_cr */
+ S_ST( 'p', 3, 865, 0 ), /* 864 unpeer_cry */
+ S_ST( 't', 3, 866, 0 ), /* 865 unpeer_cryp */
+ S_ST( 'o', 3, 867, 0 ), /* 866 unpeer_crypt */
+ S_ST( '_', 3, 872, 0 ), /* 867 unpeer_crypto */
+ S_ST( 'e', 3, 869, 0 ), /* 868 unpeer_crypto_ */
+ S_ST( 'a', 3, 870, 0 ), /* 869 unpeer_crypto_e */
+ S_ST( 'r', 3, 871, 0 ), /* 870 unpeer_crypto_ea */
+ S_ST( 'l', 3, 431, 0 ), /* 871 unpeer_crypto_ear */
+ S_ST( 'n', 3, 873, 868 ), /* 872 unpeer_crypto_ */
+ S_ST( 'a', 3, 874, 0 ), /* 873 unpeer_crypto_n */
+ S_ST( 'k', 3, 875, 0 ), /* 874 unpeer_crypto_na */
+ S_ST( '_', 3, 876, 0 ), /* 875 unpeer_crypto_nak */
+ S_ST( 'e', 3, 877, 0 ), /* 876 unpeer_crypto_nak_ */
+ S_ST( 'a', 3, 878, 0 ), /* 877 unpeer_crypto_nak_e */
+ S_ST( 'r', 3, 879, 0 ), /* 878 unpeer_crypto_nak_ea */
+ S_ST( 'l', 3, 432, 0 ), /* 879 unpeer_crypto_nak_ear */
+ S_ST( 'd', 3, 881, 861 ), /* 880 unpeer_ */
+ S_ST( 'i', 3, 882, 0 ), /* 881 unpeer_d */
+ S_ST( 'g', 3, 883, 0 ), /* 882 unpeer_di */
+ S_ST( 'e', 3, 884, 0 ), /* 883 unpeer_dig */
+ S_ST( 's', 3, 885, 0 ), /* 884 unpeer_dige */
+ S_ST( 't', 3, 886, 0 ), /* 885 unpeer_diges */
+ S_ST( '_', 3, 887, 0 ), /* 886 unpeer_digest */
+ S_ST( 'e', 3, 888, 0 ), /* 887 unpeer_digest_ */
+ S_ST( 'a', 3, 889, 0 ), /* 888 unpeer_digest_e */
+ S_ST( 'r', 3, 890, 0 ), /* 889 unpeer_digest_ea */
+ S_ST( 'l', 3, 433, 0 ), /* 890 unpeer_digest_ear */
+ S_ST( 'v', 3, 892, 850 ), /* 891 */
+ S_ST( 'e', 3, 893, 0 ), /* 892 v */
+ S_ST( 'r', 3, 894, 0 ), /* 893 ve */
+ S_ST( 's', 3, 895, 0 ), /* 894 ver */
+ S_ST( 'i', 3, 896, 0 ), /* 895 vers */
+ S_ST( 'o', 3, 436, 0 ), /* 896 versi */
+ S_ST( 'w', 3, 904, 891 ), /* 897 */
+ S_ST( 'a', 3, 899, 0 ), /* 898 w */
+ S_ST( 'n', 3, 900, 0 ), /* 899 wa */
+ S_ST( 'd', 3, 901, 0 ), /* 900 wan */
+ S_ST( 'e', 3, 450, 0 ), /* 901 wand */
+ S_ST( 'e', 3, 903, 898 ), /* 902 w */
+ S_ST( 'e', 3, 438, 0 ), /* 903 we */
+ S_ST( 'i', 3, 905, 902 ), /* 904 w */
+ S_ST( 'l', 3, 906, 0 ), /* 905 wi */
+ S_ST( 'd', 3, 907, 0 ), /* 906 wil */
+ S_ST( 'c', 3, 908, 0 ), /* 907 wild */
+ S_ST( 'a', 3, 909, 0 ), /* 908 wildc */
+ S_ST( 'r', 3, 439, 0 ), /* 909 wildca */
+ S_ST( 'x', 3, 911, 897 ), /* 910 */
+ S_ST( 'l', 3, 912, 0 ), /* 911 x */
+ S_ST( 'e', 3, 913, 0 ), /* 912 xl */
+ S_ST( 'a', 3, 914, 0 ), /* 913 xle */
+ S_ST( 'v', 3, 440, 0 ), /* 914 xlea */
+ S_ST( 'y', 3, 916, 910 ), /* 915 [initial state] */
+ S_ST( 'e', 3, 917, 0 ), /* 916 y */
+ S_ST( 'a', 3, 441, 0 ) /* 917 ye */
};
diff --git a/contrib/ntp/ntpd/ntp_loopfilter.c b/contrib/ntp/ntpd/ntp_loopfilter.c
index 4b38aa8..c8320c4 100644
--- a/contrib/ntp/ntpd/ntp_loopfilter.c
+++ b/contrib/ntp/ntpd/ntp_loopfilter.c
@@ -701,9 +701,10 @@ local_clock(
* where the FLL becomes effective.
*/
if (sys_poll >= allan_xpt)
- clock_frequency += (fp_offset -
- clock_offset) / max(ULOGTOD(sys_poll),
- mu) * CLOCK_FLL;
+ clock_frequency +=
+ (fp_offset - clock_offset)
+ / ( max(ULOGTOD(sys_poll), mu)
+ * CLOCK_FLL);
/*
* The PLL frequency gain (numerator) depends on
@@ -713,8 +714,8 @@ local_clock(
*/
etemp = min(ULOGTOD(allan_xpt), mu);
dtemp = 4 * CLOCK_PLL * ULOGTOD(sys_poll);
- clock_frequency += fp_offset * etemp / (dtemp *
- dtemp);
+ clock_frequency +=
+ fp_offset * etemp / (dtemp * dtemp);
}
rstclock(EVNT_SYNC, fp_offset);
if (fabs(fp_offset) < CLOCK_FLOOR)
diff --git a/contrib/ntp/ntpd/ntp_parser.c b/contrib/ntp/ntpd/ntp_parser.c
index c432694..acf0ad7 100644
--- a/contrib/ntp/ntpd/ntp_parser.c
+++ b/contrib/ntp/ntpd/ntp_parser.c
@@ -96,7 +96,7 @@
# define ONLY_SIM(a) NULL
#endif
-#line 100 "../../ntpd/ntp_parser.c" /* yacc.c:339 */
+#line 100 "ntp_parser.c" /* yacc.c:339 */
# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
@@ -141,191 +141,192 @@ extern int yydebug;
T_Automax = 265,
T_Average = 266,
T_Bclient = 267,
- T_Beacon = 268,
- T_Broadcast = 269,
- T_Broadcastclient = 270,
- T_Broadcastdelay = 271,
- T_Burst = 272,
- T_Calibrate = 273,
- T_Ceiling = 274,
- T_Clockstats = 275,
- T_Cohort = 276,
- T_ControlKey = 277,
- T_Crypto = 278,
- T_Cryptostats = 279,
- T_Ctl = 280,
- T_Day = 281,
- T_Default = 282,
- T_Digest = 283,
- T_Disable = 284,
- T_Discard = 285,
- T_Dispersion = 286,
- T_Double = 287,
- T_Driftfile = 288,
- T_Drop = 289,
- T_Dscp = 290,
- T_Ellipsis = 291,
- T_Enable = 292,
- T_End = 293,
- T_False = 294,
- T_File = 295,
- T_Filegen = 296,
- T_Filenum = 297,
- T_Flag1 = 298,
- T_Flag2 = 299,
- T_Flag3 = 300,
- T_Flag4 = 301,
- T_Flake = 302,
- T_Floor = 303,
- T_Freq = 304,
- T_Fudge = 305,
- T_Host = 306,
- T_Huffpuff = 307,
- T_Iburst = 308,
- T_Ident = 309,
- T_Ignore = 310,
- T_Incalloc = 311,
- T_Incmem = 312,
- T_Initalloc = 313,
- T_Initmem = 314,
- T_Includefile = 315,
- T_Integer = 316,
- T_Interface = 317,
- T_Intrange = 318,
- T_Io = 319,
- T_Ipv4 = 320,
- T_Ipv4_flag = 321,
- T_Ipv6 = 322,
- T_Ipv6_flag = 323,
- T_Kernel = 324,
- T_Key = 325,
- T_Keys = 326,
- T_Keysdir = 327,
- T_Kod = 328,
- T_Mssntp = 329,
- T_Leapfile = 330,
- T_Leapsmearinterval = 331,
- T_Limited = 332,
- T_Link = 333,
- T_Listen = 334,
- T_Logconfig = 335,
- T_Logfile = 336,
- T_Loopstats = 337,
- T_Lowpriotrap = 338,
- T_Manycastclient = 339,
- T_Manycastserver = 340,
- T_Mask = 341,
- T_Maxage = 342,
- T_Maxclock = 343,
- T_Maxdepth = 344,
- T_Maxdist = 345,
- T_Maxmem = 346,
- T_Maxpoll = 347,
- T_Mdnstries = 348,
- T_Mem = 349,
- T_Memlock = 350,
- T_Minclock = 351,
- T_Mindepth = 352,
- T_Mindist = 353,
- T_Minimum = 354,
- T_Minpoll = 355,
- T_Minsane = 356,
- T_Mode = 357,
- T_Mode7 = 358,
- T_Monitor = 359,
- T_Month = 360,
- T_Mru = 361,
- T_Multicastclient = 362,
- T_Nic = 363,
- T_Nolink = 364,
- T_Nomodify = 365,
- T_Nomrulist = 366,
- T_None = 367,
- T_Nonvolatile = 368,
- T_Nopeer = 369,
- T_Noquery = 370,
- T_Noselect = 371,
- T_Noserve = 372,
- T_Notrap = 373,
- T_Notrust = 374,
- T_Ntp = 375,
- T_Ntpport = 376,
- T_NtpSignDsocket = 377,
- T_Orphan = 378,
- T_Orphanwait = 379,
- T_PCEdigest = 380,
- T_Panic = 381,
- T_Peer = 382,
- T_Peerstats = 383,
- T_Phone = 384,
- T_Pid = 385,
- T_Pidfile = 386,
- T_Pool = 387,
- T_Port = 388,
- T_Preempt = 389,
- T_Prefer = 390,
- T_Protostats = 391,
- T_Pw = 392,
- T_Randfile = 393,
- T_Rawstats = 394,
- T_Refid = 395,
- T_Requestkey = 396,
- T_Reset = 397,
- T_Restrict = 398,
- T_Revoke = 399,
- T_Rlimit = 400,
- T_Saveconfigdir = 401,
- T_Server = 402,
- T_Setvar = 403,
- T_Source = 404,
- T_Stacksize = 405,
- T_Statistics = 406,
- T_Stats = 407,
- T_Statsdir = 408,
- T_Step = 409,
- T_Stepback = 410,
- T_Stepfwd = 411,
- T_Stepout = 412,
- T_Stratum = 413,
- T_String = 414,
- T_Sys = 415,
- T_Sysstats = 416,
- T_Tick = 417,
- T_Time1 = 418,
- T_Time2 = 419,
- T_Timer = 420,
- T_Timingstats = 421,
- T_Tinker = 422,
- T_Tos = 423,
- T_Trap = 424,
- T_True = 425,
- T_Trustedkey = 426,
- T_Ttl = 427,
- T_Type = 428,
- T_U_int = 429,
- T_UEcrypto = 430,
- T_UEcryptonak = 431,
- T_UEdigest = 432,
- T_Unconfig = 433,
- T_Unpeer = 434,
- T_Version = 435,
- T_WanderThreshold = 436,
- T_Week = 437,
- T_Wildcard = 438,
- T_Xleave = 439,
- T_Year = 440,
- T_Flag = 441,
- T_EOC = 442,
- T_Simulate = 443,
- T_Beep_Delay = 444,
- T_Sim_Duration = 445,
- T_Server_Offset = 446,
- T_Duration = 447,
- T_Freq_Offset = 448,
- T_Wander = 449,
- T_Jitter = 450,
- T_Prop_Delay = 451,
- T_Proc_Delay = 452
+ T_Bcpollbstep = 268,
+ T_Beacon = 269,
+ T_Broadcast = 270,
+ T_Broadcastclient = 271,
+ T_Broadcastdelay = 272,
+ T_Burst = 273,
+ T_Calibrate = 274,
+ T_Ceiling = 275,
+ T_Clockstats = 276,
+ T_Cohort = 277,
+ T_ControlKey = 278,
+ T_Crypto = 279,
+ T_Cryptostats = 280,
+ T_Ctl = 281,
+ T_Day = 282,
+ T_Default = 283,
+ T_Digest = 284,
+ T_Disable = 285,
+ T_Discard = 286,
+ T_Dispersion = 287,
+ T_Double = 288,
+ T_Driftfile = 289,
+ T_Drop = 290,
+ T_Dscp = 291,
+ T_Ellipsis = 292,
+ T_Enable = 293,
+ T_End = 294,
+ T_False = 295,
+ T_File = 296,
+ T_Filegen = 297,
+ T_Filenum = 298,
+ T_Flag1 = 299,
+ T_Flag2 = 300,
+ T_Flag3 = 301,
+ T_Flag4 = 302,
+ T_Flake = 303,
+ T_Floor = 304,
+ T_Freq = 305,
+ T_Fudge = 306,
+ T_Host = 307,
+ T_Huffpuff = 308,
+ T_Iburst = 309,
+ T_Ident = 310,
+ T_Ignore = 311,
+ T_Incalloc = 312,
+ T_Incmem = 313,
+ T_Initalloc = 314,
+ T_Initmem = 315,
+ T_Includefile = 316,
+ T_Integer = 317,
+ T_Interface = 318,
+ T_Intrange = 319,
+ T_Io = 320,
+ T_Ipv4 = 321,
+ T_Ipv4_flag = 322,
+ T_Ipv6 = 323,
+ T_Ipv6_flag = 324,
+ T_Kernel = 325,
+ T_Key = 326,
+ T_Keys = 327,
+ T_Keysdir = 328,
+ T_Kod = 329,
+ T_Mssntp = 330,
+ T_Leapfile = 331,
+ T_Leapsmearinterval = 332,
+ T_Limited = 333,
+ T_Link = 334,
+ T_Listen = 335,
+ T_Logconfig = 336,
+ T_Logfile = 337,
+ T_Loopstats = 338,
+ T_Lowpriotrap = 339,
+ T_Manycastclient = 340,
+ T_Manycastserver = 341,
+ T_Mask = 342,
+ T_Maxage = 343,
+ T_Maxclock = 344,
+ T_Maxdepth = 345,
+ T_Maxdist = 346,
+ T_Maxmem = 347,
+ T_Maxpoll = 348,
+ T_Mdnstries = 349,
+ T_Mem = 350,
+ T_Memlock = 351,
+ T_Minclock = 352,
+ T_Mindepth = 353,
+ T_Mindist = 354,
+ T_Minimum = 355,
+ T_Minpoll = 356,
+ T_Minsane = 357,
+ T_Mode = 358,
+ T_Mode7 = 359,
+ T_Monitor = 360,
+ T_Month = 361,
+ T_Mru = 362,
+ T_Multicastclient = 363,
+ T_Nic = 364,
+ T_Nolink = 365,
+ T_Nomodify = 366,
+ T_Nomrulist = 367,
+ T_None = 368,
+ T_Nonvolatile = 369,
+ T_Nopeer = 370,
+ T_Noquery = 371,
+ T_Noselect = 372,
+ T_Noserve = 373,
+ T_Notrap = 374,
+ T_Notrust = 375,
+ T_Ntp = 376,
+ T_Ntpport = 377,
+ T_NtpSignDsocket = 378,
+ T_Orphan = 379,
+ T_Orphanwait = 380,
+ T_PCEdigest = 381,
+ T_Panic = 382,
+ T_Peer = 383,
+ T_Peerstats = 384,
+ T_Phone = 385,
+ T_Pid = 386,
+ T_Pidfile = 387,
+ T_Pool = 388,
+ T_Port = 389,
+ T_Preempt = 390,
+ T_Prefer = 391,
+ T_Protostats = 392,
+ T_Pw = 393,
+ T_Randfile = 394,
+ T_Rawstats = 395,
+ T_Refid = 396,
+ T_Requestkey = 397,
+ T_Reset = 398,
+ T_Restrict = 399,
+ T_Revoke = 400,
+ T_Rlimit = 401,
+ T_Saveconfigdir = 402,
+ T_Server = 403,
+ T_Setvar = 404,
+ T_Source = 405,
+ T_Stacksize = 406,
+ T_Statistics = 407,
+ T_Stats = 408,
+ T_Statsdir = 409,
+ T_Step = 410,
+ T_Stepback = 411,
+ T_Stepfwd = 412,
+ T_Stepout = 413,
+ T_Stratum = 414,
+ T_String = 415,
+ T_Sys = 416,
+ T_Sysstats = 417,
+ T_Tick = 418,
+ T_Time1 = 419,
+ T_Time2 = 420,
+ T_Timer = 421,
+ T_Timingstats = 422,
+ T_Tinker = 423,
+ T_Tos = 424,
+ T_Trap = 425,
+ T_True = 426,
+ T_Trustedkey = 427,
+ T_Ttl = 428,
+ T_Type = 429,
+ T_U_int = 430,
+ T_UEcrypto = 431,
+ T_UEcryptonak = 432,
+ T_UEdigest = 433,
+ T_Unconfig = 434,
+ T_Unpeer = 435,
+ T_Version = 436,
+ T_WanderThreshold = 437,
+ T_Week = 438,
+ T_Wildcard = 439,
+ T_Xleave = 440,
+ T_Year = 441,
+ T_Flag = 442,
+ T_EOC = 443,
+ T_Simulate = 444,
+ T_Beep_Delay = 445,
+ T_Sim_Duration = 446,
+ T_Server_Offset = 447,
+ T_Duration = 448,
+ T_Freq_Offset = 449,
+ T_Wander = 450,
+ T_Jitter = 451,
+ T_Prop_Delay = 452,
+ T_Proc_Delay = 453
};
#endif
/* Tokens. */
@@ -339,191 +340,192 @@ extern int yydebug;
#define T_Automax 265
#define T_Average 266
#define T_Bclient 267
-#define T_Beacon 268
-#define T_Broadcast 269
-#define T_Broadcastclient 270
-#define T_Broadcastdelay 271
-#define T_Burst 272
-#define T_Calibrate 273
-#define T_Ceiling 274
-#define T_Clockstats 275
-#define T_Cohort 276
-#define T_ControlKey 277
-#define T_Crypto 278
-#define T_Cryptostats 279
-#define T_Ctl 280
-#define T_Day 281
-#define T_Default 282
-#define T_Digest 283
-#define T_Disable 284
-#define T_Discard 285
-#define T_Dispersion 286
-#define T_Double 287
-#define T_Driftfile 288
-#define T_Drop 289
-#define T_Dscp 290
-#define T_Ellipsis 291
-#define T_Enable 292
-#define T_End 293
-#define T_False 294
-#define T_File 295
-#define T_Filegen 296
-#define T_Filenum 297
-#define T_Flag1 298
-#define T_Flag2 299
-#define T_Flag3 300
-#define T_Flag4 301
-#define T_Flake 302
-#define T_Floor 303
-#define T_Freq 304
-#define T_Fudge 305
-#define T_Host 306
-#define T_Huffpuff 307
-#define T_Iburst 308
-#define T_Ident 309
-#define T_Ignore 310
-#define T_Incalloc 311
-#define T_Incmem 312
-#define T_Initalloc 313
-#define T_Initmem 314
-#define T_Includefile 315
-#define T_Integer 316
-#define T_Interface 317
-#define T_Intrange 318
-#define T_Io 319
-#define T_Ipv4 320
-#define T_Ipv4_flag 321
-#define T_Ipv6 322
-#define T_Ipv6_flag 323
-#define T_Kernel 324
-#define T_Key 325
-#define T_Keys 326
-#define T_Keysdir 327
-#define T_Kod 328
-#define T_Mssntp 329
-#define T_Leapfile 330
-#define T_Leapsmearinterval 331
-#define T_Limited 332
-#define T_Link 333
-#define T_Listen 334
-#define T_Logconfig 335
-#define T_Logfile 336
-#define T_Loopstats 337
-#define T_Lowpriotrap 338
-#define T_Manycastclient 339
-#define T_Manycastserver 340
-#define T_Mask 341
-#define T_Maxage 342
-#define T_Maxclock 343
-#define T_Maxdepth 344
-#define T_Maxdist 345
-#define T_Maxmem 346
-#define T_Maxpoll 347
-#define T_Mdnstries 348
-#define T_Mem 349
-#define T_Memlock 350
-#define T_Minclock 351
-#define T_Mindepth 352
-#define T_Mindist 353
-#define T_Minimum 354
-#define T_Minpoll 355
-#define T_Minsane 356
-#define T_Mode 357
-#define T_Mode7 358
-#define T_Monitor 359
-#define T_Month 360
-#define T_Mru 361
-#define T_Multicastclient 362
-#define T_Nic 363
-#define T_Nolink 364
-#define T_Nomodify 365
-#define T_Nomrulist 366
-#define T_None 367
-#define T_Nonvolatile 368
-#define T_Nopeer 369
-#define T_Noquery 370
-#define T_Noselect 371
-#define T_Noserve 372
-#define T_Notrap 373
-#define T_Notrust 374
-#define T_Ntp 375
-#define T_Ntpport 376
-#define T_NtpSignDsocket 377
-#define T_Orphan 378
-#define T_Orphanwait 379
-#define T_PCEdigest 380
-#define T_Panic 381
-#define T_Peer 382
-#define T_Peerstats 383
-#define T_Phone 384
-#define T_Pid 385
-#define T_Pidfile 386
-#define T_Pool 387
-#define T_Port 388
-#define T_Preempt 389
-#define T_Prefer 390
-#define T_Protostats 391
-#define T_Pw 392
-#define T_Randfile 393
-#define T_Rawstats 394
-#define T_Refid 395
-#define T_Requestkey 396
-#define T_Reset 397
-#define T_Restrict 398
-#define T_Revoke 399
-#define T_Rlimit 400
-#define T_Saveconfigdir 401
-#define T_Server 402
-#define T_Setvar 403
-#define T_Source 404
-#define T_Stacksize 405
-#define T_Statistics 406
-#define T_Stats 407
-#define T_Statsdir 408
-#define T_Step 409
-#define T_Stepback 410
-#define T_Stepfwd 411
-#define T_Stepout 412
-#define T_Stratum 413
-#define T_String 414
-#define T_Sys 415
-#define T_Sysstats 416
-#define T_Tick 417
-#define T_Time1 418
-#define T_Time2 419
-#define T_Timer 420
-#define T_Timingstats 421
-#define T_Tinker 422
-#define T_Tos 423
-#define T_Trap 424
-#define T_True 425
-#define T_Trustedkey 426
-#define T_Ttl 427
-#define T_Type 428
-#define T_U_int 429
-#define T_UEcrypto 430
-#define T_UEcryptonak 431
-#define T_UEdigest 432
-#define T_Unconfig 433
-#define T_Unpeer 434
-#define T_Version 435
-#define T_WanderThreshold 436
-#define T_Week 437
-#define T_Wildcard 438
-#define T_Xleave 439
-#define T_Year 440
-#define T_Flag 441
-#define T_EOC 442
-#define T_Simulate 443
-#define T_Beep_Delay 444
-#define T_Sim_Duration 445
-#define T_Server_Offset 446
-#define T_Duration 447
-#define T_Freq_Offset 448
-#define T_Wander 449
-#define T_Jitter 450
-#define T_Prop_Delay 451
-#define T_Proc_Delay 452
+#define T_Bcpollbstep 268
+#define T_Beacon 269
+#define T_Broadcast 270
+#define T_Broadcastclient 271
+#define T_Broadcastdelay 272
+#define T_Burst 273
+#define T_Calibrate 274
+#define T_Ceiling 275
+#define T_Clockstats 276
+#define T_Cohort 277
+#define T_ControlKey 278
+#define T_Crypto 279
+#define T_Cryptostats 280
+#define T_Ctl 281
+#define T_Day 282
+#define T_Default 283
+#define T_Digest 284
+#define T_Disable 285
+#define T_Discard 286
+#define T_Dispersion 287
+#define T_Double 288
+#define T_Driftfile 289
+#define T_Drop 290
+#define T_Dscp 291
+#define T_Ellipsis 292
+#define T_Enable 293
+#define T_End 294
+#define T_False 295
+#define T_File 296
+#define T_Filegen 297
+#define T_Filenum 298
+#define T_Flag1 299
+#define T_Flag2 300
+#define T_Flag3 301
+#define T_Flag4 302
+#define T_Flake 303
+#define T_Floor 304
+#define T_Freq 305
+#define T_Fudge 306
+#define T_Host 307
+#define T_Huffpuff 308
+#define T_Iburst 309
+#define T_Ident 310
+#define T_Ignore 311
+#define T_Incalloc 312
+#define T_Incmem 313
+#define T_Initalloc 314
+#define T_Initmem 315
+#define T_Includefile 316
+#define T_Integer 317
+#define T_Interface 318
+#define T_Intrange 319
+#define T_Io 320
+#define T_Ipv4 321
+#define T_Ipv4_flag 322
+#define T_Ipv6 323
+#define T_Ipv6_flag 324
+#define T_Kernel 325
+#define T_Key 326
+#define T_Keys 327
+#define T_Keysdir 328
+#define T_Kod 329
+#define T_Mssntp 330
+#define T_Leapfile 331
+#define T_Leapsmearinterval 332
+#define T_Limited 333
+#define T_Link 334
+#define T_Listen 335
+#define T_Logconfig 336
+#define T_Logfile 337
+#define T_Loopstats 338
+#define T_Lowpriotrap 339
+#define T_Manycastclient 340
+#define T_Manycastserver 341
+#define T_Mask 342
+#define T_Maxage 343
+#define T_Maxclock 344
+#define T_Maxdepth 345
+#define T_Maxdist 346
+#define T_Maxmem 347
+#define T_Maxpoll 348
+#define T_Mdnstries 349
+#define T_Mem 350
+#define T_Memlock 351
+#define T_Minclock 352
+#define T_Mindepth 353
+#define T_Mindist 354
+#define T_Minimum 355
+#define T_Minpoll 356
+#define T_Minsane 357
+#define T_Mode 358
+#define T_Mode7 359
+#define T_Monitor 360
+#define T_Month 361
+#define T_Mru 362
+#define T_Multicastclient 363
+#define T_Nic 364
+#define T_Nolink 365
+#define T_Nomodify 366
+#define T_Nomrulist 367
+#define T_None 368
+#define T_Nonvolatile 369
+#define T_Nopeer 370
+#define T_Noquery 371
+#define T_Noselect 372
+#define T_Noserve 373
+#define T_Notrap 374
+#define T_Notrust 375
+#define T_Ntp 376
+#define T_Ntpport 377
+#define T_NtpSignDsocket 378
+#define T_Orphan 379
+#define T_Orphanwait 380
+#define T_PCEdigest 381
+#define T_Panic 382
+#define T_Peer 383
+#define T_Peerstats 384
+#define T_Phone 385
+#define T_Pid 386
+#define T_Pidfile 387
+#define T_Pool 388
+#define T_Port 389
+#define T_Preempt 390
+#define T_Prefer 391
+#define T_Protostats 392
+#define T_Pw 393
+#define T_Randfile 394
+#define T_Rawstats 395
+#define T_Refid 396
+#define T_Requestkey 397
+#define T_Reset 398
+#define T_Restrict 399
+#define T_Revoke 400
+#define T_Rlimit 401
+#define T_Saveconfigdir 402
+#define T_Server 403
+#define T_Setvar 404
+#define T_Source 405
+#define T_Stacksize 406
+#define T_Statistics 407
+#define T_Stats 408
+#define T_Statsdir 409
+#define T_Step 410
+#define T_Stepback 411
+#define T_Stepfwd 412
+#define T_Stepout 413
+#define T_Stratum 414
+#define T_String 415
+#define T_Sys 416
+#define T_Sysstats 417
+#define T_Tick 418
+#define T_Time1 419
+#define T_Time2 420
+#define T_Timer 421
+#define T_Timingstats 422
+#define T_Tinker 423
+#define T_Tos 424
+#define T_Trap 425
+#define T_True 426
+#define T_Trustedkey 427
+#define T_Ttl 428
+#define T_Type 429
+#define T_U_int 430
+#define T_UEcrypto 431
+#define T_UEcryptonak 432
+#define T_UEdigest 433
+#define T_Unconfig 434
+#define T_Unpeer 435
+#define T_Version 436
+#define T_WanderThreshold 437
+#define T_Week 438
+#define T_Wildcard 439
+#define T_Xleave 440
+#define T_Year 441
+#define T_Flag 442
+#define T_EOC 443
+#define T_Simulate 444
+#define T_Beep_Delay 445
+#define T_Sim_Duration 446
+#define T_Server_Offset 447
+#define T_Duration 448
+#define T_Freq_Offset 449
+#define T_Wander 450
+#define T_Jitter 451
+#define T_Prop_Delay 452
+#define T_Proc_Delay 453
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -549,7 +551,7 @@ union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-#line 553 "../../ntpd/ntp_parser.c" /* yacc.c:355 */
+#line 555 "ntp_parser.c" /* yacc.c:355 */
};
typedef union YYSTYPE YYSTYPE;
@@ -566,7 +568,7 @@ int yyparse (void);
/* Copy the second part of user declarations. */
-#line 570 "../../ntpd/ntp_parser.c" /* yacc.c:358 */
+#line 572 "ntp_parser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -806,23 +808,23 @@ union yyalloc
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 214
+#define YYFINAL 215
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 655
+#define YYLAST 654
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 203
+#define YYNTOKENS 204
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 105
/* YYNRULES -- Number of rules. */
-#define YYNRULES 317
+#define YYNRULES 318
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 423
+#define YYNSTATES 424
/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 452
+#define YYMAXUTOK 453
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -835,15 +837,15 @@ static const yytype_uint8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 199, 200, 2, 2, 2, 2, 2, 2, 2, 2,
+ 200, 201, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 198, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 199, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 201, 2, 202, 2, 2, 2, 2,
+ 2, 2, 2, 202, 2, 203, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -876,45 +878,45 @@ static const yytype_uint8 yytranslate[] =
165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197
+ 195, 196, 197, 198
};
#if YYDEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 370, 370, 374, 375, 376, 391, 392, 393, 394,
- 395, 396, 397, 398, 399, 400, 401, 402, 403, 404,
- 412, 422, 423, 424, 425, 426, 430, 431, 436, 441,
- 443, 449, 450, 458, 459, 460, 464, 469, 470, 471,
- 472, 473, 474, 475, 476, 480, 482, 487, 488, 489,
- 490, 491, 492, 496, 501, 510, 520, 521, 531, 533,
- 535, 537, 548, 555, 557, 562, 564, 566, 568, 570,
- 579, 585, 586, 594, 596, 608, 609, 610, 611, 612,
- 621, 626, 631, 639, 641, 643, 648, 649, 650, 651,
- 652, 653, 657, 658, 659, 660, 669, 671, 680, 690,
- 695, 703, 704, 705, 706, 707, 708, 709, 710, 715,
- 716, 724, 734, 743, 758, 763, 764, 768, 769, 773,
- 774, 775, 776, 777, 778, 779, 788, 792, 796, 804,
- 812, 820, 835, 850, 863, 864, 872, 873, 874, 875,
- 876, 877, 878, 879, 880, 881, 882, 883, 884, 885,
- 886, 890, 895, 903, 908, 909, 910, 914, 919, 927,
- 932, 933, 934, 935, 936, 937, 938, 939, 947, 957,
- 962, 970, 972, 974, 983, 985, 990, 991, 995, 996,
- 997, 998, 1006, 1011, 1016, 1024, 1029, 1030, 1031, 1040,
- 1042, 1047, 1052, 1060, 1062, 1079, 1080, 1081, 1082, 1083,
- 1084, 1088, 1089, 1090, 1091, 1092, 1093, 1101, 1106, 1111,
- 1119, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131, 1132,
- 1133, 1142, 1143, 1144, 1151, 1158, 1165, 1181, 1200, 1202,
- 1204, 1206, 1208, 1210, 1217, 1222, 1223, 1224, 1228, 1232,
- 1241, 1242, 1246, 1247, 1248, 1252, 1263, 1277, 1289, 1294,
- 1296, 1301, 1302, 1310, 1312, 1320, 1325, 1333, 1358, 1365,
- 1375, 1376, 1380, 1381, 1382, 1383, 1387, 1388, 1389, 1393,
- 1398, 1403, 1411, 1412, 1413, 1414, 1415, 1416, 1417, 1427,
- 1432, 1440, 1445, 1453, 1455, 1459, 1464, 1469, 1477, 1482,
- 1490, 1499, 1500, 1504, 1505, 1514, 1532, 1536, 1541, 1549,
- 1554, 1555, 1559, 1564, 1572, 1577, 1582, 1587, 1592, 1600,
- 1605, 1610, 1618, 1623, 1624, 1625, 1626, 1627
+ 0, 371, 371, 375, 376, 377, 392, 393, 394, 395,
+ 396, 397, 398, 399, 400, 401, 402, 403, 404, 405,
+ 413, 423, 424, 425, 426, 427, 431, 432, 437, 442,
+ 444, 450, 451, 459, 460, 461, 465, 470, 471, 472,
+ 473, 474, 475, 476, 477, 481, 483, 488, 489, 490,
+ 491, 492, 493, 497, 502, 511, 521, 522, 532, 534,
+ 536, 538, 549, 556, 558, 563, 565, 567, 569, 571,
+ 580, 586, 587, 595, 597, 609, 610, 611, 612, 613,
+ 622, 627, 632, 640, 642, 644, 649, 650, 651, 652,
+ 653, 654, 655, 659, 660, 661, 662, 671, 673, 682,
+ 692, 697, 705, 706, 707, 708, 709, 710, 711, 712,
+ 717, 718, 726, 736, 745, 760, 765, 766, 770, 771,
+ 775, 776, 777, 778, 779, 780, 781, 790, 794, 798,
+ 806, 814, 822, 837, 852, 865, 866, 874, 875, 876,
+ 877, 878, 879, 880, 881, 882, 883, 884, 885, 886,
+ 887, 888, 892, 897, 905, 910, 911, 912, 916, 921,
+ 929, 934, 935, 936, 937, 938, 939, 940, 941, 949,
+ 959, 964, 972, 974, 976, 985, 987, 992, 993, 997,
+ 998, 999, 1000, 1008, 1013, 1018, 1026, 1031, 1032, 1033,
+ 1042, 1044, 1049, 1054, 1062, 1064, 1081, 1082, 1083, 1084,
+ 1085, 1086, 1090, 1091, 1092, 1093, 1094, 1095, 1103, 1108,
+ 1113, 1121, 1126, 1127, 1128, 1129, 1130, 1131, 1132, 1133,
+ 1134, 1135, 1144, 1145, 1146, 1153, 1160, 1167, 1183, 1202,
+ 1204, 1206, 1208, 1210, 1212, 1219, 1224, 1225, 1226, 1230,
+ 1234, 1243, 1244, 1248, 1249, 1250, 1254, 1265, 1279, 1291,
+ 1296, 1298, 1303, 1304, 1312, 1314, 1322, 1327, 1335, 1360,
+ 1367, 1377, 1378, 1382, 1383, 1384, 1385, 1389, 1390, 1391,
+ 1395, 1400, 1405, 1413, 1414, 1415, 1416, 1417, 1418, 1419,
+ 1429, 1434, 1442, 1447, 1455, 1457, 1461, 1466, 1471, 1479,
+ 1484, 1492, 1501, 1502, 1506, 1507, 1516, 1534, 1538, 1543,
+ 1551, 1556, 1557, 1561, 1566, 1574, 1579, 1584, 1589, 1594,
+ 1602, 1607, 1612, 1620, 1625, 1626, 1627, 1628, 1629
};
#endif
@@ -925,59 +927,60 @@ static const char *const yytname[] =
{
"$end", "error", "$undefined", "T_Abbrev", "T_Age", "T_All", "T_Allan",
"T_Allpeers", "T_Auth", "T_Autokey", "T_Automax", "T_Average",
- "T_Bclient", "T_Beacon", "T_Broadcast", "T_Broadcastclient",
- "T_Broadcastdelay", "T_Burst", "T_Calibrate", "T_Ceiling",
- "T_Clockstats", "T_Cohort", "T_ControlKey", "T_Crypto", "T_Cryptostats",
- "T_Ctl", "T_Day", "T_Default", "T_Digest", "T_Disable", "T_Discard",
- "T_Dispersion", "T_Double", "T_Driftfile", "T_Drop", "T_Dscp",
- "T_Ellipsis", "T_Enable", "T_End", "T_False", "T_File", "T_Filegen",
- "T_Filenum", "T_Flag1", "T_Flag2", "T_Flag3", "T_Flag4", "T_Flake",
- "T_Floor", "T_Freq", "T_Fudge", "T_Host", "T_Huffpuff", "T_Iburst",
- "T_Ident", "T_Ignore", "T_Incalloc", "T_Incmem", "T_Initalloc",
- "T_Initmem", "T_Includefile", "T_Integer", "T_Interface", "T_Intrange",
- "T_Io", "T_Ipv4", "T_Ipv4_flag", "T_Ipv6", "T_Ipv6_flag", "T_Kernel",
- "T_Key", "T_Keys", "T_Keysdir", "T_Kod", "T_Mssntp", "T_Leapfile",
- "T_Leapsmearinterval", "T_Limited", "T_Link", "T_Listen", "T_Logconfig",
- "T_Logfile", "T_Loopstats", "T_Lowpriotrap", "T_Manycastclient",
- "T_Manycastserver", "T_Mask", "T_Maxage", "T_Maxclock", "T_Maxdepth",
- "T_Maxdist", "T_Maxmem", "T_Maxpoll", "T_Mdnstries", "T_Mem",
- "T_Memlock", "T_Minclock", "T_Mindepth", "T_Mindist", "T_Minimum",
- "T_Minpoll", "T_Minsane", "T_Mode", "T_Mode7", "T_Monitor", "T_Month",
- "T_Mru", "T_Multicastclient", "T_Nic", "T_Nolink", "T_Nomodify",
- "T_Nomrulist", "T_None", "T_Nonvolatile", "T_Nopeer", "T_Noquery",
- "T_Noselect", "T_Noserve", "T_Notrap", "T_Notrust", "T_Ntp", "T_Ntpport",
- "T_NtpSignDsocket", "T_Orphan", "T_Orphanwait", "T_PCEdigest", "T_Panic",
- "T_Peer", "T_Peerstats", "T_Phone", "T_Pid", "T_Pidfile", "T_Pool",
- "T_Port", "T_Preempt", "T_Prefer", "T_Protostats", "T_Pw", "T_Randfile",
- "T_Rawstats", "T_Refid", "T_Requestkey", "T_Reset", "T_Restrict",
- "T_Revoke", "T_Rlimit", "T_Saveconfigdir", "T_Server", "T_Setvar",
- "T_Source", "T_Stacksize", "T_Statistics", "T_Stats", "T_Statsdir",
- "T_Step", "T_Stepback", "T_Stepfwd", "T_Stepout", "T_Stratum",
- "T_String", "T_Sys", "T_Sysstats", "T_Tick", "T_Time1", "T_Time2",
- "T_Timer", "T_Timingstats", "T_Tinker", "T_Tos", "T_Trap", "T_True",
- "T_Trustedkey", "T_Ttl", "T_Type", "T_U_int", "T_UEcrypto",
- "T_UEcryptonak", "T_UEdigest", "T_Unconfig", "T_Unpeer", "T_Version",
- "T_WanderThreshold", "T_Week", "T_Wildcard", "T_Xleave", "T_Year",
- "T_Flag", "T_EOC", "T_Simulate", "T_Beep_Delay", "T_Sim_Duration",
- "T_Server_Offset", "T_Duration", "T_Freq_Offset", "T_Wander", "T_Jitter",
- "T_Prop_Delay", "T_Proc_Delay", "'='", "'('", "')'", "'{'", "'}'",
- "$accept", "configuration", "command_list", "command", "server_command",
- "client_type", "address", "ip_address", "address_fam", "option_list",
- "option", "option_flag", "option_flag_keyword", "option_int",
- "option_int_keyword", "option_str", "option_str_keyword",
- "unpeer_command", "unpeer_keyword", "other_mode_command",
- "authentication_command", "crypto_command_list", "crypto_command",
- "crypto_str_keyword", "orphan_mode_command", "tos_option_list",
- "tos_option", "tos_option_int_keyword", "tos_option_dbl_keyword",
- "monitoring_command", "stats_list", "stat", "filegen_option_list",
- "filegen_option", "link_nolink", "enable_disable", "filegen_type",
- "access_control_command", "ac_flag_list", "access_control_flag",
- "discard_option_list", "discard_option", "discard_option_keyword",
- "mru_option_list", "mru_option", "mru_option_keyword", "fudge_command",
- "fudge_factor_list", "fudge_factor", "fudge_factor_dbl_keyword",
- "fudge_factor_bool_keyword", "rlimit_command", "rlimit_option_list",
- "rlimit_option", "rlimit_option_keyword", "system_option_command",
- "system_option_list", "system_option", "system_option_flag_keyword",
+ "T_Bclient", "T_Bcpollbstep", "T_Beacon", "T_Broadcast",
+ "T_Broadcastclient", "T_Broadcastdelay", "T_Burst", "T_Calibrate",
+ "T_Ceiling", "T_Clockstats", "T_Cohort", "T_ControlKey", "T_Crypto",
+ "T_Cryptostats", "T_Ctl", "T_Day", "T_Default", "T_Digest", "T_Disable",
+ "T_Discard", "T_Dispersion", "T_Double", "T_Driftfile", "T_Drop",
+ "T_Dscp", "T_Ellipsis", "T_Enable", "T_End", "T_False", "T_File",
+ "T_Filegen", "T_Filenum", "T_Flag1", "T_Flag2", "T_Flag3", "T_Flag4",
+ "T_Flake", "T_Floor", "T_Freq", "T_Fudge", "T_Host", "T_Huffpuff",
+ "T_Iburst", "T_Ident", "T_Ignore", "T_Incalloc", "T_Incmem",
+ "T_Initalloc", "T_Initmem", "T_Includefile", "T_Integer", "T_Interface",
+ "T_Intrange", "T_Io", "T_Ipv4", "T_Ipv4_flag", "T_Ipv6", "T_Ipv6_flag",
+ "T_Kernel", "T_Key", "T_Keys", "T_Keysdir", "T_Kod", "T_Mssntp",
+ "T_Leapfile", "T_Leapsmearinterval", "T_Limited", "T_Link", "T_Listen",
+ "T_Logconfig", "T_Logfile", "T_Loopstats", "T_Lowpriotrap",
+ "T_Manycastclient", "T_Manycastserver", "T_Mask", "T_Maxage",
+ "T_Maxclock", "T_Maxdepth", "T_Maxdist", "T_Maxmem", "T_Maxpoll",
+ "T_Mdnstries", "T_Mem", "T_Memlock", "T_Minclock", "T_Mindepth",
+ "T_Mindist", "T_Minimum", "T_Minpoll", "T_Minsane", "T_Mode", "T_Mode7",
+ "T_Monitor", "T_Month", "T_Mru", "T_Multicastclient", "T_Nic",
+ "T_Nolink", "T_Nomodify", "T_Nomrulist", "T_None", "T_Nonvolatile",
+ "T_Nopeer", "T_Noquery", "T_Noselect", "T_Noserve", "T_Notrap",
+ "T_Notrust", "T_Ntp", "T_Ntpport", "T_NtpSignDsocket", "T_Orphan",
+ "T_Orphanwait", "T_PCEdigest", "T_Panic", "T_Peer", "T_Peerstats",
+ "T_Phone", "T_Pid", "T_Pidfile", "T_Pool", "T_Port", "T_Preempt",
+ "T_Prefer", "T_Protostats", "T_Pw", "T_Randfile", "T_Rawstats",
+ "T_Refid", "T_Requestkey", "T_Reset", "T_Restrict", "T_Revoke",
+ "T_Rlimit", "T_Saveconfigdir", "T_Server", "T_Setvar", "T_Source",
+ "T_Stacksize", "T_Statistics", "T_Stats", "T_Statsdir", "T_Step",
+ "T_Stepback", "T_Stepfwd", "T_Stepout", "T_Stratum", "T_String", "T_Sys",
+ "T_Sysstats", "T_Tick", "T_Time1", "T_Time2", "T_Timer", "T_Timingstats",
+ "T_Tinker", "T_Tos", "T_Trap", "T_True", "T_Trustedkey", "T_Ttl",
+ "T_Type", "T_U_int", "T_UEcrypto", "T_UEcryptonak", "T_UEdigest",
+ "T_Unconfig", "T_Unpeer", "T_Version", "T_WanderThreshold", "T_Week",
+ "T_Wildcard", "T_Xleave", "T_Year", "T_Flag", "T_EOC", "T_Simulate",
+ "T_Beep_Delay", "T_Sim_Duration", "T_Server_Offset", "T_Duration",
+ "T_Freq_Offset", "T_Wander", "T_Jitter", "T_Prop_Delay", "T_Proc_Delay",
+ "'='", "'('", "')'", "'{'", "'}'", "$accept", "configuration",
+ "command_list", "command", "server_command", "client_type", "address",
+ "ip_address", "address_fam", "option_list", "option", "option_flag",
+ "option_flag_keyword", "option_int", "option_int_keyword", "option_str",
+ "option_str_keyword", "unpeer_command", "unpeer_keyword",
+ "other_mode_command", "authentication_command", "crypto_command_list",
+ "crypto_command", "crypto_str_keyword", "orphan_mode_command",
+ "tos_option_list", "tos_option", "tos_option_int_keyword",
+ "tos_option_dbl_keyword", "monitoring_command", "stats_list", "stat",
+ "filegen_option_list", "filegen_option", "link_nolink", "enable_disable",
+ "filegen_type", "access_control_command", "ac_flag_list",
+ "access_control_flag", "discard_option_list", "discard_option",
+ "discard_option_keyword", "mru_option_list", "mru_option",
+ "mru_option_keyword", "fudge_command", "fudge_factor_list",
+ "fudge_factor", "fudge_factor_dbl_keyword", "fudge_factor_bool_keyword",
+ "rlimit_command", "rlimit_option_list", "rlimit_option",
+ "rlimit_option_keyword", "system_option_command", "system_option_list",
+ "system_option", "system_option_flag_keyword",
"system_option_local_flag_keyword", "tinker_command",
"tinker_option_list", "tinker_option", "tinker_option_keyword",
"miscellaneous_command", "misc_cmd_dbl_keyword", "misc_cmd_int_keyword",
@@ -1020,8 +1023,8 @@ static const yytype_uint16 yytoknum[] =
415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
- 445, 446, 447, 448, 449, 450, 451, 452, 61, 40,
- 41, 123, 125
+ 445, 446, 447, 448, 449, 450, 451, 452, 453, 61,
+ 40, 41, 123, 125
};
# endif
@@ -1039,49 +1042,49 @@ static const yytype_uint16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 20, -174, -32, -189, -189, -189, -29, -189, 315, 3,
- -133, -189, 315, -189, 119, -48, -189, -126, -189, -118,
- -115, -189, -189, -113, -189, -189, -48, -5, 374, -48,
- -189, -189, -105, -189, -100, -189, -189, 1, 81, 46,
- 2, -31, -189, -189, -90, 119, -88, -189, 148, 380,
- -81, -53, 23, -189, -189, -189, 87, 207, -106, -189,
- -48, -189, -48, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, -9, 29, -62, -61, -189, -7, -189,
- -189, -102, -189, -189, -189, 32, -189, -189, -189, -189,
- -189, -189, -189, -189, -189, -189, -189, -189, 315, -189,
- -189, -189, -189, -189, -189, 3, -189, 42, 78, -189,
- 315, -189, -189, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, 112, -189, -39, 367, -189, -189, -189,
- -113, -189, -189, -48, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, 374, -189, 60, -48, -189, -189, -34,
- -189, -189, -189, -189, -189, -189, -189, -189, 81, -189,
- -189, 97, 102, -189, -189, 44, -189, -189, -189, -189,
- -31, -189, 71, -63, -189, 119, -189, -189, -189, -189,
- -189, -189, -189, -189, -189, -189, -189, -189, 148, -189,
- -9, -189, -189, -36, -189, -189, -189, -189, -189, -189,
- -189, -189, 380, -189, 75, -9, -189, -189, 76, -53,
- -189, -189, -189, 77, -189, -43, -189, -189, -189, -189,
- -189, -189, -189, -189, -189, -189, -189, -189, 0, -150,
- -189, -189, -189, -189, -189, 89, -189, -6, -189, -189,
- -189, -189, 39, 13, -189, -189, -189, -189, 15, 99,
- -189, -189, 112, -189, -9, -36, -189, -189, -189, -189,
- -189, -189, -189, -189, 475, -189, -189, 475, 475, -81,
- -189, -189, 18, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, -58, 144, -189, -189, -189, 353, -189,
- -189, -189, -189, -189, -189, -189, -189, -96, -3, -13,
- -189, -189, -189, -189, 27, -189, -189, 11, -189, -189,
+ 18, -177, -45, -189, -189, -189, -40, -189, 32, 5,
+ -129, -189, 32, -189, 204, -44, -189, -117, -189, -110,
+ -101, -189, -189, -97, -189, -189, -44, -4, 495, -44,
+ -189, -189, -96, -189, -94, -189, -189, 8, 54, 258,
+ 10, -28, -189, -189, -89, 204, -86, -189, 270, 529,
+ -85, -56, 14, -189, -189, -189, 83, 207, -95, -189,
+ -44, -189, -44, -189, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, -7, 24, -73, -68, -189, -3, -189,
+ -189, -106, -189, -189, -189, 313, -189, -189, -189, -189,
+ -189, -189, -189, -189, -189, -189, -189, -189, 32, -189,
+ -189, -189, -189, -189, -189, 5, -189, 35, 65, -189,
+ 32, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, 110, -189, -59, 368, -189, -189, -189,
+ -97, -189, -189, -44, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, 495, -189, 44, -44, -189, -189, -51,
+ -189, -189, -189, -189, -189, -189, -189, -189, 54, -189,
+ -189, 86, 89, -189, -189, 33, -189, -189, -189, -189,
+ -28, -189, 49, -75, -189, 204, -189, -189, -189, -189,
+ -189, -189, -189, -189, -189, -189, -189, -189, 270, -189,
+ -7, -189, -189, -189, -33, -189, -189, -189, -189, -189,
+ -189, -189, -189, 529, -189, 66, -7, -189, -189, 67,
+ -56, -189, -189, -189, 68, -189, -53, -189, -189, -189,
+ -189, -189, -189, -189, -189, -189, -189, -189, -189, 16,
+ -153, -189, -189, -189, -189, -189, 77, -189, -18, -189,
+ -189, -189, -189, 226, -13, -189, -189, -189, -189, -8,
+ 97, -189, -189, 110, -189, -7, -33, -189, -189, -189,
+ -189, -189, -189, -189, -189, 449, -189, -189, 449, 449,
+ -85, -189, -189, 11, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, -189, -49, 108, -189, -189, -189, 125,
+ -189, -189, -189, -189, -189, -189, -189, -189, -102, -20,
+ -30, -189, -189, -189, -189, 13, -189, -189, 9, -189,
-189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
-189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, 475, 475, -189, 163, -81, 133, -189,
- 141, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, -189, 449, 449, -189, 146, -85, 113,
+ -189, 116, -189, -189, -189, -189, -189, -189, -189, -189,
-189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
- -52, -189, 45, 5, 19, -125, -189, 8, -189, -9,
- -189, -189, -189, -189, -189, -189, -189, -189, -189, 475,
- -189, -189, -189, -189, 14, -189, -189, -189, -48, -189,
- -189, -189, 22, -189, -189, -189, 21, 24, -9, 36,
- -164, -189, 33, -9, -189, -189, -189, 10, 69, -189,
- -189, -189, -189, -189, 31, 48, 40, -189, 52, -189,
- -9, -189, -189
+ -189, -54, -189, 23, -10, 6, -138, -189, -9, -189,
+ -7, -189, -189, -189, -189, -189, -189, -189, -189, -189,
+ 449, -189, -189, -189, -189, -17, -189, -189, -189, -44,
+ -189, -189, -189, 20, -189, -189, -189, 0, 21, -7,
+ 22, -173, -189, 25, -7, -189, -189, -189, 17, 7,
+ -189, -189, -189, -189, -189, 217, 39, 36, -189, 46,
+ -189, -7, -189, -189
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1089,81 +1092,81 @@ static const yytype_int16 yypact[] =
means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 0, 0, 24, 58, 235, 0, 71, 0, 0,
- 247, 238, 0, 228, 0, 0, 240, 0, 260, 0,
- 0, 241, 239, 0, 242, 25, 0, 0, 0, 0,
- 261, 236, 0, 23, 0, 243, 22, 0, 0, 0,
- 0, 0, 244, 21, 0, 0, 0, 237, 0, 0,
- 0, 0, 0, 56, 57, 296, 0, 2, 0, 7,
+ 0, 0, 0, 24, 58, 236, 0, 71, 0, 0,
+ 248, 239, 0, 229, 0, 0, 241, 0, 261, 0,
+ 0, 242, 240, 0, 243, 25, 0, 0, 0, 0,
+ 262, 237, 0, 23, 0, 244, 22, 0, 0, 0,
+ 0, 0, 245, 21, 0, 0, 0, 238, 0, 0,
+ 0, 0, 0, 56, 57, 297, 0, 2, 0, 7,
0, 8, 0, 9, 10, 13, 11, 12, 14, 15,
- 16, 17, 18, 0, 0, 0, 0, 221, 0, 222,
- 19, 0, 5, 62, 63, 64, 195, 196, 197, 198,
- 201, 199, 200, 202, 203, 204, 205, 206, 190, 192,
- 193, 194, 154, 155, 156, 126, 152, 0, 245, 229,
- 189, 101, 102, 103, 104, 108, 105, 106, 107, 109,
- 29, 30, 28, 0, 26, 0, 6, 65, 66, 257,
- 230, 256, 289, 59, 61, 160, 161, 162, 163, 164,
- 165, 166, 167, 127, 158, 0, 60, 70, 287, 231,
- 67, 272, 273, 274, 275, 276, 277, 278, 269, 271,
- 134, 29, 30, 134, 134, 26, 68, 188, 186, 187,
- 182, 184, 0, 0, 232, 96, 100, 97, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 207, 209,
- 0, 91, 86, 0, 87, 95, 93, 94, 92, 90,
- 88, 89, 80, 82, 0, 0, 251, 283, 0, 69,
- 282, 284, 280, 234, 1, 0, 4, 31, 55, 294,
- 293, 223, 224, 225, 226, 268, 267, 266, 0, 0,
- 79, 75, 76, 77, 78, 0, 72, 0, 191, 151,
- 153, 246, 98, 0, 178, 179, 180, 181, 0, 0,
- 176, 177, 168, 170, 0, 0, 27, 227, 255, 288,
- 157, 159, 286, 270, 130, 134, 134, 133, 128, 0,
- 183, 185, 0, 99, 208, 210, 292, 290, 291, 85,
- 81, 83, 84, 233, 0, 281, 279, 3, 20, 262,
- 263, 264, 259, 265, 258, 300, 301, 0, 0, 0,
- 74, 73, 118, 117, 0, 115, 116, 0, 110, 113,
- 114, 174, 175, 173, 169, 171, 172, 136, 137, 138,
+ 16, 17, 18, 0, 0, 0, 0, 222, 0, 223,
+ 19, 0, 5, 62, 63, 64, 196, 197, 198, 199,
+ 202, 200, 201, 203, 204, 205, 206, 207, 191, 193,
+ 194, 195, 155, 156, 157, 127, 153, 0, 246, 230,
+ 190, 102, 103, 104, 105, 109, 106, 107, 108, 110,
+ 29, 30, 28, 0, 26, 0, 6, 65, 66, 258,
+ 231, 257, 290, 59, 61, 161, 162, 163, 164, 165,
+ 166, 167, 168, 128, 159, 0, 60, 70, 288, 232,
+ 67, 273, 274, 275, 276, 277, 278, 279, 270, 272,
+ 135, 29, 30, 135, 135, 26, 68, 189, 187, 188,
+ 183, 185, 0, 0, 233, 97, 101, 98, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 208, 210,
+ 0, 86, 92, 87, 0, 88, 96, 94, 95, 93,
+ 91, 89, 90, 80, 82, 0, 0, 252, 284, 0,
+ 69, 283, 285, 281, 235, 1, 0, 4, 31, 55,
+ 295, 294, 224, 225, 226, 227, 269, 268, 267, 0,
+ 0, 79, 75, 76, 77, 78, 0, 72, 0, 192,
+ 152, 154, 247, 99, 0, 179, 180, 181, 182, 0,
+ 0, 177, 178, 169, 171, 0, 0, 27, 228, 256,
+ 289, 158, 160, 287, 271, 131, 135, 135, 134, 129,
+ 0, 184, 186, 0, 100, 209, 211, 293, 291, 292,
+ 85, 81, 83, 84, 234, 0, 282, 280, 3, 20,
+ 263, 264, 265, 260, 266, 259, 301, 302, 0, 0,
+ 0, 74, 73, 119, 118, 0, 116, 117, 0, 111,
+ 114, 115, 175, 176, 174, 170, 172, 173, 137, 138,
139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 135, 131, 132, 134, 250, 0, 0, 252,
- 0, 37, 38, 39, 54, 47, 49, 48, 51, 40,
- 41, 42, 43, 50, 52, 44, 32, 33, 36, 34,
- 0, 35, 0, 0, 0, 0, 303, 0, 298, 0,
- 111, 125, 121, 123, 119, 120, 122, 124, 112, 129,
- 249, 248, 254, 253, 0, 45, 46, 53, 0, 297,
- 295, 302, 0, 299, 285, 306, 0, 0, 0, 0,
- 0, 308, 0, 0, 304, 307, 305, 0, 0, 313,
- 314, 315, 316, 317, 0, 0, 0, 309, 0, 311,
- 0, 310, 312
+ 149, 150, 151, 136, 132, 133, 135, 251, 0, 0,
+ 253, 0, 37, 38, 39, 54, 47, 49, 48, 51,
+ 40, 41, 42, 43, 50, 52, 44, 32, 33, 36,
+ 34, 0, 35, 0, 0, 0, 0, 304, 0, 299,
+ 0, 112, 126, 122, 124, 120, 121, 123, 125, 113,
+ 130, 250, 249, 255, 254, 0, 45, 46, 53, 0,
+ 298, 296, 303, 0, 300, 286, 307, 0, 0, 0,
+ 0, 0, 309, 0, 0, 305, 308, 306, 0, 0,
+ 314, 315, 316, 317, 318, 0, 0, 0, 310, 0,
+ 312, 0, 311, 313
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -189, -189, -189, -41, -189, -189, -15, -38, -189, -189,
+ -189, -189, -189, -48, -189, -189, -15, -38, -189, -189,
-189, -189, -189, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, -189, -189, -189, 16, -189, -189, -189,
- -189, -35, -189, -189, -189, -189, -189, -189, -157, -189,
- -189, 138, -189, -189, 106, -189, -189, -189, -2, -189,
- -189, -189, -189, 83, -189, -189, 239, -79, -189, -189,
- -189, -189, 66, -189, -189, -189, -189, -189, -189, -189,
- -189, -189, -189, -189, -189, 126, -189, -189, -189, -189,
- -189, -189, 101, -189, -189, 51, -189, -189, 242, 17,
- -188, -189, -189, -189, -24, -189, -189, -97, -189, -189,
- -189, -123, -189, -130, -189
+ -189, -189, -189, -189, -189, -189, 37, -189, -189, -189,
+ -189, -42, -189, -189, -189, -189, -189, -189, -159, -189,
+ -189, 131, -189, -189, 96, -189, -189, -189, -6, -189,
+ -189, -189, -189, 74, -189, -189, 236, -71, -189, -189,
+ -189, -189, 62, -189, -189, -189, -189, -189, -189, -189,
+ -189, -189, -189, -189, -189, 122, -189, -189, -189, -189,
+ -189, -189, 95, -189, -189, 45, -189, -189, 225, 1,
+ -188, -189, -189, -189, -39, -189, -189, -103, -189, -189,
+ -189, -136, -189, -149, -189
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 56, 57, 58, 59, 60, 132, 124, 125, 288,
- 356, 357, 358, 359, 360, 361, 362, 61, 62, 63,
- 64, 85, 236, 237, 65, 202, 203, 204, 205, 66,
- 175, 119, 242, 308, 309, 310, 378, 67, 264, 332,
- 105, 106, 107, 143, 144, 145, 68, 252, 253, 254,
- 255, 69, 170, 171, 172, 70, 98, 99, 100, 101,
+ -1, 56, 57, 58, 59, 60, 132, 124, 125, 289,
+ 357, 358, 359, 360, 361, 362, 363, 61, 62, 63,
+ 64, 85, 237, 238, 65, 203, 204, 205, 206, 66,
+ 175, 119, 243, 309, 310, 311, 379, 67, 265, 333,
+ 105, 106, 107, 143, 144, 145, 68, 253, 254, 255,
+ 256, 69, 170, 171, 172, 70, 98, 99, 100, 101,
71, 188, 189, 190, 72, 73, 74, 75, 76, 109,
- 174, 381, 283, 339, 130, 131, 77, 78, 294, 228,
- 79, 158, 159, 213, 209, 210, 211, 149, 133, 279,
- 221, 80, 81, 297, 298, 299, 365, 366, 397, 367,
- 400, 401, 414, 415, 416
+ 174, 382, 284, 340, 130, 131, 77, 78, 295, 229,
+ 79, 158, 159, 214, 210, 211, 212, 149, 133, 280,
+ 222, 80, 81, 298, 299, 300, 366, 367, 398, 368,
+ 401, 402, 415, 416, 417
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -1171,228 +1174,228 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 123, 165, 275, 276, 337, 289, 267, 268, 207, 385,
- 176, 167, 206, 82, 102, 371, 215, 282, 120, 238,
- 121, 1, 363, 219, 164, 277, 108, 225, 399, 83,
- 2, 238, 84, 126, 3, 4, 5, 372, 404, 295,
- 296, 127, 6, 7, 128, 217, 129, 218, 226, 8,
- 9, 363, 220, 10, 147, 11, 134, 12, 13, 148,
- 230, 14, 150, 166, 168, 290, 315, 291, 302, 173,
- 15, 177, 227, 160, 16, 338, 303, 390, 122, 304,
- 17, 216, 18, 231, 212, 257, 232, 214, 151, 152,
- 222, 19, 20, 295, 296, 21, 22, 223, 224, 229,
- 23, 24, 103, 240, 25, 26, 153, 104, 333, 334,
- 241, 122, 161, 27, 162, 243, 373, 305, 259, 169,
- 256, 261, 386, 374, 265, 262, 28, 29, 30, 266,
- 269, 259, 271, 31, 278, 272, 281, 284, 286, 111,
- 273, 375, 32, 112, 287, 154, 208, 33, 306, 34,
- 300, 35, 36, 301, 178, 244, 245, 246, 247, 292,
- 313, 37, 38, 39, 40, 41, 42, 43, 44, 233,
- 234, 45, 311, 46, 312, 155, 235, 336, 379, 179,
- 340, 393, 47, 293, 368, 369, 370, 48, 49, 50,
- 380, 51, 52, 376, 383, 163, 377, 180, 53, 54,
- 181, 113, 384, 388, 387, 122, 389, -6, 55, 392,
- 402, 408, 307, 396, 394, 407, 399, 2, 280, 398,
- 406, 3, 4, 5, 409, 410, 411, 412, 413, 6,
- 7, 335, 422, 417, 403, 419, 8, 9, 420, 421,
- 10, 156, 11, 239, 12, 13, 157, 114, 14, 260,
- 314, 110, 248, 270, 274, 115, 258, 15, 116, 263,
- 285, 16, 409, 410, 411, 412, 413, 17, 391, 18,
- 249, 146, 316, 364, 182, 250, 251, 405, 19, 20,
- 117, 0, 21, 22, 418, 118, 0, 23, 24, 0,
- 0, 25, 26, 0, 0, 0, 0, 0, 0, 382,
- 27, 0, 183, 184, 185, 186, 0, 0, 0, 0,
- 187, 0, 0, 28, 29, 30, 0, 0, 0, 0,
- 31, 0, 0, 86, 0, 0, 0, 87, 0, 32,
- 0, 0, 0, 88, 33, 0, 34, 0, 35, 36,
- 0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
- 39, 40, 41, 42, 43, 44, 0, 0, 45, 0,
- 46, 0, 341, 0, 0, 0, 0, 0, 0, 47,
- 342, 0, 0, 395, 48, 49, 50, 2, 51, 52,
- 0, 3, 4, 5, 89, 53, 54, 0, 0, 6,
- 7, 0, 0, 191, -6, 55, 8, 9, 0, 192,
- 10, 193, 11, 0, 12, 13, 343, 344, 14, 0,
- 0, 0, 0, 0, 0, 0, 0, 15, 90, 91,
- 0, 16, 0, 345, 0, 0, 0, 17, 194, 18,
- 135, 136, 137, 138, 0, 92, 0, 0, 19, 20,
- 93, 0, 21, 22, 0, 346, 0, 23, 24, 0,
- 0, 25, 26, 347, 0, 348, 0, 0, 0, 0,
- 27, 139, 0, 140, 0, 141, 0, 94, 195, 349,
- 196, 142, 0, 28, 29, 30, 197, 0, 198, 0,
- 31, 199, 0, 0, 0, 0, 0, 350, 351, 32,
- 95, 96, 97, 0, 33, 0, 34, 0, 35, 36,
- 0, 0, 0, 200, 201, 0, 0, 0, 37, 38,
- 39, 40, 41, 42, 43, 44, 0, 0, 45, 0,
- 46, 0, 317, 352, 0, 353, 0, 0, 0, 47,
- 318, 0, 0, 354, 48, 49, 50, 355, 51, 52,
- 0, 0, 0, 0, 0, 53, 54, 0, 319, 320,
- 0, 0, 321, 0, 0, 55, 0, 0, 322, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 323, 324, 0, 0, 325,
- 326, 0, 327, 328, 329, 0, 330, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 123, 165, 276, 176, 268, 269, 208, 277, 386, 216,
+ 364, 82, 207, 372, 338, 167, 102, 83, 283, 1,
+ 400, 290, 84, 120, 164, 121, 220, 239, 2, 278,
+ 405, 108, 226, 3, 4, 5, 373, 296, 297, 239,
+ 86, 6, 7, 126, 87, 218, 364, 219, 8, 9,
+ 127, 88, 10, 227, 11, 221, 12, 13, 134, 128,
+ 14, 151, 152, 129, 147, 391, 148, 316, 168, 15,
+ 150, 173, 166, 16, 177, 122, 213, 228, 258, 17,
+ 153, 18, 291, 215, 292, 339, 223, 224, 296, 297,
+ 19, 20, 225, 217, 21, 22, 230, 241, 242, 23,
+ 24, 257, 89, 25, 26, 103, 262, 334, 335, 263,
+ 104, 272, 27, 244, 266, 374, 122, 267, 260, 154,
+ 270, 387, 375, 169, 273, 28, 29, 30, 282, 285,
+ 287, 260, 31, 274, 342, 288, 90, 91, 279, 301,
+ 376, 32, 302, 343, 209, 341, 33, 312, 34, 155,
+ 35, 36, 313, 92, 245, 246, 247, 248, 93, 314,
+ 37, 38, 39, 40, 41, 42, 43, 44, 369, 370,
+ 45, 337, 46, 371, 381, 384, 293, 380, 385, 344,
+ 345, 47, 394, 388, 395, 94, 48, 49, 50, 389,
+ 51, 52, 377, 393, 390, 378, 346, 53, 54, 399,
+ 294, 410, 411, 412, 413, 414, -6, 55, 95, 96,
+ 97, 403, 397, 407, 400, 156, 408, 2, 347, 409,
+ 157, 404, 3, 4, 5, 111, 348, 420, 349, 112,
+ 6, 7, 336, 423, 422, 421, 240, 8, 9, 261,
+ 281, 10, 350, 11, 271, 12, 13, 315, 110, 14,
+ 275, 249, 259, 264, 146, 286, 303, 317, 15, 365,
+ 351, 352, 16, 392, 304, 406, 419, 305, 17, 250,
+ 18, 0, 0, 0, 251, 252, 178, 0, 0, 19,
+ 20, 0, 0, 21, 22, 0, 160, 113, 23, 24,
+ 0, 0, 25, 26, 0, 0, 353, 0, 354, 0,
+ 383, 27, 179, 0, 0, 306, 355, 0, 0, 0,
+ 356, 0, 0, 0, 28, 29, 30, 0, 0, 0,
+ 180, 31, 0, 181, 0, 161, 0, 162, 0, 0,
+ 32, 0, 0, 114, 0, 33, 307, 34, 0, 35,
+ 36, 115, 231, 0, 116, 0, 0, 0, 0, 37,
+ 38, 39, 40, 41, 42, 43, 44, 0, 0, 45,
+ 0, 46, 0, 0, 0, 232, 117, 0, 233, 0,
+ 47, 118, 0, 0, 396, 48, 49, 50, 2, 51,
+ 52, 0, 0, 3, 4, 5, 53, 54, 0, 0,
+ 0, 6, 7, 0, 0, -6, 55, 182, 8, 9,
+ 308, 0, 10, 0, 11, 0, 12, 13, 163, 0,
+ 14, 410, 411, 412, 413, 414, 0, 0, 122, 15,
+ 418, 0, 0, 16, 0, 183, 184, 185, 186, 17,
+ 0, 18, 0, 187, 0, 0, 0, 0, 0, 0,
+ 19, 20, 0, 0, 21, 22, 0, 0, 0, 23,
+ 24, 234, 235, 25, 26, 0, 0, 0, 236, 0,
+ 0, 0, 27, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 28, 29, 30, 0, 0,
+ 0, 0, 31, 0, 0, 0, 0, 0, 0, 0,
+ 0, 32, 0, 0, 0, 0, 33, 318, 34, 0,
+ 35, 36, 0, 0, 0, 319, 0, 0, 0, 0,
+ 37, 38, 39, 40, 41, 42, 43, 44, 0, 0,
+ 45, 0, 46, 320, 321, 0, 0, 322, 0, 0,
+ 0, 47, 0, 323, 0, 0, 48, 49, 50, 0,
+ 51, 52, 191, 192, 0, 0, 0, 53, 54, 193,
+ 0, 194, 135, 136, 137, 138, 0, 55, 0, 0,
+ 324, 325, 0, 0, 326, 327, 0, 328, 329, 330,
+ 0, 331, 0, 0, 0, 0, 0, 0, 195, 0,
+ 0, 0, 0, 139, 0, 140, 0, 141, 0, 0,
+ 0, 0, 0, 142, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
+ 197, 0, 0, 0, 0, 0, 198, 0, 199, 0,
+ 332, 200, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 331
+ 0, 0, 0, 201, 202
};
static const yytype_int16 yycheck[] =
{
- 15, 39, 190, 39, 62, 5, 163, 164, 61, 61,
- 45, 42, 50, 187, 11, 4, 57, 205, 66, 98,
- 68, 1, 147, 32, 39, 61, 159, 34, 192, 61,
- 10, 110, 61, 159, 14, 15, 16, 26, 202, 189,
- 190, 159, 22, 23, 159, 60, 159, 62, 55, 29,
- 30, 147, 61, 33, 159, 35, 61, 37, 38, 159,
- 28, 41, 61, 61, 95, 65, 254, 67, 29, 159,
- 50, 159, 79, 27, 54, 133, 37, 202, 159, 40,
- 60, 187, 62, 51, 61, 126, 54, 0, 7, 8,
- 61, 71, 72, 189, 190, 75, 76, 159, 159, 201,
- 80, 81, 99, 61, 84, 85, 25, 104, 265, 266,
- 32, 159, 66, 93, 68, 3, 105, 78, 133, 150,
- 159, 61, 174, 112, 27, 159, 106, 107, 108, 27,
- 86, 146, 61, 113, 170, 198, 61, 61, 61, 20,
- 175, 130, 122, 24, 187, 64, 199, 127, 109, 129,
- 61, 131, 132, 159, 6, 43, 44, 45, 46, 159,
- 61, 141, 142, 143, 144, 145, 146, 147, 148, 137,
- 138, 151, 159, 153, 159, 94, 144, 159, 335, 31,
- 36, 369, 162, 183, 187, 198, 159, 167, 168, 169,
- 27, 171, 172, 182, 61, 149, 185, 49, 178, 179,
- 52, 82, 61, 198, 159, 159, 187, 187, 188, 201,
- 398, 201, 173, 191, 200, 403, 192, 10, 202, 198,
- 187, 14, 15, 16, 193, 194, 195, 196, 197, 22,
- 23, 269, 420, 202, 198, 187, 29, 30, 198, 187,
- 33, 160, 35, 105, 37, 38, 165, 128, 41, 143,
- 252, 12, 140, 170, 188, 136, 130, 50, 139, 158,
- 209, 54, 193, 194, 195, 196, 197, 60, 365, 62,
- 158, 29, 255, 297, 126, 163, 164, 400, 71, 72,
- 161, -1, 75, 76, 414, 166, -1, 80, 81, -1,
- -1, 84, 85, -1, -1, -1, -1, -1, -1, 337,
- 93, -1, 154, 155, 156, 157, -1, -1, -1, -1,
- 162, -1, -1, 106, 107, 108, -1, -1, -1, -1,
- 113, -1, -1, 8, -1, -1, -1, 12, -1, 122,
- -1, -1, -1, 18, 127, -1, 129, -1, 131, 132,
- -1, -1, -1, -1, -1, -1, -1, -1, 141, 142,
- 143, 144, 145, 146, 147, 148, -1, -1, 151, -1,
- 153, -1, 9, -1, -1, -1, -1, -1, -1, 162,
- 17, -1, -1, 388, 167, 168, 169, 10, 171, 172,
- -1, 14, 15, 16, 69, 178, 179, -1, -1, 22,
- 23, -1, -1, 13, 187, 188, 29, 30, -1, 19,
- 33, 21, 35, -1, 37, 38, 53, 54, 41, -1,
- -1, -1, -1, -1, -1, -1, -1, 50, 103, 104,
- -1, 54, -1, 70, -1, -1, -1, 60, 48, 62,
- 56, 57, 58, 59, -1, 120, -1, -1, 71, 72,
- 125, -1, 75, 76, -1, 92, -1, 80, 81, -1,
- -1, 84, 85, 100, -1, 102, -1, -1, -1, -1,
- 93, 87, -1, 89, -1, 91, -1, 152, 88, 116,
- 90, 97, -1, 106, 107, 108, 96, -1, 98, -1,
- 113, 101, -1, -1, -1, -1, -1, 134, 135, 122,
- 175, 176, 177, -1, 127, -1, 129, -1, 131, 132,
- -1, -1, -1, 123, 124, -1, -1, -1, 141, 142,
- 143, 144, 145, 146, 147, 148, -1, -1, 151, -1,
- 153, -1, 47, 170, -1, 172, -1, -1, -1, 162,
- 55, -1, -1, 180, 167, 168, 169, 184, 171, 172,
- -1, -1, -1, -1, -1, 178, 179, -1, 73, 74,
- -1, -1, 77, -1, -1, 188, -1, -1, 83, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 15, 39, 190, 45, 163, 164, 62, 40, 62, 57,
+ 148, 188, 50, 4, 63, 43, 11, 62, 206, 1,
+ 193, 5, 62, 67, 39, 69, 33, 98, 10, 62,
+ 203, 160, 35, 15, 16, 17, 27, 190, 191, 110,
+ 8, 23, 24, 160, 12, 60, 148, 62, 30, 31,
+ 160, 19, 34, 56, 36, 62, 38, 39, 62, 160,
+ 42, 7, 8, 160, 160, 203, 160, 255, 96, 51,
+ 62, 160, 62, 55, 160, 160, 62, 80, 126, 61,
+ 26, 63, 66, 0, 68, 134, 62, 160, 190, 191,
+ 72, 73, 160, 188, 76, 77, 202, 62, 33, 81,
+ 82, 160, 70, 85, 86, 100, 62, 266, 267, 160,
+ 105, 62, 94, 3, 28, 106, 160, 28, 133, 65,
+ 87, 175, 113, 151, 199, 107, 108, 109, 62, 62,
+ 62, 146, 114, 175, 9, 188, 104, 105, 171, 62,
+ 131, 123, 160, 18, 200, 37, 128, 160, 130, 95,
+ 132, 133, 160, 121, 44, 45, 46, 47, 126, 62,
+ 142, 143, 144, 145, 146, 147, 148, 149, 188, 199,
+ 152, 160, 154, 160, 28, 62, 160, 336, 62, 54,
+ 55, 163, 370, 160, 201, 153, 168, 169, 170, 199,
+ 172, 173, 183, 202, 188, 186, 71, 179, 180, 199,
+ 184, 194, 195, 196, 197, 198, 188, 189, 176, 177,
+ 178, 399, 192, 188, 193, 161, 404, 10, 93, 202,
+ 166, 199, 15, 16, 17, 21, 101, 188, 103, 25,
+ 23, 24, 270, 421, 188, 199, 105, 30, 31, 143,
+ 203, 34, 117, 36, 170, 38, 39, 253, 12, 42,
+ 188, 141, 130, 158, 29, 210, 30, 256, 51, 298,
+ 135, 136, 55, 366, 38, 401, 415, 41, 61, 159,
+ 63, -1, -1, -1, 164, 165, 6, -1, -1, 72,
+ 73, -1, -1, 76, 77, -1, 28, 83, 81, 82,
+ -1, -1, 85, 86, -1, -1, 171, -1, 173, -1,
+ 338, 94, 32, -1, -1, 79, 181, -1, -1, -1,
+ 185, -1, -1, -1, 107, 108, 109, -1, -1, -1,
+ 50, 114, -1, 53, -1, 67, -1, 69, -1, -1,
+ 123, -1, -1, 129, -1, 128, 110, 130, -1, 132,
+ 133, 137, 29, -1, 140, -1, -1, -1, -1, 142,
+ 143, 144, 145, 146, 147, 148, 149, -1, -1, 152,
+ -1, 154, -1, -1, -1, 52, 162, -1, 55, -1,
+ 163, 167, -1, -1, 389, 168, 169, 170, 10, 172,
+ 173, -1, -1, 15, 16, 17, 179, 180, -1, -1,
+ -1, 23, 24, -1, -1, 188, 189, 127, 30, 31,
+ 174, -1, 34, -1, 36, -1, 38, 39, 150, -1,
+ 42, 194, 195, 196, 197, 198, -1, -1, 160, 51,
+ 203, -1, -1, 55, -1, 155, 156, 157, 158, 61,
+ -1, 63, -1, 163, -1, -1, -1, -1, -1, -1,
+ 72, 73, -1, -1, 76, 77, -1, -1, -1, 81,
+ 82, 138, 139, 85, 86, -1, -1, -1, 145, -1,
+ -1, -1, 94, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 107, 108, 109, -1, -1,
+ -1, -1, 114, -1, -1, -1, -1, -1, -1, -1,
+ -1, 123, -1, -1, -1, -1, 128, 48, 130, -1,
+ 132, 133, -1, -1, -1, 56, -1, -1, -1, -1,
+ 142, 143, 144, 145, 146, 147, 148, 149, -1, -1,
+ 152, -1, 154, 74, 75, -1, -1, 78, -1, -1,
+ -1, 163, -1, 84, -1, -1, 168, 169, 170, -1,
+ 172, 173, 13, 14, -1, -1, -1, 179, 180, 20,
+ -1, 22, 57, 58, 59, 60, -1, 189, -1, -1,
+ 111, 112, -1, -1, 115, 116, -1, 118, 119, 120,
+ -1, 122, -1, -1, -1, -1, -1, -1, 49, -1,
+ -1, -1, -1, 88, -1, 90, -1, 92, -1, -1,
+ -1, -1, -1, 98, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 110, 111, -1, -1, 114,
- 115, -1, 117, 118, 119, -1, 121, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 89, -1,
+ 91, -1, -1, -1, -1, -1, 97, -1, 99, -1,
+ 181, 102, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 180
+ -1, -1, -1, 124, 125
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
- 0, 1, 10, 14, 15, 16, 22, 23, 29, 30,
- 33, 35, 37, 38, 41, 50, 54, 60, 62, 71,
- 72, 75, 76, 80, 81, 84, 85, 93, 106, 107,
- 108, 113, 122, 127, 129, 131, 132, 141, 142, 143,
- 144, 145, 146, 147, 148, 151, 153, 162, 167, 168,
- 169, 171, 172, 178, 179, 188, 204, 205, 206, 207,
- 208, 220, 221, 222, 223, 227, 232, 240, 249, 254,
- 258, 263, 267, 268, 269, 270, 271, 279, 280, 283,
- 294, 295, 187, 61, 61, 224, 8, 12, 18, 69,
- 103, 104, 120, 125, 152, 175, 176, 177, 259, 260,
- 261, 262, 11, 99, 104, 243, 244, 245, 159, 272,
- 259, 20, 24, 82, 128, 136, 139, 161, 166, 234,
- 66, 68, 159, 209, 210, 211, 159, 159, 159, 159,
- 277, 278, 209, 291, 61, 56, 57, 58, 59, 87,
- 89, 91, 97, 246, 247, 248, 291, 159, 159, 290,
- 61, 7, 8, 25, 64, 94, 160, 165, 284, 285,
- 27, 66, 68, 149, 209, 210, 61, 42, 95, 150,
- 255, 256, 257, 159, 273, 233, 234, 159, 6, 31,
- 49, 52, 126, 154, 155, 156, 157, 162, 264, 265,
- 266, 13, 19, 21, 48, 88, 90, 96, 98, 101,
- 123, 124, 228, 229, 230, 231, 210, 61, 199, 287,
- 288, 289, 61, 286, 0, 206, 187, 209, 209, 32,
- 61, 293, 61, 159, 159, 34, 55, 79, 282, 201,
- 28, 51, 54, 137, 138, 144, 225, 226, 260, 244,
- 61, 32, 235, 3, 43, 44, 45, 46, 140, 158,
- 163, 164, 250, 251, 252, 253, 159, 206, 278, 209,
- 247, 61, 159, 285, 241, 27, 27, 241, 241, 86,
- 256, 61, 198, 234, 265, 293, 39, 61, 170, 292,
- 229, 61, 293, 275, 61, 288, 61, 187, 212, 5,
- 65, 67, 159, 183, 281, 189, 190, 296, 297, 298,
- 61, 159, 29, 37, 40, 78, 109, 173, 236, 237,
- 238, 159, 159, 61, 251, 293, 292, 47, 55, 73,
- 74, 77, 83, 110, 111, 114, 115, 117, 118, 119,
- 121, 180, 242, 241, 241, 210, 159, 62, 133, 276,
- 36, 9, 17, 53, 54, 70, 92, 100, 102, 116,
- 134, 135, 170, 172, 180, 184, 213, 214, 215, 216,
- 217, 218, 219, 147, 297, 299, 300, 302, 187, 198,
- 159, 4, 26, 105, 112, 130, 182, 185, 239, 241,
- 27, 274, 210, 61, 61, 61, 174, 159, 198, 187,
- 202, 300, 201, 293, 200, 209, 191, 301, 198, 192,
- 303, 304, 293, 198, 202, 304, 187, 293, 201, 193,
- 194, 195, 196, 197, 305, 306, 307, 202, 306, 187,
- 198, 187, 293
+ 0, 1, 10, 15, 16, 17, 23, 24, 30, 31,
+ 34, 36, 38, 39, 42, 51, 55, 61, 63, 72,
+ 73, 76, 77, 81, 82, 85, 86, 94, 107, 108,
+ 109, 114, 123, 128, 130, 132, 133, 142, 143, 144,
+ 145, 146, 147, 148, 149, 152, 154, 163, 168, 169,
+ 170, 172, 173, 179, 180, 189, 205, 206, 207, 208,
+ 209, 221, 222, 223, 224, 228, 233, 241, 250, 255,
+ 259, 264, 268, 269, 270, 271, 272, 280, 281, 284,
+ 295, 296, 188, 62, 62, 225, 8, 12, 19, 70,
+ 104, 105, 121, 126, 153, 176, 177, 178, 260, 261,
+ 262, 263, 11, 100, 105, 244, 245, 246, 160, 273,
+ 260, 21, 25, 83, 129, 137, 140, 162, 167, 235,
+ 67, 69, 160, 210, 211, 212, 160, 160, 160, 160,
+ 278, 279, 210, 292, 62, 57, 58, 59, 60, 88,
+ 90, 92, 98, 247, 248, 249, 292, 160, 160, 291,
+ 62, 7, 8, 26, 65, 95, 161, 166, 285, 286,
+ 28, 67, 69, 150, 210, 211, 62, 43, 96, 151,
+ 256, 257, 258, 160, 274, 234, 235, 160, 6, 32,
+ 50, 53, 127, 155, 156, 157, 158, 163, 265, 266,
+ 267, 13, 14, 20, 22, 49, 89, 91, 97, 99,
+ 102, 124, 125, 229, 230, 231, 232, 211, 62, 200,
+ 288, 289, 290, 62, 287, 0, 207, 188, 210, 210,
+ 33, 62, 294, 62, 160, 160, 35, 56, 80, 283,
+ 202, 29, 52, 55, 138, 139, 145, 226, 227, 261,
+ 245, 62, 33, 236, 3, 44, 45, 46, 47, 141,
+ 159, 164, 165, 251, 252, 253, 254, 160, 207, 279,
+ 210, 248, 62, 160, 286, 242, 28, 28, 242, 242,
+ 87, 257, 62, 199, 235, 266, 294, 40, 62, 171,
+ 293, 230, 62, 294, 276, 62, 289, 62, 188, 213,
+ 5, 66, 68, 160, 184, 282, 190, 191, 297, 298,
+ 299, 62, 160, 30, 38, 41, 79, 110, 174, 237,
+ 238, 239, 160, 160, 62, 252, 294, 293, 48, 56,
+ 74, 75, 78, 84, 111, 112, 115, 116, 118, 119,
+ 120, 122, 181, 243, 242, 242, 211, 160, 63, 134,
+ 277, 37, 9, 18, 54, 55, 71, 93, 101, 103,
+ 117, 135, 136, 171, 173, 181, 185, 214, 215, 216,
+ 217, 218, 219, 220, 148, 298, 300, 301, 303, 188,
+ 199, 160, 4, 27, 106, 113, 131, 183, 186, 240,
+ 242, 28, 275, 211, 62, 62, 62, 175, 160, 199,
+ 188, 203, 301, 202, 294, 201, 210, 192, 302, 199,
+ 193, 304, 305, 294, 199, 203, 305, 188, 294, 202,
+ 194, 195, 196, 197, 198, 306, 307, 308, 203, 307,
+ 188, 199, 188, 294
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint16 yyr1[] =
{
- 0, 203, 204, 205, 205, 205, 206, 206, 206, 206,
- 206, 206, 206, 206, 206, 206, 206, 206, 206, 206,
- 207, 208, 208, 208, 208, 208, 209, 209, 210, 211,
- 211, 212, 212, 213, 213, 213, 214, 215, 215, 215,
- 215, 215, 215, 215, 215, 216, 216, 217, 217, 217,
- 217, 217, 217, 218, 219, 220, 221, 221, 222, 222,
- 222, 222, 223, 223, 223, 223, 223, 223, 223, 223,
- 223, 224, 224, 225, 225, 226, 226, 226, 226, 226,
- 227, 228, 228, 229, 229, 229, 230, 230, 230, 230,
- 230, 230, 231, 231, 231, 231, 232, 232, 232, 233,
- 233, 234, 234, 234, 234, 234, 234, 234, 234, 235,
- 235, 236, 236, 236, 236, 237, 237, 238, 238, 239,
- 239, 239, 239, 239, 239, 239, 240, 240, 240, 240,
- 240, 240, 240, 240, 241, 241, 242, 242, 242, 242,
- 242, 242, 242, 242, 242, 242, 242, 242, 242, 242,
- 242, 243, 243, 244, 245, 245, 245, 246, 246, 247,
- 248, 248, 248, 248, 248, 248, 248, 248, 249, 250,
- 250, 251, 251, 251, 251, 251, 252, 252, 253, 253,
- 253, 253, 254, 255, 255, 256, 257, 257, 257, 258,
- 258, 259, 259, 260, 260, 261, 261, 261, 261, 261,
- 261, 262, 262, 262, 262, 262, 262, 263, 264, 264,
- 265, 266, 266, 266, 266, 266, 266, 266, 266, 266,
- 266, 267, 267, 267, 267, 267, 267, 267, 267, 267,
- 267, 267, 267, 267, 267, 268, 268, 268, 269, 269,
- 270, 270, 271, 271, 271, 272, 272, 272, 273, 274,
- 274, 275, 275, 276, 276, 277, 277, 278, 279, 279,
- 280, 280, 281, 281, 281, 281, 282, 282, 282, 283,
- 284, 284, 285, 285, 285, 285, 285, 285, 285, 286,
- 286, 287, 287, 288, 288, 289, 290, 290, 291, 291,
- 292, 292, 292, 293, 293, 294, 295, 296, 296, 297,
- 298, 298, 299, 299, 300, 301, 302, 303, 303, 304,
- 305, 305, 306, 307, 307, 307, 307, 307
+ 0, 204, 205, 206, 206, 206, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 208, 209, 209, 209, 209, 209, 210, 210, 211, 212,
+ 212, 213, 213, 214, 214, 214, 215, 216, 216, 216,
+ 216, 216, 216, 216, 216, 217, 217, 218, 218, 218,
+ 218, 218, 218, 219, 220, 221, 222, 222, 223, 223,
+ 223, 223, 224, 224, 224, 224, 224, 224, 224, 224,
+ 224, 225, 225, 226, 226, 227, 227, 227, 227, 227,
+ 228, 229, 229, 230, 230, 230, 231, 231, 231, 231,
+ 231, 231, 231, 232, 232, 232, 232, 233, 233, 233,
+ 234, 234, 235, 235, 235, 235, 235, 235, 235, 235,
+ 236, 236, 237, 237, 237, 237, 238, 238, 239, 239,
+ 240, 240, 240, 240, 240, 240, 240, 241, 241, 241,
+ 241, 241, 241, 241, 241, 242, 242, 243, 243, 243,
+ 243, 243, 243, 243, 243, 243, 243, 243, 243, 243,
+ 243, 243, 244, 244, 245, 246, 246, 246, 247, 247,
+ 248, 249, 249, 249, 249, 249, 249, 249, 249, 250,
+ 251, 251, 252, 252, 252, 252, 252, 253, 253, 254,
+ 254, 254, 254, 255, 256, 256, 257, 258, 258, 258,
+ 259, 259, 260, 260, 261, 261, 262, 262, 262, 262,
+ 262, 262, 263, 263, 263, 263, 263, 263, 264, 265,
+ 265, 266, 267, 267, 267, 267, 267, 267, 267, 267,
+ 267, 267, 268, 268, 268, 268, 268, 268, 268, 268,
+ 268, 268, 268, 268, 268, 268, 269, 269, 269, 270,
+ 270, 271, 271, 272, 272, 272, 273, 273, 273, 274,
+ 275, 275, 276, 276, 277, 277, 278, 278, 279, 280,
+ 280, 281, 281, 282, 282, 282, 282, 283, 283, 283,
+ 284, 285, 285, 286, 286, 286, 286, 286, 286, 286,
+ 287, 287, 288, 288, 289, 289, 290, 291, 291, 292,
+ 292, 293, 293, 293, 294, 294, 295, 296, 297, 297,
+ 298, 299, 299, 300, 300, 301, 302, 303, 304, 304,
+ 305, 306, 306, 307, 308, 308, 308, 308, 308
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -1407,29 +1410,29 @@ static const yytype_uint8 yyr2[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 0, 2, 2, 2, 1, 1, 1, 1, 1,
2, 2, 1, 2, 2, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 3, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 3, 5,
- 3, 4, 4, 3, 0, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 3,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 2, 2, 2, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 2, 3,
+ 5, 3, 4, 4, 3, 0, 2, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 2, 1, 1, 1, 2, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 2,
- 1, 2, 2, 2, 2, 2, 1, 1, 1, 1,
- 1, 1, 2, 2, 1, 2, 1, 1, 1, 2,
+ 1, 1, 2, 1, 2, 1, 1, 1, 2, 1,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 3,
+ 2, 1, 2, 2, 2, 2, 2, 1, 1, 1,
+ 1, 1, 1, 2, 2, 1, 2, 1, 1, 1,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 2, 2,
+ 1, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 2, 2, 3, 1,
+ 2, 2, 2, 2, 3, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 2, 0, 4,
+ 1, 0, 0, 2, 2, 2, 2, 1, 1, 3,
+ 3, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 2, 2, 1,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 2, 2, 2, 2, 3, 1, 2,
- 2, 2, 2, 3, 2, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 0, 4, 1,
- 0, 0, 2, 2, 2, 2, 1, 1, 3, 3,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 1, 2, 1, 1, 1, 5, 2, 1, 2, 1,
- 1, 1, 1, 1, 1, 5, 1, 3, 2, 3,
- 1, 1, 2, 1, 5, 4, 3, 2, 1, 6,
- 3, 2, 3, 1, 1, 1, 1, 1
+ 2, 1, 2, 1, 1, 1, 5, 2, 1, 2,
+ 1, 1, 1, 1, 1, 1, 5, 1, 3, 2,
+ 3, 1, 1, 2, 1, 5, 4, 3, 2, 1,
+ 6, 3, 2, 3, 1, 1, 1, 1, 1
};
@@ -2106,7 +2109,7 @@ yyreduce:
switch (yyn)
{
case 5:
-#line 377 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 378 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
/* I will need to incorporate much more fine grained
* error messages. The following should suffice for
@@ -2119,85 +2122,85 @@ yyreduce:
ip_ctx->errpos.nline,
ip_ctx->errpos.ncol);
}
-#line 2123 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2126 "ntp_parser.c" /* yacc.c:1646 */
break;
case 20:
-#line 413 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 414 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
peer_node *my_node;
my_node = create_peer_node((yyvsp[-2].Integer), (yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.peers, my_node);
}
-#line 2134 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2137 "ntp_parser.c" /* yacc.c:1646 */
break;
case 27:
-#line 432 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 433 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Address_node) = create_address_node((yyvsp[0].String), (yyvsp[-1].Integer)); }
-#line 2140 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2143 "ntp_parser.c" /* yacc.c:1646 */
break;
case 28:
-#line 437 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 438 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Address_node) = create_address_node((yyvsp[0].String), AF_UNSPEC); }
-#line 2146 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2149 "ntp_parser.c" /* yacc.c:1646 */
break;
case 29:
-#line 442 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 443 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = AF_INET; }
-#line 2152 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2155 "ntp_parser.c" /* yacc.c:1646 */
break;
case 30:
-#line 444 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 445 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = AF_INET6; }
-#line 2158 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2161 "ntp_parser.c" /* yacc.c:1646 */
break;
case 31:
-#line 449 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 450 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2164 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2167 "ntp_parser.c" /* yacc.c:1646 */
break;
case 32:
-#line 451 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 452 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2173 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2176 "ntp_parser.c" /* yacc.c:1646 */
break;
case 36:
-#line 465 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 466 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2179 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2182 "ntp_parser.c" /* yacc.c:1646 */
break;
case 45:
-#line 481 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 482 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2185 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2188 "ntp_parser.c" /* yacc.c:1646 */
break;
case 46:
-#line 483 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 484 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_uval((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2191 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2194 "ntp_parser.c" /* yacc.c:1646 */
break;
case 53:
-#line 497 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 498 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2197 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2200 "ntp_parser.c" /* yacc.c:1646 */
break;
case 55:
-#line 511 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 512 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
unpeer_node *my_node;
@@ -2205,85 +2208,85 @@ yyreduce:
if (my_node)
APPEND_G_FIFO(cfgt.unpeers, my_node);
}
-#line 2209 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2212 "ntp_parser.c" /* yacc.c:1646 */
break;
case 58:
-#line 532 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 533 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.broadcastclient = 1; }
-#line 2215 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2218 "ntp_parser.c" /* yacc.c:1646 */
break;
case 59:
-#line 534 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 535 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[0].Address_fifo)); }
-#line 2221 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2224 "ntp_parser.c" /* yacc.c:1646 */
break;
case 60:
-#line 536 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 537 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[0].Address_fifo)); }
-#line 2227 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2230 "ntp_parser.c" /* yacc.c:1646 */
break;
case 61:
-#line 538 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 539 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.mdnstries = (yyvsp[0].Integer); }
-#line 2233 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2236 "ntp_parser.c" /* yacc.c:1646 */
break;
case 62:
-#line 549 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 550 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *atrv;
atrv = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
APPEND_G_FIFO(cfgt.vars, atrv);
}
-#line 2244 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2247 "ntp_parser.c" /* yacc.c:1646 */
break;
case 63:
-#line 556 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 557 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.control_key = (yyvsp[0].Integer); }
-#line 2250 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2253 "ntp_parser.c" /* yacc.c:1646 */
break;
case 64:
-#line 558 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 559 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
cfgt.auth.cryptosw++;
CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[0].Attr_val_fifo));
}
-#line 2259 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2262 "ntp_parser.c" /* yacc.c:1646 */
break;
case 65:
-#line 563 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 564 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.keys = (yyvsp[0].String); }
-#line 2265 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2268 "ntp_parser.c" /* yacc.c:1646 */
break;
case 66:
-#line 565 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 566 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.keysdir = (yyvsp[0].String); }
-#line 2271 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2274 "ntp_parser.c" /* yacc.c:1646 */
break;
case 67:
-#line 567 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 568 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.request_key = (yyvsp[0].Integer); }
-#line 2277 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2280 "ntp_parser.c" /* yacc.c:1646 */
break;
case 68:
-#line 569 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 570 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.revoke = (yyvsp[0].Integer); }
-#line 2283 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2286 "ntp_parser.c" /* yacc.c:1646 */
break;
case 69:
-#line 571 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 572 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
cfgt.auth.trusted_key_list = (yyvsp[0].Attr_val_fifo);
@@ -2292,38 +2295,38 @@ yyreduce:
// else
// LINK_SLIST(cfgt.auth.trusted_key_list, $2, link);
}
-#line 2296 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2299 "ntp_parser.c" /* yacc.c:1646 */
break;
case 70:
-#line 580 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 581 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.auth.ntp_signd_socket = (yyvsp[0].String); }
-#line 2302 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2305 "ntp_parser.c" /* yacc.c:1646 */
break;
case 71:
-#line 585 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 586 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2308 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2311 "ntp_parser.c" /* yacc.c:1646 */
break;
case 72:
-#line 587 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 588 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2317 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2320 "ntp_parser.c" /* yacc.c:1646 */
break;
case 73:
-#line 595 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 596 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2323 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2326 "ntp_parser.c" /* yacc.c:1646 */
break;
case 74:
-#line 597 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 598 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val) = NULL;
cfgt.auth.revoke = (yyvsp[0].Integer);
@@ -2332,59 +2335,59 @@ yyreduce:
"please use 'revoke %d' instead.",
cfgt.auth.revoke, cfgt.auth.revoke);
}
-#line 2336 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2339 "ntp_parser.c" /* yacc.c:1646 */
break;
case 80:
-#line 622 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 623 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[0].Attr_val_fifo)); }
-#line 2342 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2345 "ntp_parser.c" /* yacc.c:1646 */
break;
case 81:
-#line 627 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 628 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2351 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2354 "ntp_parser.c" /* yacc.c:1646 */
break;
case 82:
-#line 632 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 633 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2360 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2363 "ntp_parser.c" /* yacc.c:1646 */
break;
case 83:
-#line 640 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 641 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2366 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2369 "ntp_parser.c" /* yacc.c:1646 */
break;
case 84:
-#line 642 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 643 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2372 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2375 "ntp_parser.c" /* yacc.c:1646 */
break;
case 85:
-#line 644 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+#line 645 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2378 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2381 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 96:
-#line 670 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 97:
+#line 672 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[0].Int_fifo)); }
-#line 2384 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2387 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 97:
-#line 672 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 98:
+#line 674 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
cfgt.stats_dir = (yyvsp[0].String);
@@ -2393,55 +2396,55 @@ yyreduce:
yyerror("statsdir remote configuration ignored");
}
}
-#line 2397 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2400 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 98:
-#line 681 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 99:
+#line 683 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
filegen_node *fgn;
fgn = create_filegen_node((yyvsp[-1].Integer), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.filegen_opts, fgn);
}
-#line 2408 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2411 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 99:
-#line 691 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 100:
+#line 693 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 2417 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2420 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 100:
-#line 696 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 101:
+#line 698 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = NULL;
APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 2426 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2429 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 109:
-#line 715 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 110:
+#line 717 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2432 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2435 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 110:
-#line 717 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 111:
+#line 719 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2441 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2444 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 111:
-#line 725 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 112:
+#line 727 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
(yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
@@ -2451,11 +2454,11 @@ yyreduce:
yyerror("filegen file remote config ignored");
}
}
-#line 2455 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2458 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 112:
-#line 735 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 113:
+#line 737 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
(yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
@@ -2464,11 +2467,11 @@ yyreduce:
yyerror("filegen type remote config ignored");
}
}
-#line 2468 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2471 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 113:
-#line 744 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 114:
+#line 746 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
const char *err;
@@ -2483,33 +2486,33 @@ yyreduce:
yyerror(err);
}
}
-#line 2487 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2490 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 114:
-#line 759 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 115:
+#line 761 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2493 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2496 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 126:
-#line 789 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 127:
+#line 791 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[0].Attr_val_fifo));
}
-#line 2501 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2504 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 127:
-#line 793 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 128:
+#line 795 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[0].Attr_val_fifo));
}
-#line 2509 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2512 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 128:
-#line 797 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 129:
+#line 799 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2517,11 +2520,11 @@ yyreduce:
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2521 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2524 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 129:
-#line 805 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 130:
+#line 807 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2529,11 +2532,11 @@ yyreduce:
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2533 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2536 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 130:
-#line 813 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 131:
+#line 815 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2541,11 +2544,11 @@ yyreduce:
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2545 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2548 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 131:
-#line 821 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 132:
+#line 823 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2560,11 +2563,11 @@ yyreduce:
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2564 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2567 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 132:
-#line 836 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 133:
+#line 838 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2579,11 +2582,11 @@ yyreduce:
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2583 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2586 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 133:
-#line 851 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 134:
+#line 853 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node * rn;
@@ -2592,115 +2595,115 @@ yyreduce:
NULL, NULL, (yyvsp[0].Int_fifo), lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2596 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2599 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 134:
-#line 863 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 135:
+#line 865 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Int_fifo) = NULL; }
-#line 2602 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2605 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 135:
-#line 865 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 136:
+#line 867 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 2611 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2614 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 151:
-#line 891 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 152:
+#line 893 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2620 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2623 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 152:
-#line 896 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 153:
+#line 898 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2629 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2632 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 153:
-#line 904 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 154:
+#line 906 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2635 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2638 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 157:
-#line 915 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 158:
+#line 917 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2644 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2647 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 158:
-#line 920 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 159:
+#line 922 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2653 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2656 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 159:
-#line 928 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 160:
+#line 930 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2659 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2662 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 168:
-#line 948 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 169:
+#line 950 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
addr_opts_node *aon;
aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.fudge, aon);
}
-#line 2670 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2673 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 169:
-#line 958 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 170:
+#line 960 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2679 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2682 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 170:
-#line 963 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 171:
+#line 965 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2688 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
- break;
-
- case 171:
-#line 971 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2694 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2691 "ntp_parser.c" /* yacc.c:1646 */
break;
case 172:
#line 973 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2700 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
+#line 2697 "ntp_parser.c" /* yacc.c:1646 */
break;
case 173:
#line 975 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2703 "ntp_parser.c" /* yacc.c:1646 */
+ break;
+
+ case 174:
+#line 977 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if ((yyvsp[0].Integer) >= 0 && (yyvsp[0].Integer) <= 16) {
(yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
@@ -2709,89 +2712,89 @@ yyreduce:
yyerror("fudge factor: stratum value not in [0..16], ignored");
}
}
-#line 2713 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2716 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 174:
-#line 984 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 175:
+#line 986 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2719 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2722 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 175:
-#line 986 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 176:
+#line 988 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2725 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2728 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 182:
-#line 1007 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 183:
+#line 1009 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[0].Attr_val_fifo)); }
-#line 2731 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2734 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 183:
-#line 1012 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 184:
+#line 1014 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2740 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2743 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 184:
-#line 1017 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 185:
+#line 1019 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2749 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2752 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 185:
-#line 1025 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 186:
+#line 1027 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2755 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2758 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 189:
-#line 1041 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 190:
+#line 1043 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2761 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2764 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 190:
-#line 1043 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 191:
+#line 1045 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2767 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2770 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 191:
-#line 1048 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 192:
+#line 1050 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2776 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2779 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 192:
-#line 1053 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 193:
+#line 1055 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2785 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2788 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 193:
-#line 1061 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 194:
+#line 1063 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2791 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2794 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 194:
-#line 1063 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 195:
+#line 1065 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
(yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
@@ -2805,74 +2808,74 @@ yyreduce:
yyerror(err_str);
}
}
-#line 2809 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2812 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 207:
-#line 1102 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 208:
+#line 1104 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[0].Attr_val_fifo)); }
-#line 2815 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2818 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 208:
-#line 1107 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 209:
+#line 1109 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2824 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2827 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 209:
-#line 1112 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 210:
+#line 1114 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 2833 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2836 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 210:
-#line 1120 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 211:
+#line 1122 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2839 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2842 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 223:
-#line 1145 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 224:
+#line 1147 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
av = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2850 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2853 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 224:
-#line 1152 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 225:
+#line 1154 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
av = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2861 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2864 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 225:
-#line 1159 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 226:
+#line 1161 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2872 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2875 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 226:
-#line 1166 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 227:
+#line 1168 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
char error_text[64];
attr_val *av;
@@ -2888,11 +2891,11 @@ yyreduce:
yyerror(error_text);
}
}
-#line 2892 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2895 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 227:
-#line 1182 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 228:
+#line 1184 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (!lex_from_file()) {
YYFREE((yyvsp[-1].String)); /* avoid leak */
@@ -2911,68 +2914,68 @@ yyreduce:
}
YYFREE((yyvsp[-1].String)); /* avoid leak */
}
-#line 2915 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
- break;
-
- case 228:
-#line 1201 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { lex_flush_stack(); }
-#line 2921 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2918 "ntp_parser.c" /* yacc.c:1646 */
break;
case 229:
#line 1203 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { /* see drift_parm below for actions */ }
-#line 2927 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ { lex_flush_stack(); }
+#line 2924 "ntp_parser.c" /* yacc.c:1646 */
break;
case 230:
#line 1205 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[0].Attr_val_fifo)); }
-#line 2933 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ { /* see drift_parm below for actions */ }
+#line 2930 "ntp_parser.c" /* yacc.c:1646 */
break;
case 231:
#line 1207 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[0].String_fifo)); }
-#line 2939 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[0].Attr_val_fifo)); }
+#line 2936 "ntp_parser.c" /* yacc.c:1646 */
break;
case 232:
#line 1209 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { APPEND_G_FIFO(cfgt.setvar, (yyvsp[0].Set_var)); }
-#line 2945 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[0].String_fifo)); }
+#line 2942 "ntp_parser.c" /* yacc.c:1646 */
break;
case 233:
#line 1211 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { APPEND_G_FIFO(cfgt.setvar, (yyvsp[0].Set_var)); }
+#line 2948 "ntp_parser.c" /* yacc.c:1646 */
+ break;
+
+ case 234:
+#line 1213 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
addr_opts_node *aon;
aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.trap, aon);
}
-#line 2956 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2959 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 234:
-#line 1218 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 235:
+#line 1220 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[0].Attr_val_fifo)); }
-#line 2962 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2965 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 239:
-#line 1233 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 240:
+#line 1235 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
#ifndef LEAP_SMEAR
yyerror("Built without LEAP_SMEAR support.");
#endif
}
-#line 2972 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2975 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 245:
-#line 1253 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 246:
+#line 1255 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
attr_val *av;
@@ -2983,11 +2986,11 @@ yyreduce:
yyerror("driftfile remote configuration ignored");
}
}
-#line 2987 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 2990 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 246:
-#line 1264 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 247:
+#line 1266 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
attr_val *av;
@@ -3000,11 +3003,11 @@ yyreduce:
yyerror("driftfile remote configuration ignored");
}
}
-#line 3004 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3007 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 247:
-#line 1277 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 248:
+#line 1279 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
attr_val *av;
@@ -3014,71 +3017,71 @@ yyreduce:
yyerror("driftfile remote configuration ignored");
}
}
-#line 3018 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3021 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 248:
-#line 1290 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 249:
+#line 1292 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Set_var) = create_setvar_node((yyvsp[-3].String), (yyvsp[-1].String), (yyvsp[0].Integer)); }
-#line 3024 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3027 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 250:
-#line 1296 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 251:
+#line 1298 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 0; }
-#line 3030 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3033 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 251:
-#line 1301 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 252:
+#line 1303 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
-#line 3036 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3039 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 252:
-#line 1303 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 253:
+#line 1305 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 3045 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3048 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 253:
-#line 1311 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 254:
+#line 1313 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 3051 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3054 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 254:
-#line 1313 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 255:
+#line 1315 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), estrdup((yyvsp[0].Address_node)->address));
destroy_address_node((yyvsp[0].Address_node));
}
-#line 3060 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3063 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 255:
-#line 1321 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 256:
+#line 1323 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 3069 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3072 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 256:
-#line 1326 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 257:
+#line 1328 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 3078 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3081 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 257:
-#line 1334 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 258:
+#line 1336 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
char prefix;
char * type;
@@ -3100,141 +3103,141 @@ yyreduce:
(yyval.Attr_val) = create_attr_sval(prefix, estrdup(type));
YYFREE((yyvsp[0].String));
}
-#line 3104 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3107 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 258:
-#line 1359 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 259:
+#line 1361 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
nic_rule_node *nrn;
nrn = create_nic_rule_node((yyvsp[0].Integer), NULL, (yyvsp[-1].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
-#line 3115 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3118 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 259:
-#line 1366 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 260:
+#line 1368 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
nic_rule_node *nrn;
nrn = create_nic_rule_node(0, (yyvsp[0].String), (yyvsp[-1].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
-#line 3126 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3129 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 269:
-#line 1394 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 270:
+#line 1396 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[0].Int_fifo)); }
-#line 3132 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3135 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 270:
-#line 1399 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 271:
+#line 1401 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 3141 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3144 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 271:
-#line 1404 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 272:
+#line 1406 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = NULL;
APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 3150 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3153 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 279:
-#line 1428 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 280:
+#line 1430 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 3159 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3162 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 280:
-#line 1433 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 281:
+#line 1435 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
}
-#line 3168 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3171 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 281:
-#line 1441 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 282:
+#line 1443 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 3177 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3180 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 282:
-#line 1446 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 283:
+#line 1448 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
-#line 3186 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3189 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 283:
-#line 1454 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 284:
+#line 1456 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_ival('i', (yyvsp[0].Integer)); }
-#line 3192 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3195 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 285:
-#line 1460 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 286:
+#line 1462 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[-3].Integer), (yyvsp[-1].Integer)); }
-#line 3198 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3201 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 286:
-#line 1465 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 287:
+#line 1467 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.String_fifo) = (yyvsp[-1].String_fifo);
APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
}
-#line 3207 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3210 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 287:
-#line 1470 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 288:
+#line 1472 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.String_fifo) = NULL;
APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
}
-#line 3216 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3219 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 288:
-#line 1478 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 289:
+#line 1480 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Address_fifo) = (yyvsp[-1].Address_fifo);
APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
}
-#line 3225 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3228 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 289:
-#line 1483 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 290:
+#line 1485 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Address_fifo) = NULL;
APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
}
-#line 3234 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3237 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 290:
-#line 1491 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 291:
+#line 1493 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if ((yyvsp[0].Integer) != 0 && (yyvsp[0].Integer) != 1) {
yyerror("Integer value is not boolean (0 or 1). Assuming 1");
@@ -3243,29 +3246,29 @@ yyreduce:
(yyval.Integer) = (yyvsp[0].Integer);
}
}
-#line 3247 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3250 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 291:
-#line 1499 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 292:
+#line 1501 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 1; }
-#line 3253 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3256 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 292:
-#line 1500 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 293:
+#line 1502 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 0; }
-#line 3259 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3262 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 293:
-#line 1504 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 294:
+#line 1506 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Double) = (double)(yyvsp[0].Integer); }
-#line 3265 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3268 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 295:
-#line 1515 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 296:
+#line 1517 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
sim_node *sn;
@@ -3275,125 +3278,125 @@ yyreduce:
/* Revert from ; to \n for end-of-command */
old_config_style = 1;
}
-#line 3279 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3282 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 296:
-#line 1532 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 297:
+#line 1534 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ old_config_style = 0; }
-#line 3285 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3288 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 297:
-#line 1537 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 298:
+#line 1539 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
-#line 3294 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3297 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 298:
-#line 1542 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 299:
+#line 1544 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
-#line 3303 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3306 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 299:
-#line 1550 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 300:
+#line 1552 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3309 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3312 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 302:
-#line 1560 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 303:
+#line 1562 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_server_fifo) = (yyvsp[-1].Sim_server_fifo);
APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
}
-#line 3318 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3321 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 303:
-#line 1565 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 304:
+#line 1567 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_server_fifo) = NULL;
APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
}
-#line 3327 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3330 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 304:
-#line 1573 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 305:
+#line 1575 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Sim_server) = ONLY_SIM(create_sim_server((yyvsp[-4].Address_node), (yyvsp[-2].Double), (yyvsp[-1].Sim_script_fifo))); }
-#line 3333 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3336 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 305:
-#line 1578 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 306:
+#line 1580 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Double) = (yyvsp[-1].Double); }
-#line 3339 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3342 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 306:
-#line 1583 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 307:
+#line 1585 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Address_node) = (yyvsp[0].Address_node); }
-#line 3345 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3348 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 307:
-#line 1588 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 308:
+#line 1590 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_script_fifo) = (yyvsp[-1].Sim_script_fifo);
APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
}
-#line 3354 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3357 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 308:
-#line 1593 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 309:
+#line 1595 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_script_fifo) = NULL;
APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
}
-#line 3363 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3366 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 309:
-#line 1601 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 310:
+#line 1603 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Sim_script) = ONLY_SIM(create_sim_script_info((yyvsp[-3].Double), (yyvsp[-1].Attr_val_fifo))); }
-#line 3369 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3372 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 310:
-#line 1606 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 311:
+#line 1608 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
-#line 3378 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3381 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 311:
-#line 1611 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 312:
+#line 1613 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
-#line 3387 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3390 "ntp_parser.c" /* yacc.c:1646 */
break;
- case 312:
-#line 1619 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 313:
+#line 1621 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3393 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3396 "ntp_parser.c" /* yacc.c:1646 */
break;
-#line 3397 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+#line 3400 "ntp_parser.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -3621,7 +3624,7 @@ yyreturn:
#endif
return yyresult;
}
-#line 1630 "../../ntpd/ntp_parser.y" /* yacc.c:1906 */
+#line 1632 "../../ntpd/ntp_parser.y" /* yacc.c:1906 */
void
diff --git a/contrib/ntp/ntpd/ntp_parser.h b/contrib/ntp/ntpd/ntp_parser.h
index 3409e25..cfb9f0e 100644
--- a/contrib/ntp/ntpd/ntp_parser.h
+++ b/contrib/ntp/ntpd/ntp_parser.h
@@ -55,191 +55,192 @@ extern int yydebug;
T_Automax = 265,
T_Average = 266,
T_Bclient = 267,
- T_Beacon = 268,
- T_Broadcast = 269,
- T_Broadcastclient = 270,
- T_Broadcastdelay = 271,
- T_Burst = 272,
- T_Calibrate = 273,
- T_Ceiling = 274,
- T_Clockstats = 275,
- T_Cohort = 276,
- T_ControlKey = 277,
- T_Crypto = 278,
- T_Cryptostats = 279,
- T_Ctl = 280,
- T_Day = 281,
- T_Default = 282,
- T_Digest = 283,
- T_Disable = 284,
- T_Discard = 285,
- T_Dispersion = 286,
- T_Double = 287,
- T_Driftfile = 288,
- T_Drop = 289,
- T_Dscp = 290,
- T_Ellipsis = 291,
- T_Enable = 292,
- T_End = 293,
- T_False = 294,
- T_File = 295,
- T_Filegen = 296,
- T_Filenum = 297,
- T_Flag1 = 298,
- T_Flag2 = 299,
- T_Flag3 = 300,
- T_Flag4 = 301,
- T_Flake = 302,
- T_Floor = 303,
- T_Freq = 304,
- T_Fudge = 305,
- T_Host = 306,
- T_Huffpuff = 307,
- T_Iburst = 308,
- T_Ident = 309,
- T_Ignore = 310,
- T_Incalloc = 311,
- T_Incmem = 312,
- T_Initalloc = 313,
- T_Initmem = 314,
- T_Includefile = 315,
- T_Integer = 316,
- T_Interface = 317,
- T_Intrange = 318,
- T_Io = 319,
- T_Ipv4 = 320,
- T_Ipv4_flag = 321,
- T_Ipv6 = 322,
- T_Ipv6_flag = 323,
- T_Kernel = 324,
- T_Key = 325,
- T_Keys = 326,
- T_Keysdir = 327,
- T_Kod = 328,
- T_Mssntp = 329,
- T_Leapfile = 330,
- T_Leapsmearinterval = 331,
- T_Limited = 332,
- T_Link = 333,
- T_Listen = 334,
- T_Logconfig = 335,
- T_Logfile = 336,
- T_Loopstats = 337,
- T_Lowpriotrap = 338,
- T_Manycastclient = 339,
- T_Manycastserver = 340,
- T_Mask = 341,
- T_Maxage = 342,
- T_Maxclock = 343,
- T_Maxdepth = 344,
- T_Maxdist = 345,
- T_Maxmem = 346,
- T_Maxpoll = 347,
- T_Mdnstries = 348,
- T_Mem = 349,
- T_Memlock = 350,
- T_Minclock = 351,
- T_Mindepth = 352,
- T_Mindist = 353,
- T_Minimum = 354,
- T_Minpoll = 355,
- T_Minsane = 356,
- T_Mode = 357,
- T_Mode7 = 358,
- T_Monitor = 359,
- T_Month = 360,
- T_Mru = 361,
- T_Multicastclient = 362,
- T_Nic = 363,
- T_Nolink = 364,
- T_Nomodify = 365,
- T_Nomrulist = 366,
- T_None = 367,
- T_Nonvolatile = 368,
- T_Nopeer = 369,
- T_Noquery = 370,
- T_Noselect = 371,
- T_Noserve = 372,
- T_Notrap = 373,
- T_Notrust = 374,
- T_Ntp = 375,
- T_Ntpport = 376,
- T_NtpSignDsocket = 377,
- T_Orphan = 378,
- T_Orphanwait = 379,
- T_PCEdigest = 380,
- T_Panic = 381,
- T_Peer = 382,
- T_Peerstats = 383,
- T_Phone = 384,
- T_Pid = 385,
- T_Pidfile = 386,
- T_Pool = 387,
- T_Port = 388,
- T_Preempt = 389,
- T_Prefer = 390,
- T_Protostats = 391,
- T_Pw = 392,
- T_Randfile = 393,
- T_Rawstats = 394,
- T_Refid = 395,
- T_Requestkey = 396,
- T_Reset = 397,
- T_Restrict = 398,
- T_Revoke = 399,
- T_Rlimit = 400,
- T_Saveconfigdir = 401,
- T_Server = 402,
- T_Setvar = 403,
- T_Source = 404,
- T_Stacksize = 405,
- T_Statistics = 406,
- T_Stats = 407,
- T_Statsdir = 408,
- T_Step = 409,
- T_Stepback = 410,
- T_Stepfwd = 411,
- T_Stepout = 412,
- T_Stratum = 413,
- T_String = 414,
- T_Sys = 415,
- T_Sysstats = 416,
- T_Tick = 417,
- T_Time1 = 418,
- T_Time2 = 419,
- T_Timer = 420,
- T_Timingstats = 421,
- T_Tinker = 422,
- T_Tos = 423,
- T_Trap = 424,
- T_True = 425,
- T_Trustedkey = 426,
- T_Ttl = 427,
- T_Type = 428,
- T_U_int = 429,
- T_UEcrypto = 430,
- T_UEcryptonak = 431,
- T_UEdigest = 432,
- T_Unconfig = 433,
- T_Unpeer = 434,
- T_Version = 435,
- T_WanderThreshold = 436,
- T_Week = 437,
- T_Wildcard = 438,
- T_Xleave = 439,
- T_Year = 440,
- T_Flag = 441,
- T_EOC = 442,
- T_Simulate = 443,
- T_Beep_Delay = 444,
- T_Sim_Duration = 445,
- T_Server_Offset = 446,
- T_Duration = 447,
- T_Freq_Offset = 448,
- T_Wander = 449,
- T_Jitter = 450,
- T_Prop_Delay = 451,
- T_Proc_Delay = 452
+ T_Bcpollbstep = 268,
+ T_Beacon = 269,
+ T_Broadcast = 270,
+ T_Broadcastclient = 271,
+ T_Broadcastdelay = 272,
+ T_Burst = 273,
+ T_Calibrate = 274,
+ T_Ceiling = 275,
+ T_Clockstats = 276,
+ T_Cohort = 277,
+ T_ControlKey = 278,
+ T_Crypto = 279,
+ T_Cryptostats = 280,
+ T_Ctl = 281,
+ T_Day = 282,
+ T_Default = 283,
+ T_Digest = 284,
+ T_Disable = 285,
+ T_Discard = 286,
+ T_Dispersion = 287,
+ T_Double = 288,
+ T_Driftfile = 289,
+ T_Drop = 290,
+ T_Dscp = 291,
+ T_Ellipsis = 292,
+ T_Enable = 293,
+ T_End = 294,
+ T_False = 295,
+ T_File = 296,
+ T_Filegen = 297,
+ T_Filenum = 298,
+ T_Flag1 = 299,
+ T_Flag2 = 300,
+ T_Flag3 = 301,
+ T_Flag4 = 302,
+ T_Flake = 303,
+ T_Floor = 304,
+ T_Freq = 305,
+ T_Fudge = 306,
+ T_Host = 307,
+ T_Huffpuff = 308,
+ T_Iburst = 309,
+ T_Ident = 310,
+ T_Ignore = 311,
+ T_Incalloc = 312,
+ T_Incmem = 313,
+ T_Initalloc = 314,
+ T_Initmem = 315,
+ T_Includefile = 316,
+ T_Integer = 317,
+ T_Interface = 318,
+ T_Intrange = 319,
+ T_Io = 320,
+ T_Ipv4 = 321,
+ T_Ipv4_flag = 322,
+ T_Ipv6 = 323,
+ T_Ipv6_flag = 324,
+ T_Kernel = 325,
+ T_Key = 326,
+ T_Keys = 327,
+ T_Keysdir = 328,
+ T_Kod = 329,
+ T_Mssntp = 330,
+ T_Leapfile = 331,
+ T_Leapsmearinterval = 332,
+ T_Limited = 333,
+ T_Link = 334,
+ T_Listen = 335,
+ T_Logconfig = 336,
+ T_Logfile = 337,
+ T_Loopstats = 338,
+ T_Lowpriotrap = 339,
+ T_Manycastclient = 340,
+ T_Manycastserver = 341,
+ T_Mask = 342,
+ T_Maxage = 343,
+ T_Maxclock = 344,
+ T_Maxdepth = 345,
+ T_Maxdist = 346,
+ T_Maxmem = 347,
+ T_Maxpoll = 348,
+ T_Mdnstries = 349,
+ T_Mem = 350,
+ T_Memlock = 351,
+ T_Minclock = 352,
+ T_Mindepth = 353,
+ T_Mindist = 354,
+ T_Minimum = 355,
+ T_Minpoll = 356,
+ T_Minsane = 357,
+ T_Mode = 358,
+ T_Mode7 = 359,
+ T_Monitor = 360,
+ T_Month = 361,
+ T_Mru = 362,
+ T_Multicastclient = 363,
+ T_Nic = 364,
+ T_Nolink = 365,
+ T_Nomodify = 366,
+ T_Nomrulist = 367,
+ T_None = 368,
+ T_Nonvolatile = 369,
+ T_Nopeer = 370,
+ T_Noquery = 371,
+ T_Noselect = 372,
+ T_Noserve = 373,
+ T_Notrap = 374,
+ T_Notrust = 375,
+ T_Ntp = 376,
+ T_Ntpport = 377,
+ T_NtpSignDsocket = 378,
+ T_Orphan = 379,
+ T_Orphanwait = 380,
+ T_PCEdigest = 381,
+ T_Panic = 382,
+ T_Peer = 383,
+ T_Peerstats = 384,
+ T_Phone = 385,
+ T_Pid = 386,
+ T_Pidfile = 387,
+ T_Pool = 388,
+ T_Port = 389,
+ T_Preempt = 390,
+ T_Prefer = 391,
+ T_Protostats = 392,
+ T_Pw = 393,
+ T_Randfile = 394,
+ T_Rawstats = 395,
+ T_Refid = 396,
+ T_Requestkey = 397,
+ T_Reset = 398,
+ T_Restrict = 399,
+ T_Revoke = 400,
+ T_Rlimit = 401,
+ T_Saveconfigdir = 402,
+ T_Server = 403,
+ T_Setvar = 404,
+ T_Source = 405,
+ T_Stacksize = 406,
+ T_Statistics = 407,
+ T_Stats = 408,
+ T_Statsdir = 409,
+ T_Step = 410,
+ T_Stepback = 411,
+ T_Stepfwd = 412,
+ T_Stepout = 413,
+ T_Stratum = 414,
+ T_String = 415,
+ T_Sys = 416,
+ T_Sysstats = 417,
+ T_Tick = 418,
+ T_Time1 = 419,
+ T_Time2 = 420,
+ T_Timer = 421,
+ T_Timingstats = 422,
+ T_Tinker = 423,
+ T_Tos = 424,
+ T_Trap = 425,
+ T_True = 426,
+ T_Trustedkey = 427,
+ T_Ttl = 428,
+ T_Type = 429,
+ T_U_int = 430,
+ T_UEcrypto = 431,
+ T_UEcryptonak = 432,
+ T_UEdigest = 433,
+ T_Unconfig = 434,
+ T_Unpeer = 435,
+ T_Version = 436,
+ T_WanderThreshold = 437,
+ T_Week = 438,
+ T_Wildcard = 439,
+ T_Xleave = 440,
+ T_Year = 441,
+ T_Flag = 442,
+ T_EOC = 443,
+ T_Simulate = 444,
+ T_Beep_Delay = 445,
+ T_Sim_Duration = 446,
+ T_Server_Offset = 447,
+ T_Duration = 448,
+ T_Freq_Offset = 449,
+ T_Wander = 450,
+ T_Jitter = 451,
+ T_Prop_Delay = 452,
+ T_Proc_Delay = 453
};
#endif
/* Tokens. */
@@ -253,191 +254,192 @@ extern int yydebug;
#define T_Automax 265
#define T_Average 266
#define T_Bclient 267
-#define T_Beacon 268
-#define T_Broadcast 269
-#define T_Broadcastclient 270
-#define T_Broadcastdelay 271
-#define T_Burst 272
-#define T_Calibrate 273
-#define T_Ceiling 274
-#define T_Clockstats 275
-#define T_Cohort 276
-#define T_ControlKey 277
-#define T_Crypto 278
-#define T_Cryptostats 279
-#define T_Ctl 280
-#define T_Day 281
-#define T_Default 282
-#define T_Digest 283
-#define T_Disable 284
-#define T_Discard 285
-#define T_Dispersion 286
-#define T_Double 287
-#define T_Driftfile 288
-#define T_Drop 289
-#define T_Dscp 290
-#define T_Ellipsis 291
-#define T_Enable 292
-#define T_End 293
-#define T_False 294
-#define T_File 295
-#define T_Filegen 296
-#define T_Filenum 297
-#define T_Flag1 298
-#define T_Flag2 299
-#define T_Flag3 300
-#define T_Flag4 301
-#define T_Flake 302
-#define T_Floor 303
-#define T_Freq 304
-#define T_Fudge 305
-#define T_Host 306
-#define T_Huffpuff 307
-#define T_Iburst 308
-#define T_Ident 309
-#define T_Ignore 310
-#define T_Incalloc 311
-#define T_Incmem 312
-#define T_Initalloc 313
-#define T_Initmem 314
-#define T_Includefile 315
-#define T_Integer 316
-#define T_Interface 317
-#define T_Intrange 318
-#define T_Io 319
-#define T_Ipv4 320
-#define T_Ipv4_flag 321
-#define T_Ipv6 322
-#define T_Ipv6_flag 323
-#define T_Kernel 324
-#define T_Key 325
-#define T_Keys 326
-#define T_Keysdir 327
-#define T_Kod 328
-#define T_Mssntp 329
-#define T_Leapfile 330
-#define T_Leapsmearinterval 331
-#define T_Limited 332
-#define T_Link 333
-#define T_Listen 334
-#define T_Logconfig 335
-#define T_Logfile 336
-#define T_Loopstats 337
-#define T_Lowpriotrap 338
-#define T_Manycastclient 339
-#define T_Manycastserver 340
-#define T_Mask 341
-#define T_Maxage 342
-#define T_Maxclock 343
-#define T_Maxdepth 344
-#define T_Maxdist 345
-#define T_Maxmem 346
-#define T_Maxpoll 347
-#define T_Mdnstries 348
-#define T_Mem 349
-#define T_Memlock 350
-#define T_Minclock 351
-#define T_Mindepth 352
-#define T_Mindist 353
-#define T_Minimum 354
-#define T_Minpoll 355
-#define T_Minsane 356
-#define T_Mode 357
-#define T_Mode7 358
-#define T_Monitor 359
-#define T_Month 360
-#define T_Mru 361
-#define T_Multicastclient 362
-#define T_Nic 363
-#define T_Nolink 364
-#define T_Nomodify 365
-#define T_Nomrulist 366
-#define T_None 367
-#define T_Nonvolatile 368
-#define T_Nopeer 369
-#define T_Noquery 370
-#define T_Noselect 371
-#define T_Noserve 372
-#define T_Notrap 373
-#define T_Notrust 374
-#define T_Ntp 375
-#define T_Ntpport 376
-#define T_NtpSignDsocket 377
-#define T_Orphan 378
-#define T_Orphanwait 379
-#define T_PCEdigest 380
-#define T_Panic 381
-#define T_Peer 382
-#define T_Peerstats 383
-#define T_Phone 384
-#define T_Pid 385
-#define T_Pidfile 386
-#define T_Pool 387
-#define T_Port 388
-#define T_Preempt 389
-#define T_Prefer 390
-#define T_Protostats 391
-#define T_Pw 392
-#define T_Randfile 393
-#define T_Rawstats 394
-#define T_Refid 395
-#define T_Requestkey 396
-#define T_Reset 397
-#define T_Restrict 398
-#define T_Revoke 399
-#define T_Rlimit 400
-#define T_Saveconfigdir 401
-#define T_Server 402
-#define T_Setvar 403
-#define T_Source 404
-#define T_Stacksize 405
-#define T_Statistics 406
-#define T_Stats 407
-#define T_Statsdir 408
-#define T_Step 409
-#define T_Stepback 410
-#define T_Stepfwd 411
-#define T_Stepout 412
-#define T_Stratum 413
-#define T_String 414
-#define T_Sys 415
-#define T_Sysstats 416
-#define T_Tick 417
-#define T_Time1 418
-#define T_Time2 419
-#define T_Timer 420
-#define T_Timingstats 421
-#define T_Tinker 422
-#define T_Tos 423
-#define T_Trap 424
-#define T_True 425
-#define T_Trustedkey 426
-#define T_Ttl 427
-#define T_Type 428
-#define T_U_int 429
-#define T_UEcrypto 430
-#define T_UEcryptonak 431
-#define T_UEdigest 432
-#define T_Unconfig 433
-#define T_Unpeer 434
-#define T_Version 435
-#define T_WanderThreshold 436
-#define T_Week 437
-#define T_Wildcard 438
-#define T_Xleave 439
-#define T_Year 440
-#define T_Flag 441
-#define T_EOC 442
-#define T_Simulate 443
-#define T_Beep_Delay 444
-#define T_Sim_Duration 445
-#define T_Server_Offset 446
-#define T_Duration 447
-#define T_Freq_Offset 448
-#define T_Wander 449
-#define T_Jitter 450
-#define T_Prop_Delay 451
-#define T_Proc_Delay 452
+#define T_Bcpollbstep 268
+#define T_Beacon 269
+#define T_Broadcast 270
+#define T_Broadcastclient 271
+#define T_Broadcastdelay 272
+#define T_Burst 273
+#define T_Calibrate 274
+#define T_Ceiling 275
+#define T_Clockstats 276
+#define T_Cohort 277
+#define T_ControlKey 278
+#define T_Crypto 279
+#define T_Cryptostats 280
+#define T_Ctl 281
+#define T_Day 282
+#define T_Default 283
+#define T_Digest 284
+#define T_Disable 285
+#define T_Discard 286
+#define T_Dispersion 287
+#define T_Double 288
+#define T_Driftfile 289
+#define T_Drop 290
+#define T_Dscp 291
+#define T_Ellipsis 292
+#define T_Enable 293
+#define T_End 294
+#define T_False 295
+#define T_File 296
+#define T_Filegen 297
+#define T_Filenum 298
+#define T_Flag1 299
+#define T_Flag2 300
+#define T_Flag3 301
+#define T_Flag4 302
+#define T_Flake 303
+#define T_Floor 304
+#define T_Freq 305
+#define T_Fudge 306
+#define T_Host 307
+#define T_Huffpuff 308
+#define T_Iburst 309
+#define T_Ident 310
+#define T_Ignore 311
+#define T_Incalloc 312
+#define T_Incmem 313
+#define T_Initalloc 314
+#define T_Initmem 315
+#define T_Includefile 316
+#define T_Integer 317
+#define T_Interface 318
+#define T_Intrange 319
+#define T_Io 320
+#define T_Ipv4 321
+#define T_Ipv4_flag 322
+#define T_Ipv6 323
+#define T_Ipv6_flag 324
+#define T_Kernel 325
+#define T_Key 326
+#define T_Keys 327
+#define T_Keysdir 328
+#define T_Kod 329
+#define T_Mssntp 330
+#define T_Leapfile 331
+#define T_Leapsmearinterval 332
+#define T_Limited 333
+#define T_Link 334
+#define T_Listen 335
+#define T_Logconfig 336
+#define T_Logfile 337
+#define T_Loopstats 338
+#define T_Lowpriotrap 339
+#define T_Manycastclient 340
+#define T_Manycastserver 341
+#define T_Mask 342
+#define T_Maxage 343
+#define T_Maxclock 344
+#define T_Maxdepth 345
+#define T_Maxdist 346
+#define T_Maxmem 347
+#define T_Maxpoll 348
+#define T_Mdnstries 349
+#define T_Mem 350
+#define T_Memlock 351
+#define T_Minclock 352
+#define T_Mindepth 353
+#define T_Mindist 354
+#define T_Minimum 355
+#define T_Minpoll 356
+#define T_Minsane 357
+#define T_Mode 358
+#define T_Mode7 359
+#define T_Monitor 360
+#define T_Month 361
+#define T_Mru 362
+#define T_Multicastclient 363
+#define T_Nic 364
+#define T_Nolink 365
+#define T_Nomodify 366
+#define T_Nomrulist 367
+#define T_None 368
+#define T_Nonvolatile 369
+#define T_Nopeer 370
+#define T_Noquery 371
+#define T_Noselect 372
+#define T_Noserve 373
+#define T_Notrap 374
+#define T_Notrust 375
+#define T_Ntp 376
+#define T_Ntpport 377
+#define T_NtpSignDsocket 378
+#define T_Orphan 379
+#define T_Orphanwait 380
+#define T_PCEdigest 381
+#define T_Panic 382
+#define T_Peer 383
+#define T_Peerstats 384
+#define T_Phone 385
+#define T_Pid 386
+#define T_Pidfile 387
+#define T_Pool 388
+#define T_Port 389
+#define T_Preempt 390
+#define T_Prefer 391
+#define T_Protostats 392
+#define T_Pw 393
+#define T_Randfile 394
+#define T_Rawstats 395
+#define T_Refid 396
+#define T_Requestkey 397
+#define T_Reset 398
+#define T_Restrict 399
+#define T_Revoke 400
+#define T_Rlimit 401
+#define T_Saveconfigdir 402
+#define T_Server 403
+#define T_Setvar 404
+#define T_Source 405
+#define T_Stacksize 406
+#define T_Statistics 407
+#define T_Stats 408
+#define T_Statsdir 409
+#define T_Step 410
+#define T_Stepback 411
+#define T_Stepfwd 412
+#define T_Stepout 413
+#define T_Stratum 414
+#define T_String 415
+#define T_Sys 416
+#define T_Sysstats 417
+#define T_Tick 418
+#define T_Time1 419
+#define T_Time2 420
+#define T_Timer 421
+#define T_Timingstats 422
+#define T_Tinker 423
+#define T_Tos 424
+#define T_Trap 425
+#define T_True 426
+#define T_Trustedkey 427
+#define T_Ttl 428
+#define T_Type 429
+#define T_U_int 430
+#define T_UEcrypto 431
+#define T_UEcryptonak 432
+#define T_UEdigest 433
+#define T_Unconfig 434
+#define T_Unpeer 435
+#define T_Version 436
+#define T_WanderThreshold 437
+#define T_Week 438
+#define T_Wildcard 439
+#define T_Xleave 440
+#define T_Year 441
+#define T_Flag 442
+#define T_EOC 443
+#define T_Simulate 444
+#define T_Beep_Delay 445
+#define T_Sim_Duration 446
+#define T_Server_Offset 447
+#define T_Duration 448
+#define T_Freq_Offset 449
+#define T_Wander 450
+#define T_Jitter 451
+#define T_Prop_Delay 452
+#define T_Proc_Delay 453
/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
@@ -463,7 +465,7 @@ union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-#line 467 "../../ntpd/ntp_parser.h" /* yacc.c:1909 */
+#line 469 "ntp_parser.h" /* yacc.c:1909 */
};
typedef union YYSTYPE YYSTYPE;
diff --git a/contrib/ntp/ntpd/ntp_peer.c b/contrib/ntp/ntpd/ntp_peer.c
index cc23a38..04dee20 100644
--- a/contrib/ntp/ntpd/ntp_peer.c
+++ b/contrib/ntp/ntpd/ntp_peer.c
@@ -273,6 +273,22 @@ findexistingpeer(
/*
* findpeer - find and return a peer match for a received datagram in
* the peer_hash table.
+ *
+ * [Bug 3072] To faciliate a faster reorganisation after routing changes
+ * the original code re-assigned the peer address to be the destination
+ * of the received packet and initiated another round on a mismatch.
+ * Unfortunately this leaves us wide open for a DoS attack where the
+ * attacker directs a packet with forged destination address to us --
+ * this results in a wrong interface assignment, actually creating a DoS
+ * situation.
+ *
+ * This condition would persist until the next update of the interface
+ * list, but a continued attack would put us out of business again soon
+ * enough. Authentication alone does not help here, since it does not
+ * protect the UDP layer and leaves us open for a replay attack.
+ *
+ * So we do not update the adresses and wait until the next interface
+ * list update does the right thing for us.
*/
struct peer *
findpeer(
@@ -291,61 +307,50 @@ findpeer(
srcadr = &rbufp->recv_srcadr;
hash = NTP_HASH_ADDR(srcadr);
for (p = peer_hash[hash]; p != NULL; p = p->adr_link) {
- if (ADDR_PORT_EQ(srcadr, &p->srcadr)) {
-
- /*
- * if the association matching rules determine
- * that this is not a valid combination, then
- * look for the next valid peer association.
- */
- *action = MATCH_ASSOC(p->hmode, pkt_mode);
- /*
- * A response to our manycastclient solicitation
- * might be misassociated with an ephemeral peer
- * already spun for the server. If the packet's
- * org timestamp doesn't match the peer's, check
- * if it matches the ACST prototype peer's. If
- * so it is a redundant solicitation response,
- * return AM_ERR to discard it. [Bug 1762]
- */
- if (MODE_SERVER == pkt_mode &&
- AM_PROCPKT == *action) {
- pkt = &rbufp->recv_pkt;
- NTOHL_FP(&pkt->org, &pkt_org);
- if (!L_ISEQU(&p->aorg, &pkt_org) &&
- findmanycastpeer(rbufp))
- *action = AM_ERR;
- }
+ /* [Bug 3072] ensure interface of peer matches */
+ if (p->dstadr != rbufp->dstadr)
+ continue;
+
+ /* ensure peer source address matches */
+ if ( ! ADDR_PORT_EQ(srcadr, &p->srcadr))
+ continue;
+
+ /* If the association matching rules determine that this
+ * is not a valid combination, then look for the next
+ * valid peer association.
+ */
+ *action = MATCH_ASSOC(p->hmode, pkt_mode);
+
+ /* A response to our manycastclient solicitation might
+ * be misassociated with an ephemeral peer already spun
+ * for the server. If the packet's org timestamp
+ * doesn't match the peer's, check if it matches the
+ * ACST prototype peer's. If so it is a redundant
+ * solicitation response, return AM_ERR to discard it.
+ * [Bug 1762]
+ */
+ if (MODE_SERVER == pkt_mode && AM_PROCPKT == *action) {
+ pkt = &rbufp->recv_pkt;
+ NTOHL_FP(&pkt->org, &pkt_org);
+ if (!L_ISEQU(&p->aorg, &pkt_org) &&
+ findmanycastpeer(rbufp))
+ *action = AM_ERR;
+ }
- /*
- * if an error was returned, exit back right
- * here.
- */
- if (*action == AM_ERR)
- return NULL;
+ /* if an error was returned, exit back right here. */
+ if (*action == AM_ERR)
+ return NULL;
- /*
- * if a match is found, we stop our search.
- */
- if (*action != AM_NOMATCH)
- break;
- }
+ /* if a match is found, we stop our search. */
+ if (*action != AM_NOMATCH)
+ break;
}
- /*
- * If no matching association is found
- */
- if (NULL == p) {
+ /* If no matching association is found... */
+ if (NULL == p)
*action = MATCH_ASSOC(NO_PEER, pkt_mode);
- } else if (p->dstadr != rbufp->dstadr) {
- set_peerdstadr(p, rbufp->dstadr);
- if (p->dstadr == rbufp->dstadr) {
- DPRINTF(1, ("Changed %s local address to match response\n",
- stoa(&p->srcadr)));
- return findpeer(rbufp, pkt_mode, action);
- }
- }
+
return p;
}
@@ -621,6 +626,12 @@ set_peerdstadr(
{
struct peer * unlinked;
+ DEBUG_INSIST(p != NULL);
+
+ if (p == NULL)
+ return;
+
+ /* check for impossible or identical assignment */
if (p->dstadr == dstadr)
return;
@@ -632,6 +643,8 @@ set_peerdstadr(
(INT_MCASTIF & dstadr->flags) && MODE_CLIENT == p->hmode) {
return;
}
+
+ /* unlink from list if we have an address prior to assignment */
if (p->dstadr != NULL) {
p->dstadr->peercnt--;
UNLINK_SLIST(unlinked, p->dstadr->peers, p, ilink,
@@ -640,8 +653,11 @@ set_peerdstadr(
stoa(&p->srcadr), latoa(p->dstadr),
latoa(dstadr));
}
+
p->dstadr = dstadr;
- if (dstadr != NULL) {
+
+ /* link to list if we have an address after assignment */
+ if (p->dstadr != NULL) {
LINK_SLIST(dstadr->peers, p, ilink);
dstadr->peercnt++;
}
diff --git a/contrib/ntp/ntpd/ntp_proto.c b/contrib/ntp/ntpd/ntp_proto.c
index 513b99f..ad04ed4 100644
--- a/contrib/ntp/ntpd/ntp_proto.c
+++ b/contrib/ntp/ntpd/ntp_proto.c
@@ -138,6 +138,7 @@ char *sys_ident = NULL; /* identity scheme */
* TOS and multicast mapping stuff
*/
int sys_floor = 0; /* cluster stratum floor */
+u_char sys_bcpollbstep = 0; /* Broadcast Poll backstep gate */
int sys_ceiling = STRATUM_UNSPEC - 1; /* cluster stratum ceiling */
int sys_minsane = 1; /* minimum candidates */
int sys_minclock = NTP_MINCLOCK; /* minimum candidates */
@@ -278,7 +279,7 @@ valid_NAK(
u_char hismode
)
{
- int base_packet_length = MIN_V4_PKT_LEN;
+ int base_packet_length = MIN_V4_PKT_LEN;
int remainder_size;
struct pkt * rpkt;
int keyid;
@@ -335,7 +336,7 @@ valid_NAK(
myorg = &peer->borg;
else
myorg = &peer->aorg;
-
+
if (L_ISZERO(&p_org) ||
L_ISZERO( myorg) ||
!L_ISEQU(&p_org, myorg)) {
@@ -1450,22 +1451,66 @@ receive(
++bail;
}
- /* too early? worth an error, too! */
+ /* too early? worth an error, too!
+ *
+ * [Bug 3113] Ensure that at least one poll
+ * interval has elapsed since the last **clean**
+ * packet was received. We limit the check to
+ * **clean** packets to prevent replayed packets
+ * and incorrectly authenticated packets, which
+ * we'll discard, from being used to create a
+ * denial of service condition.
+ */
deadband = (1u << pkt->ppoll);
if (FLAG_BC_VOL & peer->flags)
deadband -= 3; /* allow greater fuzz after volley */
- if ((current_time - peer->timelastrec) < deadband) {
+ if ((current_time - peer->timereceived) < deadband) {
msyslog(LOG_INFO, "receive: broadcast packet from %s arrived after %lu, not %lu seconds!",
stoa(&rbufp->recv_srcadr),
- (current_time - peer->timelastrec),
+ (current_time - peer->timereceived),
deadband);
++bail;
}
- /* Alert if time from the server is non-monotonic */
- tdiff = p_xmt;
- L_SUB(&tdiff, &peer->bxmt);
- if (tdiff.l_i < 0) {
+ /* Alert if time from the server is non-monotonic.
+ *
+ * [Bug 3114] is about Broadcast mode replay DoS.
+ *
+ * Broadcast mode *assumes* a trusted network.
+ * Even so, it's nice to be robust in the face
+ * of attacks.
+ *
+ * If we get an authenticated broadcast packet
+ * with an "earlier" timestamp, it means one of
+ * two things:
+ *
+ * - the broadcast server had a backward step.
+ *
+ * - somebody is trying a replay attack.
+ *
+ * deadband: By default, we assume the broadcast
+ * network is trustable, so we take our accepted
+ * broadcast packets as we receive them. But
+ * some folks might want to take additional poll
+ * delays before believing a backward step.
+ */
+ if (sys_bcpollbstep) {
+ /* pkt->ppoll or peer->ppoll ? */
+ deadband = (1u << pkt->ppoll)
+ * sys_bcpollbstep + 2;
+ } else {
+ deadband = 0;
+ }
+
+ if (L_ISZERO(&peer->bxmt)) {
+ tdiff.l_ui = tdiff.l_uf = 0;
+ } else {
+ tdiff = p_xmt;
+ L_SUB(&tdiff, &peer->bxmt);
+ }
+ if (tdiff.l_i < 0 &&
+ (current_time - peer->timereceived) < deadband)
+ {
msyslog(LOG_INFO, "receive: broadcast packet from %s contains non-monotonic timestamp: %#010x.%08x -> %#010x.%08x",
stoa(&rbufp->recv_srcadr),
peer->bxmt.l_ui, peer->bxmt.l_uf,
@@ -1474,8 +1519,6 @@ receive(
++bail;
}
- peer->bxmt = p_xmt;
-
if (bail) {
peer->timelastrec = current_time;
sys_declined++;
@@ -1623,7 +1666,7 @@ receive(
peer->borg.l_ui, peer->borg.l_uf);
return;
}
-
+
/*
* Basic mode checks:
*
@@ -1645,13 +1688,38 @@ receive(
} else if (peer->flip == 0) {
INSIST(0 != hisstratum);
INSIST(STRATUM_UNSPEC != hisstratum);
+
if (0) {
} else if (L_ISZERO(&p_org)) {
+ char *action;
+
+ L_CLR(&peer->aorg);
+ /**/
+ switch (hismode) {
+ /* We allow 0org for: */
+ case UCHAR_MAX:
+ action = "Allow";
+ break;
+ /* We disallow 0org for: */
+ case MODE_UNSPEC:
+ case MODE_ACTIVE:
+ case MODE_PASSIVE:
+ case MODE_CLIENT:
+ case MODE_SERVER:
+ case MODE_BROADCAST:
+ action = "Drop";
+ peer->bogusorg++;
+ peer->flash |= TEST2; /* bogus */
+ break;
+ default:
+ INSIST(!"receive(): impossible hismode");
+ break;
+ }
+ /**/
msyslog(LOG_INFO,
- "receive: Got 0 origin timestamp from %s@%s xmt %#010x.%08x",
- hm_str, ntoa(&peer->srcadr),
+ "receive: %s 0 origin timestamp from %s@%s xmt %#010x.%08x",
+ action, hm_str, ntoa(&peer->srcadr),
ntohl(pkt->xmt.l_ui), ntohl(pkt->xmt.l_uf));
- L_CLR(&peer->aorg);
} else if (!L_ISEQU(&p_org, &peer->aorg)) {
/* are there cases here where we should bail? */
/* Should we set TEST2 if we decide to try xleave? */
@@ -1800,6 +1868,12 @@ receive(
"receive: Bad broadcast auth (%d) from %s",
is_authentic, ntoa(&peer->srcadr));
}
+
+ /*
+ * Now that we know the packet is correctly authenticated,
+ * update peer->bxmt.
+ */
+ peer->bxmt = p_xmt;
}
@@ -1878,7 +1952,7 @@ receive(
peer->badauth++;
return;
}
- break;
+ break;
case MODE_CLIENT: /* client mode */
#if 0 /* At this point, MODE_CONTROL is overloaded by MODE_BCLIENT */
@@ -1886,14 +1960,14 @@ receive(
#endif
case MODE_PRIVATE: /* private mode */
case MODE_BCLIENT: /* broadcast client mode */
- break;
+ break;
case MODE_UNSPEC: /* unspecified (old version) */
default:
msyslog(LOG_INFO,
"receive: Unexpected mode (%d) in packet from %s",
hismode, ntoa(&peer->srcadr));
- break;
+ break;
}
@@ -2695,6 +2769,7 @@ peer_clear(
)
{
u_char u;
+ l_fp bxmt = peer->bxmt; /* bcast clients retain this! */
#ifdef AUTOKEY
/*
@@ -2731,6 +2806,10 @@ peer_clear(
peer->flash = peer_unfit(peer);
peer->jitter = LOGTOD(sys_precision);
+ /* Don't throw away our broadcast replay protection */
+ if (peer->hmode == MODE_BCLIENT)
+ peer->bxmt = bxmt;
+
/*
* If interleave mode, initialize the alternate origin switch.
*/
@@ -3040,8 +3119,9 @@ clock_select(void)
* Leave the island immediately if the peer is
* unfit to synchronize.
*/
- if (peer_unfit(peer))
+ if (peer_unfit(peer)) {
continue;
+ }
/*
* If this peer is an orphan parent, elect the
@@ -3081,8 +3161,9 @@ clock_select(void)
* parent in ancestry so are excluded.
* See http://bugs.ntp.org/2050
*/
- if (peer->stratum > sys_orphan)
+ if (peer->stratum > sys_orphan) {
continue;
+ }
#ifdef REFCLOCK
/*
* The following are special cases. We deal
@@ -3531,15 +3612,15 @@ root_distance(
/*
* Root Distance (LAMBDA) is defined as:
- * (delta + DELTA)/2 + epsilon + EPSILON + phi
+ * (delta + DELTA)/2 + epsilon + EPSILON + D
*
* where:
* delta is the round-trip delay
* DELTA is the root delay
- * epsilon is the remote server precision + local precision
+ * epsilon is the peer dispersion
* + (15 usec each second)
* EPSILON is the root dispersion
- * phi is the peer jitter statistic
+ * D is sys_jitter
*
* NB: Think hard about why we are using these values, and what
* the alternatives are, and the various pros/cons.
@@ -3548,8 +3629,7 @@ root_distance(
* other worse choices.
*/
dtemp = (peer->delay + peer->rootdelay) / 2
- + LOGTOD(peer->precision)
- + LOGTOD(sys_precision)
+ + peer->disp
+ clock_phi * (current_time - peer->update)
+ peer->rootdisp
+ peer->jitter;
@@ -3995,6 +4075,10 @@ leap_smear_add_offs(
L_ADD(t, &leap_smear.offset);
+ /*
+ ** XXX: Should the smear be added to the root dispersion?
+ */
+
return;
}
@@ -4425,8 +4509,9 @@ peer_unfit(
*/
if ( peer->leap == LEAP_NOTINSYNC
|| peer->stratum < sys_floor
- || peer->stratum >= sys_ceiling)
+ || peer->stratum >= sys_ceiling) {
rval |= TEST10; /* bad synch or stratum */
+ }
/*
* A distance error for a remote peer occurs if the root
@@ -4435,8 +4520,9 @@ peer_unfit(
*/
if ( !(peer->flags & FLAG_REFCLOCK)
&& root_distance(peer) >= sys_maxdist
- + clock_phi * ULOGTOD(peer->hpoll))
+ + clock_phi * ULOGTOD(peer->hpoll)) {
rval |= TEST11; /* distance exceeded */
+ }
/*
* A loop error occurs if the remote peer is synchronized to the
@@ -4444,15 +4530,17 @@ peer_unfit(
* server as the local peer but only if the remote peer is
* neither a reference clock nor an orphan.
*/
- if (peer->stratum > 1 && local_refid(peer))
+ if (peer->stratum > 1 && local_refid(peer)) {
rval |= TEST12; /* synchronization loop */
+ }
/*
* An unreachable error occurs if the server is unreachable or
* the noselect bit is set.
*/
- if (!peer->reach || (peer->flags & FLAG_NOSELECT))
+ if (!peer->reach || (peer->flags & FLAG_NOSELECT)) {
rval |= TEST13; /* unreachable */
+ }
peer->flash &= ~PEER_TEST_MASK;
peer->flash |= rval;
@@ -4717,6 +4805,11 @@ proto_config(
/*
* tos command - arguments are double, sometimes cast to int
*/
+
+ case PROTO_BCPOLLBSTEP: /* Broadcast Poll Backstep gate (bcpollbstep) */
+ sys_bcpollbstep = (u_char)dvalue;
+ break;
+
case PROTO_BEACON: /* manycast beacon (beacon) */
sys_beacon = (int)dvalue;
break;
diff --git a/contrib/ntp/ntpd/ntp_refclock.c b/contrib/ntp/ntpd/ntp_refclock.c
index d25cc2c..bc38901 100644
--- a/contrib/ntp/ntpd/ntp_refclock.c
+++ b/contrib/ntp/ntpd/ntp_refclock.c
@@ -710,7 +710,7 @@ process_refclock_packet(
if (rio->io_input == NULL || (*rio->io_input)(rb) != 0) {
rio->recvcount++;
packets_received++;
- handler_pkts++;
+ handler_pkts++;
(*rio->clock_recv)(rb);
}
}
@@ -1208,6 +1208,7 @@ refclock_ppsapi(
"refclock_ppsapi: time_pps_create: %m");
return (0);
}
+ ZERO(ap->ts); /* [Bug 2689] defined INIT state */
}
return (1);
}
@@ -1278,7 +1279,7 @@ refclock_pps(
struct refclockproc *pp;
pps_info_t pps_info;
struct timespec timeout;
- double dtemp;
+ double dtemp, dcorr, trash;
/*
* We require the clock to be synchronized before setting the
@@ -1293,15 +1294,14 @@ refclock_pps(
if (refclock_params(pp->sloppyclockflag, ap) < 1)
return (0);
}
- timeout.tv_sec = 0;
- timeout.tv_nsec = 0;
+ ZERO(timeout);
ZERO(pps_info);
if (time_pps_fetch(ap->handle, PPS_TSFMT_TSPEC, &pps_info,
&timeout) < 0) {
refclock_report(peer, CEVNT_FAULT);
return (0);
}
- timeout = ap->ts;
+ timeout = ap->ts; /* save old timestamp for check */
if (ap->pps_params.mode & PPS_CAPTUREASSERT)
ap->ts = pps_info.assert_timestamp;
else if (ap->pps_params.mode & PPS_CAPTURECLEAR)
@@ -1309,22 +1309,62 @@ refclock_pps(
else
return (0);
+ /* [Bug 2689] Discard the first sample we read -- if the PPS
+ * source is currently down / disconnected, we have read a
+ * potentially *very* stale value here. So if our old TS value
+ * is all-zero, we consider this sample unrealiable and drop it.
+ *
+ * Note 1: a better check would compare the PPS time stamp to
+ * the current system time and drop it if it's more than say 3s
+ * away.
+ *
+ * Note 2: If we ever again get an all-zero PPS sample, the next
+ * one will be discarded. This can happen every 136yrs and is
+ * unlikely to be ever observed.
+ */
+ if (0 == (timeout.tv_sec | timeout.tv_nsec))
+ return (0);
+
+ /* If the PPS source fails to deliver a new sample between
+ * polls, it regurgitates the last sample. We do not want to
+ * process the same sample multiple times.
+ */
if (0 == memcmp(&timeout, &ap->ts, sizeof(timeout)))
return (0);
/*
- * Convert to signed fraction offset and stuff in median filter.
+ * Convert to signed fraction offset, apply fudge and properly
+ * fold the correction into the [-0.5s,0.5s] range. Handle
+ * excessive fudge times, too.
*/
- pp->lastrec.l_ui = (u_int32)ap->ts.tv_sec + JAN_1970;
dtemp = ap->ts.tv_nsec / 1e9;
+ dcorr = modf((pp->fudgetime1 - dtemp), &trash);
+ if (dcorr > 0.5)
+ dcorr -= 1.0;
+ else if (dcorr < -0.5)
+ dcorr += 1.0;
+
+ /* phase gate check: avoid wobbling by +/-1s when too close to
+ * the switch-over point. We allow +/-400ms max phase deviation.
+ * The trade-off is clear: The smaller the limit, the less
+ * sensitive to sampling noise the clock becomes. OTOH the
+ * system must get into phase gate range by other means for the
+ * PPS clock to lock in.
+ */
+ if (fabs(dcorr) > 0.4)
+ return (0);
+
+ /*
+ * record this time stamp and stuff in median filter
+ */
+ pp->lastrec.l_ui = (u_int32)ap->ts.tv_sec + JAN_1970;
pp->lastrec.l_uf = (u_int32)(dtemp * FRAC);
- if (dtemp > .5)
- dtemp -= 1.;
- SAMPLE(-dtemp + pp->fudgetime1);
+ SAMPLE(dcorr);
+
#ifdef DEBUG
if (debug > 1)
printf("refclock_pps: %lu %f %f\n", current_time,
- dtemp, pp->fudgetime1);
+ dcorr, pp->fudgetime1);
#endif
return (1);
}
diff --git a/contrib/ntp/ntpd/ntpd-opts.c b/contrib/ntp/ntpd/ntpd-opts.c
index f19705b..4983964 100644
--- a/contrib/ntp/ntpd/ntpd-opts.c
+++ b/contrib/ntp/ntpd/ntpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:32:42 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 07:59:43 AM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -75,7 +75,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpd options
*/
static char const ntpd_opt_strs[3129] =
-/* 0 */ "ntpd 4.2.8p8\n"
+/* 0 */ "ntpd 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -205,12 +205,12 @@ static char const ntpd_opt_strs[3129] =
/* 2900 */ "output version information and exit\0"
/* 2936 */ "version\0"
/* 2944 */ "NTPD\0"
-/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p8\n"
+/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n"
"\t\t[ <server1> ... <serverN> ]\n\0"
/* 3080 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 3114 */ "\n\0"
-/* 3116 */ "ntpd 4.2.8p8";
+/* 3116 */ "ntpd 4.2.8p9";
/**
* ipv4 option description with
@@ -1529,7 +1529,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdOptions.pzCopyright */
- puts(_("ntpd 4.2.8p8\n\
+ puts(_("ntpd 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1670,7 +1670,7 @@ implied warranty.\n"));
puts(_("output version information and exit"));
/* referenced via ntpdOptions.pzUsageTitle */
- puts(_("ntpd - NTP daemon program - Ver. 4.2.8p8\n\
+ puts(_("ntpd - NTP daemon program - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
\t\t[ <server1> ... <serverN> ]\n"));
@@ -1678,7 +1678,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("\n"));
/* referenced via ntpdOptions.pzFullVersion */
- puts(_("ntpd 4.2.8p8"));
+ puts(_("ntpd 4.2.8p9"));
/* referenced via ntpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpd/ntpd-opts.h b/contrib/ntp/ntpd/ntpd-opts.h
index 069673c..e5bdf82 100644
--- a/contrib/ntp/ntpd/ntpd-opts.h
+++ b/contrib/ntp/ntpd/ntpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:32:40 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 07:59:42 AM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -106,9 +106,9 @@ typedef enum {
/** count of all options for ntpd */
#define OPTION_CT 38
/** ntpd version */
-#define NTPD_VERSION "4.2.8p8"
+#define NTPD_VERSION "4.2.8p9"
/** Full ntpd version text */
-#define NTPD_FULL_VERSION "ntpd 4.2.8p8"
+#define NTPD_FULL_VERSION "ntpd 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpd/ntpd.1ntpdman b/contrib/ntp/ntpd/ntpd.1ntpdman
index f449c20..f24d92e 100644
--- a/contrib/ntp/ntpd/ntpd.1ntpdman
+++ b/contrib/ntp/ntpd/ntpd.1ntpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd 1ntpdman "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpd 1ntpdman "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Jnai2U/ag-Ynaa1U)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-giaGkh/ag-tiayjh)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:01 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:50 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpd/ntpd.1ntpdmdoc b/contrib/ntp/ntpd/ntpd.1ntpdmdoc
index 1621274..80a70bc 100644
--- a/contrib/ntp/ntpd/ntpd.1ntpdmdoc
+++ b/contrib/ntp/ntpd/ntpd.1ntpdmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPD 1ntpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:22 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:08 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntpd.html b/contrib/ntp/ntpd/ntpd.html
index 077f723..e5350a9 100644
--- a/contrib/ntp/ntpd/ntpd.html
+++ b/contrib/ntp/ntpd/ntpd.html
@@ -39,7 +39,7 @@ The program can operate in any of several modes, including client/server,
symmetric and broadcast modes, and with both symmetric-key and public-key
cryptography.
- <p>This document applies to version 4.2.8p8 of <code>ntpd</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpd-Description">ntpd Description</a>: Description
@@ -220,7 +220,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p7
+<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p9-RC
Usage: ntpd [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... \
[ &lt;server1&gt; ... &lt;serverN&gt; ]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/ntpd/ntpd.man.in b/contrib/ntp/ntpd/ntpd.man.in
index b1eafe6..d5e331f 100644
--- a/contrib/ntp/ntpd/ntpd.man.in
+++ b/contrib/ntp/ntpd/ntpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd @NTPD_MS@ "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpd @NTPD_MS@ "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Jnai2U/ag-Ynaa1U)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-giaGkh/ag-tiayjh)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:01 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:01:50 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpd/ntpd.mdoc.in b/contrib/ntp/ntpd/ntpd.mdoc.in
index 0b7489a..76577f6 100644
--- a/contrib/ntp/ntpd/ntpd.mdoc.in
+++ b/contrib/ntp/ntpd/ntpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPD @NTPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:22 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:08 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/refclock_gpsdjson.c b/contrib/ntp/ntpd/refclock_gpsdjson.c
index 24a15e7..7c49311 100644
--- a/contrib/ntp/ntpd/refclock_gpsdjson.c
+++ b/contrib/ntp/ntpd/refclock_gpsdjson.c
@@ -949,7 +949,7 @@ add_clock_sample(
pp->lastref = stamp;
if (pp->coderecv == pp->codeproc)
refclock_report(peer, CEVNT_NOMINAL);
- refclock_process_offset(pp, stamp, recvt, 0.0);
+ refclock_process_offset(pp, stamp, recvt, pp->fudgetime1);
}
/* ------------------------------------------------------------------ */
diff --git a/contrib/ntp/ntpd/refclock_jjy.c b/contrib/ntp/ntpd/refclock_jjy.c
index fc51fd9..f53150f 100644
--- a/contrib/ntp/ntpd/refclock_jjy.c
+++ b/contrib/ntp/ntpd/refclock_jjy.c
@@ -106,6 +106,10 @@
/* 2015/05/15 */
/* [Add] Support the SEIKO TIME SYSTEMS TDC-300 */
/* */
+/* 2016/05/08 */
+/* [Fix] C-DEX JST2000 */
+/* Thanks to Mr. Kuramatsu for the report and the patch. */
+/* */
/**********************************************************************/
#ifdef HAVE_CONFIG_H
@@ -1499,9 +1503,9 @@ jjy_receive_cdex_jst2000 ( struct recvbuf *rbufp )
return JJY_RECEIVE_ERROR ;
}
- /* JYYMMDD HHMMSSS */
+ /* JYYMMDDWHHMMSSS */
- rc = sscanf ( pBuf, "J%2d%2d%2d %2d%2d%2d%1d",
+ rc = sscanf ( pBuf, "J%2d%2d%2d%*1d%2d%2d%2d%1d",
&up->year, &up->month, &up->day,
&up->hour, &up->minute, &up->second,
&up->msecond ) ;
diff --git a/contrib/ntp/ntpd/refclock_jupiter.c b/contrib/ntp/ntpd/refclock_jupiter.c
index 02b33df..84d089d 100644
--- a/contrib/ntp/ntpd/refclock_jupiter.c
+++ b/contrib/ntp/ntpd/refclock_jupiter.c
@@ -89,6 +89,11 @@
/* Unix timestamp for the GPS epoch: January 6, 1980 */
#define GPS_EPOCH 315964800
+/* Rata Die Number of first day of GPS epoch. This is the number of days
+ * since 0000-12-31 to 1980-01-06 in the proleptic Gregorian Calendar.
+ */
+#define RDN_GPS_EPOCH (4*146097 + 138431 + 1)
+
/* Double short to unsigned int */
#define DS2UI(p) ((getshort((p)[1]) << 16) | getshort((p)[0]))
@@ -154,6 +159,10 @@ static char * jupiter_send (struct instance *, struct jheader *);
static void jupiter_shutdown(int, struct peer *);
static int jupiter_start (int, struct peer *);
+static u_int get_full_week(u_int base_week, u_int gpos_week);
+static u_int get_base_week(void);
+
+
/*
* Transfer vector
*/
@@ -846,8 +855,14 @@ jupiter_parse_gpos(struct instance *instance, u_short *sp)
return ("Navigation solution not valid");
}
- instance->gpos_gweek = jg->gweek;
instance->gpos_sweek = DS2UI(jg->sweek);
+ instance->gpos_gweek = get_full_week(get_base_week(),
+ getshort(jg->gweek));
+
+ /* according to the protocol spec, the seconds-in-week cannot
+ * exceed the nominal value: Is it really necessary to normalise
+ * the seconds???
+ */
while(instance->gpos_sweek >= WEEKSECS) {
instance->gpos_sweek -= WEEKSECS;
++instance->gpos_gweek;
@@ -1115,6 +1130,56 @@ jupiter_recv(struct instance *instance)
return (cc);
}
+static u_int
+get_base_week(void)
+{
+ static int init_done /* = 0 */;
+ static u_int base_week;
+
+ /* Get the build date, convert to days since GPS epoch and
+ * finally weeks since GPS epoch. Note that the build stamp is
+ * trusted once it is fetched -- only dates before the GPS epoch
+ * are not permitted. This will permit proper synchronisation
+ * for a time range of 1024 weeks starting with 00:00:00 of the
+ * last Sunday on or before the build time.
+ *
+ * If the impossible happens and fetching the build date fails,
+ * a 1024-week cycle starting with 2016-01-03 is assumed to
+ * avoid catastropic errors. This will work until 2035-08-19.
+ */
+ if (!init_done) {
+ struct calendar bd;
+ if (ntpcal_get_build_date(&bd)) {
+ int32_t days = ntpcal_date_to_rd(&bd);
+ if (days > RDN_GPS_EPOCH)
+ days -= RDN_GPS_EPOCH;
+ else
+ days = 0;
+ base_week = days / 7;
+ } else {
+ base_week = 1878; /* 2016-01-03, Sunday */
+ msyslog(LOG_ERR,
+ "refclock_jupiter: ntpcal_get_build_date() failed: %s",
+ "using 2016-01-03 as GPS base!");
+ }
+ init_done = 1;
+ }
+ return base_week;
+}
+
+static u_int
+get_full_week(
+ u_int base_week,
+ u_int gpos_week
+ )
+{
+ /* Periodic extension on base week. Since the period is 1024
+ * weeks and we do unsigned arithmetic here, we can do wonderful
+ * things with masks and the well-defined overflow behaviour.
+ */
+ return base_week + ((gpos_week - base_week) & 1023);
+}
+
#else /* not (REFCLOCK && CLOCK_JUPITER && HAVE_PPSAPI) */
int refclock_jupiter_bs;
#endif /* not (REFCLOCK && CLOCK_JUPITER && HAVE_PPSAPI) */
diff --git a/contrib/ntp/ntpdc/invoke-ntpdc.texi b/contrib/ntp/ntpdc/invoke-ntpdc.texi
index 717904a..a0e2b35 100644
--- a/contrib/ntp/ntpdc/invoke-ntpdc.texi
+++ b/contrib/ntp/ntpdc/invoke-ntpdc.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpdc.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:36:54 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:02:33 AM by AutoGen 5.18.5
# From the definitions ntpdc-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -76,7 +76,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p8
+ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p9
Usage: ntpdc [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpdc/ntpdc-opts.c b/contrib/ntp/ntpdc/ntpdc-opts.c
index 830f07f..06729a4 100644
--- a/contrib/ntp/ntpdc/ntpdc-opts.c
+++ b/contrib/ntp/ntpdc/ntpdc-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:36:34 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:02:18 AM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -69,7 +69,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpdc options
*/
static char const ntpdc_opt_strs[1911] =
-/* 0 */ "ntpdc 4.2.8p8\n"
+/* 0 */ "ntpdc 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -128,14 +128,14 @@ static char const ntpdc_opt_strs[1911] =
/* 1694 */ "no-load-opts\0"
/* 1707 */ "no\0"
/* 1710 */ "NTPDC\0"
-/* 1716 */ "ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p8\n"
+/* 1716 */ "ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n\0"
/* 1846 */ "$HOME\0"
/* 1852 */ ".\0"
/* 1854 */ ".ntprc\0"
/* 1861 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 1895 */ "\n\0"
-/* 1897 */ "ntpdc 4.2.8p8";
+/* 1897 */ "ntpdc 4.2.8p9";
/**
* ipv4 option description with
@@ -796,7 +796,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdcOptions.pzCopyright */
- puts(_("ntpdc 4.2.8p8\n\
+ puts(_("ntpdc 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -862,14 +862,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpdcOptions.pzUsageTitle */
- puts(_("ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p8\n\
+ puts(_("ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpdcOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpdcOptions.pzFullVersion */
- puts(_("ntpdc 4.2.8p8"));
+ puts(_("ntpdc 4.2.8p9"));
/* referenced via ntpdcOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpdc/ntpdc-opts.h b/contrib/ntp/ntpdc/ntpdc-opts.h
index 7bd869e..d8070a1 100644
--- a/contrib/ntp/ntpdc/ntpdc-opts.h
+++ b/contrib/ntp/ntpdc/ntpdc-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:36:34 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:02:17 AM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -83,9 +83,9 @@ typedef enum {
/** count of all options for ntpdc */
#define OPTION_CT 15
/** ntpdc version */
-#define NTPDC_VERSION "4.2.8p8"
+#define NTPDC_VERSION "4.2.8p9"
/** Full ntpdc version text */
-#define NTPDC_FULL_VERSION "ntpdc 4.2.8p8"
+#define NTPDC_FULL_VERSION "ntpdc 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpdc/ntpdc.1ntpdcman b/contrib/ntp/ntpdc/ntpdc.1ntpdcman
index c7055fc..1362cf8 100644
--- a/contrib/ntp/ntpdc/ntpdc.1ntpdcman
+++ b/contrib/ntp/ntpdc/ntpdc.1ntpdcman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc 1ntpdcman "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpdc 1ntpdcman "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-seaORW/ag-FeaGQW)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gTaibj/ag-tTaaaj)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:50 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:29 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc b/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
index ac6fae5..59589c1 100644
--- a/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
+++ b/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPDC 1ntpdcmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:58 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:35 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.html b/contrib/ntp/ntpdc/ntpdc.html
index 0561004..3dc04a3 100644
--- a/contrib/ntp/ntpdc/ntpdc.html
+++ b/contrib/ntp/ntpdc/ntpdc.html
@@ -36,7 +36,7 @@ display the time offset of the system clock relative to the server
clock. Run as root, it can correct the system clock to this offset as
well. It can be run as an interactive command or from a cron job.
- <p>This document applies to version 4.2.8p8 of <code>ntpdc</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntpdc</code>.
<p>The program implements the SNTP protocol as defined by RFC 5905, the NTPv4
IETF specification.
@@ -152,7 +152,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p8
+<pre class="example">ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p9
Usage: ntpdc [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpdc/ntpdc.man.in b/contrib/ntp/ntpdc/ntpdc.man.in
index 3175905..2a99613 100644
--- a/contrib/ntp/ntpdc/ntpdc.man.in
+++ b/contrib/ntp/ntpdc/ntpdc.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc @NTPDC_MS@ "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpdc @NTPDC_MS@ "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-seaORW/ag-FeaGQW)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gTaibj/ag-tTaaaj)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:50 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:29 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.mdoc.in b/contrib/ntp/ntpdc/ntpdc.mdoc.in
index fdca923..73b2653 100644
--- a/contrib/ntp/ntpdc/ntpdc.mdoc.in
+++ b/contrib/ntp/ntpdc/ntpdc.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPDC @NTPDC_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:58 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:35 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpq/invoke-ntpq.texi b/contrib/ntp/ntpq/invoke-ntpq.texi
index 28cf6c9..4e37ff0 100644
--- a/contrib/ntp/ntpq/invoke-ntpq.texi
+++ b/contrib/ntp/ntpq/invoke-ntpq.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpq.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:37:46 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:03:06 AM by AutoGen 5.18.5
# From the definitions ntpq-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -848,7 +848,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpq - standard NTP query program - Ver. 4.2.8p8
+ntpq - standard NTP query program - Ver. 4.2.8p9
Usage: ntpq [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpq/ntpq-opts.c b/contrib/ntp/ntpq/ntpq-opts.c
index b2bb3d9..f63f81f 100644
--- a/contrib/ntp/ntpq/ntpq-opts.c
+++ b/contrib/ntp/ntpq/ntpq-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:37:05 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:02:38 AM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -69,7 +69,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpq options
*/
static char const ntpq_opt_strs[1982] =
-/* 0 */ "ntpq 4.2.8p8\n"
+/* 0 */ "ntpq 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -132,13 +132,13 @@ static char const ntpq_opt_strs[1982] =
/* 1775 */ "no-load-opts\0"
/* 1788 */ "no\0"
/* 1791 */ "NTPQ\0"
-/* 1796 */ "ntpq - standard NTP query program - Ver. 4.2.8p8\n"
+/* 1796 */ "ntpq - standard NTP query program - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n\0"
/* 1915 */ "$HOME\0"
/* 1921 */ ".\0"
/* 1923 */ ".ntprc\0"
/* 1930 */ "http://bugs.ntp.org, bugs@ntp.org\0"
-/* 1964 */ "ntpq 4.2.8p8\0"
+/* 1964 */ "ntpq 4.2.8p9\0"
/* 1977 */ "hash";
/**
@@ -841,7 +841,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpqOptions.pzCopyright */
- puts(_("ntpq 4.2.8p8\n\
+ puts(_("ntpq 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -910,11 +910,11 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpqOptions.pzUsageTitle */
- puts(_("ntpq - standard NTP query program - Ver. 4.2.8p8\n\
+ puts(_("ntpq - standard NTP query program - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpqOptions.pzFullVersion */
- puts(_("ntpq 4.2.8p8"));
+ puts(_("ntpq 4.2.8p9"));
/* referenced via ntpqOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpq/ntpq-opts.h b/contrib/ntp/ntpq/ntpq-opts.h
index 03fd3a3..1f2896f 100644
--- a/contrib/ntp/ntpq/ntpq-opts.h
+++ b/contrib/ntp/ntpq/ntpq-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:37:04 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:02:38 AM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -84,9 +84,9 @@ typedef enum {
/** count of all options for ntpq */
#define OPTION_CT 16
/** ntpq version */
-#define NTPQ_VERSION "4.2.8p8"
+#define NTPQ_VERSION "4.2.8p9"
/** Full ntpq version text */
-#define NTPQ_FULL_VERSION "ntpq 4.2.8p8"
+#define NTPQ_FULL_VERSION "ntpq 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpq/ntpq.1ntpqman b/contrib/ntp/ntpq/ntpq.1ntpqman
index 6270eeb..22f1488 100644
--- a/contrib/ntp/ntpq/ntpq.1ntpqman
+++ b/contrib/ntp/ntpq/ntpq.1ntpqman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq 1ntpqman "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpq 1ntpqman "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-pGa42X/ag-CGaW1X)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-nWaWmk/ag-AWaOlk)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:37:41 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:02 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpq/ntpq.1ntpqmdoc b/contrib/ntp/ntpq/ntpq.1ntpqmdoc
index 9985ecf..3039bea 100644
--- a/contrib/ntp/ntpq/ntpq.1ntpqmdoc
+++ b/contrib/ntp/ntpq/ntpq.1ntpqmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPQ 1ntpqmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:37:48 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:08 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpq/ntpq.c b/contrib/ntp/ntpq/ntpq.c
index ed5c65f..91364de 100644
--- a/contrib/ntp/ntpq/ntpq.c
+++ b/contrib/ntp/ntpq/ntpq.c
@@ -34,6 +34,7 @@
#include "openssl/evp.h"
#include "openssl/objects.h"
#include "openssl/err.h"
+#include "libssl_compat.h"
#endif
#include <ssl_applink.c>
@@ -3582,7 +3583,7 @@ static void list_md_fn(const EVP_MD *m, const char *from, const char *to, void *
size_t len, n;
const char *name, *cp, **seen;
struct hstate *hstate = arg;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX *ctx;
u_int digest_len;
u_char digest[EVP_MAX_MD_SIZE];
@@ -3613,8 +3614,10 @@ static void list_md_fn(const EVP_MD *m, const char *from, const char *to, void *
* Keep this consistent with keytype_from_text() in ssl_init.c.
*/
- EVP_DigestInit(&ctx, EVP_get_digestbyname(name));
- EVP_DigestFinal(&ctx, digest, &digest_len);
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_get_digestbyname(name));
+ EVP_DigestFinal(ctx, digest, &digest_len);
+ EVP_MD_CTX_free(ctx);
if (digest_len > (MAX_MAC_LEN - sizeof(keyid_t)))
return;
diff --git a/contrib/ntp/ntpq/ntpq.html b/contrib/ntp/ntpq/ntpq.html
index 8b91763..26d608b9 100644
--- a/contrib/ntp/ntpq/ntpq.html
+++ b/contrib/ntp/ntpq/ntpq.html
@@ -44,7 +44,7 @@ monitor the operational status
and determine the performance of
<code>ntpd</code>, the NTP daemon.
- <p>This document applies to version 4.2.8p8 of <code>ntpq</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntpq</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpq-Description">ntpq Description</a>
@@ -770,7 +770,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpq - standard NTP query program - Ver. 4.2.8p7
+<pre class="example">ntpq - standard NTP query program - Ver. 4.2.8p9-RC
Usage: ntpq [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpq/ntpq.man.in b/contrib/ntp/ntpq/ntpq.man.in
index 37eec21..f6f889b 100644
--- a/contrib/ntp/ntpq/ntpq.man.in
+++ b/contrib/ntp/ntpq/ntpq.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq @NTPQ_MS@ "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpq @NTPQ_MS@ "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-pGa42X/ag-CGaW1X)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-nWaWmk/ag-AWaOlk)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:37:41 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:02 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpq/ntpq.mdoc.in b/contrib/ntp/ntpq/ntpq.mdoc.in
index 576d631..7471abc 100644
--- a/contrib/ntp/ntpq/ntpq.mdoc.in
+++ b/contrib/ntp/ntpq/ntpq.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPQ @NTPQ_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:37:48 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:08 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi b/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
index 6e6590c..6f18a0a 100644
--- a/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
+++ b/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsnmpd.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:39:15 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:03:22 AM by AutoGen 5.18.5
# From the definitions ntpsnmpd-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -47,7 +47,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p8
+ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p9
Usage: ntpsnmpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
Flg Arg Option-Name Description
-n no nofork Do not fork
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
index 68fcd01..f550441 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:37:55 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:03:11 AM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -61,7 +61,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpsnmpd options
*/
static char const ntpsnmpd_opt_strs[1610] =
-/* 0 */ "ntpsnmpd 4.2.8p8\n"
+/* 0 */ "ntpsnmpd 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -101,14 +101,14 @@ static char const ntpsnmpd_opt_strs[1610] =
/* 1414 */ "no-load-opts\0"
/* 1427 */ "no\0"
/* 1430 */ "NTPSNMPD\0"
-/* 1439 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p8\n"
+/* 1439 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
/* 1542 */ "$HOME\0"
/* 1548 */ ".\0"
/* 1550 */ ".ntprc\0"
/* 1557 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 1591 */ "\n\0"
-/* 1593 */ "ntpsnmpd 4.2.8p8";
+/* 1593 */ "ntpsnmpd 4.2.8p9";
/**
* nofork option description:
@@ -554,7 +554,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpsnmpdOptions.pzCopyright */
- puts(_("ntpsnmpd 4.2.8p8\n\
+ puts(_("ntpsnmpd 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -599,14 +599,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpsnmpdOptions.pzUsageTitle */
- puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p8\n\
+ puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
/* referenced via ntpsnmpdOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpsnmpdOptions.pzFullVersion */
- puts(_("ntpsnmpd 4.2.8p8"));
+ puts(_("ntpsnmpd 4.2.8p9"));
/* referenced via ntpsnmpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
index f0a4e84..44fe0ba 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:37:55 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:03:11 AM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -76,9 +76,9 @@ typedef enum {
/** count of all options for ntpsnmpd */
#define OPTION_CT 8
/** ntpsnmpd version */
-#define NTPSNMPD_VERSION "4.2.8p8"
+#define NTPSNMPD_VERSION "4.2.8p9"
/** Full ntpsnmpd version text */
-#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p8"
+#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
index 27aaed6..fc4f475 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd 1ntpsnmpdman "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpsnmpd 1ntpsnmpdman "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-IPay_Y/ag-WPaq.Y)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-oTaGvl/ag-ATayul)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:11 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:18 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
index b89b192..d735054 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPSNMPD 1ntpsnmpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:18 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:24 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.html b/contrib/ntp/ntpsnmpd/ntpsnmpd.html
index 6c892e4..dac32b6 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.html
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.html
@@ -42,7 +42,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>The <code>ntpsnmpd</code> utility program is used to monitor NTP daemon <code>ntpd</code>
operations and determine performance. It uses the standard NTP mode 6 control
- <p>This document applies to version 4.2.8p8 of <code>ntpsnmpd</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntpsnmpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpsnmpd-Description">ntpsnmpd Description</a>: Description
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in b/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
index 882f555..5b15c10 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd @NTPSNMPD_MS@ "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH ntpsnmpd @NTPSNMPD_MS@ "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-IPay_Y/ag-WPaq.Y)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-oTaGvl/ag-ATayul)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:11 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:18 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in b/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
index d655b1b..1441db3 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPSNMPD @NTPSNMPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:18 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:24 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/packageinfo.sh b/contrib/ntp/packageinfo.sh
index f5916b0..6d6fb9a 100644
--- a/contrib/ntp/packageinfo.sh
+++ b/contrib/ntp/packageinfo.sh
@@ -83,7 +83,7 @@ CLTAG=NTP_4_2_0
# - Numeric values increment
# - empty 'increments' to 1
# - NEW 'increments' to empty
-point=8
+point=9
### betapoint is normally modified by script.
# ntp-stable Beta number (betapoint)
diff --git a/contrib/ntp/scripts/build/genAuthors.in b/contrib/ntp/scripts/build/genAuthors.in
index f0e49c5..a5a15e12 100644
--- a/contrib/ntp/scripts/build/genAuthors.in
+++ b/contrib/ntp/scripts/build/genAuthors.in
@@ -34,21 +34,23 @@ use warnings;
my $bk_u = "bk changes -and:USER: | sort -u |";
chomp(my $bk_root = `bk root`);
-my $A_path = "$bk_root/BitKeeper/etc/authors.txt";
+my $A_dir = "$bk_root/BitKeeper/etc/Authors";
+my $A_file = "$bk_root/BitKeeper/etc/authors.txt";
my %authors;
my $problem = 0;
-die "bkroot: <$bk_root>, A_path: <$A_path>\n" if (! -r $A_path);
+die "bkroot: <$bk_root>, A_dir: <$A_dir>\n" if (! -r $A_dir);
+die "bkroot: <$bk_root>, A_file: <$A_file>\n" if (! -r $A_file);
# Process the authors.txt file
-open(my $FILE, '<', $A_path) or die "Could not open <$A_path>: $!\n";
+open(my $FILE, '<', $A_file) or die "Could not open <$A_file>: $!\n";
while (<$FILE>) {
chomp;
if (/^([\S]+) = ([\V]+) <([\w.-]+\@[\w.-]+)>$/) {
# print "Got '$1 = $2 <$3>'\n";
$authors{$1} = "";
} else {
- print "In $A_path: unrecognized line: '$_'\n";
+ print "In $A_file: unrecognized line: '$_'\n";
$problem = 1;
}
}
@@ -69,7 +71,7 @@ while (<BKU>) {
if (!defined($authors{$Name})) {
$problem = 1;
print "<$Name> is not a defined author!\n";
- open(my $FILE, '>>', "$A_path/$name.txt") || die "Cannot create '$A_path/$name.txt': $!\n";
+ open(my $FILE, '>>', "$A_dir/$name.txt") || die "Cannot create '$A_dir/$name.txt': $!\n";
print $FILE "$Name = \n";
close($FILE);
}
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
index c52f3f2..d117625 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH calc_tickadj 1calc_tickadjman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3laW2J/ag-ema41J)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OyayV3/ag-1yaGU3)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:25 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:34 AM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
index df3de6d..a77617b 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:27 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:36 AM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
index d27d634..43fd5ce 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">calc_tickadj User's Manual</h2>
<p>This document describes the use of the NTP Project's <code>calc_tickadj</code> program.
-This document applies to version 4.2.8p8 of <code>calc_tickadj</code>.
+This document applies to version 4.2.8p9 of <code>calc_tickadj</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
index c52f3f2..d117625 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH calc_tickadj 1calc_tickadjman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3laW2J/ag-ema41J)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OyayV3/ag-1yaGU3)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:25 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:34 AM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
index df3de6d..a77617b 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:27 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:36 AM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi b/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
index 3f5e897..88f3647 100644
--- a/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
+++ b/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-calc_tickadj.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:29 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:38 AM by AutoGen 5.18.5
# From the definitions calc_tickadj-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
diff --git a/contrib/ntp/scripts/invoke-plot_summary.texi b/contrib/ntp/scripts/invoke-plot_summary.texi
index bfa8a8e..2d84f09 100644
--- a/contrib/ntp/scripts/invoke-plot_summary.texi
+++ b/contrib/ntp/scripts/invoke-plot_summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-plot_summary.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:50 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:26 AM by AutoGen 5.18.5
# From the definitions plot_summary-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -41,7 +41,7 @@ with a status code of 0.
@exampleindent 0
@example
-plot_summary - plot statistics generated by summary script - Ver. 4.2.8p8
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p9
USAGE: plot_summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/invoke-summary.texi b/contrib/ntp/scripts/invoke-summary.texi
index 43d74b0..d42ff7f 100644
--- a/contrib/ntp/scripts/invoke-summary.texi
+++ b/contrib/ntp/scripts/invoke-summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-summary.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:58 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:32 AM by AutoGen 5.18.5
# From the definitions summary-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -42,7 +42,7 @@ with a status code of 0.
@exampleindent 0
@example
-summary - compute various stastics from NTP stat files - Ver. 4.2.8p8
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p9
USAGE: summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi b/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
index 3387634..de74646 100644
--- a/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
+++ b/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp-wait.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:39 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:47 AM by AutoGen 5.18.5
# From the definitions ntp-wait-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -61,7 +61,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p8
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p9
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait-opts b/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
index e199079..2c12c67 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntp-wait-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:33 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:41 AM by AutoGen 5.18.5
# From the definitions ntp-wait-opts.def
# and the template file perlopt
@@ -40,7 +40,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p8
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p9
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
index c3b1c138..dab0f37 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-wait 1ntp-waitman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntp-wait 1ntp-waitman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-IZaWqL/ag-WZa4pL)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-oRayj5/ag-CRaGi5)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:36 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:43 AM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
index 4f1cfde..782c918 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_WAIT 1ntp-waitmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:44 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:50 AM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.html b/contrib/ntp/scripts/ntp-wait/ntp-wait.html
index 2b790d5..8a974c4 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.html
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.html
@@ -39,7 +39,7 @@ until the system's time has stabilized and synchronized,
and only then start any applicaitons (like database servers) that require
accurate and stable time.
- <p>This document applies to version 4.2.8p8 of <code>ntp-wait</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntp-wait</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -114,7 +114,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p8
+<pre class="example">ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p9
USAGE: ntp-wait [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in b/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
index 2775a88..bc50685 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-wait @NTP_WAIT_MS@ "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntp-wait @NTP_WAIT_MS@ "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-IZaWqL/ag-WZa4pL)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-oRayj5/ag-CRaGi5)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:36 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:43 AM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in b/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
index 9dc96d1..8f6437b 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_WAIT @NTP_WAIT_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:44 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:50 AM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi b/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
index a8d498e..bf9592d 100644
--- a/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
+++ b/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsweep.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:48 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:54 AM by AutoGen 5.18.5
# From the definitions ntpsweep-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -45,7 +45,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p8
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p9
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep-opts b/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
index abb519d..58ed769 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntpsweep-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:46 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:51 AM by AutoGen 5.18.5
# From the definitions ntpsweep-opts.def
# and the template file perlopt
@@ -43,7 +43,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p8
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p9
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
index 3cb11a3..5b98754 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntpsweep 1ntpsweepman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-KKaWSM/ag-XKa4RM)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-pTaqL6/ag-CTayK6)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:51 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:56 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
index d6de8dd..86df086 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:55 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:59 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.html b/contrib/ntp/scripts/ntpsweep/ntpsweep.html
index 1226459..8f09545 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.html
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.html
@@ -30,7 +30,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the use of the NTP Project's <code>ntpsweep</code> program.
- <p>This document applies to version 4.2.8p8 of <code>ntpsweep</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntpsweep</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -90,7 +90,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p8
+<pre class="example">ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p9
USAGE: ntpsweep [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in b/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
index 3cb11a3..5b98754 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntpsweep 1ntpsweepman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-KKaWSM/ag-XKa4RM)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-pTaqL6/ag-CTayK6)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:51 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:56 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in b/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
index d6de8dd..86df086 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:55 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:59 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi b/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
index e7c2a2c..27a9a84 100644
--- a/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
+++ b/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntptrace.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:03 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:07 AM by AutoGen 5.18.5
# From the definitions ntptrace-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -62,7 +62,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntptrace - Trace peers of an NTP server - Ver. 4.2.8p8
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p9
USAGE: ntptrace [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace-opts b/contrib/ntp/scripts/ntptrace/ntptrace-opts
index 7cc0719..1b13de5 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace-opts
+++ b/contrib/ntp/scripts/ntptrace/ntptrace-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntptrace-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:24:57 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:01 AM by AutoGen 5.18.5
# From the definitions ntptrace-opts.def
# and the template file perlopt
@@ -40,7 +40,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntptrace - Trace peers of an NTP server - Ver. 4.2.8p8
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p9
USAGE: ntptrace [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
index 964037d..42e9758 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntptrace 1ntptraceman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntptrace 1ntptraceman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-GMa4.N/ag-VMaa.N)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-TDaOwb/ag-6DaWvb)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:59 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:03 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
index 5c33659..2bf7d66 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPTRACE 1ntptracemdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:05 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:08 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.html b/contrib/ntp/scripts/ntptrace/ntptrace.html
index 8b2be15..54215f7 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.html
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Simple Network Time Protocol User Manual</h2>
<p>This document describes the use of the NTP Project's <code>ntptrace</code> program.
-This document applies to version 4.2.8p8 of <code>ntptrace</code>.
+This document applies to version 4.2.8p9 of <code>ntptrace</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -107,7 +107,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntptrace - Trace peers of an NTP server - Ver. 4.2.8p8
+<pre class="example">ntptrace - Trace peers of an NTP server - Ver. 4.2.8p9
USAGE: ntptrace [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.man.in b/contrib/ntp/scripts/ntptrace/ntptrace.man.in
index a4aed35..5f1f2ac 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.man.in
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntptrace @NTPTRACE_MS@ "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntptrace @NTPTRACE_MS@ "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-GMa4.N/ag-VMaa.N)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-TDaOwb/ag-6DaWvb)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:24:59 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:03 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in b/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
index 8002291..4c6ed35 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPTRACE @NTPTRACE_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:05 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:08 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/plot_summary-opts b/contrib/ntp/scripts/plot_summary-opts
index 27d1712..f50825a 100644
--- a/contrib/ntp/scripts/plot_summary-opts
+++ b/contrib/ntp/scripts/plot_summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (plot_summary-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:41 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:22 AM by AutoGen 5.18.5
# From the definitions plot_summary-opts.def
# and the template file perlopt
@@ -46,7 +46,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-plot_summary - plot statistics generated by summary script - Ver. 4.2.8p8
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p9
USAGE: plot_summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/plot_summary.1plot_summaryman b/contrib/ntp/scripts/plot_summary.1plot_summaryman
index 1decf33..ffcc0c4 100644
--- a/contrib/ntp/scripts/plot_summary.1plot_summaryman
+++ b/contrib/ntp/scripts/plot_summary.1plot_summaryman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH plot_summary 1plot_summaryman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH plot_summary 1plot_summaryman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4QaG0Q/ag-hRaOZQ)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-BQayqe/ag-OQaGpe)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:53 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:28 AM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/plot_summary.1plot_summarymdoc b/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
index 3d6828a..6d131d7 100644
--- a/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
+++ b/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:55 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:30 AM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/plot_summary.html b/contrib/ntp/scripts/plot_summary.html
index 9feede6..a4bb074 100644
--- a/contrib/ntp/scripts/plot_summary.html
+++ b/contrib/ntp/scripts/plot_summary.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Plot_summary User Manual</h2>
<p>This document describes the use of the NTP Project's <code>plot_summary</code> program.
-This document applies to version 4.2.8p8 of <code>plot_summary</code>.
+This document applies to version 4.2.8p9 of <code>plot_summary</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -89,7 +89,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">plot_summary - plot statistics generated by summary script - Ver. 4.2.8p8
+<pre class="example">plot_summary - plot statistics generated by summary script - Ver. 4.2.8p9
USAGE: plot_summary [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/plot_summary.man.in b/contrib/ntp/scripts/plot_summary.man.in
index 1decf33..ffcc0c4 100644
--- a/contrib/ntp/scripts/plot_summary.man.in
+++ b/contrib/ntp/scripts/plot_summary.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH plot_summary 1plot_summaryman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH plot_summary 1plot_summaryman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4QaG0Q/ag-hRaOZQ)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-BQayqe/ag-OQaGpe)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:53 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:28 AM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/plot_summary.mdoc.in b/contrib/ntp/scripts/plot_summary.mdoc.in
index 3d6828a..6d131d7 100644
--- a/contrib/ntp/scripts/plot_summary.mdoc.in
+++ b/contrib/ntp/scripts/plot_summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:55 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:30 AM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/summary-opts b/contrib/ntp/scripts/summary-opts
index c5da364..0c02798 100644
--- a/contrib/ntp/scripts/summary-opts
+++ b/contrib/ntp/scripts/summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (summary-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:48 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:24 AM by AutoGen 5.18.5
# From the definitions summary-opts.def
# and the template file perlopt
@@ -44,7 +44,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-summary - compute various stastics from NTP stat files - Ver. 4.2.8p8
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p9
USAGE: summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/summary.1summaryman b/contrib/ntp/scripts/summary.1summaryman
index b99aa5c..00c4ea3 100644
--- a/contrib/ntp/scripts/summary.1summaryman
+++ b/contrib/ntp/scripts/summary.1summaryman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH summary 1summaryman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OuaicR/ag-3uaqbR)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-SaaaEe/ag-5aaiDe)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:26:00 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:34 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/summary.1summarymdoc b/contrib/ntp/scripts/summary.1summarymdoc
index b10309a..939f651 100644
--- a/contrib/ntp/scripts/summary.1summarymdoc
+++ b/contrib/ntp/scripts/summary.1summarymdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:26:02 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:36 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/summary.html b/contrib/ntp/scripts/summary.html
index dedac73..7b37b21 100644
--- a/contrib/ntp/scripts/summary.html
+++ b/contrib/ntp/scripts/summary.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Summary User Manual</h2>
<p>This document describes the use of the NTP Project's <code>summary</code> program.
-This document applies to version 4.2.8p8 of <code>summary</code>.
+This document applies to version 4.2.8p9 of <code>summary</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -88,7 +88,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">summary - compute various stastics from NTP stat files - Ver. 4.2.8p8
+<pre class="example">summary - compute various stastics from NTP stat files - Ver. 4.2.8p9
USAGE: summary [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/summary.man.in b/contrib/ntp/scripts/summary.man.in
index b99aa5c..00c4ea3 100644
--- a/contrib/ntp/scripts/summary.man.in
+++ b/contrib/ntp/scripts/summary.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH summary 1summaryman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OuaicR/ag-3uaqbR)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-SaaaEe/ag-5aaiDe)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:26:00 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:34 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/summary.mdoc.in b/contrib/ntp/scripts/summary.mdoc.in
index b10309a..939f651 100644
--- a/contrib/ntp/scripts/summary.mdoc.in
+++ b/contrib/ntp/scripts/summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:26:02 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:36 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/update-leap/invoke-update-leap.texi b/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
index 3e538f0..23de3d8 100644
--- a/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
+++ b/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-update-leap.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:12 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:14 AM by AutoGen 5.18.5
# From the definitions update-leap-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
diff --git a/contrib/ntp/scripts/update-leap/update-leap-opts b/contrib/ntp/scripts/update-leap/update-leap-opts
index 2f32d66..893f3b6 100644
--- a/contrib/ntp/scripts/update-leap/update-leap-opts
+++ b/contrib/ntp/scripts/update-leap/update-leap-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (update-leap-opts)
#
-# It has been AutoGen-ed June 2, 2016 at 07:25:39 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:59:22 AM by AutoGen 5.18.5
# From the definitions update-leap-opts.def
# and the template file perlopt
@@ -46,7 +46,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-update-leap - leap-seconds file manager/updater - Ver. 4.2.8p8
+update-leap - leap-seconds file manager/updater - Ver. 4.2.8p9
USAGE: update-leap [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-s, --source-url=str The URL of the master copy of the leapseconds file
diff --git a/contrib/ntp/scripts/update-leap/update-leap.1update-leapman b/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
index d105806..92d83f2 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
+++ b/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH update-leap 1update-leapman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH update-leap 1update-leapman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-qJaG0O/ag-DJaOZO)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Oraiqc/ag-1raqpc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:07 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:10 AM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc b/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
index 2e9c479..e1652ff 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
+++ b/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:37 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:20 AM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.html b/contrib/ntp/scripts/update-leap/update-leap.html
index e2e4ad3..69fe61a 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.html
+++ b/contrib/ntp/scripts/update-leap/update-leap.html
@@ -30,7 +30,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the use of the NTP Project's <code>update-leap</code> program.
- <p>This document applies to version 4.2.8p8 of <code>update-leap</code>.
+ <p>This document applies to version 4.2.8p9 of <code>update-leap</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/scripts/update-leap/update-leap.in b/contrib/ntp/scripts/update-leap/update-leap.in
index a22b50a..bd7ed18 100755
--- a/contrib/ntp/scripts/update-leap/update-leap.in
+++ b/contrib/ntp/scripts/update-leap/update-leap.in
@@ -34,7 +34,10 @@ my $QUIET = "";
my $VERBOSE = "";
# Where to get the file
-my $LEAPSRC="ftp://time.nist.gov/pub/leap-seconds.list";
+# Choices:
+# https://www.ietf.org/timezones/data/leap-seconds.list
+# ftp://time.nist.gov/pub/leap-seconds.list
+my $LEAPSRC="https://www.ietf.org/timezones/data/leap-seconds.list";
my $LEAPFILE;
# How many times to try to download new file
@@ -300,7 +303,7 @@ sub verifySHA {
open(LF, $NTPCONF) || die "Can't open <$NTPCONF>: $!\n";
while (<LF>) {
chomp;
- if (/^ *leapfile\s+(\S+)/) {
+ if (/^ *leapfile\s+"(\S+)"/) {
$LEAPFILE = $1;
}
}
diff --git a/contrib/ntp/scripts/update-leap/update-leap.man.in b/contrib/ntp/scripts/update-leap/update-leap.man.in
index d105806..92d83f2 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.man.in
+++ b/contrib/ntp/scripts/update-leap/update-leap.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH update-leap 1update-leapman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH update-leap 1update-leapman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-qJaG0O/ag-DJaOZO)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Oraiqc/ag-1raqpc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:07 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:10 AM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.mdoc.in b/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
index 2e9c479..e1652ff 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
+++ b/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:25:37 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:59:20 AM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/sntp/configure b/contrib/ntp/sntp/configure
index db89397..45431df 100755
--- a/contrib/ntp/sntp/configure
+++ b/contrib/ntp/sntp/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sntp 4.2.8p8.
+# Generated by GNU Autoconf 2.69 for sntp 4.2.8p9.
#
# Report bugs to <http://bugs.ntp.org./>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sntp'
PACKAGE_TARNAME='sntp'
-PACKAGE_VERSION='4.2.8p8'
-PACKAGE_STRING='sntp 4.2.8p8'
+PACKAGE_VERSION='4.2.8p9'
+PACKAGE_STRING='sntp 4.2.8p9'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -1496,7 +1496,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures sntp 4.2.8p8 to adapt to many kinds of systems.
+\`configure' configures sntp 4.2.8p9 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1566,7 +1566,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sntp 4.2.8p8:";;
+ short | recursive ) echo "Configuration of sntp 4.2.8p9:";;
esac
cat <<\_ACEOF
@@ -1712,7 +1712,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sntp configure 4.2.8p8
+sntp configure 4.2.8p9
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2542,7 +2542,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sntp $as_me 4.2.8p8, which was
+It was created by sntp $as_me 4.2.8p9, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3539,7 +3539,7 @@ fi
# Define the identity of the package.
PACKAGE='sntp'
- VERSION='4.2.8p8'
+ VERSION='4.2.8p9'
cat >>confdefs.h <<_ACEOF
@@ -31184,7 +31184,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sntp $as_me 4.2.8p8, which was
+This file was extended by sntp $as_me 4.2.8p9, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31251,7 +31251,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-sntp config.status 4.2.8p8
+sntp config.status 4.2.8p9
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/contrib/ntp/sntp/crypto.c b/contrib/ntp/sntp/crypto.c
index a534239..7b4e638 100644
--- a/contrib/ntp/sntp/crypto.c
+++ b/contrib/ntp/sntp/crypto.c
@@ -2,6 +2,7 @@
#include "crypto.h"
#include <ctype.h>
#include "isc/string.h"
+#include "libssl_compat.h"
struct key *key_ptr;
size_t key_cnt = 0;
@@ -17,7 +18,7 @@ make_mac(
{
u_int len = mac_size;
int key_type;
- EVP_MD_CTX ctx;
+ EVP_MD_CTX * ctx;
if (cmp_key->key_len > 64)
return 0;
@@ -26,11 +27,14 @@ make_mac(
INIT_SSL();
key_type = keytype_from_text(cmp_key->type, NULL);
- EVP_DigestInit(&ctx, EVP_get_digestbynid(key_type));
- EVP_DigestUpdate(&ctx, (const u_char *)cmp_key->key_seq, (u_int)cmp_key->key_len);
- EVP_DigestUpdate(&ctx, pkt_data, (u_int)pkt_size);
- EVP_DigestFinal(&ctx, digest, &len);
-
+
+ ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx, EVP_get_digestbynid(key_type));
+ EVP_DigestUpdate(ctx, (const u_char *)cmp_key->key_seq, (u_int)cmp_key->key_len);
+ EVP_DigestUpdate(ctx, pkt_data, (u_int)pkt_size);
+ EVP_DigestFinal(ctx, digest, &len);
+ EVP_MD_CTX_free(ctx);
+
return (int)len;
}
@@ -64,7 +68,7 @@ auth_md5(
* with. sntp is a 1-shot program, so snooping for
* timing attacks is Harder.
*/
- authentic = !memcmp(digest, pkt_data + pkt_size + 4,
+ authentic = !memcmp(digest, (const char*)pkt_data + pkt_size + 4,
hash_len);
}
return authentic;
diff --git a/contrib/ntp/sntp/include/version.def b/contrib/ntp/sntp/include/version.def
index add303d..6886dc2 100644
--- a/contrib/ntp/sntp/include/version.def
+++ b/contrib/ntp/sntp/include/version.def
@@ -1 +1 @@
-version = '4.2.8p8';
+version = '4.2.8p9';
diff --git a/contrib/ntp/sntp/include/version.texi b/contrib/ntp/sntp/include/version.texi
index 9f303b2..7099eb8 100644
--- a/contrib/ntp/sntp/include/version.texi
+++ b/contrib/ntp/sntp/include/version.texi
@@ -1,3 +1,3 @@
-@set UPDATED 02 June 2016
-@set EDITION 4.2.8p8
-@set VERSION 4.2.8p8
+@set UPDATED 21 November 2016
+@set EDITION 4.2.8p9
+@set VERSION 4.2.8p9
diff --git a/contrib/ntp/sntp/invoke-sntp.texi b/contrib/ntp/sntp/invoke-sntp.texi
index 256ff86..4879df3 100644
--- a/contrib/ntp/sntp/invoke-sntp.texi
+++ b/contrib/ntp/sntp/invoke-sntp.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-sntp.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:19:58 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 07:58:29 AM by AutoGen 5.18.5
# From the definitions sntp-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -101,7 +101,7 @@ with a status code of 0.
@exampleindent 0
@example
-sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p8
+sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p9
Usage: sntp [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ hostname-or-IP ...]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/sntp/m4/version.m4 b/contrib/ntp/sntp/m4/version.m4
index 3529730..8366527 100644
--- a/contrib/ntp/sntp/m4/version.m4
+++ b/contrib/ntp/sntp/m4/version.m4
@@ -1 +1 @@
-m4_define([VERSION_NUMBER],[4.2.8p8])
+m4_define([VERSION_NUMBER],[4.2.8p9])
diff --git a/contrib/ntp/sntp/sntp-opts.c b/contrib/ntp/sntp/sntp-opts.c
index e469d3e..014b964 100644
--- a/contrib/ntp/sntp/sntp-opts.c
+++ b/contrib/ntp/sntp/sntp-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:18:42 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 07:38:40 AM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -70,7 +70,7 @@ extern FILE * option_usage_fp;
* static const strings for sntp options
*/
static char const sntp_opt_strs[2549] =
-/* 0 */ "sntp 4.2.8p8\n"
+/* 0 */ "sntp 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -155,7 +155,7 @@ static char const sntp_opt_strs[2549] =
/* 2298 */ "LOAD_OPTS\0"
/* 2308 */ "no-load-opts\0"
/* 2321 */ "SNTP\0"
-/* 2326 */ "sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p8\n"
+/* 2326 */ "sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n"
"\t\t[ hostname-or-IP ...]\n\0"
/* 2485 */ "$HOME\0"
@@ -163,7 +163,7 @@ static char const sntp_opt_strs[2549] =
/* 2493 */ ".ntprc\0"
/* 2500 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 2534 */ "\n\0"
-/* 2536 */ "sntp 4.2.8p8";
+/* 2536 */ "sntp 4.2.8p9";
/**
* ipv4 option description with
@@ -1173,7 +1173,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via sntpOptions.pzCopyright */
- puts(_("sntp 4.2.8p8\n\
+ puts(_("sntp 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1263,7 +1263,7 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via sntpOptions.pzUsageTitle */
- puts(_("sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p8\n\
+ puts(_("sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
\t\t[ hostname-or-IP ...]\n"));
@@ -1271,7 +1271,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("\n"));
/* referenced via sntpOptions.pzFullVersion */
- puts(_("sntp 4.2.8p8"));
+ puts(_("sntp 4.2.8p9"));
/* referenced via sntpOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/sntp/sntp-opts.h b/contrib/ntp/sntp/sntp-opts.h
index 9136f28..09aea49 100644
--- a/contrib/ntp/sntp/sntp-opts.h
+++ b/contrib/ntp/sntp/sntp-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:18:40 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 07:38:39 AM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -91,9 +91,9 @@ typedef enum {
/** count of all options for sntp */
#define OPTION_CT 23
/** sntp version */
-#define SNTP_VERSION "4.2.8p8"
+#define SNTP_VERSION "4.2.8p9"
/** Full sntp version text */
-#define SNTP_FULL_VERSION "sntp 4.2.8p8"
+#define SNTP_FULL_VERSION "sntp 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/sntp/sntp.1sntpman b/contrib/ntp/sntp/sntp.1sntpman
index 6921dd3..775b10e 100644
--- a/contrib/ntp/sntp/sntp.1sntpman
+++ b/contrib/ntp/sntp/sntp.1sntpman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp 1sntpman "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH sntp 1sntpman "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-5CayKq/ag-fDaqJq)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Mfai12/ag-0faa02)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:19:39 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:25 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/sntp/sntp.1sntpmdoc b/contrib/ntp/sntp/sntp.1sntpmdoc
index 8025d49..f4b1f6f 100644
--- a/contrib/ntp/sntp/sntp.1sntpmdoc
+++ b/contrib/ntp/sntp/sntp.1sntpmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt SNTP 1sntpmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:20:03 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:32 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -211,7 +211,7 @@ of seconds specified before giving up. The default should be
more than enough for a unicast response. If \fBsntp\fP is
only waiting for a broadcast response a longer timeout is
likely needed.
-.It Fl \-wait , " Fl \-no\-wait"
+.It Fl \-wait , Fl \-no\-wait
Wait for pending replies (if not setting the time).
The \fIno\-wait\fP form will disable the option.
This option is enabled by default.
diff --git a/contrib/ntp/sntp/sntp.html b/contrib/ntp/sntp/sntp.html
index 46bad27..212cc50 100644
--- a/contrib/ntp/sntp/sntp.html
+++ b/contrib/ntp/sntp/sntp.html
@@ -36,7 +36,7 @@ display the time offset of the system clock relative to the server
clock. Run as root, it can correct the system clock to this offset as
well. It can be run as an interactive command or from a cron job.
- <p>This document applies to version 4.2.8p8 of <code>sntp</code>.
+ <p>This document applies to version 4.2.8p9 of <code>sntp</code>.
<p>The program implements the SNTP protocol as defined by RFC 5905, the NTPv4
IETF specification.
@@ -176,7 +176,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p8
+<pre class="example">sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p9
Usage: sntp [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... \
[ hostname-or-IP ...]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/sntp/sntp.man.in b/contrib/ntp/sntp/sntp.man.in
index 899c49a..6fee92a 100644
--- a/contrib/ntp/sntp/sntp.man.in
+++ b/contrib/ntp/sntp/sntp.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp @SNTP_MS@ "02 Jun 2016" "4.2.8p8" "User Commands"
+.TH sntp @SNTP_MS@ "21 Nov 2016" "4.2.8p9" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-5CayKq/ag-fDaqJq)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Mfai12/ag-0faa02)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:19:39 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:25 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/sntp/sntp.mdoc.in b/contrib/ntp/sntp/sntp.mdoc.in
index 71dd224..19a20ca 100644
--- a/contrib/ntp/sntp/sntp.mdoc.in
+++ b/contrib/ntp/sntp/sntp.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt SNTP @SNTP_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:20:03 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:32 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/sntp/tests/packetProcessing.c b/contrib/ntp/sntp/tests/packetProcessing.c
index 88e61cc..660b5b6 100644
--- a/contrib/ntp/sntp/tests/packetProcessing.c
+++ b/contrib/ntp/sntp/tests/packetProcessing.c
@@ -1,10 +1,5 @@
#include "config.h"
-/* need autokey for some of the tests, or the will create buffer overruns. */
-#ifndef AUTOKEY
-# define AUTOKEY 1
-#endif
-
#include "sntptest.h"
#include "networking.h"
#include "ntp_stdlib.h"
@@ -13,7 +8,7 @@
const char * Version = "stub unit test Version string";
-// Hacks into the key database.
+/* Hacks into the key database. */
extern struct key* key_ptr;
extern int key_cnt;
@@ -41,9 +36,25 @@ void test_CorrectUnauthenticatedPacket(void);
void test_CorrectAuthenticatedPacketMD5(void);
void test_CorrectAuthenticatedPacketSHA1(void);
+/* [Bug 2998] There are some issues whith the definition of 'struct pkt'
+ * when AUTOKEY is undefined -- the formal struct is too small to hold
+ * all the extension fields that are going to be tested. We have to make
+ * sure we have the extra bytes, or the test yield undefined results due
+ * to buffer overrun.
+ */
+#ifndef AUTOKEY
+# define EXTRA_BUFSIZE 256
+#else
+# define EXTRA_BUFSIZE 0
+#endif
+
+union tpkt {
+ struct pkt p;
+ u_char b[sizeof(struct pkt) + EXTRA_BUFSIZE];
+};
-static struct pkt testpkt;
-static struct pkt testspkt;
+static union tpkt testpkt;
+static union tpkt testspkt;
static sockaddr_u testsock;
bool restoreKeyDb;
@@ -95,10 +106,10 @@ setUp(void)
/* Initialize the test packet and socket,
* so they contain at least some valid data.
*/
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, NTP_VERSION,
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, NTP_VERSION,
MODE_SERVER);
- testpkt.stratum = STRATUM_REFCLOCK;
- memcpy(&testpkt.refid, "GPS\0", 4);
+ testpkt.p.stratum = STRATUM_REFCLOCK;
+ memcpy(&testpkt.p.refid, "GPS\0", 4);
/* Set the origin timestamp of the received packet to the
* same value as the transmit timestamp of the sent packet.
@@ -107,8 +118,8 @@ setUp(void)
tmp.l_ui = 1000UL;
tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &testpkt.org);
- HTONL_FP(&tmp, &testspkt.xmt);
+ HTONL_FP(&tmp, &testpkt.p.org);
+ HTONL_FP(&tmp, &testspkt.p.xmt);
}
@@ -129,11 +140,11 @@ void
test_TooShortLength(void)
{
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC - 1,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC - 1,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC - 1,
- MODE_BROADCAST, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC - 1,
+ MODE_BROADCAST, &testspkt.p, "UnitTest"));
}
@@ -141,22 +152,29 @@ void
test_LengthNotMultipleOfFour(void)
{
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC + 6,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC + 6,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC + 3,
- MODE_BROADCAST, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC + 3,
+ MODE_BROADCAST, &testspkt.p, "UnitTest"));
}
void
test_TooShortExtensionFieldLength(void)
{
+ /* [Bug 2998] We have to get around the formal specification of
+ * the extension field if AUTOKEY is undefined. (At least CLANG
+ * issues a warning in this case. It's just a warning, but
+ * still...
+ */
+ uint32_t * pe = testpkt.p.exten + 7;
+
/* The lower 16-bits are the length of the extension field.
* This lengths must be multiples of 4 bytes, which gives
* a minimum of 4 byte extension field length.
*/
- testpkt.exten[7] = htonl(3); /* 3 bytes is too short. */
+ *pe = htonl(3); /* 3 bytes is too short. */
/* We send in a pkt_len of header size + 4 byte extension
* header + 24 byte MAC, this prevents the length error to
@@ -165,8 +183,8 @@ test_TooShortExtensionFieldLength(void)
int pkt_len = LEN_PKT_NOMAC + 4 + 24;
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -181,8 +199,8 @@ test_UnauthenticatedPacketReject(void)
/* We demand authentication, but no MAC header is present. */
TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -196,8 +214,8 @@ test_CryptoNAKPacketReject(void)
int pkt_len = LEN_PKT_NOMAC + 4; /* + 4 byte MAC = Crypto-NAK */
TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -211,19 +229,19 @@ test_AuthenticatedPacketInvalid(void)
/* Prepare the packet. */
int pkt_len = LEN_PKT_NOMAC;
- testpkt.exten[0] = htonl(50);
- int mac_len = make_mac(&testpkt, pkt_len,
+ testpkt.p.exten[0] = htonl(50);
+ int mac_len = make_mac(&testpkt.p, pkt_len,
MAX_MD5_LEN, key_ptr,
- &testpkt.exten[1]);
+ &testpkt.p.exten[1]);
pkt_len += 4 + mac_len;
/* Now, alter the MAC so it becomes invalid. */
- testpkt.exten[1] += 1;
+ testpkt.p.exten[1] += 1;
TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -239,15 +257,15 @@ test_AuthenticatedPacketUnknownKey(void)
*/
int pkt_len = LEN_PKT_NOMAC;
- testpkt.exten[0] = htonl(50);
- int mac_len = make_mac(&testpkt, pkt_len,
+ testpkt.p.exten[0] = htonl(50);
+ int mac_len = make_mac(&testpkt.p, pkt_len,
MAX_MD5_LEN, key_ptr,
- &testpkt.exten[1]);
+ &testpkt.p.exten[1]);
pkt_len += 4 + mac_len;
TEST_ASSERT_EQUAL(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -256,16 +274,16 @@ test_ServerVersionTooOld(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_OLDVERSION - 1,
- MODE_CLIENT);
- TEST_ASSERT_TRUE(PKT_VERSION(testpkt.li_vn_mode) < NTP_OLDVERSION);
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
+ NTP_OLDVERSION - 1,
+ MODE_CLIENT);
+ TEST_ASSERT_TRUE(PKT_VERSION(testpkt.p.li_vn_mode) < NTP_OLDVERSION);
int pkt_len = LEN_PKT_NOMAC;
TEST_ASSERT_EQUAL(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -274,16 +292,16 @@ test_ServerVersionTooNew(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION + 1,
- MODE_CLIENT);
- TEST_ASSERT_TRUE(PKT_VERSION(testpkt.li_vn_mode) > NTP_VERSION);
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
+ NTP_VERSION + 1,
+ MODE_CLIENT);
+ TEST_ASSERT_TRUE(PKT_VERSION(testpkt.p.li_vn_mode) > NTP_VERSION);
int pkt_len = LEN_PKT_NOMAC;
TEST_ASSERT_EQUAL(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -292,16 +310,16 @@ test_NonWantedMode(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION,
- MODE_CLIENT);
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
+ NTP_VERSION,
+ MODE_CLIENT);
/* The packet has a mode of MODE_CLIENT, but process_pkt expects
* MODE_SERVER
*/
TEST_ASSERT_EQUAL(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -311,12 +329,12 @@ test_KoDRate(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.stratum = STRATUM_PKT_UNSPEC;
- memcpy(&testpkt.refid, "RATE", 4);
+ testpkt.p.stratum = STRATUM_PKT_UNSPEC;
+ memcpy(&testpkt.p.refid, "RATE", 4);
TEST_ASSERT_EQUAL(KOD_RATE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -325,12 +343,12 @@ test_KoDDeny(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.stratum = STRATUM_PKT_UNSPEC;
- memcpy(&testpkt.refid, "DENY", 4);
+ testpkt.p.stratum = STRATUM_PKT_UNSPEC;
+ memcpy(&testpkt.p.refid, "DENY", 4);
TEST_ASSERT_EQUAL(KOD_DEMOBILIZE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -339,13 +357,13 @@ test_RejectUnsyncedServer(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
- NTP_VERSION,
- MODE_SERVER);
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
+ NTP_VERSION,
+ MODE_SERVER);
TEST_ASSERT_EQUAL(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -357,15 +375,15 @@ test_RejectWrongResponseServerMode(void)
l_fp tmp;
tmp.l_ui = 1000UL;
tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &testpkt.org);
+ HTONL_FP(&tmp, &testpkt.p.org);
tmp.l_ui = 2000UL;
tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &testspkt.xmt);
+ HTONL_FP(&tmp, &testspkt.p.xmt);
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -374,12 +392,12 @@ test_AcceptNoSentPacketBroadcastMode(void)
{
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION,
- MODE_BROADCAST);
+ testpkt.p.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
+ NTP_VERSION,
+ MODE_BROADCAST);
TEST_ASSERT_EQUAL(LEN_PKT_NOMAC,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
MODE_BROADCAST, NULL, "UnitTest"));
}
@@ -390,8 +408,8 @@ test_CorrectUnauthenticatedPacket(void)
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
TEST_ASSERT_EQUAL(LEN_PKT_NOMAC,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, LEN_PKT_NOMAC,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -404,16 +422,16 @@ test_CorrectAuthenticatedPacketMD5(void)
int pkt_len = LEN_PKT_NOMAC;
/* Prepare the packet. */
- testpkt.exten[0] = htonl(10);
- int mac_len = make_mac(&testpkt, pkt_len,
+ testpkt.p.exten[0] = htonl(10);
+ int mac_len = make_mac(&testpkt.p, pkt_len,
MAX_MD5_LEN, key_ptr,
- &testpkt.exten[1]);
+ &testpkt.p.exten[1]);
pkt_len += 4 + mac_len;
TEST_ASSERT_EQUAL(pkt_len,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
@@ -426,14 +444,14 @@ test_CorrectAuthenticatedPacketSHA1(void)
int pkt_len = LEN_PKT_NOMAC;
/* Prepare the packet. */
- testpkt.exten[0] = htonl(20);
- int mac_len = make_mac(&testpkt, pkt_len,
+ testpkt.p.exten[0] = htonl(20);
+ int mac_len = make_mac(&testpkt.p, pkt_len,
MAX_MAC_LEN, key_ptr,
- &testpkt.exten[1]);
+ &testpkt.p.exten[1]);
pkt_len += 4 + mac_len;
TEST_ASSERT_EQUAL(pkt_len,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
+ process_pkt(&testpkt.p, &testsock, pkt_len,
+ MODE_SERVER, &testspkt.p, "UnitTest"));
}
diff --git a/contrib/ntp/sntp/tests/run-packetProcessing.c b/contrib/ntp/sntp/tests/run-packetProcessing.c
index ad02b7a..38f8552 100644
--- a/contrib/ntp/sntp/tests/run-packetProcessing.c
+++ b/contrib/ntp/sntp/tests/run-packetProcessing.c
@@ -66,24 +66,24 @@ int main(int argc, char *argv[])
{
progname = argv[0];
UnityBegin("packetProcessing.c");
- RUN_TEST(test_TooShortLength, 25);
- RUN_TEST(test_LengthNotMultipleOfFour, 26);
- RUN_TEST(test_TooShortExtensionFieldLength, 27);
- RUN_TEST(test_UnauthenticatedPacketReject, 28);
- RUN_TEST(test_CryptoNAKPacketReject, 29);
- RUN_TEST(test_AuthenticatedPacketInvalid, 30);
- RUN_TEST(test_AuthenticatedPacketUnknownKey, 31);
- RUN_TEST(test_ServerVersionTooOld, 32);
- RUN_TEST(test_ServerVersionTooNew, 33);
- RUN_TEST(test_NonWantedMode, 34);
- RUN_TEST(test_KoDRate, 35);
- RUN_TEST(test_KoDDeny, 36);
- RUN_TEST(test_RejectUnsyncedServer, 37);
- RUN_TEST(test_RejectWrongResponseServerMode, 38);
- RUN_TEST(test_AcceptNoSentPacketBroadcastMode, 39);
- RUN_TEST(test_CorrectUnauthenticatedPacket, 40);
- RUN_TEST(test_CorrectAuthenticatedPacketMD5, 41);
- RUN_TEST(test_CorrectAuthenticatedPacketSHA1, 42);
+ RUN_TEST(test_TooShortLength, 20);
+ RUN_TEST(test_LengthNotMultipleOfFour, 21);
+ RUN_TEST(test_TooShortExtensionFieldLength, 22);
+ RUN_TEST(test_UnauthenticatedPacketReject, 23);
+ RUN_TEST(test_CryptoNAKPacketReject, 24);
+ RUN_TEST(test_AuthenticatedPacketInvalid, 25);
+ RUN_TEST(test_AuthenticatedPacketUnknownKey, 26);
+ RUN_TEST(test_ServerVersionTooOld, 27);
+ RUN_TEST(test_ServerVersionTooNew, 28);
+ RUN_TEST(test_NonWantedMode, 29);
+ RUN_TEST(test_KoDRate, 30);
+ RUN_TEST(test_KoDDeny, 31);
+ RUN_TEST(test_RejectUnsyncedServer, 32);
+ RUN_TEST(test_RejectWrongResponseServerMode, 33);
+ RUN_TEST(test_AcceptNoSentPacketBroadcastMode, 34);
+ RUN_TEST(test_CorrectUnauthenticatedPacket, 35);
+ RUN_TEST(test_CorrectAuthenticatedPacketMD5, 36);
+ RUN_TEST(test_CorrectAuthenticatedPacketSHA1, 37);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/unity/Makefile.am b/contrib/ntp/sntp/unity/Makefile.am
index 31029ff..71092a0 100644
--- a/contrib/ntp/sntp/unity/Makefile.am
+++ b/contrib/ntp/sntp/unity/Makefile.am
@@ -12,6 +12,8 @@ libunity_a_CFLAGS = \
libunity_a_SOURCES = \
../libpkgver/colcomp.c \
unity.c \
+ ulib_setup.c \
+ ulib_teardown.c \
unity.h \
unity_config.h \
unity_internals.h \
diff --git a/contrib/ntp/sntp/unity/Makefile.in b/contrib/ntp/sntp/unity/Makefile.in
index e82e55e..7c92397 100644
--- a/contrib/ntp/sntp/unity/Makefile.in
+++ b/contrib/ntp/sntp/unity/Makefile.in
@@ -134,8 +134,9 @@ libunity_a_AR = $(AR) $(ARFLAGS)
libunity_a_LIBADD =
am__objects_1 =
am_libunity_a_OBJECTS = libunity_a-colcomp.$(OBJEXT) \
- libunity_a-unity.$(OBJEXT) libunity_a-unity_fixture.$(OBJEXT) \
- $(am__objects_1)
+ libunity_a-unity.$(OBJEXT) libunity_a-ulib_setup.$(OBJEXT) \
+ libunity_a-ulib_teardown.$(OBJEXT) \
+ libunity_a-unity_fixture.$(OBJEXT) $(am__objects_1)
libunity_a_OBJECTS = $(am_libunity_a_OBJECTS)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -453,6 +454,8 @@ libunity_a_CFLAGS = \
libunity_a_SOURCES = \
../libpkgver/colcomp.c \
unity.c \
+ ulib_setup.c \
+ ulib_teardown.c \
unity.h \
unity_config.h \
unity_internals.h \
@@ -518,6 +521,8 @@ distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunity_a-colcomp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunity_a-ulib_setup.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunity_a-ulib_teardown.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunity_a-unity.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libunity_a-unity_fixture.Po@am__quote@
@@ -570,6 +575,34 @@ libunity_a-unity.obj: unity.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -c -o libunity_a-unity.obj `if test -f 'unity.c'; then $(CYGPATH_W) 'unity.c'; else $(CYGPATH_W) '$(srcdir)/unity.c'; fi`
+libunity_a-ulib_setup.o: ulib_setup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -MT libunity_a-ulib_setup.o -MD -MP -MF $(DEPDIR)/libunity_a-ulib_setup.Tpo -c -o libunity_a-ulib_setup.o `test -f 'ulib_setup.c' || echo '$(srcdir)/'`ulib_setup.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunity_a-ulib_setup.Tpo $(DEPDIR)/libunity_a-ulib_setup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ulib_setup.c' object='libunity_a-ulib_setup.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -c -o libunity_a-ulib_setup.o `test -f 'ulib_setup.c' || echo '$(srcdir)/'`ulib_setup.c
+
+libunity_a-ulib_setup.obj: ulib_setup.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -MT libunity_a-ulib_setup.obj -MD -MP -MF $(DEPDIR)/libunity_a-ulib_setup.Tpo -c -o libunity_a-ulib_setup.obj `if test -f 'ulib_setup.c'; then $(CYGPATH_W) 'ulib_setup.c'; else $(CYGPATH_W) '$(srcdir)/ulib_setup.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunity_a-ulib_setup.Tpo $(DEPDIR)/libunity_a-ulib_setup.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ulib_setup.c' object='libunity_a-ulib_setup.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -c -o libunity_a-ulib_setup.obj `if test -f 'ulib_setup.c'; then $(CYGPATH_W) 'ulib_setup.c'; else $(CYGPATH_W) '$(srcdir)/ulib_setup.c'; fi`
+
+libunity_a-ulib_teardown.o: ulib_teardown.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -MT libunity_a-ulib_teardown.o -MD -MP -MF $(DEPDIR)/libunity_a-ulib_teardown.Tpo -c -o libunity_a-ulib_teardown.o `test -f 'ulib_teardown.c' || echo '$(srcdir)/'`ulib_teardown.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunity_a-ulib_teardown.Tpo $(DEPDIR)/libunity_a-ulib_teardown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ulib_teardown.c' object='libunity_a-ulib_teardown.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -c -o libunity_a-ulib_teardown.o `test -f 'ulib_teardown.c' || echo '$(srcdir)/'`ulib_teardown.c
+
+libunity_a-ulib_teardown.obj: ulib_teardown.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -MT libunity_a-ulib_teardown.obj -MD -MP -MF $(DEPDIR)/libunity_a-ulib_teardown.Tpo -c -o libunity_a-ulib_teardown.obj `if test -f 'ulib_teardown.c'; then $(CYGPATH_W) 'ulib_teardown.c'; else $(CYGPATH_W) '$(srcdir)/ulib_teardown.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunity_a-ulib_teardown.Tpo $(DEPDIR)/libunity_a-ulib_teardown.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ulib_teardown.c' object='libunity_a-ulib_teardown.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -c -o libunity_a-ulib_teardown.obj `if test -f 'ulib_teardown.c'; then $(CYGPATH_W) 'ulib_teardown.c'; else $(CYGPATH_W) '$(srcdir)/ulib_teardown.c'; fi`
+
libunity_a-unity_fixture.o: unity_fixture.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libunity_a_CFLAGS) $(CFLAGS) -MT libunity_a-unity_fixture.o -MD -MP -MF $(DEPDIR)/libunity_a-unity_fixture.Tpo -c -o libunity_a-unity_fixture.o `test -f 'unity_fixture.c' || echo '$(srcdir)/'`unity_fixture.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libunity_a-unity_fixture.Tpo $(DEPDIR)/libunity_a-unity_fixture.Po
diff --git a/contrib/ntp/sntp/unity/ulib_setup.c b/contrib/ntp/sntp/unity/ulib_setup.c
new file mode 100644
index 0000000..41a3b38
--- /dev/null
+++ b/contrib/ntp/sntp/unity/ulib_setup.c
@@ -0,0 +1,14 @@
+/* default / lib implementation of 'setUp()'
+ *
+ * SOLARIS does not support weak symbols -- need a real lib
+ * implemetation here.
+ */
+
+extern void setUp(void);
+
+void setUp(void)
+{
+ /* empty on purpose */
+}
+
+/* -*- that's all folks! -*- */
diff --git a/contrib/ntp/sntp/unity/ulib_teardown.c b/contrib/ntp/sntp/unity/ulib_teardown.c
new file mode 100644
index 0000000..a36cdf9
--- /dev/null
+++ b/contrib/ntp/sntp/unity/ulib_teardown.c
@@ -0,0 +1,13 @@
+/* default / lib implementation of 'tearDown()'
+ *
+ * SOLARIS does not support weak symbols -- need a real lib
+ * implemetation here.
+ */
+
+extern void tearDown(void);
+
+void tearDown(void)
+{
+ /* empty on purpose */
+}
+
diff --git a/contrib/ntp/sntp/unity/unity_fixture.c b/contrib/ntp/sntp/unity/unity_fixture.c
index 6bdbe5b..c45a9a7 100644
--- a/contrib/ntp/sntp/unity/unity_fixture.c
+++ b/contrib/ntp/sntp/unity/unity_fixture.c
@@ -17,10 +17,6 @@ int (*outputChar)(int) = putchar;
int verbose = 0;
-void setUp(void);
-void tearDown(void);
-void setUp(void) { /*does nothing*/ }
-void tearDown(void) { /*does nothing*/ }
static void announceTestRun(unsigned int runNumber)
{
diff --git a/contrib/ntp/sntp/version.c b/contrib/ntp/sntp/version.c
index 38424f3..1515ff2 100644
--- a/contrib/ntp/sntp/version.c
+++ b/contrib/ntp/sntp/version.c
@@ -2,4 +2,4 @@
* version file for sntp
*/
#include <config.h>
-const char * Version = "sntp 4.2.8p7@1.3265-o Thu Jun 2 11:19:34 UTC 2016 (29)";
+const char * Version = "sntp 4.2.8p9@1.3265-o Mon Nov 21 12:58:21 UTC 2016 (31)";
diff --git a/contrib/ntp/tests/libntp/a_md5encrypt.c b/contrib/ntp/tests/libntp/a_md5encrypt.c
index d8e7ab9..a87aa79 100644
--- a/contrib/ntp/tests/libntp/a_md5encrypt.c
+++ b/contrib/ntp/tests/libntp/a_md5encrypt.c
@@ -49,9 +49,7 @@ test_Encrypt(void) {
u_int32 *packetPtr;
int length;
- packetPtr = emalloc(totalLength * sizeof(*packetPtr));
-
- memset(packetPtr + packetLength, 0, keyIdLength);
+ packetPtr = emalloc_zero(totalLength * sizeof(*packetPtr));
memcpy(packetPtr, packet, packetLength);
cache_secretsize = keyLength;
diff --git a/contrib/ntp/tests/libntp/calendar.c b/contrib/ntp/tests/libntp/calendar.c
index 9d25c41..b631565 100644
--- a/contrib/ntp/tests/libntp/calendar.c
+++ b/contrib/ntp/tests/libntp/calendar.c
@@ -2,6 +2,7 @@
#include "ntp_stdlib.h" /* test fail without this include, for some reason */
#include "ntp_calendar.h"
+#include "ntp_unixtime.h"
#include "unity.h"
#include <string.h>
@@ -19,6 +20,7 @@ char * DateFromCalToString(const struct calendar *cal);
char * DateFromIsoToString(const struct isodate *iso);
int IsEqualDateCal(const struct calendar *expected, const struct calendar *actual);
int IsEqualDateIso(const struct isodate *expected, const struct isodate *actual);
+
void test_DaySplitMerge(void);
void test_SplitYearDays1(void);
void test_SplitYearDays2(void);
@@ -35,6 +37,8 @@ void test_IsoCalWeeksToYearStart(void);
void test_IsoCalWeeksToYearEnd(void);
void test_DaySecToDate(void);
+void test_NtpToNtp(void);
+void test_NtpToTime(void);
void
setUp(void)
@@ -608,3 +612,126 @@ test_DaySecToDate(void)
return;
}
+
+/* --------------------------------------------------------------------
+ * unfolding of (truncated) NTP time stamps to full 64bit values.
+ *
+ * Note: These tests need a 64bit time_t to be useful.
+ */
+
+void
+test_NtpToNtp(void)
+{
+# if SIZEOF_TIME_T <= 4
+
+ TEST_IGNORE_MESSAGE("test only useful for sizeof(time_t) > 4, skipped");
+
+# else
+
+ static const uint32_t ntp_vals[6] = {
+ UINT32_C(0x00000000),
+ UINT32_C(0x00000001),
+ UINT32_C(0x7FFFFFFF),
+ UINT32_C(0x80000000),
+ UINT32_C(0x80000001),
+ UINT32_C(0xFFFFFFFF)
+ };
+
+ static char lbuf[128];
+ vint64 hold;
+ time_t pivot, texp, diff;
+ int loops, iloop;
+
+ pivot = 0;
+ for (loops = 0; loops < 16; ++loops) {
+ for (iloop = 0; iloop < 6; ++iloop) {
+ hold = ntpcal_ntp_to_ntp(
+ ntp_vals[iloop], &pivot);
+ texp = vint64_to_time(&hold);
+
+ /* constraint 1: texp must be in the
+ * (right-open) intervall [p-(2^31), p+(2^31)[,
+ * but the pivot 'p' must be taken in full NTP
+ * time scale!
+ */
+ diff = texp - (pivot + JAN_1970);
+ snprintf(lbuf, sizeof(lbuf),
+ "bounds check: piv=%lld exp=%lld dif=%lld",
+ (long long)pivot,
+ (long long)texp,
+ (long long)diff);
+ TEST_ASSERT_MESSAGE((diff >= INT32_MIN) && (diff <= INT32_MAX),
+ lbuf);
+
+ /* constraint 2: low word must be equal to
+ * input
+ */
+ snprintf(lbuf, sizeof(lbuf),
+ "low check: ntp(in)=$%08lu ntp(out[0:31])=$%08lu",
+ (unsigned long)ntp_vals[iloop],
+ (unsigned long)hold.D_s.lo);
+ TEST_ASSERT_EQUAL_MESSAGE(ntp_vals[iloop], hold.D_s.lo, lbuf);
+ }
+ pivot += 0x20000000;
+ }
+# endif
+}
+
+void
+test_NtpToTime(void)
+{
+# if SIZEOF_TIME_T <= 4
+
+ TEST_IGNORE_MESSAGE("test only useful for sizeof(time_t) > 4, skipped");
+
+# else
+
+ static const uint32_t ntp_vals[6] = {
+ UINT32_C(0x00000000),
+ UINT32_C(0x00000001),
+ UINT32_C(0x7FFFFFFF),
+ UINT32_C(0x80000000),
+ UINT32_C(0x80000001),
+ UINT32_C(0xFFFFFFFF)
+ };
+
+ static char lbuf[128];
+ vint64 hold;
+ time_t pivot, texp, diff;
+ uint32_t back;
+ int loops, iloop;
+
+ pivot = 0;
+ for (loops = 0; loops < 16; ++loops) {
+ for (iloop = 0; iloop < 6; ++iloop) {
+ hold = ntpcal_ntp_to_time(
+ ntp_vals[iloop], &pivot);
+ texp = vint64_to_time(&hold);
+
+ /* constraint 1: texp must be in the
+ * (right-open) intervall [p-(2^31), p+(2^31)[
+ */
+ diff = texp - pivot;
+ snprintf(lbuf, sizeof(lbuf),
+ "bounds check: piv=%lld exp=%lld dif=%lld",
+ (long long)pivot,
+ (long long)texp,
+ (long long)diff);
+ TEST_ASSERT_MESSAGE((diff >= INT32_MIN) && (diff <= INT32_MAX),
+ lbuf);
+
+ /* constraint 2: conversion from full time back
+ * to truncated NTP time must yield same result
+ * as input.
+ */
+ back = (uint32_t)texp + JAN_1970;
+ snprintf(lbuf, sizeof(lbuf),
+ "modulo check: ntp(in)=$%08lu ntp(out)=$%08lu",
+ (unsigned long)ntp_vals[iloop],
+ (unsigned long)back);
+ TEST_ASSERT_EQUAL_MESSAGE(ntp_vals[iloop], back, lbuf);
+ }
+ pivot += 0x20000000;
+ }
+# endif
+}
diff --git a/contrib/ntp/tests/libntp/run-calendar.c b/contrib/ntp/tests/libntp/run-calendar.c
index 555f3ba..82309bd 100644
--- a/contrib/ntp/tests/libntp/run-calendar.c
+++ b/contrib/ntp/tests/libntp/run-calendar.c
@@ -25,6 +25,7 @@
#include "config.h"
#include "ntp_stdlib.h"
#include "ntp_calendar.h"
+#include "ntp_unixtime.h"
#include <string.h>
//=======External Functions This Runner Calls=====
@@ -45,6 +46,8 @@ extern void test_IsoCalYearsToWeeks(void);
extern void test_IsoCalWeeksToYearStart(void);
extern void test_IsoCalWeeksToYearEnd(void);
extern void test_DaySecToDate(void);
+extern void test_NtpToNtp(void);
+extern void test_NtpToTime(void);
//=======Test Reset Option=====
@@ -63,21 +66,23 @@ int main(int argc, char *argv[])
{
progname = argv[0];
UnityBegin("calendar.c");
- RUN_TEST(test_DaySplitMerge, 22);
- RUN_TEST(test_SplitYearDays1, 23);
- RUN_TEST(test_SplitYearDays2, 24);
- RUN_TEST(test_RataDie1, 25);
- RUN_TEST(test_LeapYears1, 26);
- RUN_TEST(test_LeapYears2, 27);
- RUN_TEST(test_RoundTripDate, 28);
- RUN_TEST(test_RoundTripYearStart, 29);
- RUN_TEST(test_RoundTripMonthStart, 30);
- RUN_TEST(test_RoundTripWeekStart, 31);
- RUN_TEST(test_RoundTripDayStart, 32);
- RUN_TEST(test_IsoCalYearsToWeeks, 33);
- RUN_TEST(test_IsoCalWeeksToYearStart, 34);
- RUN_TEST(test_IsoCalWeeksToYearEnd, 35);
- RUN_TEST(test_DaySecToDate, 36);
+ RUN_TEST(test_DaySplitMerge, 24);
+ RUN_TEST(test_SplitYearDays1, 25);
+ RUN_TEST(test_SplitYearDays2, 26);
+ RUN_TEST(test_RataDie1, 27);
+ RUN_TEST(test_LeapYears1, 28);
+ RUN_TEST(test_LeapYears2, 29);
+ RUN_TEST(test_RoundTripDate, 30);
+ RUN_TEST(test_RoundTripYearStart, 31);
+ RUN_TEST(test_RoundTripMonthStart, 32);
+ RUN_TEST(test_RoundTripWeekStart, 33);
+ RUN_TEST(test_RoundTripDayStart, 34);
+ RUN_TEST(test_IsoCalYearsToWeeks, 35);
+ RUN_TEST(test_IsoCalWeeksToYearStart, 36);
+ RUN_TEST(test_IsoCalWeeksToYearEnd, 37);
+ RUN_TEST(test_DaySecToDate, 38);
+ RUN_TEST(test_NtpToNtp, 40);
+ RUN_TEST(test_NtpToTime, 41);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/sfptostr.c b/contrib/ntp/tests/libntp/sfptostr.c
index c7616c7..c781c03 100644
--- a/contrib/ntp/tests/libntp/sfptostr.c
+++ b/contrib/ntp/tests/libntp/sfptostr.c
@@ -39,7 +39,7 @@ void test_PositiveInteger(void)
void test_NegativeInteger(void)
{
- s_fp test = -200 << 16; // exact -200.000000
+ s_fp test = -(200 << 16); // exact -200.000000
TEST_ASSERT_EQUAL_STRING("-200.000000", fptoa(test, SFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("-200000.000", fptoms(test, SFP_MAX_PRECISION));
@@ -55,7 +55,7 @@ void test_PositiveIntegerPositiveFraction(void)
void test_NegativeIntegerNegativeFraction(void)
{
- s_fp test = (-200 << 16) - (1 << 15); // -200 - 0.5
+ s_fp test = -(200 << 16) - (1 << 15); // -200 - 0.5
TEST_ASSERT_EQUAL_STRING("-200.500000", fptoa(test, SFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("-200500.000", fptoms(test, SFP_MAX_PRECISION));
@@ -71,7 +71,7 @@ void test_PositiveIntegerNegativeFraction(void)
void test_NegativeIntegerPositiveFraction(void)
{
- s_fp test = (-200 << 16) + (1 << 14)*3; // -200 + 0.75
+ s_fp test = -(200 << 16) + (1 << 14)*3; // -200 + 0.75
TEST_ASSERT_EQUAL_STRING("-199.250000", fptoa(test, SFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("-199250.000", fptoms(test, SFP_MAX_PRECISION));
diff --git a/contrib/ntp/tests/ntpd/Makefile.am b/contrib/ntp/tests/ntpd/Makefile.am
index 2cab14f..3ce512d 100644
--- a/contrib/ntp/tests/ntpd/Makefile.am
+++ b/contrib/ntp/tests/ntpd/Makefile.am
@@ -156,7 +156,6 @@ test_ntp_signd_SOURCES = \
t-ntp_signd.c \
run-t-ntp_signd.c \
$(srcdir)/../libntp/test-libntp.c \
- $(srcdir)/../../ntpd/ntp_signd.c \
$(NULL)
$(srcdir)/run-t-ntp_signd.c: $(srcdir)/t-ntp_signd.c $(std_unity_list)
diff --git a/contrib/ntp/tests/ntpd/Makefile.in b/contrib/ntp/tests/ntpd/Makefile.in
index 2dc7a04..5c83a37 100644
--- a/contrib/ntp/tests/ntpd/Makefile.in
+++ b/contrib/ntp/tests/ntpd/Makefile.in
@@ -205,7 +205,7 @@ test_ntp_scanner_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
-o $@
am_test_ntp_signd_OBJECTS = t-ntp_signd.$(OBJEXT) \
run-t-ntp_signd.$(OBJEXT) test-libntp.$(OBJEXT) \
- ntp_signd.$(OBJEXT) $(am__objects_1)
+ $(am__objects_1)
test_ntp_signd_OBJECTS = $(am_test_ntp_signd_OBJECTS)
test_ntp_signd_DEPENDENCIES = $(am__DEPENDENCIES_3) \
$(top_builddir)/ntpd/ntp_config.o \
@@ -871,7 +871,6 @@ test_ntp_signd_SOURCES = \
t-ntp_signd.c \
run-t-ntp_signd.c \
$(srcdir)/../libntp/test-libntp.c \
- $(srcdir)/../../ntpd/ntp_signd.c \
$(NULL)
@@ -971,7 +970,6 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntp_signd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-t-ntp_signd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ntp_signd.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-libntp.Po@am__quote@
@@ -1194,20 +1192,6 @@ test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
-ntp_signd.o: $(srcdir)/../../ntpd/ntp_signd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_signd.o -MD -MP -MF $(DEPDIR)/ntp_signd.Tpo -c -o ntp_signd.o `test -f '$(srcdir)/../../ntpd/ntp_signd.c' || echo '$(srcdir)/'`$(srcdir)/../../ntpd/ntp_signd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_signd.Tpo $(DEPDIR)/ntp_signd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../../ntpd/ntp_signd.c' object='ntp_signd.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_signd.o `test -f '$(srcdir)/../../ntpd/ntp_signd.c' || echo '$(srcdir)/'`$(srcdir)/../../ntpd/ntp_signd.c
-
-ntp_signd.obj: $(srcdir)/../../ntpd/ntp_signd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_signd.obj -MD -MP -MF $(DEPDIR)/ntp_signd.Tpo -c -o ntp_signd.obj `if test -f '$(srcdir)/../../ntpd/ntp_signd.c'; then $(CYGPATH_W) '$(srcdir)/../../ntpd/ntp_signd.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../../ntpd/ntp_signd.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_signd.Tpo $(DEPDIR)/ntp_signd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../../ntpd/ntp_signd.c' object='ntp_signd.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_signd.obj `if test -f '$(srcdir)/../../ntpd/ntp_signd.c'; then $(CYGPATH_W) '$(srcdir)/../../ntpd/ntp_signd.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../../ntpd/ntp_signd.c'; fi`
-
test_rc_cmdlength-rc_cmdlength.o: rc_cmdlength.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-rc_cmdlength.o -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo -c -o test_rc_cmdlength-rc_cmdlength.o `test -f 'rc_cmdlength.c' || echo '$(srcdir)/'`rc_cmdlength.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Po
diff --git a/contrib/ntp/util/invoke-ntp-keygen.texi b/contrib/ntp/util/invoke-ntp-keygen.texi
index cc8a005..8cec26e 100644
--- a/contrib/ntp/util/invoke-ntp-keygen.texi
+++ b/contrib/ntp/util/invoke-ntp-keygen.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp-keygen.texi)
#
-# It has been AutoGen-ed June 2, 2016 at 07:39:40 AM by AutoGen 5.18.5
+# It has been AutoGen-ed November 21, 2016 at 08:03:45 AM by AutoGen 5.18.5
# From the definitions ntp-keygen-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -886,7 +886,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p8
+ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p9
Usage: ntp-keygen [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
Flg Arg Option-Name Description
-b Num imbits identity modulus bits
diff --git a/contrib/ntp/util/ntp-keygen-opts.c b/contrib/ntp/util/ntp-keygen-opts.c
index 2fb198b..d41a687 100644
--- a/contrib/ntp/util/ntp-keygen-opts.c
+++ b/contrib/ntp/util/ntp-keygen-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.c)
*
- * It has been AutoGen-ed June 2, 2016 at 07:39:24 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:03:30 AM by AutoGen 5.18.5
* From the definitions ntp-keygen-opts.def
* and the template file options
*
@@ -72,7 +72,7 @@ extern FILE * option_usage_fp;
* static const strings for ntp-keygen options
*/
static char const ntp_keygen_opt_strs[2419] =
-/* 0 */ "ntp-keygen (ntp) 4.2.8p8\n"
+/* 0 */ "ntp-keygen (ntp) 4.2.8p9\n"
"Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -164,14 +164,14 @@ static char const ntp_keygen_opt_strs[2419] =
/* 2202 */ "no-load-opts\0"
/* 2215 */ "no\0"
/* 2218 */ "NTP_KEYGEN\0"
-/* 2229 */ "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p8\n"
+/* 2229 */ "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p9\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
/* 2343 */ "$HOME\0"
/* 2349 */ ".\0"
/* 2351 */ ".ntprc\0"
/* 2358 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 2392 */ "\n\0"
-/* 2394 */ "ntp-keygen (ntp) 4.2.8p8";
+/* 2394 */ "ntp-keygen (ntp) 4.2.8p9";
/**
* imbits option description:
@@ -1309,7 +1309,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntp_keygenOptions.pzCopyright */
- puts(_("ntp-keygen (ntp) 4.2.8p8\n\
+ puts(_("ntp-keygen (ntp) 4.2.8p9\n\
Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1408,14 +1408,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntp_keygenOptions.pzUsageTitle */
- puts(_("ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p8\n\
+ puts(_("ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p9\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
/* referenced via ntp_keygenOptions.pzExplain */
puts(_("\n"));
/* referenced via ntp_keygenOptions.pzFullVersion */
- puts(_("ntp-keygen (ntp) 4.2.8p8"));
+ puts(_("ntp-keygen (ntp) 4.2.8p9"));
/* referenced via ntp_keygenOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/util/ntp-keygen-opts.h b/contrib/ntp/util/ntp-keygen-opts.h
index 68d6272..40201db 100644
--- a/contrib/ntp/util/ntp-keygen-opts.h
+++ b/contrib/ntp/util/ntp-keygen-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.h)
*
- * It has been AutoGen-ed June 2, 2016 at 07:39:23 AM by AutoGen 5.18.5
+ * It has been AutoGen-ed November 21, 2016 at 08:03:29 AM by AutoGen 5.18.5
* From the definitions ntp-keygen-opts.def
* and the template file options
*
@@ -94,9 +94,9 @@ typedef enum {
/** count of all options for ntp-keygen */
#define OPTION_CT 26
/** ntp-keygen version */
-#define NTP_KEYGEN_VERSION "4.2.8p8"
+#define NTP_KEYGEN_VERSION "4.2.8p9"
/** Full ntp-keygen version text */
-#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) 4.2.8p8"
+#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) 4.2.8p9"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/util/ntp-keygen.1ntp-keygenman b/contrib/ntp/util/ntp-keygen.1ntp-keygenman
index b3c1f2f..9e30b46 100644
--- a/contrib/ntp/util/ntp-keygen.1ntp-keygenman
+++ b/contrib/ntp/util/ntp-keygen.1ntp-keygenman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-keygen 1ntp-keygenman "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntp-keygen 1ntp-keygenman "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-.JaGB0/ag-lKayA0)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-psaWZm/ag-DsaOYm)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:36 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:41 AM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc b/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
index 0e5a5eb..4dd0746 100644
--- a/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
+++ b/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYGEN 1ntp-keygenmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:43 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:48 AM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/util/ntp-keygen.c b/contrib/ntp/util/ntp-keygen.c
index ab34927..66a4755 100644
--- a/contrib/ntp/util/ntp-keygen.c
+++ b/contrib/ntp/util/ntp-keygen.c
@@ -105,6 +105,7 @@
#include "openssl/pem.h"
#include "openssl/x509v3.h"
#include <openssl/objects.h>
+#include "libssl_compat.h"
#endif /* OPENSSL */
#include <ssl_applink.c>
@@ -148,6 +149,10 @@ EVP_PKEY *genkey (const char *, const char *);
EVP_PKEY *readkey (char *, char *, u_int *, EVP_PKEY **);
void writekey (char *, char *, u_int *, EVP_PKEY **);
u_long asn2ntp (ASN1_TIME *);
+
+static DSA* genDsaParams(int, char*);
+static RSA* genRsaKeyPair(int, char*);
+
#endif /* AUTOKEY */
/*
@@ -294,7 +299,6 @@ main(
int optct; /* option count */
#ifdef AUTOKEY
X509 *cert = NULL; /* X509 certificate */
- X509_EXTENSION *ext; /* X509v3 extension */
EVP_PKEY *pkey_host = NULL; /* host key */
EVP_PKEY *pkey_sign = NULL; /* sign key */
EVP_PKEY *pkey_iffkey = NULL; /* IFF sever keys */
@@ -511,8 +515,7 @@ main(
* Extract digest/signature scheme.
*/
if (scheme == NULL) {
- nid = OBJ_obj2nid(cert->cert_info->
- signature->algorithm);
+ nid = X509_get_signature_nid(cert);
scheme = OBJ_nid2sn(nid);
}
@@ -524,8 +527,13 @@ main(
ptr = strstr(groupbuf, "CN=");
cnt = X509_get_ext_count(cert);
for (i = 0; i < cnt; i++) {
+ X509_EXTENSION *ext;
+ ASN1_OBJECT *obj;
+
ext = X509_get_ext(cert, i);
- if (OBJ_obj2nid(ext->object) ==
+ obj = X509_EXTENSION_get_object(ext);
+
+ if (OBJ_obj2nid(obj) ==
NID_ext_key_usage) {
bp = BIO_new(BIO_s_mem());
X509V3_EXT_print(bp, ext, 0, 0);
@@ -617,8 +625,14 @@ main(
filename);
}
}
- if (pkey_gqkey != NULL)
- grpkey = BN_bn2hex(pkey_gqkey->pkey.rsa->q);
+ if (pkey_gqkey != NULL) {
+ RSA *rsa;
+ const BIGNUM *q;
+
+ rsa = EVP_PKEY_get0_RSA(pkey_gqkey);
+ RSA_get0_factors(rsa, NULL, &q);
+ grpkey = BN_bn2hex(q);
+ }
/*
* Write the nonencrypted GQ client parameters to the stdout
@@ -634,9 +648,10 @@ main(
filename);
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
- rsa = pkey_gqkey->pkey.rsa;
- BN_copy(rsa->p, BN_value_one());
- BN_copy(rsa->q, BN_value_one());
+ /* XXX: This modifies the private key and should probably use a
+ * copy of it instead. */
+ rsa = EVP_PKEY_get0_RSA(pkey_gqkey);
+ RSA_set0_factors(rsa, BN_dup(BN_value_one()), BN_dup(BN_value_one()));
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
PEM_write_PKCS8PrivateKey(stdout, pkey, NULL, NULL, 0,
@@ -658,7 +673,7 @@ main(
filename);
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
- rsa = pkey_gqkey->pkey.rsa;
+ rsa = EVP_PKEY_get0_RSA(pkey_gqkey);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
PEM_write_PKCS8PrivateKey(stdout, pkey, cipher, NULL, 0,
@@ -699,8 +714,10 @@ main(
filename);
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
- dsa = pkey_iffkey->pkey.dsa;
- BN_copy(dsa->priv_key, BN_value_one());
+ /* XXX: This modifies the private key and should probably use a
+ * copy of it instead. */
+ dsa = EVP_PKEY_get0_DSA(pkey_iffkey);
+ DSA_set0_key(dsa, NULL, BN_dup(BN_value_one()));
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
PEM_write_PKCS8PrivateKey(stdout, pkey, NULL, NULL, 0,
@@ -722,7 +739,7 @@ main(
filename);
fprintf(stdout, "# %s\n# %s\n", filename,
ctime(&epoch));
- dsa = pkey_iffkey->pkey.dsa;
+ dsa = EVP_PKEY_get0_DSA(pkey_iffkey);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
PEM_write_PKCS8PrivateKey(stdout, pkey, cipher, NULL, 0,
@@ -767,7 +784,7 @@ main(
NULL, NULL);
fflush(stdout);
if (debug)
- DSA_print_fp(stderr, pkey->pkey.dsa, 0);
+ DSA_print_fp(stderr, EVP_PKEY_get0_DSA(pkey), 0);
}
/*
@@ -785,7 +802,7 @@ main(
NULL, passwd2);
fflush(stdout);
if (debug)
- DSA_print_fp(stderr, pkey->pkey.dsa, 0);
+ DSA_print_fp(stderr, EVP_PKEY_get0_DSA(pkey), 0);
}
/*
@@ -934,11 +951,11 @@ readkey(
if (pkey == NULL)
pkey = parkey;
if (debug) {
- if (parkey->type == EVP_PKEY_DSA)
- DSA_print_fp(stderr, parkey->pkey.dsa,
+ if (EVP_PKEY_base_id(parkey) == EVP_PKEY_DSA)
+ DSA_print_fp(stderr, EVP_PKEY_get0_DSA(parkey),
0);
- else if (parkey->type == EVP_PKEY_RSA)
- RSA_print_fp(stderr, parkey->pkey.rsa,
+ else if (EVP_PKEY_base_id(parkey) == EVP_PKEY_RSA)
+ RSA_print_fp(stderr, EVP_PKEY_get0_RSA(parkey),
0);
}
}
@@ -967,7 +984,7 @@ gen_rsa(
FILE *str;
fprintf(stderr, "Generating RSA keys (%d bits)...\n", modulus);
- rsa = RSA_generate_key(modulus, 65537, cb, _UC("RSA"));
+ rsa = genRsaKeyPair(modulus, _UC("RSA"));
fprintf(stderr, "\n");
if (rsa == NULL) {
fprintf(stderr, "RSA generate keys fails\n%s\n",
@@ -1006,7 +1023,7 @@ gen_rsa(
return (pkey);
}
-
+
/*
* Generate DSA public/private key pair
*/
@@ -1017,7 +1034,6 @@ gen_dsa(
{
EVP_PKEY *pkey; /* private key */
DSA *dsa; /* DSA parameters */
- u_char seed[20]; /* seed for parameters */
FILE *str;
/*
@@ -1025,9 +1041,7 @@ gen_dsa(
*/
fprintf(stderr,
"Generating DSA parameters (%d bits)...\n", modulus);
- RAND_bytes(seed, sizeof(seed));
- dsa = DSA_generate_parameters(modulus, seed, sizeof(seed), NULL,
- NULL, cb, _UC("DSA"));
+ dsa = genDsaParams(modulus, _UC("DSA"));
fprintf(stderr, "\n");
if (dsa == NULL) {
fprintf(stderr, "DSA generate parameters fails\n%s\n",
@@ -1119,26 +1133,26 @@ gen_iffkey(
{
EVP_PKEY *pkey; /* private key */
DSA *dsa; /* DSA parameters */
- u_char seed[20]; /* seed for parameters */
BN_CTX *ctx; /* BN working space */
BIGNUM *b, *r, *k, *u, *v, *w; /* BN temp */
FILE *str;
u_int temp;
-
+ const BIGNUM *p, *q, *g;
+ BIGNUM *pub_key, *priv_key;
+
/*
* Generate DSA parameters for use as IFF parameters.
*/
fprintf(stderr, "Generating IFF keys (%d bits)...\n",
modulus2);
- RAND_bytes(seed, sizeof(seed));
- dsa = DSA_generate_parameters(modulus2, seed, sizeof(seed), NULL,
- NULL, cb, _UC("IFF"));
+ dsa = genDsaParams(modulus2, _UC("IFF"));
fprintf(stderr, "\n");
if (dsa == NULL) {
fprintf(stderr, "DSA generate parameters fails\n%s\n",
ERR_error_string(ERR_get_error(), NULL));
- return (NULL);;
+ return (NULL);
}
+ DSA_get0_pqg(dsa, &p, &q, &g);
/*
* Generate the private and public keys. The DSA parameters and
@@ -1147,12 +1161,12 @@ gen_iffkey(
*/
b = BN_new(); r = BN_new(); k = BN_new();
u = BN_new(); v = BN_new(); w = BN_new(); ctx = BN_CTX_new();
- BN_rand(b, BN_num_bits(dsa->q), -1, 0); /* a */
- BN_mod(b, b, dsa->q, ctx);
- BN_sub(v, dsa->q, b);
- BN_mod_exp(v, dsa->g, v, dsa->p, ctx); /* g^(q - b) mod p */
- BN_mod_exp(u, dsa->g, b, dsa->p, ctx); /* g^b mod p */
- BN_mod_mul(u, u, v, dsa->p, ctx);
+ BN_rand(b, BN_num_bits(q), -1, 0); /* a */
+ BN_mod(b, b, q, ctx);
+ BN_sub(v, q, b);
+ BN_mod_exp(v, g, v, p, ctx); /* g^(q - b) mod p */
+ BN_mod_exp(u, g, b, p, ctx); /* g^b mod p */
+ BN_mod_mul(u, u, v, p, ctx);
temp = BN_is_one(u);
fprintf(stderr,
"Confirm g^(q - b) g^b = 1 mod p: %s\n", temp == 1 ?
@@ -1162,28 +1176,29 @@ gen_iffkey(
BN_free(u); BN_free(v); BN_free(w); BN_CTX_free(ctx);
return (NULL);
}
- dsa->priv_key = BN_dup(b); /* private key */
- dsa->pub_key = BN_dup(v); /* public key */
+ pub_key = BN_dup(v);
+ priv_key = BN_dup(b);
+ DSA_set0_key(dsa, pub_key, priv_key);
/*
* Here is a trial round of the protocol. First, Alice rolls
* random nonce r mod q and sends it to Bob. She needs only
* q from parameters.
*/
- BN_rand(r, BN_num_bits(dsa->q), -1, 0); /* r */
- BN_mod(r, r, dsa->q, ctx);
+ BN_rand(r, BN_num_bits(q), -1, 0); /* r */
+ BN_mod(r, r, q, ctx);
/*
* Bob rolls random nonce k mod q, computes y = k + b r mod q
* and x = g^k mod p, then sends (y, x) to Alice. He needs
* p, q and b from parameters and r from Alice.
*/
- BN_rand(k, BN_num_bits(dsa->q), -1, 0); /* k, 0 < k < q */
- BN_mod(k, k, dsa->q, ctx);
- BN_mod_mul(v, dsa->priv_key, r, dsa->q, ctx); /* b r mod q */
+ BN_rand(k, BN_num_bits(q), -1, 0); /* k, 0 < k < q */
+ BN_mod(k, k, q, ctx);
+ BN_mod_mul(v, priv_key, r, q, ctx); /* b r mod q */
BN_add(v, v, k);
- BN_mod(v, v, dsa->q, ctx); /* y = k + b r mod q */
- BN_mod_exp(u, dsa->g, k, dsa->p, ctx); /* x = g^k mod p */
+ BN_mod(v, v, q, ctx); /* y = k + b r mod q */
+ BN_mod_exp(u, g, k, p, ctx); /* x = g^k mod p */
/*
* Alice verifies x = g^y v^r to confirm that Bob has group key
@@ -1191,9 +1206,9 @@ gen_iffkey(
* original r. We omit the detail here thatt only the hash of y
* is sent.
*/
- BN_mod_exp(v, dsa->g, v, dsa->p, ctx); /* g^y mod p */
- BN_mod_exp(w, dsa->pub_key, r, dsa->p, ctx); /* v^r */
- BN_mod_mul(v, w, v, dsa->p, ctx); /* product mod p */
+ BN_mod_exp(v, g, v, p, ctx); /* g^y mod p */
+ BN_mod_exp(w, pub_key, r, p, ctx); /* v^r */
+ BN_mod_mul(v, w, v, p, ctx); /* product mod p */
temp = BN_cmp(u, v);
fprintf(stderr,
"Confirm g^k = g^(k + b r) g^(q - b) r: %s\n", temp ==
@@ -1301,22 +1316,26 @@ gen_gqkey(
BIGNUM *u, *v, *g, *k, *r, *y; /* BN temps */
FILE *str;
u_int temp;
-
+ BIGNUM *b;
+ const BIGNUM *n;
+
/*
* Generate RSA parameters for use as GQ parameters.
*/
fprintf(stderr,
"Generating GQ parameters (%d bits)...\n",
modulus2);
- rsa = RSA_generate_key(modulus2, 65537, cb, _UC("GQ"));
+ rsa = genRsaKeyPair(modulus2, _UC("GQ"));
fprintf(stderr, "\n");
if (rsa == NULL) {
fprintf(stderr, "RSA generate keys fails\n%s\n",
ERR_error_string(ERR_get_error(), NULL));
return (NULL);
}
+ RSA_get0_key(rsa, &n, NULL, NULL);
u = BN_new(); v = BN_new(); g = BN_new();
k = BN_new(); r = BN_new(); y = BN_new();
+ b = BN_new();
/*
* Generate the group key b, which is saved in the e member of
@@ -1324,26 +1343,26 @@ gen_gqkey(
* member encrypted by the member private key.
*/
ctx = BN_CTX_new();
- BN_rand(rsa->e, BN_num_bits(rsa->n), -1, 0); /* b */
- BN_mod(rsa->e, rsa->e, rsa->n, ctx);
+ BN_rand(b, BN_num_bits(n), -1, 0); /* b */
+ BN_mod(b, b, n, ctx);
/*
* When generating his certificate, Bob rolls random private key
* u, then computes inverse v = u^-1.
*/
- BN_rand(u, BN_num_bits(rsa->n), -1, 0); /* u */
- BN_mod(u, u, rsa->n, ctx);
- BN_mod_inverse(v, u, rsa->n, ctx); /* u^-1 mod n */
- BN_mod_mul(k, v, u, rsa->n, ctx);
+ BN_rand(u, BN_num_bits(n), -1, 0); /* u */
+ BN_mod(u, u, n, ctx);
+ BN_mod_inverse(v, u, n, ctx); /* u^-1 mod n */
+ BN_mod_mul(k, v, u, n, ctx);
/*
* Bob computes public key v = (u^-1)^b, which is saved in an
* extension field on his certificate. We check that u^b v =
* 1 mod n.
*/
- BN_mod_exp(v, v, rsa->e, rsa->n, ctx);
- BN_mod_exp(g, u, rsa->e, rsa->n, ctx); /* u^b */
- BN_mod_mul(g, g, v, rsa->n, ctx); /* u^b (u^-1)^b */
+ BN_mod_exp(v, v, b, n, ctx);
+ BN_mod_exp(g, u, b, n, ctx); /* u^b */
+ BN_mod_mul(g, g, v, n, ctx); /* u^b (u^-1)^b */
temp = BN_is_one(g);
fprintf(stderr,
"Confirm u^b (u^-1)^b = 1 mod n: %s\n", temp ? "yes" :
@@ -1355,27 +1374,30 @@ gen_gqkey(
RSA_free(rsa);
return (NULL);
}
- BN_copy(rsa->p, u); /* private key */
- BN_copy(rsa->q, v); /* public key */
+ /* setting 'u' and 'v' into a RSA object takes over ownership.
+ * Since we use these values again, we have to pass in dupes,
+ * or we'll corrupt the program!
+ */
+ RSA_set0_factors(rsa, BN_dup(u), BN_dup(v));
/*
* Here is a trial run of the protocol. First, Alice rolls
* random nonce r mod n and sends it to Bob. She needs only n
* from parameters.
*/
- BN_rand(r, BN_num_bits(rsa->n), -1, 0); /* r */
- BN_mod(r, r, rsa->n, ctx);
+ BN_rand(r, BN_num_bits(n), -1, 0); /* r */
+ BN_mod(r, r, n, ctx);
/*
* Bob rolls random nonce k mod n, computes y = k u^r mod n and
* g = k^b mod n, then sends (y, g) to Alice. He needs n, u, b
* from parameters and r from Alice.
*/
- BN_rand(k, BN_num_bits(rsa->n), -1, 0); /* k */
- BN_mod(k, k, rsa->n, ctx);
- BN_mod_exp(y, rsa->p, r, rsa->n, ctx); /* u^r mod n */
- BN_mod_mul(y, k, y, rsa->n, ctx); /* y = k u^r mod n */
- BN_mod_exp(g, k, rsa->e, rsa->n, ctx); /* g = k^b mod n */
+ BN_rand(k, BN_num_bits(n), -1, 0); /* k */
+ BN_mod(k, k, n, ctx);
+ BN_mod_exp(y, u, r, n, ctx); /* u^r mod n */
+ BN_mod_mul(y, k, y, n, ctx); /* y = k u^r mod n */
+ BN_mod_exp(g, k, b, n, ctx); /* g = k^b mod n */
/*
* Alice verifies g = v^r y^b mod n to confirm that Bob has
@@ -1384,9 +1406,9 @@ gen_gqkey(
* original r. We omit the detaul here that only the hash of g
* is sent.
*/
- BN_mod_exp(v, rsa->q, r, rsa->n, ctx); /* v^r mod n */
- BN_mod_exp(y, y, rsa->e, rsa->n, ctx); /* y^b mod n */
- BN_mod_mul(y, v, y, rsa->n, ctx); /* v^r y^b mod n */
+ BN_mod_exp(v, v, r, n, ctx); /* v^r mod n */
+ BN_mod_exp(y, y, b, n, ctx); /* y^b mod n */
+ BN_mod_mul(y, v, y, n, ctx); /* v^r y^b mod n */
temp = BN_cmp(y, g);
fprintf(stderr, "Confirm g^k = v^r y^b mod n: %s\n", temp == 0 ?
"yes" : "no");
@@ -1410,10 +1432,9 @@ gen_gqkey(
* dmq1 not used
* iqmp not used
*/
- BN_copy(rsa->d, BN_value_one());
- BN_copy(rsa->dmp1, BN_value_one());
- BN_copy(rsa->dmq1, BN_value_one());
- BN_copy(rsa->iqmp, BN_value_one());
+ RSA_set0_key(rsa, NULL, b, BN_dup(BN_value_one()));
+ RSA_set0_crt_params(rsa, BN_dup(BN_value_one()), BN_dup(BN_value_one()),
+ BN_dup(BN_value_one()));
str = fheader("GQkey", id, groupname);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_RSA(pkey, rsa);
@@ -1509,7 +1530,7 @@ gen_mvkey(
DSA *dsa, *dsa2, *sdsa; /* DSA parameters */
BN_CTX *ctx; /* BN working space */
BIGNUM *a[MVMAX]; /* polynomial coefficient vector */
- BIGNUM *g[MVMAX]; /* public key vector */
+ BIGNUM *gs[MVMAX]; /* public key vector */
BIGNUM *s1[MVMAX]; /* private enabling keys */
BIGNUM *x[MVMAX]; /* polynomial zeros vector */
BIGNUM *xbar[MVMAX], *xhat[MVMAX]; /* private keys vector */
@@ -1520,6 +1541,7 @@ gen_mvkey(
BIGNUM *bige; /* session encryption key */
BIGNUM *gbar, *ghat; /* public key */
BIGNUM *u, *v, *w; /* BN scratch */
+ BIGNUM *p, *q, *g, *priv_key, *pub_key;
int i, j, n;
FILE *str;
u_int temp;
@@ -1544,14 +1566,14 @@ gen_mvkey(
ctx = BN_CTX_new(); u = BN_new(); v = BN_new(); w = BN_new();
b = BN_new(); b1 = BN_new();
dsa = DSA_new();
- dsa->p = BN_new(); dsa->q = BN_new(); dsa->g = BN_new();
- dsa->priv_key = BN_new(); dsa->pub_key = BN_new();
+ p = BN_new(); q = BN_new(); g = BN_new();
+ priv_key = BN_new(); pub_key = BN_new();
temp = 0;
for (j = 1; j <= n; j++) {
s1[j] = BN_new();
while (1) {
- BN_generate_prime(s1[j], modulus2 / n, 0, NULL,
- NULL, NULL, NULL);
+ BN_generate_prime_ex(s1[j], modulus2 / n, 0,
+ NULL, NULL, NULL);
for (i = 1; i < j; i++) {
if (BN_cmp(s1[i], s1[j]) == 0)
break;
@@ -1577,21 +1599,20 @@ gen_mvkey(
*/
temp = 0;
while (1) {
- BN_one(dsa->q);
+ BN_one(q);
for (j = 1; j <= n; j++)
- BN_mul(dsa->q, dsa->q, s1[j], ctx);
- BN_copy(dsa->p, dsa->q);
- BN_add(dsa->p, dsa->p, dsa->p);
- BN_add_word(dsa->p, 1);
- if (BN_is_prime(dsa->p, BN_prime_checks, NULL, ctx,
- NULL))
+ BN_mul(q, q, s1[j], ctx);
+ BN_copy(p, q);
+ BN_add(p, p, p);
+ BN_add_word(p, 1);
+ if (BN_is_prime_ex(p, BN_prime_checks, ctx, NULL))
break;
temp++;
j = temp % n + 1;
while (1) {
- BN_generate_prime(u, modulus2 / n, 0, 0, NULL,
- NULL, NULL);
+ BN_generate_prime_ex(u, modulus2 / n, 0,
+ NULL, NULL, NULL);
for (i = 1; i <= n; i++) {
if (BN_cmp(u, s1[i]) == 0)
break;
@@ -1608,20 +1629,22 @@ gen_mvkey(
* gcd(g, p - 1) = 1 and g^q = 1. This is a generator of p, not
* q. This may take several iterations.
*/
- BN_copy(v, dsa->p);
+ BN_copy(v, p);
BN_sub_word(v, 1);
while (1) {
- BN_rand(dsa->g, BN_num_bits(dsa->p) - 1, 0, 0);
- BN_mod(dsa->g, dsa->g, dsa->p, ctx);
- BN_gcd(u, dsa->g, v, ctx);
+ BN_rand(g, BN_num_bits(p) - 1, 0, 0);
+ BN_mod(g, g, p, ctx);
+ BN_gcd(u, g, v, ctx);
if (!BN_is_one(u))
continue;
- BN_mod_exp(u, dsa->g, dsa->q, dsa->p, ctx);
+ BN_mod_exp(u, g, q, p, ctx);
if (BN_is_one(u))
break;
}
+ DSA_set0_pqg(dsa, p, q, g);
+
/*
* Setup is now complete. Roll random polynomial roots x[j]
* (j = 1...n) for all j. While it may not be strictly
@@ -1630,14 +1653,14 @@ gen_mvkey(
*/
fprintf(stderr,
"Generating polynomial coefficients for %d roots (%d bits)\n",
- n, BN_num_bits(dsa->q));
+ n, BN_num_bits(q));
for (j = 1; j <= n; j++) {
x[j] = BN_new();
while (1) {
- BN_rand(x[j], BN_num_bits(dsa->q), 0, 0);
- BN_mod(x[j], x[j], dsa->q, ctx);
- BN_gcd(u, x[j], dsa->q, ctx);
+ BN_rand(x[j], BN_num_bits(q), 0, 0);
+ BN_mod(x[j], x[j], q, ctx);
+ BN_gcd(u, x[j], q, ctx);
if (BN_is_one(u))
break;
}
@@ -1655,26 +1678,26 @@ gen_mvkey(
for (j = 1; j <= n; j++) {
BN_zero(w);
for (i = 0; i < j; i++) {
- BN_copy(u, dsa->q);
- BN_mod_mul(v, a[i], x[j], dsa->q, ctx);
+ BN_copy(u, q);
+ BN_mod_mul(v, a[i], x[j], q, ctx);
BN_sub(u, u, v);
BN_add(u, u, w);
BN_copy(w, a[i]);
- BN_mod(a[i], u, dsa->q, ctx);
+ BN_mod(a[i], u, q, ctx);
}
}
/*
- * Generate g[i] = g^a[i] mod p for all i and the generator g.
+ * Generate gs[i] = g^a[i] mod p for all i and the generator g.
*/
for (i = 0; i <= n; i++) {
- g[i] = BN_new();
- BN_mod_exp(g[i], dsa->g, a[i], dsa->p, ctx);
+ gs[i] = BN_new();
+ BN_mod_exp(gs[i], g, a[i], p, ctx);
}
/*
- * Verify prod(g[i]^(a[i] x[j]^i)) = 1 for all i, j. Note the
- * a[i] x[j]^i exponent is computed mod q, but the g[i] is
+ * Verify prod(gs[i]^(a[i] x[j]^i)) = 1 for all i, j. Note the
+ * a[i] x[j]^i exponent is computed mod q, but the gs[i] is
* computed mod p. also note the expression given in the paper
* is incorrect.
*/
@@ -1683,16 +1706,16 @@ gen_mvkey(
BN_one(u);
for (i = 0; i <= n; i++) {
BN_set_word(v, i);
- BN_mod_exp(v, x[j], v, dsa->q, ctx);
- BN_mod_mul(v, v, a[i], dsa->q, ctx);
- BN_mod_exp(v, dsa->g, v, dsa->p, ctx);
- BN_mod_mul(u, u, v, dsa->p, ctx);
+ BN_mod_exp(v, x[j], v, q, ctx);
+ BN_mod_mul(v, v, a[i], q, ctx);
+ BN_mod_exp(v, g, v, p, ctx);
+ BN_mod_mul(u, u, v, p, ctx);
}
if (!BN_is_one(u))
temp = 0;
}
fprintf(stderr,
- "Confirm prod(g[i]^(x[j]^i)) = 1 for all i, j: %s\n", temp ?
+ "Confirm prod(gs[i]^(x[j]^i)) = 1 for all i, j: %s\n", temp ?
"yes" : "no");
if (!temp) {
return (NULL);
@@ -1708,9 +1731,9 @@ gen_mvkey(
for (j = 1; j <= n; j++) {
for (i = 0; i < n; i++) {
BN_set_word(v, i);
- BN_mod_exp(v, x[j], v, dsa->q, ctx);
- BN_mod_exp(v, g[i], v, dsa->p, ctx);
- BN_mod_mul(biga, biga, v, dsa->p, ctx);
+ BN_mod_exp(v, x[j], v, q, ctx);
+ BN_mod_exp(v, gs[i], v, p, ctx);
+ BN_mod_mul(biga, biga, v, p, ctx);
}
}
@@ -1720,13 +1743,13 @@ gen_mvkey(
* mod q. If b is changed, the client keys must be recomputed.
*/
while (1) {
- BN_rand(b, BN_num_bits(dsa->q), 0, 0);
- BN_mod(b, b, dsa->q, ctx);
- BN_gcd(u, b, dsa->q, ctx);
+ BN_rand(b, BN_num_bits(q), 0, 0);
+ BN_mod(b, b, q, ctx);
+ BN_gcd(u, b, q, ctx);
if (BN_is_one(u))
break;
}
- BN_mod_inverse(b1, b, dsa->q, ctx);
+ BN_mod_inverse(b1, b, q, ctx);
/*
* Make private client keys (xbar[j], xhat[j]) for all j. Note
@@ -1740,7 +1763,7 @@ gen_mvkey(
for (j = 1; j <= n; j++) {
xbar[j] = BN_new(); xhat[j] = BN_new();
- BN_add(w, dsa->q, s1[j]);
+ BN_add(w, q, s1[j]);
BN_div(w, u, w, s1[j], ctx);
BN_zero(xbar[j]);
BN_set_word(v, n);
@@ -1748,12 +1771,12 @@ gen_mvkey(
if (i == j)
continue;
- BN_mod_exp(u, x[i], v, dsa->q, ctx);
+ BN_mod_exp(u, x[i], v, q, ctx);
BN_add(xbar[j], xbar[j], u);
}
- BN_mod_mul(xbar[j], xbar[j], b1, dsa->q, ctx);
- BN_mod_exp(xhat[j], x[j], v, dsa->q, ctx);
- BN_mod_mul(xhat[j], xhat[j], w, dsa->q, ctx);
+ BN_mod_mul(xbar[j], xbar[j], b1, q, ctx);
+ BN_mod_exp(xhat[j], x[j], v, q, ctx);
+ BN_mod_mul(xhat[j], xhat[j], w, q, ctx);
}
/*
@@ -1764,7 +1787,7 @@ gen_mvkey(
* additional keys, so we sail on with only token revocations.
*/
s = BN_new();
- BN_copy(s, dsa->q);
+ BN_copy(s, q);
BN_div(s, u, s, s1[n], ctx);
/*
@@ -1776,10 +1799,10 @@ gen_mvkey(
* changed.
*/
bige = BN_new(); gbar = BN_new(); ghat = BN_new();
- BN_mod_exp(bige, biga, s, dsa->p, ctx);
- BN_mod_exp(gbar, dsa->g, s, dsa->p, ctx);
- BN_mod_mul(v, s, b, dsa->q, ctx);
- BN_mod_exp(ghat, dsa->g, v, dsa->p, ctx);
+ BN_mod_exp(bige, biga, s, p, ctx);
+ BN_mod_exp(gbar, g, s, p, ctx);
+ BN_mod_mul(v, s, b, q, ctx);
+ BN_mod_exp(ghat, g, v, p, ctx);
/*
* Notes: We produce the key media in three steps. The first
@@ -1815,8 +1838,9 @@ gen_mvkey(
i = 0;
str = fheader("MVta", "mvta", groupname);
fprintf(stderr, "Generating MV trusted-authority keys\n");
- BN_copy(dsa->priv_key, biga);
- BN_copy(dsa->pub_key, b);
+ BN_copy(priv_key, biga);
+ BN_copy(pub_key, b);
+ DSA_set0_key(dsa, pub_key, priv_key);
pkey = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey, dsa);
PEM_write_PKCS8PrivateKey(str, pkey, cipher, NULL, 0, NULL,
@@ -1838,11 +1862,8 @@ gen_mvkey(
*/
fprintf(stderr, "Generating MV server keys\n");
dsa2 = DSA_new();
- dsa2->p = BN_dup(dsa->p);
- dsa2->q = BN_dup(dsa->q);
- dsa2->g = BN_dup(bige);
- dsa2->priv_key = BN_dup(gbar);
- dsa2->pub_key = BN_dup(ghat);
+ DSA_set0_pqg(dsa2, BN_dup(p), BN_dup(q), BN_dup(bige));
+ DSA_set0_key(dsa2, BN_dup(ghat), BN_dup(gbar));
pkey1 = EVP_PKEY_new();
EVP_PKEY_assign_DSA(pkey1, dsa2);
PEM_write_PKCS8PrivateKey(str, pkey1, cipher, NULL, 0, NULL,
@@ -1863,11 +1884,9 @@ gen_mvkey(
fprintf(stderr, "Generating %d MV client keys\n", n);
for (j = 1; j <= n; j++) {
sdsa = DSA_new();
- sdsa->p = BN_dup(dsa->p);
- sdsa->q = BN_dup(BN_value_one());
- sdsa->g = BN_dup(BN_value_one());
- sdsa->priv_key = BN_dup(xbar[j]);
- sdsa->pub_key = BN_dup(xhat[j]);
+ DSA_set0_pqg(sdsa, BN_dup(p), BN_dup(BN_value_one()),
+ BN_dup(BN_value_one()));
+ DSA_set0_key(sdsa, BN_dup(xhat[j]), BN_dup(xbar[j]));
pkey1 = EVP_PKEY_new();
EVP_PKEY_set1_DSA(pkey1, sdsa);
PEM_write_PKCS8PrivateKey(str, pkey1, cipher, NULL, 0,
@@ -1877,17 +1896,15 @@ gen_mvkey(
DSA_print_fp(stderr, sdsa, 0);
/*
- * The product gbar^k)^xbar[j] (ghat^k)^xhat[j] and E
+ * The product (gbar^k)^xbar[j] (ghat^k)^xhat[j] and E
* are inverses of each other. We check that the product
* is one for each client except the ones that have been
* revoked.
*/
- BN_mod_exp(v, dsa2->priv_key, sdsa->pub_key, dsa->p,
- ctx);
- BN_mod_exp(u, dsa2->pub_key, sdsa->priv_key, dsa->p,
- ctx);
- BN_mod_mul(u, u, v, dsa->p, ctx);
- BN_mod_mul(u, u, bige, dsa->p, ctx);
+ BN_mod_exp(v, gbar, xhat[j], p, ctx);
+ BN_mod_exp(u, ghat, xbar[j], p, ctx);
+ BN_mod_mul(u, u, v, p, ctx);
+ BN_mod_mul(u, u, bige, p, ctx);
if (!BN_is_one(u)) {
fprintf(stderr, "Revoke key %d\n", j);
continue;
@@ -1900,7 +1917,7 @@ gen_mvkey(
* Free the countries.
*/
for (i = 0; i <= n; i++) {
- BN_free(a[i]); BN_free(g[i]);
+ BN_free(a[i]); BN_free(gs[i]);
}
for (j = 1; j <= n; j++) {
BN_free(x[j]); BN_free(xbar[j]); BN_free(xhat[j]);
@@ -1945,7 +1962,7 @@ x509 (
* the version to 3. Set the initial validity to the current
* time and the finalvalidity one year hence.
*/
- id = OBJ_nid2sn(md->pkey_type);
+ id = OBJ_nid2sn(EVP_MD_pkey_type(md));
fprintf(stderr, "Generating new certificate %s %s\n", name, id);
cert = X509_new();
X509_set_version(cert, 2L);
@@ -2154,6 +2171,56 @@ genkey(
fprintf(stderr, "Invalid %s key type %s\n", id, type);
return (NULL);
}
+
+static RSA*
+genRsaKeyPair(
+ int bits,
+ char * what
+ )
+{
+ RSA * rsa = RSA_new();
+ BN_GENCB * gcb = BN_GENCB_new();
+ BIGNUM * bne = BN_new();
+
+ if (gcb)
+ BN_GENCB_set_old(gcb, cb, what);
+ if (bne)
+ BN_set_word(bne, 65537);
+ if (!(rsa && gcb && bne && RSA_generate_key_ex(
+ rsa, bits, bne, gcb)))
+ {
+ RSA_free(rsa);
+ rsa = NULL;
+ }
+ BN_GENCB_free(gcb);
+ BN_free(bne);
+ return rsa;
+}
+
+static DSA*
+genDsaParams(
+ int bits,
+ char * what
+ )
+{
+
+ DSA * dsa = DSA_new();
+ BN_GENCB * gcb = BN_GENCB_new();
+ u_char seed[20];
+
+ if (gcb)
+ BN_GENCB_set_old(gcb, cb, what);
+ RAND_bytes(seed, sizeof(seed));
+ if (!(dsa && gcb && DSA_generate_parameters_ex(
+ dsa, bits, seed, sizeof(seed), NULL, NULL, gcb)))
+ {
+ DSA_free(dsa);
+ dsa = NULL;
+ }
+ BN_GENCB_free(gcb);
+ return dsa;
+}
+
#endif /* AUTOKEY */
diff --git a/contrib/ntp/util/ntp-keygen.html b/contrib/ntp/util/ntp-keygen.html
index b7ca2c8..ecf3249 100644
--- a/contrib/ntp/util/ntp-keygen.html
+++ b/contrib/ntp/util/ntp-keygen.html
@@ -70,7 +70,7 @@ All other files are in PEM-encoded
printable ASCII format so they can be embedded as MIME attachments in
mail to other sites.
- <p>This document applies to version 4.2.8p8 of <code>ntp-keygen</code>.
+ <p>This document applies to version 4.2.8p9 of <code>ntp-keygen</code>.
<div class="node">
<p><hr>
@@ -1085,7 +1085,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p7
+<pre class="example">ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p9-RC
Usage: ntp-keygen [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
Flg Arg Option-Name Description
-b Num imbits identity modulus bits
diff --git a/contrib/ntp/util/ntp-keygen.man.in b/contrib/ntp/util/ntp-keygen.man.in
index 6c8b5db..1aeee80 100644
--- a/contrib/ntp/util/ntp-keygen.man.in
+++ b/contrib/ntp/util/ntp-keygen.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-keygen @NTP_KEYGEN_MS@ "02 Jun 2016" "ntp (4.2.8p8)" "User Commands"
+.TH ntp-keygen @NTP_KEYGEN_MS@ "21 Nov 2016" "ntp (4.2.8p9)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-.JaGB0/ag-lKayA0)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-psaWZm/ag-DsaOYm)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:36 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:41 AM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/util/ntp-keygen.mdoc.in b/contrib/ntp/util/ntp-keygen.mdoc.in
index d108b60..7e6d2cf 100644
--- a/contrib/ntp/util/ntp-keygen.mdoc.in
+++ b/contrib/ntp/util/ntp-keygen.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYGEN @NTP_KEYGEN_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:43 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:48 AM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/telnet/telnetd/sys_term.c b/contrib/telnet/telnetd/sys_term.c
index f9b9461..a2e551f 100644
--- a/contrib/telnet/telnetd/sys_term.c
+++ b/contrib/telnet/telnetd/sys_term.c
@@ -1159,7 +1159,7 @@ addarg(char **argv, const char *val)
*/
argv = (char **)malloc(sizeof(*argv) * 12);
if (argv == NULL)
- return(NULL);
+ fatal(net, "failure allocating argument space");
*argv++ = (char *)10;
*argv = (char *)0;
}
@@ -1170,11 +1170,12 @@ addarg(char **argv, const char *val)
*argv = (char *)((long)(*argv) + 10);
argv = (char **)realloc(argv, sizeof(*argv)*((long)(*argv) + 2));
if (argv == NULL)
- return(NULL);
+ fatal(net, "failure allocating argument space");
argv++;
cpp = &argv[(long)argv[-1] - 10];
}
- *cpp++ = strdup(val);
+ if ((*cpp++ = strdup(val)) == NULL)
+ fatal(net, "failure allocating argument space");
*cpp = 0;
return(argv);
}
diff --git a/contrib/tzcode/zic/zdump.c b/contrib/tzcode/zic/zdump.c
index 2878a70..01111fe 100644
--- a/contrib/tzcode/zic/zdump.c
+++ b/contrib/tzcode/zic/zdump.c
@@ -212,24 +212,16 @@ const char * const zone;
return;
cp = abbrp;
wp = NULL;
- while (isascii((unsigned char) *cp) && isalpha((unsigned char) *cp))
+ while (isascii((unsigned char) *cp) &&
+ (isalnum((unsigned char)*cp) || *cp == '-' || *cp == '+'))
++cp;
- if (cp - abbrp == 0)
- wp = _("lacks alphabetic at start");
- else if (cp - abbrp < 3)
- wp = _("has fewer than 3 alphabetics");
+ if (cp - abbrp < 3)
+ wp = _("has fewer than 3 characters");
else if (cp - abbrp > 6)
- wp = _("has more than 6 alphabetics");
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
- ++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' && *cp >= '0' && *cp <= '4')
- ++cp;
- if (*cp != '\0')
- wp = _("differs from POSIX standard");
- }
- if (wp == NULL)
+ wp = _("has more than 6 characters");
+ else if (*cp)
+ wp = "has characters other than ASCII alphanumerics, '-' or '+'";
+ else
return;
(void) fflush(stdout);
(void) fprintf(stderr,
diff --git a/contrib/tzcode/zic/zic.c b/contrib/tzcode/zic/zic.c
index 5fb8b53..00043b7 100644
--- a/contrib/tzcode/zic/zic.c
+++ b/contrib/tzcode/zic/zic.c
@@ -2615,29 +2615,15 @@ const char * const string;
register const char * cp;
register char * wp;
- /*
- ** Want one to ZIC_MAX_ABBR_LEN_WO_WARN alphabetics
- ** optionally followed by a + or - and a number from 1 to 14.
- */
cp = string;
wp = NULL;
while (isascii((unsigned char) *cp) &&
- isalpha((unsigned char) *cp))
+ (isalnum((unsigned char)*cp) || *cp == '-' || *cp == '+'))
++cp;
- if (cp - string == 0)
-wp = _("time zone abbreviation lacks alphabetic at start");
if (noise && cp - string > 3)
-wp = _("time zone abbreviation has more than 3 alphabetics");
+wp = _("time zone abbreviation has more than 3 characters");
if (cp - string > ZIC_MAX_ABBR_LEN_WO_WARN)
-wp = _("time zone abbreviation has too many alphabetics");
- if (wp == NULL && (*cp == '+' || *cp == '-')) {
- ++cp;
- if (isascii((unsigned char) *cp) &&
- isdigit((unsigned char) *cp))
- if (*cp++ == '1' &&
- *cp >= '0' && *cp <= '4')
- ++cp;
- }
+wp = _("time zone abbreviation has too many characters");
if (*cp != '\0')
wp = _("time zone abbreviation differs from POSIX standard");
if (wp != NULL) {
diff --git a/contrib/tzdata/CONTRIBUTING b/contrib/tzdata/CONTRIBUTING
new file mode 100644
index 0000000..e40102e
--- /dev/null
+++ b/contrib/tzdata/CONTRIBUTING
@@ -0,0 +1,73 @@
+Contributing to the tz code and data
+
+The time zone database is by no means authoritative: governments
+change timekeeping rules erratically and sometimes with little
+warning, the data entries do not cover all of civil time before
+1970, and undoubtedly errors remain in the code and data. Feel
+free to fill gaps or fix mistakes, and please email improvements
+to tz@iana.org for use in the future.
+
+To email small changes, please run a POSIX shell command like
+'diff -u old/europe new/europe >myfix.patch', and attach
+myfix.patch to the email.
+
+For more-elaborate changes, please read the Theory file and browse
+the mailing list archives <http://mm.icann.org/pipermail/tz/> for
+examples of patches that tend to work well. Ideally, additions to
+data should contain commentary citing reliable sources as
+justification.
+
+Please submit changes against either the latest release in
+<ftp://ftp.iana.org/tz/> or the master branch of the experimental
+Git repository. If you use Git the following workflow may be helpful:
+
+ * Copy the experimental repository.
+
+ git clone https://github.com/eggert/tz.git
+ cd tz
+
+ * Get current with the master branch.
+
+ git checkout master
+ git pull
+
+ * Switch to a new branch for the changes. Choose a different
+ branch name for each change set.
+
+ git checkout -b mybranch
+
+ * Edit source files. Include commentary that justifies the
+ changes by citing reliable sources.
+
+ * Debug the changes, e.g.:
+
+ make check
+ make install
+ ./zdump -v America/Los_Angeles
+
+ * For each separable change, commit it in the new branch, e.g.:
+
+ git add northamerica
+ git commit
+
+ See recent 'git log' output for the commit-message style.
+
+ * Create patch files 0001-*, 0002-*, ...
+
+ git format-patch master
+
+ * After reviewing the patch files, send the patches to tz@iana.org
+ for others to review.
+
+ git send-email master
+
+ * Start anew by getting current with the master branch again
+ (the second step above).
+
+Please do not create issues or pull requests on GitHub, as the
+proper procedure for proposing and distributing patches is via
+email as illustrated above.
+
+-----
+
+This file is in the public domain.
diff --git a/contrib/tzdata/LICENSE b/contrib/tzdata/LICENSE
new file mode 100644
index 0000000..148eb23
--- /dev/null
+++ b/contrib/tzdata/LICENSE
@@ -0,0 +1,4 @@
+With a few exceptions, all files in the tz code and data (including
+this one) are in the public domain. The exceptions are date.c,
+newstrftime.3, and strftime.c, which contain material derived from BSD
+and which use the BSD 3-clause license.
diff --git a/contrib/tzdata/Makefile b/contrib/tzdata/Makefile
new file mode 100644
index 0000000..74b950c
--- /dev/null
+++ b/contrib/tzdata/Makefile
@@ -0,0 +1,793 @@
+# This file is in the public domain, so clarified as of
+# 2009-05-17 by Arthur David Olson.
+
+# Package name for the code distribution.
+PACKAGE= tzcode
+
+# Version number for the distribution, overridden in the 'tarballs' rule below.
+VERSION= unknown
+
+# Email address for bug reports.
+BUGEMAIL= tz@iana.org
+
+# Change the line below for your time zone (after finding the zone you want in
+# the time zone files, or adding it to a time zone file).
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -l rightzone
+# to correct things.
+# Use the command
+# make zonenames
+# to get a list of the values you can use for LOCALTIME.
+
+LOCALTIME= GMT
+
+# If you want something other than Eastern United States time as a template
+# for handling POSIX-style time zone environment variables,
+# change the line below (after finding the zone you want in the
+# time zone files, or adding it to a time zone file).
+# (When a POSIX-style environment variable is handled, the rules in the
+# template file are used to determine "spring forward" and "fall back" days and
+# times; the environment variable itself specifies UT offsets of standard and
+# summer time.)
+# Alternately, if you discover you've got the wrong time zone, you can just
+# zic -p rightzone
+# to correct things.
+# Use the command
+# make zonenames
+# to get a list of the values you can use for POSIXRULES.
+# If you want POSIX compatibility, use "America/New_York".
+
+POSIXRULES= America/New_York
+
+# Also see TZDEFRULESTRING below, which takes effect only
+# if the time zone files cannot be accessed.
+
+# Everything gets put in subdirectories of. . .
+
+TOPDIR= /usr/local
+
+# "Compiled" time zone information is placed in the "TZDIR" directory
+# (and subdirectories).
+# Use an absolute path name for TZDIR unless you're just testing the software.
+
+TZDIR_BASENAME= zoneinfo
+TZDIR= $(TOPDIR)/etc/$(TZDIR_BASENAME)
+
+# Types to try, as an alternative to time_t. int64_t should be first.
+TIME_T_ALTERNATIVES= int64_t int32_t uint32_t uint64_t
+
+# The "tzselect", "zic", and "zdump" commands get installed in. . .
+
+ETCDIR= $(TOPDIR)/etc
+
+# If you "make INSTALL", the "date" command gets installed in. . .
+
+BINDIR= $(TOPDIR)/bin
+
+# Manual pages go in subdirectories of. . .
+
+MANDIR= $(TOPDIR)/man
+
+# Library functions are put in an archive in LIBDIR.
+
+LIBDIR= $(TOPDIR)/lib
+
+# If you always want time values interpreted as "seconds since the epoch
+# (not counting leap seconds)", use
+# REDO= posix_only
+# below. If you always want right time values interpreted as "seconds since
+# the epoch" (counting leap seconds)", use
+# REDO= right_only
+# below. If you want both sets of data available, with leap seconds not
+# counted normally, use
+# REDO= posix_right
+# below. If you want both sets of data available, with leap seconds counted
+# normally, use
+# REDO= right_posix
+# below. POSIX mandates that leap seconds not be counted; for compatibility
+# with it, use "posix_only" or "posix_right".
+
+REDO= posix_right
+
+# If you want out-of-scope and often-wrong data from the file 'backzone', use
+# PACKRATDATA= backzone
+# To omit this data, use
+# PACKRATDATA=
+
+PACKRATDATA=
+
+# Since "." may not be in PATH...
+
+YEARISTYPE= ./yearistype
+
+# Non-default libraries needed to link.
+LDLIBS=
+
+# Add the following to the end of the "CFLAGS=" line as needed.
+# -DBIG_BANG=-9999999LL if the Big Bang occurred at time -9999999 (see zic.c)
+# -DHAVE_DECL_ASCTIME_R=0 if <time.h> does not declare asctime_r
+# -DHAVE_DIRECT_H if mkdir needs <direct.h> (MS-Windows)
+# -DHAVE_DOS_FILE_NAMES if file names have drive specifiers etc. (MS-DOS)
+# -DHAVE_GETTEXT=1 if 'gettext' works (e.g., GNU/Linux, FreeBSD, Solaris)
+# -DHAVE_INCOMPATIBLE_CTIME_R=1 if your system's time.h declares
+# ctime_r and asctime_r incompatibly with the POSIX standard
+# (Solaris when _POSIX_PTHREAD_SEMANTICS is not defined).
+# -DHAVE_INTTYPES_H=1 if you have a pre-C99 compiler with "inttypes.h"
+# -DHAVE_LINK=0 if your system lacks a link function
+# -DHAVE_LOCALTIME_R=0 if your system lacks a localtime_r function
+# -DHAVE_LOCALTIME_RZ=0 if you do not want zdump to use localtime_rz
+# This defaults to 1 if a working localtime_rz seems to be available.
+# localtime_rz can make zdump significantly faster, but is nonstandard.
+# -DHAVE_POSIX_DECLS=0 if your system's include files do not declare
+# functions like 'link' or variables like 'tzname' required by POSIX
+# -DHAVE_STDINT_H=1 if you have a pre-C99 compiler with "stdint.h"
+# -DHAVE_STRFTIME_L=1 if <time.h> declares locale_t and strftime_l
+# This defaults to 0 if _POSIX_VERSION < 200809, 1 otherwise.
+# -DHAVE_STRDUP=0 if your system lacks the strdup function
+# -DHAVE_SYMLINK=0 if your system lacks the symlink function
+# -DHAVE_SYS_STAT_H=0 if your compiler lacks a "sys/stat.h"
+# -DHAVE_SYS_WAIT_H=0 if your compiler lacks a "sys/wait.h"
+# -DHAVE_TZSET=0 if your system lacks a tzset function
+# -DHAVE_UNISTD_H=0 if your compiler lacks a "unistd.h" (Microsoft C++ 7?)
+# -DEPOCH_LOCAL=1 if the 'time' function returns local time not UT
+# -DEPOCH_OFFSET=N if the 'time' function returns a value N greater
+# than what POSIX specifies, assuming local time is UT.
+# For example, N is 252460800 on AmigaOS.
+# -DNO_RUN_TIME_WARNINGS_ABOUT_YEAR_2000_PROBLEMS_THANK_YOU=1
+# if you do not want run time warnings about formats that may cause
+# year 2000 grief
+# -Dssize_t=long on ancient hosts that lack ssize_t
+# -DTHREAD_SAFE=1 to make localtime.c thread-safe, as POSIX requires;
+# not needed by the main-program tz code, which is single-threaded.
+# Append other compiler flags as needed, e.g., -pthread on GNU/Linux.
+# -Dtime_tz=\"T\" to use T as the time_t type, rather than the system time_t
+# -DTZ_DOMAIN=\"foo\" to use "foo" for gettext domain name; default is "tz"
+# -DTZ_DOMAINDIR=\"/path\" to use "/path" for gettext directory;
+# the default is system-supplied, typically "/usr/lib/locale"
+# -DTZDEFRULESTRING=\",date/time,date/time\" to default to the specified
+# DST transitions if the time zone files cannot be accessed
+# -DUNINIT_TRAP=1 if reading uninitialized storage can cause problems
+# other than simply getting garbage data
+# -DUSE_LTZ=0 to build zdump with the system time zone library
+# Also set TZDOBJS=zdump.o and CHECK_TIME_T_ALTERNATIVES= below.
+# -DZIC_MAX_ABBR_LEN_WO_WARN=3
+# (or some other number) to set the maximum time zone abbreviation length
+# that zic will accept without a warning (the default is 6)
+# $(GCC_DEBUG_FLAGS) if you are using recent GCC and want lots of checking
+GCC_DEBUG_FLAGS = -Dlint -g3 -O3 -fno-common -fstrict-aliasing \
+ -Wall -Wextra \
+ -Wbad-function-cast -Wcast-align -Wdate-time \
+ -Wdeclaration-after-statement \
+ -Wdouble-promotion \
+ -Wformat=2 -Winit-self -Wjump-misses-init \
+ -Wlogical-op -Wmissing-prototypes -Wnested-externs \
+ -Wold-style-definition -Woverlength-strings -Wpointer-arith \
+ -Wshadow -Wstrict-prototypes -Wsuggest-attribute=const \
+ -Wsuggest-attribute=format -Wsuggest-attribute=noreturn \
+ -Wsuggest-attribute=pure -Wtrampolines \
+ -Wunused -Wwrite-strings \
+ -Wno-address -Wno-format-nonliteral -Wno-sign-compare \
+ -Wno-type-limits -Wno-unused-parameter
+#
+# If you want to use System V compatibility code, add
+# -DUSG_COMPAT
+# to the end of the "CFLAGS=" line. This arrange for "timezone" and "daylight"
+# variables to be kept up-to-date by the time conversion functions. Neither
+# "timezone" nor "daylight" is described in X3J11's work.
+#
+# If your system has a "GMT offset" field in its "struct tm"s
+# (or if you decide to add such a field in your system's "time.h" file),
+# add the name to a define such as
+# -DTM_GMTOFF=tm_gmtoff
+# to the end of the "CFLAGS=" line. If not defined, the code attempts to
+# guess TM_GMTOFF from other macros; define NO_TM_GMTOFF to suppress this.
+# Similarly, if your system has a "zone abbreviation" field, define
+# -DTM_ZONE=tm_zone
+# and define NO_TM_ZONE to suppress any guessing. These two fields are not
+# required by POSIX, but are widely available on GNU/Linux and BSD systems.
+#
+# If you want functions that were inspired by early versions of X3J11's work,
+# add
+# -DSTD_INSPIRED
+# to the end of the "CFLAGS=" line. This arranges for the functions
+# "tzsetwall", "offtime", "timelocal", "timegm", "timeoff",
+# "posix2time", and "time2posix" to be added to the time conversion library.
+# "tzsetwall" is like "tzset" except that it arranges for local wall clock
+# time (rather than the time specified in the TZ environment variable)
+# to be used.
+# "offtime" is like "gmtime" except that it accepts a second (long) argument
+# that gives an offset to add to the time_t when converting it.
+# "timelocal" is equivalent to "mktime".
+# "timegm" is like "timelocal" except that it turns a struct tm into
+# a time_t using UT (rather than local time as "timelocal" does).
+# "timeoff" is like "timegm" except that it accepts a second (long) argument
+# that gives an offset to use when converting to a time_t.
+# "posix2time" and "time2posix" are described in an included manual page.
+# X3J11's work does not describe any of these functions.
+# Sun has provided "tzsetwall", "timelocal", and "timegm" in SunOS 4.0.
+# These functions may well disappear in future releases of the time
+# conversion package.
+#
+# If you don't want functions that were inspired by NetBSD, add
+# -DNETBSD_INSPIRED=0
+# to the end of the "CFLAGS=" line. Otherwise, the functions
+# "localtime_rz", "mktime_z", "tzalloc", and "tzfree" are added to the
+# time library, and if STD_INSPIRED is also defined the functions
+# "posix2time_z" and "time2posix_z" are added as well.
+# The functions ending in "_z" (or "_rz") are like their unsuffixed
+# (or suffixed-by-"_r") counterparts, except with an extra first
+# argument of opaque type timezone_t that specifies the time zone.
+# "tzalloc" allocates a timezone_t value, and "tzfree" frees it.
+#
+# If you want to allocate state structures in localtime, add
+# -DALL_STATE
+# to the end of the "CFLAGS=" line. Storage is obtained by calling malloc.
+#
+# If you want an "altzone" variable (a la System V Release 3.1), add
+# -DALTZONE
+# to the end of the "CFLAGS=" line.
+# This variable is not described in X3J11's work.
+#
+# NIST-PCTS:151-2, Version 1.4, (1993-12-03) is a test suite put
+# out by the National Institute of Standards and Technology
+# which claims to test C and Posix conformance. If you want to pass PCTS, add
+# -DPCTS
+# to the end of the "CFLAGS=" line.
+#
+# If you want strict compliance with XPG4 as of 1994-04-09, add
+# -DXPG4_1994_04_09
+# to the end of the "CFLAGS=" line. This causes "strftime" to always return
+# 53 as a week number (rather than 52 or 53) for those days in January that
+# before the first Monday in January when a "%V" format is used and January 1
+# falls on a Friday, Saturday, or Sunday.
+
+CFLAGS=
+
+# Linker flags. Default to $(LFLAGS) for backwards compatibility
+# to release 2012h and earlier.
+
+LDFLAGS= $(LFLAGS)
+
+# For leap seconds, this Makefile uses LEAPSECONDS='-L leapseconds' in
+# submake command lines. The default is no leap seconds.
+
+LEAPSECONDS=
+
+# The zic command and its arguments.
+
+zic= ./zic
+ZIC= $(zic) $(ZFLAGS)
+
+ZFLAGS=
+
+# How to use zic to install tz binary files.
+
+ZIC_INSTALL= $(ZIC) -y $(YEARISTYPE) -d $(DESTDIR)$(TZDIR) $(LEAPSECONDS)
+
+# The name of a Posix-compliant 'awk' on your system.
+AWK= awk
+
+# The full path name of a Posix-compliant shell, preferably one that supports
+# the Korn shell's 'select' statement as an extension.
+# These days, Bash is the most popular.
+# It should be OK to set this to /bin/sh, on platforms where /bin/sh
+# lacks 'select' or doesn't completely conform to Posix, but /bin/bash
+# is typically nicer if it works.
+KSHELL= /bin/bash
+
+# The path where SGML DTDs are kept and the catalog file(s) to use when
+# validating. The default should work on both Debian and Red Hat.
+SGML_TOPDIR= /usr
+SGML_DTDDIR= $(SGML_TOPDIR)/share/xml/w3c-sgml-lib/schema/dtd
+SGML_SEARCH_PATH= $(SGML_DTDDIR)/REC-html401-19991224
+SGML_CATALOG_FILES= \
+ $(SGML_TOPDIR)/share/doc/w3-recs/html/www.w3.org/TR/1999/REC-html401-19991224/HTML4.cat:$(SGML_TOPDIR)/share/sgml/html/4.01/HTML4.cat
+
+# The name, arguments and environment of a program to validate your web pages.
+# See <http://openjade.sourceforge.net/doc/> for a validator, and
+# <https://validator.w3.org/source/> for a validation library.
+VALIDATE = nsgmls
+VALIDATE_FLAGS = -s -B -wall -wno-unused-param
+VALIDATE_ENV = \
+ SGML_CATALOG_FILES=$(SGML_CATALOG_FILES) \
+ SGML_SEARCH_PATH=$(SGML_SEARCH_PATH) \
+ SP_CHARSET_FIXED=YES \
+ SP_ENCODING=UTF-8
+
+# This expensive test requires USE_LTZ.
+# To suppress it, define this macro to be empty.
+CHECK_TIME_T_ALTERNATIVES = check_time_t_alternatives
+
+# SAFE_CHAR is a regular expression that matches a safe character.
+# Some parts of this distribution are limited to safe characters;
+# others can use any UTF-8 character.
+# For now, the safe characters are a safe subset of ASCII.
+# The caller must set the shell variable 'sharp' to the character '#',
+# since Makefile macros cannot contain '#'.
+# TAB_CHAR is a single tab character, in single quotes.
+TAB_CHAR= ' '
+SAFE_CHARSET1= $(TAB_CHAR)' !\"'$$sharp'$$%&'\''()*+,./0123456789:;<=>?@'
+SAFE_CHARSET2= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\^_`'
+SAFE_CHARSET3= 'abcdefghijklmnopqrstuvwxyz{|}~'
+SAFE_CHARSET= $(SAFE_CHARSET1)$(SAFE_CHARSET2)$(SAFE_CHARSET3)
+SAFE_CHAR= '[]'$(SAFE_CHARSET)'-]'
+
+# OK_CHAR matches any character allowed in the distributed files.
+# This is the same as SAFE_CHAR, except that multibyte letters are
+# also allowed so that commentary can contain people's names and quote
+# non-English sources. For non-letters the sources are limited to
+# ASCII renderings for the convenience of maintainers whose text editors
+# mishandle UTF-8 by default (e.g., XEmacs 21.4.22).
+OK_CHAR= '[][:alpha:]'$(SAFE_CHARSET)'-]'
+
+# SAFE_LINE matches a line of safe characters.
+# SAFE_SHARP_LINE is similar, except any OK character can follow '#';
+# this is so that comments can contain non-ASCII characters.
+# OK_LINE matches a line of OK characters.
+SAFE_LINE= '^'$(SAFE_CHAR)'*$$'
+SAFE_SHARP_LINE='^'$(SAFE_CHAR)'*('$$sharp$(OK_CHAR)'*)?$$'
+OK_LINE= '^'$(OK_CHAR)'*$$'
+
+# Flags to give 'tar' when making a distribution.
+# Try to use flags appropriate for GNU tar.
+GNUTARFLAGS= --numeric-owner --owner=0 --group=0 --mode=go+u,go-w --sort=name
+TARFLAGS= `if tar $(GNUTARFLAGS) --version >/dev/null 2>&1; \
+ then echo $(GNUTARFLAGS); \
+ else :; \
+ fi`
+
+# Flags to give 'gzip' when making a distribution.
+GZIPFLAGS= -9n
+
+###############################################################################
+
+#MAKE= make
+
+cc= cc
+CC= $(cc) -DTZDIR=\"$(TZDIR)\"
+
+AR= ar
+
+# ':' on typical hosts; 'ranlib' on the ancient hosts that still need ranlib.
+RANLIB= :
+
+TZCOBJS= zic.o
+TZDOBJS= zdump.o localtime.o asctime.o
+DATEOBJS= date.o localtime.o strftime.o asctime.o
+LIBSRCS= localtime.c asctime.c difftime.c
+LIBOBJS= localtime.o asctime.o difftime.o
+HEADERS= tzfile.h private.h
+NONLIBSRCS= zic.c zdump.c
+NEWUCBSRCS= date.c strftime.c
+SOURCES= $(HEADERS) $(LIBSRCS) $(NONLIBSRCS) $(NEWUCBSRCS) \
+ tzselect.ksh workman.sh
+MANS= newctime.3 newstrftime.3 newtzset.3 time2posix.3 \
+ tzfile.5 tzselect.8 zic.8 zdump.8
+MANTXTS= newctime.3.txt newstrftime.3.txt newtzset.3.txt \
+ time2posix.3.txt \
+ tzfile.5.txt tzselect.8.txt zic.8.txt zdump.8.txt \
+ date.1.txt
+COMMON= CONTRIBUTING LICENSE Makefile NEWS README Theory version
+WEB_PAGES= tz-art.htm tz-how-to.html tz-link.htm
+DOCS= $(MANS) date.1 $(MANTXTS) $(WEB_PAGES)
+PRIMARY_YDATA= africa antarctica asia australasia \
+ europe northamerica southamerica
+YDATA= $(PRIMARY_YDATA) pacificnew etcetera backward
+NDATA= systemv factory
+TDATA= $(YDATA) $(NDATA)
+ZONETABLES= zone1970.tab zone.tab
+TABDATA= iso3166.tab leapseconds $(ZONETABLES)
+LEAP_DEPS= leapseconds.awk leap-seconds.list
+DATA= $(YDATA) $(NDATA) backzone $(TABDATA) \
+ leap-seconds.list yearistype.sh
+AWK_SCRIPTS= checklinks.awk checktab.awk leapseconds.awk
+MISC= $(AWK_SCRIPTS) zoneinfo2tdf.pl
+TZS_YEAR= 2050
+TZS= to$(TZS_YEAR).tzs
+TZS_NEW= to$(TZS_YEAR)new.tzs
+TZS_DEPS= $(PRIMARY_YDATA) asctime.c localtime.c \
+ private.h tzfile.h zdump.c zic.c
+ENCHILADA= $(COMMON) $(DOCS) $(SOURCES) $(DATA) $(MISC) $(TZS)
+
+# Consult these files when deciding whether to rebuild the 'version' file.
+# This list is not the same as the output of 'git ls-files', since
+# .gitignore is not distributed.
+VERSION_DEPS= \
+ CONTRIBUTING LICENSE Makefile NEWS README Theory \
+ africa antarctica asctime.c asia australasia \
+ backward backzone \
+ checklinks.awk checktab.awk \
+ date.1 date.c difftime.c \
+ etcetera europe factory iso3166.tab \
+ leap-seconds.list leapseconds.awk localtime.c \
+ newctime.3 newstrftime.3 newtzset.3 northamerica \
+ pacificnew private.h \
+ southamerica strftime.c systemv \
+ time2posix.3 tz-art.htm tz-how-to.html tz-link.htm \
+ tzfile.5 tzfile.h tzselect.8 tzselect.ksh \
+ workman.sh yearistype.sh \
+ zdump.8 zdump.c zic.8 zic.c \
+ zone.tab zone1970.tab zoneinfo2tdf.pl
+
+# And for the benefit of csh users on systems that assume the user
+# shell should be used to handle commands in Makefiles. . .
+
+SHELL= /bin/sh
+
+all: tzselect yearistype zic zdump libtz.a $(TABDATA)
+
+ALL: all date $(ENCHILADA)
+
+install: all $(DATA) $(REDO) $(MANS)
+ mkdir -p $(DESTDIR)$(ETCDIR) $(DESTDIR)$(TZDIR) \
+ $(DESTDIR)$(LIBDIR) \
+ $(DESTDIR)$(MANDIR)/man3 $(DESTDIR)$(MANDIR)/man5 \
+ $(DESTDIR)$(MANDIR)/man8
+ $(ZIC_INSTALL) -l $(LOCALTIME) -p $(POSIXRULES)
+ cp -f iso3166.tab $(ZONETABLES) $(DESTDIR)$(TZDIR)/.
+ cp tzselect zic zdump $(DESTDIR)$(ETCDIR)/.
+ cp libtz.a $(DESTDIR)$(LIBDIR)/.
+ $(RANLIB) $(DESTDIR)$(LIBDIR)/libtz.a
+ cp -f newctime.3 newtzset.3 $(DESTDIR)$(MANDIR)/man3/.
+ cp -f tzfile.5 $(DESTDIR)$(MANDIR)/man5/.
+ cp -f tzselect.8 zdump.8 zic.8 $(DESTDIR)$(MANDIR)/man8/.
+
+INSTALL: ALL install date.1
+ mkdir -p $(DESTDIR)$(BINDIR) $(DESTDIR)$(MANDIR)/man1
+ cp date $(DESTDIR)$(BINDIR)/.
+ cp -f date.1 $(DESTDIR)$(MANDIR)/man1/.
+
+version: $(VERSION_DEPS)
+ { (type git) >/dev/null 2>&1 && \
+ V=`git describe --match '[0-9][0-9][0-9][0-9][a-z]*' \
+ --abbrev=7 --dirty` || \
+ V=$(VERSION); } && \
+ printf '%s\n' "$$V" >$@.out
+ mv $@.out $@
+
+version.h: version
+ VERSION=`cat version` && printf '%s\n' \
+ 'static char const PKGVERSION[]="($(PACKAGE)) ";' \
+ "static char const TZVERSION[]=\"$$VERSION\";" \
+ 'static char const REPORT_BUGS_TO[]="$(BUGEMAIL)";' \
+ >$@.out
+ mv $@.out $@
+
+zdump: $(TZDOBJS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZDOBJS) $(LDLIBS)
+
+zic: $(TZCOBJS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(TZCOBJS) $(LDLIBS)
+
+yearistype: yearistype.sh
+ cp yearistype.sh yearistype
+ chmod +x yearistype
+
+leapseconds: $(LEAP_DEPS)
+ $(AWK) -f leapseconds.awk leap-seconds.list >$@.out
+ mv $@.out $@
+
+# Arguments to pass to submakes of install_data.
+# They can be overridden by later submake arguments.
+INSTALLARGS = \
+ DESTDIR=$(DESTDIR) \
+ LEAPSECONDS='$(LEAPSECONDS)' \
+ PACKRATDATA='$(PACKRATDATA)' \
+ TZDIR=$(TZDIR) \
+ YEARISTYPE=$(YEARISTYPE) \
+ ZIC='$(ZIC)'
+
+# 'make install_data' installs one set of tz binary files.
+# It can be tailored by setting LEAPSECONDS, PACKRATDATA, etc.
+install_data: zic leapseconds yearistype $(PACKRATDATA) $(TDATA)
+ $(ZIC_INSTALL) $(TDATA)
+ $(AWK) '/^Rule/' $(TDATA) | $(ZIC_INSTALL) - $(PACKRATDATA)
+
+posix_only:
+ $(MAKE) $(INSTALLARGS) LEAPSECONDS= install_data
+
+right_only:
+ $(MAKE) $(INSTALLARGS) LEAPSECONDS='-L leapseconds' \
+ install_data
+
+# In earlier versions of this makefile, the other two directories were
+# subdirectories of $(TZDIR). However, this led to configuration errors.
+# For example, with posix_right under the earlier scheme,
+# TZ='right/Australia/Adelaide' got you localtime with leap seconds,
+# but gmtime without leap seconds, which led to problems with applications
+# like sendmail that subtract gmtime from localtime.
+# Therefore, the other two directories are now siblings of $(TZDIR).
+# You must replace all of $(TZDIR) to switch from not using leap seconds
+# to using them, or vice versa.
+right_posix: right_only
+ rm -fr $(DESTDIR)$(TZDIR)-leaps
+ ln -s $(TZDIR_BASENAME) $(DESTDIR)$(TZDIR)-leaps || \
+ $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-leaps right_only
+ $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-posix posix_only
+
+posix_right: posix_only
+ rm -fr $(DESTDIR)$(TZDIR)-posix
+ ln -s $(TZDIR_BASENAME) $(DESTDIR)$(TZDIR)-posix || \
+ $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-posix posix_only
+ $(MAKE) $(INSTALLARGS) TZDIR=$(TZDIR)-leaps right_only
+
+# This obsolescent rule is present for backwards compatibility with
+# tz releases 2014g through 2015g. It should go away eventually.
+posix_packrat:
+ $(MAKE) $(INSTALLARGS) PACKRATDATA=backzone posix_only
+
+zones: $(REDO)
+
+$(TZS_NEW): $(TDATA) zdump zic
+ mkdir -p tzs.dir
+ $(zic) -d tzs.dir $(TDATA)
+ $(AWK) '/^Link/{print $$1 "\t" $$2 "\t" $$3}' \
+ $(TDATA) | LC_ALL=C sort >$@.out
+ wd=`pwd` && \
+ zones=`$(AWK) -v wd="$$wd" \
+ '/^Zone/{print wd "/tzs.dir/" $$2}' $(TDATA) \
+ | LC_ALL=C sort` && \
+ ./zdump -i -c $(TZS_YEAR) $$zones >>$@.out
+ sed 's,^TZ=".*tzs\.dir/,TZ=",' $@.out >$@.sed.out
+ rm -fr tzs.dir $@.out
+ mv $@.sed.out $@
+
+# If $(TZS) does not already exist (e.g., old-format tarballs), create it.
+# If it exists but 'make check_tzs' fails, a maintainer should inspect the
+# failed output and fix the inconsistency, perhaps by running 'make force_tzs'.
+$(TZS):
+ $(MAKE) force_tzs
+
+force_tzs: $(TZS_NEW)
+ cp $(TZS_NEW) $(TZS)
+
+libtz.a: $(LIBOBJS)
+ $(AR) ru $@ $(LIBOBJS)
+ $(RANLIB) $@
+
+date: $(DATEOBJS)
+ $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $(DATEOBJS) $(LDLIBS)
+
+tzselect: tzselect.ksh version
+ VERSION=`cat version` && sed \
+ -e 's|#!/bin/bash|#!$(KSHELL)|g' \
+ -e 's|AWK=[^}]*|AWK=$(AWK)|g' \
+ -e 's|\(PKGVERSION\)=.*|\1='\''($(PACKAGE)) '\''|' \
+ -e 's|\(REPORT_BUGS_TO\)=.*|\1=$(BUGEMAIL)|' \
+ -e 's|TZDIR=[^}]*|TZDIR=$(TZDIR)|' \
+ -e 's|\(TZVERSION\)=.*|\1='"$$VERSION"'|' \
+ <$@.ksh >$@.out
+ chmod +x $@.out
+ mv $@.out $@
+
+check: check_character_set check_white_space check_links check_sorted \
+ check_tables check_tzs check_web
+
+check_character_set: $(ENCHILADA)
+ LC_ALL=en_US.utf8 && export LC_ALL && \
+ sharp='#' && \
+ ! grep -Env $(SAFE_LINE) $(MANS) date.1 $(MANTXTS) \
+ $(MISC) $(SOURCES) $(WEB_PAGES) \
+ CONTRIBUTING LICENSE Makefile README version && \
+ ! grep -Env $(SAFE_SHARP_LINE) $(TDATA) backzone \
+ leapseconds yearistype.sh zone.tab && \
+ ! grep -Env $(OK_LINE) $(ENCHILADA)
+
+check_white_space: $(ENCHILADA)
+ patfmt=' \t|[\f\r\v]' && pat=`printf "$$patfmt\\n"` && \
+ ! grep -En "$$pat" $(ENCHILADA)
+ ! grep -n '[[:space:]]$$' $(ENCHILADA)
+
+CHECK_CC_LIST = { n = split($$1,a,/,/); for (i=2; i<=n; i++) print a[1], a[i]; }
+
+check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
+ $(AWK) '/^Link/ {print $$3}' backward | LC_ALL=C sort -cu
+ $(AWK) '/^Zone/ {print $$2}' backzone | LC_ALL=C sort -cu
+ $(AWK) '/^[^#]/ {print $$1}' iso3166.tab | LC_ALL=C sort -cu
+ $(AWK) '/^[^#]/ {print $$1}' zone.tab | LC_ALL=C sort -c
+ $(AWK) '/^[^#]/ {print substr($$0, 1, 2)}' zone1970.tab | \
+ LC_ALL=C sort -c
+ $(AWK) '/^[^#]/ $(CHECK_CC_LIST)' zone1970.tab | \
+ LC_ALL=C sort -cu
+
+check_links: checklinks.awk $(TDATA)
+ $(AWK) -f checklinks.awk $(TDATA)
+
+check_tables: checktab.awk $(PRIMARY_YDATA) $(ZONETABLES)
+ for tab in $(ZONETABLES); do \
+ $(AWK) -f checktab.awk -v zone_table=$$tab $(PRIMARY_YDATA) \
+ || exit; \
+ done
+
+check_tzs: $(TZS) $(TZS_NEW)
+ diff -u $(TZS) $(TZS_NEW)
+
+check_web: $(WEB_PAGES)
+ $(VALIDATE_ENV) $(VALIDATE) $(VALIDATE_FLAGS) $(WEB_PAGES)
+
+clean_misc:
+ rm -f core *.o *.out \
+ date tzselect version.h zdump zic yearistype libtz.a
+clean: clean_misc
+ rm -fr *.dir tzdb-*/ $(TZS_NEW)
+
+maintainer-clean: clean
+ @echo 'This command is intended for maintainers to use; it'
+ @echo 'deletes files that may need special tools to rebuild.'
+ rm -f leapseconds version $(MANTXTS) $(TZS) *.asc *.tar.*
+
+names:
+ @echo $(ENCHILADA)
+
+public: check check_public $(CHECK_TIME_T_ALTERNATIVES) \
+ tarballs signatures
+
+date.1.txt: date.1
+newctime.3.txt: newctime.3
+newstrftime.3.txt: newstrftime.3
+newtzset.3.txt: newtzset.3
+time2posix.3.txt: time2posix.3
+tzfile.5.txt: tzfile.5
+tzselect.8.txt: tzselect.8
+zdump.8.txt: zdump.8
+zic.8.txt: zic.8
+
+$(MANTXTS): workman.sh
+ LC_ALL=C sh workman.sh `expr $@ : '\(.*\)\.txt$$'` >$@.out
+ mv $@.out $@
+
+# Set the time stamps to those of the git repository, if available,
+# and if the files have not changed since then.
+# This uses GNU 'touch' syntax 'touch -d@N FILE',
+# where N is the number of seconds since 1970.
+# If git or GNU 'touch' is absent, don't bother to sync with git timestamps.
+# Also, set the timestamp of each prebuilt file like 'leapseconds'
+# to be the maximum of the files it depends on.
+set-timestamps.out: $(ENCHILADA)
+ rm -f $@
+ if (type git) >/dev/null 2>&1 && \
+ files=`git ls-files $(ENCHILADA)` && \
+ touch -md @1 test.out; then \
+ rm -f test.out && \
+ for file in $$files; do \
+ if git diff --quiet $$file; then \
+ time=`git log -1 --format='tformat:%ct' $$file` && \
+ touch -cmd @$$time $$file; \
+ else \
+ echo >&2 "$$file: warning: does not match repository"; \
+ fi || exit; \
+ done; \
+ fi
+ touch -cmr `ls -t $(LEAP_DEPS) | sed 1q` leapseconds
+ for file in `ls $(MANTXTS) | sed 's/\.txt$$//'`; do \
+ touch -cmr `ls -t $$file workman.sh | sed 1q` $$file.txt || \
+ exit; \
+ done
+ touch -cmr `ls -t $(TZS_DEPS) | sed 1q` $(TZS)
+ touch -cmr `ls -t $(VERSION_DEPS) | sed 1q` version
+ touch $@
+
+# The zics below ensure that each data file can stand on its own.
+# We also do an all-files run to catch links to links.
+
+check_public:
+ $(MAKE) maintainer-clean
+ $(MAKE) "CFLAGS=$(GCC_DEBUG_FLAGS)" ALL
+ mkdir -p public.dir
+ for i in $(TDATA) ; do \
+ $(zic) -v -d public.dir $$i 2>&1 || exit; \
+ done
+ $(zic) -v -d public.dir $(TDATA)
+ rm -fr public.dir
+
+# Check that the code works under various alternative
+# implementations of time_t.
+check_time_t_alternatives:
+ if diff -q Makefile Makefile 2>/dev/null; then \
+ quiet_option='-q'; \
+ else \
+ quiet_option=''; \
+ fi && \
+ wd=`pwd` && \
+ zones=`$(AWK) '/^[^#]/ { print $$3 }' <zone1970.tab` && \
+ for type in $(TIME_T_ALTERNATIVES); do \
+ mkdir -p time_t.dir/$$type && \
+ $(MAKE) clean_misc && \
+ $(MAKE) TOPDIR="$$wd/time_t.dir/$$type" \
+ CFLAGS='$(CFLAGS) -Dtime_tz='"'$$type'" \
+ REDO='$(REDO)' \
+ install && \
+ diff $$quiet_option -r \
+ time_t.dir/int64_t/etc/zoneinfo \
+ time_t.dir/$$type/etc/zoneinfo && \
+ case $$type in \
+ int32_t) range=-2147483648,2147483647;; \
+ uint32_t) range=0,4294967296;; \
+ int64_t) continue;; \
+ *u*) range=0,10000000000;; \
+ *) range=-10000000000,10000000000;; \
+ esac && \
+ echo checking $$type zones ... && \
+ time_t.dir/int64_t/etc/zdump -V -t $$range $$zones \
+ >time_t.dir/int64_t.out && \
+ time_t.dir/$$type/etc/zdump -V -t $$range $$zones \
+ >time_t.dir/$$type.out && \
+ diff -u time_t.dir/int64_t.out time_t.dir/$$type.out \
+ || exit; \
+ done
+ rm -fr time_t.dir
+
+tarballs traditional_tarballs signatures traditional_signatures: version
+ VERSION=`cat version` && \
+ $(MAKE) VERSION="$$VERSION" $@_version
+
+tarballs_version: traditional_tarballs_version tzdb-$(VERSION).tar.lz
+traditional_tarballs_version: \
+ tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz
+signatures_version: traditional_signatures_version tzdb-$(VERSION).tar.lz.asc
+traditional_signatures_version: \
+ tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \
+
+tzcode$(VERSION).tar.gz: set-timestamps.out
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - \
+ $(COMMON) $(DOCS) $(SOURCES) | \
+ gzip $(GZIPFLAGS) >$@.out
+ mv $@.out $@
+
+tzdata$(VERSION).tar.gz: set-timestamps.out
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \
+ gzip $(GZIPFLAGS) >$@.out
+ mv $@.out $@
+
+tzdb-$(VERSION).tar.lz: set-timestamps.out
+ rm -fr tzdb-$(VERSION)
+ mkdir tzdb-$(VERSION)
+ ln $(ENCHILADA) tzdb-$(VERSION)
+ touch -cmr `ls -t tzdb-$(VERSION)/* | sed 1q` tzdb-$(VERSION)
+ LC_ALL=C && export LC_ALL && \
+ tar $(TARFLAGS) -cf - tzdb-$(VERSION) | lzip -9 >$@.out
+ mv $@.out $@
+
+tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz
+ gpg --armor --detach-sign $?
+
+tzdata$(VERSION).tar.gz.asc: tzdata$(VERSION).tar.gz
+ gpg --armor --detach-sign $?
+
+tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz
+ gpg --armor --detach-sign $?
+
+typecheck:
+ $(MAKE) clean
+ for i in "long long" unsigned; \
+ do \
+ $(MAKE) CFLAGS="-DTYPECHECK -D__time_t_defined -D_TIME_T \"-Dtime_t=$$i\"" ; \
+ ./zdump -v Europe/Rome ; \
+ $(MAKE) clean ; \
+ done
+
+zonenames: $(TDATA)
+ @$(AWK) '/^Zone/ { print $$2 } /^Link/ { print $$3 }' $(TDATA)
+
+asctime.o: private.h tzfile.h
+date.o: private.h
+difftime.o: private.h
+localtime.o: private.h tzfile.h
+strftime.o: private.h tzfile.h
+zdump.o: version.h
+zic.o: private.h tzfile.h version.h
+
+.KEEP_STATE:
+
+.PHONY: ALL INSTALL all
+.PHONY: check check_character_set check_links
+.PHONY: check_public check_sorted check_tables
+.PHONY: check_time_t_alternatives check_tzs check_web check_white_space
+.PHONY: clean clean_misc force_tzs
+.PHONY: install install_data maintainer-clean names
+.PHONY: posix_only posix_packrat posix_right
+.PHONY: public right_only right_posix signatures signatures_version
+.PHONY: tarballs tarballs_version typecheck
+.PHONY: zonenames zones
diff --git a/contrib/tzdata/NEWS b/contrib/tzdata/NEWS
new file mode 100644
index 0000000..da5c2a5
--- /dev/null
+++ b/contrib/tzdata/NEWS
@@ -0,0 +1,3782 @@
+News for the tz database
+
+Release 2016i - 2016-11-01 23:19:52 -0700
+
+ Briefly: Cyprus split into two time zones on 2016-10-30, and Tonga
+ reintroduces DST on 2016-11-06.
+
+ Changes to future time stamps
+
+ Pacific/Tongatapu begins DST on 2016-11-06 at 02:00, ending on
+ 2017-01-15 at 03:00. Assume future observances in Tonga will be
+ from the first Sunday in November through the third Sunday in
+ January, like Fiji. (Thanks to Pulu ʻAnau.) Switch to numeric
+ time zone abbreviations for this zone.
+
+ Changes to past and future time stamps
+
+ Northern Cyprus is now +03 year round, causing a split in Cyprus
+ time zones starting 2016-10-30 at 04:00. This creates a zone
+ Asia/Famagusta. (Thanks to Even Scharning and Matt Johnson.)
+
+ Antarctica/Casey switched from +08 to +11 on 2016-10-22.
+ (Thanks to Steffen Thorsen.)
+
+ Changes to past time stamps
+
+ Several corrections were made for pre-1975 time stamps in Italy.
+ These affect Europe/Malta, Europe/Rome, Europe/San_Marino, and
+ Europe/Vatican.
+
+ First, the 1893-11-01 00:00 transition in Italy used the new UT
+ offset (+01), not the old (+00:49:56). (Thanks to Michael
+ Deckers.)
+
+ Second, rules for daylight saving in Italy were changed to agree
+ with Italy's National Institute of Metrological Research (INRiM)
+ except for 1944, as follows (thanks to Pierpaolo Bernardi, Brian
+ Inglis, and Michael Deckers):
+
+ The 1916-06-03 transition was at 24:00, not 00:00.
+
+ The 1916-10-01, 1919-10-05, and 1920-09-19 transitions were at
+ 00:00, not 01:00.
+
+ The 1917-09-30 and 1918-10-06 transitions were at 24:00, not
+ 01:00.
+
+ The 1944-09-17 transition was at 03:00, not 01:00. This
+ particular change is taken from Italian law as INRiM's table,
+ (which says 02:00) appears to have a typo here. Also, keep the
+ 1944-04-03 transition for Europe/Rome, as Rome was controlled by
+ Germany then.
+
+ The 1967-1970 and 1972-1974 fallback transitions were at 01:00,
+ not 00:00.
+
+ Changes to code
+
+ The code should now be buildable on AmigaOS merely by setting the
+ appropriate Makefile variables. (From a patch by Carsten Larsen.)
+
+
+Release 2016h - 2016-10-19 23:17:57 -0700
+
+ Changes to future time stamps
+
+ Asia/Gaza and Asia/Hebron end DST on 2016-10-29 at 01:00, not
+ 2016-10-21 at 00:00. (Thanks to Sharef Mustafa.) Predict that
+ future fall transitions will be on the last Saturday of October
+ at 01:00, which is consistent with predicted spring transitions
+ on the last Saturday of March. (Thanks to Tim Parenti.)
+
+ Changes to past time stamps
+
+ In Turkey, transitions in 1986-1990 were at 01:00 standard time
+ not at 02:00, and the spring 1994 transition was on March 20, not
+ March 27. (Thanks to Kıvanç Yazan.)
+
+ Changes to past and future time zone abbreviations
+
+ Asia/Colombo now uses numeric time zone abbreviations like "+0530"
+ instead of alphabetic ones like "IST" and "LKT". Various
+ English-language sources use "IST", "LKT" and "SLST", with no
+ working consensus. (Usage of "SLST" mentioned by Sadika
+ Sumanapala.)
+
+ Changes to code
+
+ zic no longer mishandles relativizing file names when creating
+ symbolic links like /etc/localtime, when these symbolic links
+ are outside the usual directory hierarchy. This fixes a bug
+ introduced in 2016g. (Problem reported by Andreas Stieger.)
+
+ Changes to build procedure
+
+ New rules 'traditional_tarballs' and 'traditional_signatures' for
+ building just the traditional-format distribution. (Requested by
+ Deborah Goldsmith.)
+
+ The file 'version' is now put into the tzdata tarball too.
+ (Requested by Howard Hinnant.)
+
+ Changes to documentation and commentary
+
+ The 'Theory' file now has a section on interface stability.
+ (Requested by Paul Koning.) It also mentions features like
+ tm_zone and localtime_rz that have long been supported by the
+ reference code.
+
+ tz-link.htm has improved coverage of time zone boundaries suitable
+ for geolocation. (Thanks to heads-ups from Evan Siroky and Matt
+ Johnson.)
+
+ The US commentary now mentions Allen and the "day of two noons".
+
+ The Fiji commentary mentions the government's 2016-10-03 press
+ release. (Thanks to Raymond Kumar.)
+
+
+Release 2016g - 2016-09-13 08:56:38 -0700
+
+ Changes to future time stamps
+
+ Turkey switched from EET/EEST (+02/+03) to permanent +03,
+ effective 2016-09-07. (Thanks to Burak AYDIN.) Use "+03" rather
+ than an invented abbreviation for the new time.
+
+ New leap second 2016-12-31 23:59:60 UTC as per IERS Bulletin C 52.
+ (Thanks to Tim Parenti.)
+
+ Changes to past time stamps
+
+ For America/Los_Angeles, spring-forward transition times have been
+ corrected from 02:00 to 02:01 in 1948, and from 02:00 to 01:00 in
+ 1950-1966.
+
+ For zones using Soviet time on 1919-07-01, transitions to UT-based
+ time were at 00:00 UT, not at 02:00 local time. The affected
+ zones are Europe/Kirov, Europe/Moscow, Europe/Samara, and
+ Europe/Ulyanovsk. (Thanks to Alexander Belopolsky.)
+
+ Changes to past and future time zone abbreviations
+
+ The Factory zone now uses the time zone abbreviation -00 instead
+ of a long English-language string, as -00 is now the normal way to
+ represent an undefined time zone.
+
+ Several zones in Antarctica and the former Soviet Union, along
+ with zones intended for ships at sea that cannot use POSIX TZ
+ strings, now use numeric time zone abbreviations instead of
+ invented or obsolete alphanumeric abbreviations. The affected
+ zones are Antarctica/Casey, Antarctica/Davis,
+ Antarctica/DumontDUrville, Antarctica/Mawson, Antarctica/Rothera,
+ Antarctica/Syowa, Antarctica/Troll, Antarctica/Vostok,
+ Asia/Anadyr, Asia/Ashgabat, Asia/Baku, Asia/Bishkek, Asia/Chita,
+ Asia/Dushanbe, Asia/Irkutsk, Asia/Kamchatka, Asia/Khandyga,
+ Asia/Krasnoyarsk, Asia/Magadan, Asia/Omsk, Asia/Sakhalin,
+ Asia/Samarkand, Asia/Srednekolymsk, Asia/Tashkent, Asia/Tbilisi,
+ Asia/Ust-Nera, Asia/Vladivostok, Asia/Yakutsk, Asia/Yekaterinburg,
+ Asia/Yerevan, Etc/GMT-14, Etc/GMT-13, Etc/GMT-12, Etc/GMT-11,
+ Etc/GMT-10, Etc/GMT-9, Etc/GMT-8, Etc/GMT-7, Etc/GMT-6, Etc/GMT-5,
+ Etc/GMT-4, Etc/GMT-3, Etc/GMT-2, Etc/GMT-1, Etc/GMT+1, Etc/GMT+2,
+ Etc/GMT+3, Etc/GMT+4, Etc/GMT+5, Etc/GMT+6, Etc/GMT+7, Etc/GMT+8,
+ Etc/GMT+9, Etc/GMT+10, Etc/GMT+11, Etc/GMT+12, Europe/Kaliningrad,
+ Europe/Minsk, Europe/Samara, Europe/Volgograd, and
+ Indian/Kerguelen. For Europe/Moscow the invented abbreviation MSM
+ was replaced by +05, whereas MSK and MSD were kept as they are not
+ our invention and are widely used.
+
+ Changes to zone names
+
+ Rename Asia/Rangoon to Asia/Yangon, with a backward compatibility link.
+ (Thanks to David Massoud.)
+
+ Changes to code
+
+ zic no longer generates binary files containing POSIX TZ-like
+ strings that disagree with the local time type after the last
+ explicit transition in the data. This fixes a bug with
+ Africa/Casablanca and Africa/El_Aaiun in some year-2037 time
+ stamps on the reference platform. (Thanks to Alexander Belopolsky
+ for reporting the bug and suggesting a way forward.)
+
+ If the installed localtime and/or posixrules files are symbolic
+ links, zic now keeps them symbolic links when updating them, for
+ compatibility with platforms like OpenSUSE where other programs
+ configure these files as symlinks.
+
+ zic now avoids hard linking to symbolic links, avoids some
+ unnecessary mkdir and stat system calls, and uses shorter file
+ names internally.
+
+ zdump has a new -i option to generate transitions in a
+ more-compact but still human-readable format. This option is
+ experimental, and the output format may change in future versions.
+ (Thanks to Jon Skeet for suggesting that an option was needed,
+ and thanks to Tim Parenti and Chris Rovick for further comments.)
+
+ Changes to build procedure
+
+ An experimental distribution format is available, in addition
+ to the traditional format which will continue to be distributed.
+ The new format is a tarball tzdb-VERSION.tar.lz with signature
+ file tzdb-VERSION.tar.lz.asc. It unpacks to a top-level directory
+ tzdb-VERSION containing the code and data of the traditional
+ two-tarball format, along with extra data that may be useful.
+ (Thanks to Antonio Diaz Diaz, Oscar van Vlijmen, and many others
+ for comments about the experimental format.)
+
+ The release version number is now more accurate in the usual case
+ where releases are built from a Git repository. For example, if
+ 23 commits and some working-file changes have been made since
+ release 2016g, the version number is now something like
+ '2016g-23-g50556e3-dirty' instead of the misleading '2016g'.
+ Official releases uses the same version number format as before,
+ e.g., '2016g'. To support the more-accurate version number, its
+ specification has moved from a line in the Makefile to a new
+ source file 'version'.
+
+ The experimental distribution contains a file to2050.tzs that
+ contains what should be the output of 'zdump -i -c 2050' on
+ primary zones. If this file is available, 'make check' now checks
+ that zdump generates this output.
+
+ 'make check_web' now works on Fedora-like distributions.
+
+ Changes to documentation and commentary
+
+ tzfile.5 now documents the new restriction on POSIX TZ-like
+ strings that is now implemented by zic.
+
+ Comments now cite URLs for some 1917-1921 Russian DST decrees.
+ (Thanks to Alexander Belopolsky.)
+
+ tz-link.htm mentions JuliaTime (thanks to Curtis Vogt) and Time4J
+ (thanks to Meno Hochschild) and ThreeTen-Extra, and its
+ description of Java 8 has been brought up to date (thanks to
+ Stephen Colebourne). Its description of local time on Mars has
+ been updated to match current practice, and URLs have been updated
+ and some obsolete ones removed.
+
+
+Release 2016f - 2016-07-05 16:26:51 +0200
+
+ Changes affecting future time stamps
+
+ The Egyptian government changed its mind on short notice, and
+ Africa/Cairo will not introduce DST starting 2016-07-07 after all.
+ (Thanks to Mina Samuel.)
+
+ Asia/Novosibirsk switches from +06 to +07 on 2016-07-24 at 02:00.
+ (Thanks to Stepan Golosunov.)
+
+ Changes to past and future time stamps
+
+ Asia/Novokuznetsk and Asia/Novosibirsk now use numeric time zone
+ abbreviations instead of invented ones.
+
+ Changes affecting past time stamps
+
+ Europe/Minsk's 1992-03-29 spring-forward transition was at 02:00 not 00:00.
+ (Thanks to Stepan Golosunov.)
+
+
+Release 2016e - 2016-06-14 08:46:16 -0700
+
+ Changes affecting future time stamps
+
+ Africa/Cairo observes DST in 2016 from July 7 to the end of October.
+ Guess October 27 and 24:00 transitions. (Thanks to Steffen Thorsen.)
+ For future years, guess April's last Thursday to October's last
+ Thursday except for Ramadan.
+
+ Changes affecting past time stamps
+
+ Locations while uninhabited now use '-00', not 'zzz', as a
+ placeholder time zone abbreviation. This is inspired by Internet
+ RFC 3339 and is more consistent with numeric time zone
+ abbreviations already used elsewhere. The change affects several
+ arctic and antarctic locations, e.g., America/Cambridge_Bay before
+ 1920 and Antarctica/Troll before 2005.
+
+ Asia/Baku's 1992-09-27 transition from +04 (DST) to +04 (non-DST) was
+ at 03:00, not 23:00 the previous day. (Thanks to Michael Deckers.)
+
+ Changes to code
+
+ zic now outputs a dummy transition at time 2**31 - 1 in zones
+ whose POSIX-style TZ strings contain a '<'. This mostly works
+ around Qt bug 53071 <https://bugreports.qt.io/browse/QTBUG-53071>.
+ (Thanks to Zhanibek Adilbekov for reporting the Qt bug.)
+
+ Changes affecting documentation and commentary
+
+ tz-link.htm says why governments should give plenty of notice for
+ time zone or DST changes, and refers to Matt Johnson's blog post.
+
+ tz-link.htm mentions Tzdata for Elixir. (Thanks to Matt Johnson.)
+
+
+Release 2016d - 2016-04-17 22:50:29 -0700
+
+ Changes affecting future time stamps
+
+ America/Caracas switches from -0430 to -04 on 2016-05-01 at 02:30.
+ (Thanks to Alexander Krivenyshev for the heads-up.)
+
+ Asia/Magadan switches from +10 to +11 on 2016-04-24 at 02:00.
+ (Thanks to Alexander Krivenyshev and Matt Johnson.)
+
+ New zone Asia/Tomsk, split off from Asia/Novosibirsk. It covers
+ Tomsk Oblast, Russia, which switches from +06 to +07 on 2016-05-29
+ at 02:00. (Thanks to Stepan Golosunov.)
+
+ Changes affecting past time stamps
+
+ New zone Europe/Kirov, split off from Europe/Volgograd. It covers
+ Kirov Oblast, Russia, which switched from +04/+05 to +03/+04 on
+ 1989-03-26 at 02:00, roughly a year after Europe/Volgograd made
+ the same change. (Thanks to Stepan Golosunov.)
+
+ Russia and nearby locations had daylight-saving transitions on
+ 1992-03-29 at 02:00 and 1992-09-27 at 03:00, instead of on
+ 1992-03-28 at 23:00 and 1992-09-26 at 23:00. (Thanks to Stepan
+ Golosunov.)
+
+ Many corrections to historical time in Kazakhstan from 1991
+ through 2005. (Thanks to Stepan Golosunov.) Replace Kazakhstan's
+ invented time zone abbreviations with numeric abbreviations.
+
+ Changes to commentary
+
+ Mention Internet RFCs 7808 (TZDIST) and 7809 (CalDAV time zone references).
+
+
+Release 2016c - 2016-03-23 00:51:27 -0700
+
+ Changes affecting future time stamps
+
+ Azerbaijan no longer observes DST. (Thanks to Steffen Thorsen.)
+
+ Chile reverts from permanent to seasonal DST. (Thanks to Juan
+ Correa for the heads-up, and to Tim Parenti for corrections.)
+ Guess that future transitions are August's and May's second
+ Saturdays at 24:00 mainland time. Also, call the period from
+ 2014-09-07 through 2016-05-14 daylight saving time instead of
+ standard time, as that seems more appropriate now.
+
+ Changes affecting past time stamps
+
+ Europe/Kaliningrad and Europe/Vilnius changed from +03/+04 to
+ +02/+03 on 1989-03-26, not 1991-03-31. Europe/Volgograd changed
+ from +04/+05 to +03/+04 on 1988-03-27, not 1989-03-26.
+ (Thanks to Stepan Golosunov.)
+
+ Changes to commentary
+
+ Several updates and URLs for historical and proposed Russian changes.
+ (Thanks to Stepan Golosunov, Matt Johnson, and Alexander Krivenyshev.)
+
+
+Release 2016b - 2016-03-12 17:30:14 -0800
+
+ Compatibility note
+
+ Starting with release 2016b, some data entries cause zic implementations
+ derived from tz releases 2005j through 2015e to issue warnings like
+ "time zone abbreviation differs from POSIX standard (+03)".
+ These warnings should not otherwise affect zic's output and can safely be
+ ignored on today's platforms, as the warnings refer to a restriction in
+ POSIX.1-1988 that was removed in POSIX.1-2001. One way to suppress the
+ warnings is to upgrade to zic derived from tz releases 2015f and later.
+
+ Changes affecting future time stamps
+
+ New zones Europe/Astrakhan and Europe/Ulyanovsk for Astrakhan and
+ Ulyanovsk Oblasts, Russia, both of which will switch from +03 to +04 on
+ 2016-03-27 at 02:00 local time. They need distinct zones since their
+ post-1970 histories disagree. New zone Asia/Barnaul for Altai Krai and
+ Altai Republic, Russia, which will switch from +06 to +07 on the same date
+ and local time. The Astrakhan change is already official; the others have
+ passed the first reading in the State Duma and are extremely likely.
+ Also, Asia/Sakhalin moves from +10 to +11 on 2016-03-27 at 02:00.
+ (Thanks to Alexander Krivenyshev for the heads-up, and to Matt Johnson
+ and Stepan Golosunov for followup.)
+
+ As a trial of a new system that needs less information to be made up,
+ the new zones use numeric time zone abbreviations like "+04"
+ instead of invented abbreviations like "ASTT".
+
+ Haiti will not observe DST in 2016. (Thanks to Jean Antoine via
+ Steffen Thorsen.)
+
+ Palestine's spring-forward transition on 2016-03-26 is at 01:00, not 00:00.
+ (Thanks to Hannah Kreitem.) Guess future transitions will be March's last
+ Saturday at 01:00, not March's last Friday at 24:00.
+
+ Changes affecting past time stamps
+
+ Europe/Chisinau observed DST during 1990, and switched from +04 to
+ +03 at 1990-05-06 02:00, instead of switching from +03 to +02.
+ (Thanks to Stepan Golosunov.)
+
+ 1991 abbreviations in Europe/Samara should be SAMT/SAMST, not
+ KUYT/KUYST. (Thanks to Stepan Golosunov.)
+
+ Changes to code
+
+ tzselect's diagnostics and checking, and checktab.awk's checking,
+ have been improved. (Thanks to J William Piggott.)
+
+ tzcode now builds under MinGW. (Thanks to Ian Abbott and Esben Haabendal.)
+
+ tzselect now tests Julian-date TZ settings more accurately.
+ (Thanks to J William Piggott.)
+
+ Changes to commentary
+
+ Comments in zone tables have been improved. (Thanks to J William Piggott.)
+
+ tzselect again limits its menu comments so that menus fit on a
+ 24x80 alphanumeric display.
+
+ A new web page tz-how-to.html. (Thanks to Bill Seymour.)
+
+ In the Theory file, the description of possible time zone abbreviations in
+ tzdata has been cleaned up, as the old description was unclear and
+ inconsistent. (Thanks to Alain Mouette for reporting the problem.)
+
+
+Release 2016a - 2016-01-26 23:28:02 -0800
+
+ Changes affecting future time stamps
+
+ America/Cayman will not observe daylight saving this year after all.
+ Revert our guess that it would. (Thanks to Matt Johnson.)
+
+ Asia/Chita switches from +0800 to +0900 on 2016-03-27 at 02:00.
+ (Thanks to Alexander Krivenyshev.)
+
+ Asia/Tehran now has DST predictions for the year 2038 and later,
+ to be March 21 00:00 to September 21 00:00. This is likely better
+ than predicting no DST, albeit off by a day every now and then.
+
+ Changes affecting past and future time stamps
+
+ America/Metlakatla switched from PST all year to AKST/AKDT on
+ 2015-11-01 at 02:00. (Thanks to Steffen Thorsen.)
+
+ America/Santa_Isabel has been removed, and replaced with a
+ backward compatibility link to America/Tijuana. Its contents were
+ apparently based on a misreading of Mexican legislation.
+
+ Changes affecting past time stamps
+
+ Asia/Karachi's two transition times in 2002 were off by a minute.
+ (Thanks to Matt Johnson.)
+
+ Changes affecting build procedure
+
+ An installer can now combine leap seconds with use of the backzone file,
+ e.g., with 'make PACKRATDATA=backzone REDO=posix_right zones'.
+ The old 'make posix_packrat' rule is now marked as obsolescent.
+ (Thanks to Ian Abbott for an initial implementation.)
+
+ Changes affecting documentation and commentary
+
+ A new file LICENSE makes it easier to see that the code and data
+ are mostly public-domain. (Thanks to James Knight.) The three
+ non-public-domain files now use the current (3-clause) BSD license
+ instead of older versions of that license.
+
+ tz-link.htm mentions the BDE library (thanks to Andrew Paprocki),
+ CCTZ (thanks to Tim Parenti), TimeJones.com, and has a new section
+ on editing tz source files (with a mention of Sublime zoneinfo,
+ thanks to Gilmore Davidson).
+
+ The Theory and asia files now mention the 2015 book "The Global
+ Transformation of Time, 1870-1950", and cite a couple of reviews.
+
+ The America/Chicago entry now documents the informal use of US
+ central time in Fort Pierre, South Dakota. (Thanks to Rick
+ McDermid, Matt Johnson, and Steve Jones.)
+
+
+Release 2015g - 2015-10-01 00:39:51 -0700
+
+ Changes affecting future time stamps
+
+ Turkey's 2015 fall-back transition is scheduled for Nov. 8, not Oct. 25.
+ (Thanks to Fatih.)
+
+ Norfolk moves from +1130 to +1100 on 2015-10-04 at 02:00 local time.
+ (Thanks to Alexander Krivenyshev.)
+
+ Fiji's 2016 fall-back transition is scheduled for January 17, not 24.
+ (Thanks to Ken Rylander.)
+
+ Fort Nelson, British Columbia will not fall back on 2015-11-01. It has
+ effectively been on MST (-0700) since it advanced its clocks on 2015-03-08.
+ New zone America/Fort_Nelson. (Thanks to Matt Johnson.)
+
+ Changes affecting past time stamps
+
+ Norfolk observed DST from 1974-10-27 02:00 to 1975-03-02 02:00.
+
+ Changes affecting code
+
+ localtime no longer mishandles America/Anchorage after 2037.
+ (Thanks to Bradley White for reporting the bug.)
+
+ On hosts with signed 32-bit time_t, localtime no longer mishandles
+ Pacific/Fiji after 2038-01-16 14:00 UTC.
+
+ The localtime module allows the variables 'timezone', 'daylight',
+ and 'altzone' to be in common storage shared with other modules,
+ and declares them in case the system <time.h> does not.
+ (Problems reported by Kees Dekker.)
+
+ On platforms with tm_zone, strftime.c now assumes it is not NULL.
+ This simplifies the code and is consistent with zdump.c.
+ (Problem reported by Christos Zoulas.)
+
+ Changes affecting documentation
+
+ The tzfile man page now documents that transition times denote the
+ starts (not the ends) of the corresponding time periods.
+ (Ambiguity reported by Bill Seymour.)
+
+
+Release 2015f - 2015-08-10 18:06:56 -0700
+
+ Changes affecting future time stamps
+
+ North Korea switches to +0830 on 2015-08-15. (Thanks to Steffen Thorsen.)
+ The abbreviation remains "KST". (Thanks to Robert Elz.)
+
+ Uruguay no longer observes DST. (Thanks to Steffen Thorsen
+ and Pablo Camargo.)
+
+ Changes affecting past and future time stamps
+
+ Moldova starts and ends DST at 00:00 UTC, not at 01:00 UTC.
+ (Thanks to Roman Tudos.)
+
+ Changes affecting data format and code
+
+ zic's '-y YEARISTYPE' option is no longer documented. The TYPE
+ field of a Rule line should now be '-'; the old values 'even',
+ 'odd', 'uspres', 'nonpres', 'nonuspres' were already undocumented.
+ Although the implementation has not changed, these features do not
+ work in the default installation, they are not used in the data,
+ and they are now considered obsolescent.
+
+ zic now checks that two rules don't take effect at the same time.
+ (Thanks to Jon Skeet and Arthur David Olson.) Constraints on
+ simultaneity are now documented.
+
+ The two characters '%z' in a zone format now stand for the UTC
+ offset, e.g., '-07' for seven hours behind UTC and '+0530' for
+ five hours and thirty minutes ahead. This better supports time
+ zone abbreviations conforming to POSIX.1-2001 and later.
+
+ Changes affecting installed data files
+
+ Comments for America/Halifax and America/Glace_Bay have been improved.
+ (Thanks to Brian Inglis.)
+
+ Data entries have been simplified for Atlantic/Canary, Europe/Simferopol,
+ Europe/Sofia, and Europe/Tallinn. This yields slightly smaller
+ installed data files for Europe/Simferopol and Europe/Tallinn.
+ It does not affect timestamps. (Thanks to Howard Hinnant.)
+
+ Changes affecting code
+
+ zdump and zic no longer warn about valid time zone abbreviations
+ like '-05'.
+
+ Some Visual Studio 2013 warnings have been suppressed.
+ (Thanks to Kees Dekker.)
+
+ 'date' no longer sets the time of day and its -a, -d, -n and -t
+ options have been removed. Long obsolescent, the implementation
+ of these features had porting problems. Builders no longer need
+ to configure HAVE_ADJTIME, HAVE_SETTIMEOFDAY, or HAVE_UTMPX_H.
+ (Thanks to Kees Dekker for pointing out the problem.)
+
+ Changes affecting documentation
+
+ The Theory file mentions naming issues earlier, as these seem to be
+ poorly publicized (thanks to Gilmore Davidson for reporting the problem).
+
+ tz-link.htm mentions Time Zone Database Parser (thanks to Howard Hinnant).
+
+ Mention that Herbert Samuel introduced the term "Summer Time".
+
+
+Release 2015e - 2015-06-13 10:56:02 -0700
+
+ Changes affecting future time stamps
+
+ Morocco will suspend DST from 2015-06-14 03:00 through 2015-07-19 02:00,
+ not 06-13 and 07-18 as we had guessed. (Thanks to Milamber.)
+
+ Assume Cayman Islands will observe DST starting next year, using US rules.
+ Although it isn't guaranteed, it is the most likely.
+
+ Changes affecting data format
+
+ The file 'iso3166.tab' now uses UTF-8, so that its entries can better
+ spell the names of Åland Islands, Côte d'Ivoire, and Réunion.
+
+ Changes affecting code
+
+ When displaying data, tzselect converts it to the current locale's
+ encoding if the iconv command works. (Problem reported by random832.)
+
+ tzselect no longer mishandles Dominica, fixing a bug introduced
+ in Release 2014f. (Problem reported by Owen Leibman.)
+
+ zic -l no longer fails when compiled with -DTZDEFAULT=\"/etc/localtime\".
+ This fixes a bug introduced in Release 2014f.
+ (Problem reported by Leonardo Chiquitto.)
+
+
+Release 2015d - 2015-04-24 08:09:46 -0700
+
+ Changes affecting future time stamps
+
+ Egypt will not observe DST in 2015 and will consider canceling it
+ permanently. For now, assume no DST indefinitely.
+ (Thanks to Ahmed Nazmy and Tim Parenti.)
+
+ Changes affecting past time stamps
+
+ America/Whitehorse switched from UT -09 to -08 on 1967-05-28, not
+ 1966-07-01. Also, Yukon's time zone history is documented better.
+ (Thanks to Brian Inglis and Dennis Ferguson.)
+
+ Change affecting past and future time zone abbreviations
+
+ The abbreviations for Hawaii-Aleutian standard and daylight times
+ have been changed from HAST/HADT to HST/HDT, as per US Government
+ Printing Office style. This affects only America/Adak since 1983,
+ as America/Honolulu was already using the new style.
+
+ Changes affecting code
+
+ zic has some minor performance improvements.
+
+
+Release 2015c - 2015-04-11 08:55:55 -0700
+
+ Changes affecting future time stamps
+
+ Egypt's spring-forward transition is at 24:00 on April's last Thursday,
+ not 00:00 on April's last Friday. 2015's transition will therefore be on
+ Thursday, April 30 at 24:00, not Friday, April 24 at 00:00. Similar fixes
+ apply to 2026, 2037, 2043, etc. (Thanks to Steffen Thorsen.)
+
+ Changes affecting past time stamps
+
+ The following changes affect some pre-1991 Chile-related time stamps
+ in America/Santiago, Antarctica/Palmer, and Pacific/Easter.
+
+ The 1910 transition was January 10, not January 1.
+
+ The 1918 transition was September 10, not September 1.
+
+ The UT -04 time observed from 1932 to 1942 is now considered to
+ be standard time, not year-round DST.
+
+ Santiago observed DST (UT -03) from 1946-07-15 through
+ 1946-08-31, then reverted to standard time, then switched to -05
+ on 1947-04-01.
+
+ Assume transitions before 1968 were at 00:00, since we have no data
+ saying otherwise.
+
+ The spring 1988 transition was 1988-10-09, not 1988-10-02.
+ The fall 1990 transition was 1990-03-11, not 1990-03-18.
+
+ Assume no UTC offset change for Pacific/Easter on 1890-01-01,
+ and omit all transitions on Pacific/Easter from 1942 through 1946
+ since we have no data suggesting that they existed.
+
+ One more zone has been turned into a link, as it differed
+ from an existing zone only for older time stamps. As usual,
+ this change affects UTC offsets in pre-1970 time stamps only.
+ The zone's old contents have been moved to the 'backzone' file.
+ The affected zone is America/Montreal.
+
+ Changes affecting commentary
+
+ Mention the TZUpdater tool.
+
+ Mention "The Time Now". (Thanks to Brandon Ramsey.)
+
+
+Release 2015b - 2015-03-19 23:28:11 -0700
+
+ Changes affecting future time stamps
+
+ Mongolia will start observing DST again this year, from the last
+ Saturday in March at 02:00 to the last Saturday in September at 00:00.
+ (Thanks to Ganbold Tsagaankhuu.)
+
+ Palestine will start DST on March 28, not March 27. Also,
+ correct the fall 2014 transition from September 26 to October 24.
+ Adjust future predictions accordingly. (Thanks to Steffen Thorsen.)
+
+ Changes affecting past time stamps
+
+ The 1982 zone shift in Pacific/Easter has been corrected, fixing a 2015a
+ regression. (Thanks to Stuart Bishop for reporting the problem.)
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: America/Antigua, America/Cayman,
+ Pacific/Midway, and Pacific/Saipan.
+
+ Changes affecting time zone abbreviations
+
+ Correct the 1992-2010 DST abbreviation in Volgograd from "MSK" to "MSD".
+ (Thanks to Hank W.)
+
+ Changes affecting code
+
+ Fix integer overflow bug in reference 'mktime' implementation.
+ (Problem reported by Jörg Richter.)
+
+ Allow -Dtime_tz=time_t compilations, and allow -Dtime_tz=... libraries
+ to be used in the same executable as standard-library time_t functions.
+ (Problems reported by Bradley White.)
+
+ Changes affecting commentary
+
+ Cite the recent Mexican decree changing Quintana Roo's time zone.
+ (Thanks to Carlos Raúl Perasso.)
+
+ Likewise for the recent Chilean decree. (Thanks to Eduardo Romero Urra.)
+
+ Update info about Mars time.
+
+
+Release 2015a - 2015-01-29 22:35:20 -0800
+
+ Changes affecting future time stamps
+
+ The Mexican state of Quintana Roo, represented by America/Cancun,
+ will shift from Central Time with DST to Eastern Time without DST
+ on 2015-02-01 at 02:00. (Thanks to Steffen Thorsen and Gwillim Law.)
+
+ Chile will not change clocks in April or thereafter; its new standard time
+ will be its old daylight saving time. This affects America/Santiago,
+ Pacific/Easter, and Antarctica/Palmer. (Thanks to Juan Correa.)
+
+ New leap second 2015-06-30 23:59:60 UTC as per IERS Bulletin C 49.
+ (Thanks to Tim Parenti.)
+
+ Changes affecting past time stamps
+
+ Iceland observed DST in 1919 and 1921, and its 1939 fallback
+ transition was Oct. 29, not Nov. 29. Remove incorrect data from
+ Shanks about time in Iceland between 1837 and 1908.
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: Asia/Aden, Asia/Bahrain, Asia/Kuwait,
+ and Asia/Muscat.
+
+ Changes affecting code
+
+ tzalloc now scrubs time zone abbreviations compatibly with the way
+ that tzset always has, by replacing invalid bytes with '_' and by
+ shortening too-long abbreviations.
+
+ tzselect ports to POSIX awk implementations, no longer mishandles
+ POSIX TZ settings when GNU awk is used, and reports POSIX TZ
+ settings to the user. (Thanks to Stefan Kuhn.)
+
+ Changes affecting build procedure
+
+ 'make check' now checks for links to links in the data.
+ One such link (for Africa/Asmera) has been fixed.
+ (Thanks to Stephen Colebourne for pointing out the problem.)
+
+ Changes affecting commentary
+
+ The leapseconds file commentary now mentions the expiration date.
+ (Problem reported by Martin Burnicki.)
+
+ Update Mexican Library of Congress URL.
+
+
+Release 2014j - 2014-11-10 17:37:11 -0800
+
+ Changes affecting current and future time stamps
+
+ Turks & Caicos' switch from US eastern time to UT -04 year-round
+ did not occur on 2014-11-02 at 02:00. It's currently scheduled
+ for 2015-11-01 at 02:00. (Thanks to Chris Walton.)
+
+ Changes affecting past time stamps
+
+ Many pre-1989 time stamps have been corrected for Asia/Seoul and
+ Asia/Pyongyang, based on sources for the Korean-language Wikipedia
+ entry for time in Korea. (Thanks to Sanghyuk Jung.) Also, no
+ longer guess that Pyongyang mimicked Seoul time after World War II,
+ as this is politically implausible.
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: Africa/Addis_Ababa, Africa/Asmara,
+ Africa/Dar_es_Salaam, Africa/Djibouti, Africa/Kampala,
+ Africa/Mogadishu, Indian/Antananarivo, Indian/Comoro, and
+ Indian/Mayotte.
+
+ Changes affecting commentary
+
+ The commentary is less enthusiastic about Shanks as a source,
+ and is more careful to distinguish UT from UTC.
+
+
+Release 2014i - 2014-10-21 22:04:57 -0700
+
+ Changes affecting future time stamps
+
+ Pacific/Fiji will observe DST from 2014-11-02 02:00 to 2015-01-18 03:00.
+ (Thanks to Ken Rylander for the heads-up.) Guess that future
+ years will use a similar pattern.
+
+ A new Zone Pacific/Bougainville, for the part of Papua New Guinea
+ that plans to switch from UT +10 to +11 on 2014-12-28 at 02:00.
+ (Thanks to Kiley Walbom for the heads-up.)
+
+ Changes affecting time zone abbreviations
+
+ Since Belarus is not changing its clocks even though Moscow is,
+ the time zone abbreviation in Europe/Minsk is changing from FET
+ to its more-traditional value MSK on 2014-10-26 at 01:00.
+ (Thanks to Alexander Bokovoy for the heads-up about Belarus.)
+
+ The new abbreviation IDT stands for the pre-1976 use of UT +08 in
+ Indochina, to distinguish it better from ICT (+07).
+
+ Changes affecting past time stamps
+
+ Many time stamps have been corrected for Asia/Ho_Chi_Minh before 1976
+ (thanks to Trần Ngọc Quân for an indirect pointer to Trần Tiến Bình's
+ authoritative book). Asia/Ho_Chi_Minh has been added to
+ zone1970.tab, to give tzselect users in Vietnam two choices,
+ since north and south Vietnam disagreed after our 1970 cutoff.
+
+ Asia/Phnom_Penh and Asia/Vientiane have been turned into links, as
+ they differed from existing zones only for older time stamps. As
+ usual, these changes affect pre-1970 time stamps only. Their old
+ contents have been moved to the 'backzone' file.
+
+ Changes affecting code
+
+ The time-related library functions now set errno on failure, and
+ some crashes in the new tzalloc-related library functions have
+ been fixed. (Thanks to Christos Zoulas for reporting most of
+ these problems and for suggesting fixes.)
+
+ If USG_COMPAT is defined and the requested time stamp is standard time,
+ the tz library's localtime and mktime functions now set the extern
+ variable timezone to a value appropriate for that time stamp; and
+ similarly for ALTZONE, daylight saving time, and the altzone variable.
+ This change is a companion to the tzname change in 2014h, and is
+ designed to make timezone and altzone more compatible with tzname.
+
+ The tz library's functions now set errno to EOVERFLOW if they fail
+ because the result cannot be represented. ctime and ctime_r now
+ return NULL and set errno when a time stamp is out of range, rather
+ than having undefined behavior.
+
+ Some bugs associated with the new 2014g functions have been fixed.
+ This includes a bug that largely incapacitated the new functions
+ time2posix_z and posix2time_z. (Thanks to Christos Zoulas.)
+ It also includes some uses of uninitialized variables after tzalloc.
+ The new code uses the standard type 'ssize_t', which the Makefile
+ now gives porting advice about.
+
+ Changes affecting commentary
+
+ Updated URLs for NRC Canada (thanks to Matt Johnson and Brian Inglis).
+
+
+Release 2014h - 2014-09-25 18:59:03 -0700
+
+ Changes affecting past time stamps
+
+ America/Jamaica's 1974 spring-forward transition was Jan. 6, not Apr. 28.
+
+ Shanks says Asia/Novokuznetsk switched from LMT (not "NMT") on 1924-05-01,
+ not 1920-01-06. The old entry was based on a misinterpretation of Shanks.
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: Africa/Blantyre, Africa/Bujumbura,
+ Africa/Gaborone, Africa/Harare, Africa/Kigali, Africa/Lubumbashi,
+ Africa/Lusaka, Africa/Maseru, and Africa/Mbabane.
+
+ Changes affecting code
+
+ zdump -V and -v now output gmtoff= values on all platforms,
+ not merely on platforms defining TM_GMTOFF.
+
+ The tz library's localtime and mktime functions now set tzname to a value
+ appropriate for the requested time stamp, and zdump now uses this
+ on platforms not defining TM_ZONE, fixing a 2014g regression.
+ (Thanks to Tim Parenti for reporting the problem.)
+
+ The tz library no longer sets tzname if localtime or mktime fails.
+
+ zdump -c no longer mishandles transitions near year boundaries.
+ (Thanks to Tim Parenti for reporting the problem.)
+
+ An access to uninitialized data has been fixed.
+ (Thanks to Jörg Richter for reporting the problem.)
+
+ When THREAD_SAFE is defined, the code ports to the C11 memory model.
+ A memory leak has been fixed if ALL_STATE and THREAD_SAFE are defined
+ and two threads race to initialize data used by gmtime-like functions.
+ (Thanks to Andy Heninger for reporting the problems.)
+
+ Changes affecting build procedure
+
+ 'make check' now checks better for properly-sorted data.
+
+ Changes affecting documentation and commentary
+
+ zdump's gmtoff=N output is now documented, and its isdst=D output
+ is now documented to possibly output D values other than 0 or 1.
+
+ zdump -c's treatment of years is now documented to use the
+ Gregorian calendar and Universal Time without leap seconds,
+ and its behavior at cutoff boundaries is now documented better.
+ (Thanks to Arthur David Olson and Tim Parenti for reporting the problems.)
+
+ Programs are now documented to use the proleptic Gregorian calendar.
+ (Thanks to Alan Barrett for the suggestion.)
+
+ Fractional-second GMT offsets have been documented for civil time
+ in 19th-century Chennai, Jakarta, and New York.
+
+
+Release 2014g - 2014-08-28 12:31:23 -0700
+
+ Changes affecting future time stamps
+
+ Turks & Caicos is switching from US eastern time to UT -04
+ year-round, modeled as a switch on 2014-11-02 at 02:00.
+ [As noted in 2014j, this switch was later delayed.]
+
+ Changes affecting past time stamps
+
+ Time in Russia or the USSR before 1926 or so has been corrected by
+ a few seconds in the following zones: Asia/Irkutsk,
+ Asia/Krasnoyarsk, Asia/Omsk, Asia/Samarkand, Asia/Tbilisi,
+ Asia/Vladivostok, Asia/Yakutsk, Europe/Riga, Europe/Samara. For
+ Asia/Yekaterinburg the correction is a few minutes. (Thanks to
+ Vladimir Karpinsky.)
+
+ The Portuguese decree of 1911-05-26 took effect on 1912-01-01.
+ This affects 1911 time stamps in Africa/Bissau, Africa/Luanda,
+ Atlantic/Azores, and Atlantic/Madeira. Also, Lisbon's pre-1912
+ GMT offset was -0:36:45 (rounded from -0:36:44.68), not -0:36:32.
+ (Thanks to Stephen Colebourne for pointing to the decree.)
+
+ Asia/Dhaka ended DST on 2009-12-31 at 24:00, not 23:59.
+
+ A new file 'backzone' contains data which may appeal to
+ connoisseurs of old time stamps, although it is out of scope for
+ the tz database, is often poorly sourced, and contains some data
+ that is known to be incorrect. The new file is not recommended
+ for ordinary use and its entries are not installed by default.
+ (Thanks to Lester Caine for the high-quality Jersey, Guernsey, and
+ Isle of Man entries.)
+
+ Some more zones have been turned into links, when they differed
+ from existing zones only for older time stamps. As usual,
+ these changes affect UTC offsets in pre-1970 time stamps only.
+ Their old contents have been moved to the 'backzone' file.
+ The affected zones are: Africa/Bangui, Africa/Brazzaville,
+ Africa/Douala, Africa/Kinshasa, Africa/Libreville, Africa/Luanda,
+ Africa/Malabo, Africa/Niamey, and Africa/Porto-Novo.
+
+ Changes affecting code
+
+ Unless NETBSD_INSPIRED is defined to 0, the tz library now
+ supplies functions for creating and using objects that represent
+ time zones. The new functions are tzalloc, tzfree, localtime_rz,
+ mktime_z, and (if STD_INSPIRED is also defined) posix2time_z and
+ time2posix_z. They are intended for performance: for example,
+ localtime_rz (unlike localtime_r) is trivially thread-safe without
+ locking. (Thanks to Christos Zoulas for proposing NetBSD-inspired
+ functions, and to Alan Barrett and Jonathan Lennox for helping to
+ debug the change.)
+
+ zdump now builds with the tz library unless USE_LTZ is defined to 0,
+ This lets zdump use tz features even if the system library lacks them.
+ To build zdump with the system library, use 'make CFLAGS=-DUSE_LTZ=0
+ TZDOBJS=zdump.o CHECK_TIME_T_ALTERNATIVES='.
+
+ zdump now uses localtime_rz if available, as it's significantly faster,
+ and it can help zdump better diagnose invalid time zone names.
+ Define HAVE_LOCALTIME_RZ to 0 to suppress this. HAVE_LOCALTIME_RZ
+ defaults to 1 if NETBSD_INSPIRED && USE_LTZ. When localtime_rz is
+ not available, zdump now uses localtime_r and tzset if available,
+ as this is a bit cleaner and faster than plain localtime. Compile
+ with -DHAVE_LOCALTIME_R=0 and/or -DHAVE_TZSET=0 if your system
+ lacks these two functions.
+
+ If THREAD_SAFE is defined to 1, the tz library is now thread-safe.
+ Although not needed for tz's own applications, which are single-threaded,
+ this supports POSIX better if the tz library is used in multithreaded apps.
+
+ Some crashes have been fixed when zdump or the tz library is given
+ invalid or outlandish input.
+
+ The tz library no longer mishandles leap seconds on platforms with
+ unsigned time_t in time zones that lack ordinary transitions after 1970.
+
+ The tz code now attempts to infer TM_GMTOFF and TM_ZONE if not
+ already defined, to make it easier to configure on common platforms.
+ Define NO_TM_GMTOFF and NO_TM_ZONE to suppress this.
+
+ Unless the new macro UNINIT_TRAP is defined to 1, the tz code now
+ assumes that reading uninitialized memory yields garbage values
+ but does not cause other problems such as traps.
+
+ If TM_GMTOFF is defined and UNINIT_TRAP is 0, mktime is now
+ more likely to guess right for ambiguous time stamps near
+ transitions where tm_isdst does not change.
+
+ If HAVE_STRFTIME_L is defined to 1, the tz library now defines
+ strftime_l for compatibility with recent versions of POSIX.
+ Only the C locale is supported, though. HAVE_STRFTIME_L defaults
+ to 1 on recent POSIX versions, and to 0 otherwise.
+
+ tzselect -c now uses a hybrid distance measure that works better
+ in Africa. (Thanks to Alan Barrett for noting the problem.)
+
+ The C source code now ports to NetBSD when GCC_DEBUG_FLAGS is used,
+ or when time_tz is defined.
+
+ When HAVE_UTMPX_H is set the 'date' command now builds on systems
+ whose <utmpx.h> file does not define WTMPX_FILE, and when setting
+ the date it updates the wtmpx file if _PATH_WTMPX is defined.
+ This affects GNU/Linux and similar systems.
+
+ For easier maintenance later, some C code has been simplified,
+ some lint has been removed, and the code has been tweaked so that
+ plain 'make' is more likely to work.
+
+ The C type 'bool' is now used for boolean values, instead of 'int'.
+
+ The long-obsolete LOCALE_HOME code has been removed.
+
+ The long-obsolete 'gtime' function has been removed.
+
+ Changes affecting build procedure
+
+ 'zdump' no longer links in ialloc.o, as it's not needed.
+
+ 'make check_time_t_alternatives' no longer assumes GNU diff.
+
+ Changes affecting distribution tarballs
+
+ The files checktab.awk and zoneinfo2tdf.pl are now distributed in
+ the tzdata tarball instead of the tzcode tarball, since they help
+ maintain the data. The NEWS and Theory files are now also
+ distributed in the tzdata tarball, as they're relevant for data.
+ (Thanks to Alan Barrett for pointing this out.) Also, the
+ leapseconds.awk file is no longer distributed in the tzcode
+ tarball, since it belongs in the tzdata tarball (where 2014f
+ inadvertently also distributed it).
+
+ Changes affecting documentation and commentary
+
+ A new file CONTRIBUTING is distributed. (Thanks to Tim Parenti for
+ suggesting a CONTRIBUTING file, and to Tony Finch and Walter Harms
+ for debugging it.)
+
+ The man pages have been updated to use function prototypes,
+ to document thread-safe variants like localtime_r, and to document
+ the NetBSD-inspired functions tzalloc, tzfree, localtime_rz, and
+ mktime_z.
+
+ The fields in Link lines have been renamed to be more descriptive
+ and more like the parameters of 'ln'. LINK-FROM has become TARGET,
+ and LINK-TO has become LINK-NAME.
+
+ tz-link.htm mentions the IETF's tzdist working group; Windows
+ Runtime etc. (thanks to Matt Johnson); and HP-UX's tztab.
+
+ Some broken URLs have been fixed in the commentary. (Thanks to
+ Lester Caine.)
+
+ Commentary about Philippines DST has been updated, and commentary
+ on pre-1970 time in India has been added.
+
+
+Release 2014f - 2014-08-05 17:42:36 -0700
+
+ Changes affecting future time stamps
+
+ Russia will subtract an hour from most of its time zones on 2014-10-26
+ at 02:00 local time. (Thanks to Alexander Krivenyshev.)
+ There are a few exceptions: Magadan Oblast (Asia/Magadan) and Zabaykalsky
+ Krai are subtracting two hours; conversely, Chukotka Autonomous Okrug
+ (Asia/Anadyr), Kamchatka Krai (Asia/Kamchatka), Kemerovo Oblast
+ (Asia/Novokuznetsk), and the Samara Oblast and the Udmurt Republic
+ (Europe/Samara) are not changing their clocks. The changed zones are
+ Europe/Kaliningrad, Europe/Moscow, Europe/Simferopol, Europe/Volgograd,
+ Asia/Yekaterinburg, Asia/Omsk, Asia/Novosibirsk, Asia/Krasnoyarsk,
+ Asia/Irkutsk, Asia/Yakutsk, Asia/Vladivostok, Asia/Khandyga,
+ Asia/Sakhalin, and Asia/Ust-Nera; Asia/Magadan will have two hours
+ subtracted; and Asia/Novokuznetsk's time zone abbreviation is affected,
+ but not its UTC offset. Two zones are added: Asia/Chita (split
+ from Asia/Yakutsk, and also with two hours subtracted) and
+ Asia/Srednekolymsk (split from Asia/Magadan, but with only one hour
+ subtracted). (Thanks to Tim Parenti for much of the above.)
+
+ Changes affecting time zone abbreviations
+
+ Australian eastern time zone abbreviations are now AEST/AEDT not EST,
+ and similarly for the other Australian zones. That is, for eastern
+ standard and daylight saving time the abbreviations are AEST and AEDT
+ instead of the former EST for both; similarly, ACST/ACDT, ACWST/ACWDT,
+ and AWST/AWDT are now used instead of the former CST, CWST, and WST.
+ This change does not affect UTC offsets, only time zone abbreviations.
+ (Thanks to Rich Tibbett and many others.)
+
+ Asia/Novokuznetsk shifts from NOVT to KRAT (remaining on UT +07)
+ effective 2014-10-26 at 02:00 local time.
+
+ The time zone abbreviation for Xinjiang Time (observed in Ürümqi)
+ has been changed from URUT to XJT. (Thanks to Luther Ma.)
+
+ Prefer MSK/MSD for Moscow time in Russia, even in other cities.
+ Similarly, prefer EET/EEST for eastern European time in Russia.
+
+ Change time zone abbreviations in (western) Samoa to use "ST" and
+ "DT" suffixes, as this is more likely to match common practice.
+ Prefix "W" to (western) Samoa time when its standard-time offset
+ disagrees with that of American Samoa.
+
+ America/Metlakatla now uses PST, not MeST, to abbreviate its time zone.
+
+ Time zone abbreviations have been updated for Japan's two time
+ zones used 1896-1937. JWST now stands for Western Standard
+ Time, and JCST for Central Standard Time (formerly this was CJT).
+ These abbreviations are now used for time in Korea, Taiwan,
+ and Sakhalin while controlled by Japan.
+
+ Changes affecting past time stamps
+
+ China's five zones have been simplified to two, since the post-1970
+ differences in the other three seem to have been imaginary. The
+ zones Asia/Harbin, Asia/Chongqing, and Asia/Kashgar have been
+ removed; backwards-compatibility links still work, albeit with
+ different behaviors for time stamps before May 1980. Asia/Urumqi's
+ 1980 transition to UT +08 has been removed, so that it is now at
+ +06 and not +08. (Thanks to Luther Ma and to Alois Treindl;
+ Treindl sent helpful translations of two papers by Guo Qingsheng.)
+
+ Some zones have been turned into links, when they differed from existing
+ zones only for older UTC offsets where data entries were likely invented.
+ These changes affect UTC offsets in pre-1970 time stamps only. This is
+ similar to the change in release 2013e, except this time for western
+ Africa. The affected zones are: Africa/Bamako, Africa/Banjul,
+ Africa/Conakry, Africa/Dakar, Africa/Freetown, Africa/Lome,
+ Africa/Nouakchott, Africa/Ouagadougou, Africa/Sao_Tome, and
+ Atlantic/St_Helena. This also affects the backwards-compatibility
+ link Africa/Timbuktu. (Thanks to Alan Barrett, Stephen Colebourne,
+ Tim Parenti, and David Patte for reporting problems in earlier
+ versions of this change.)
+
+ Asia/Shanghai's pre-standard-time UT offset has been changed from
+ 8:05:57 to 8:05:43, the location of Xujiahui Observatory. Its
+ transition to standard time has been changed from 1928 to 1901.
+
+ Asia/Taipei switched to JWST on 1896-01-01, then to JST on 1937-10-01,
+ then to CST on 1945-09-21 at 01:00, and did not observe DST in 1945.
+ In 1946 it observed DST from 05-15 through 09-30; in 1947
+ from 04-15 through 10-31; and in 1979 from 07-01 through 09-30.
+ (Thanks to Yu-Cheng Chuang.)
+
+ Asia/Riyadh's transition to standard time is now 1947-03-14, not 1950.
+
+ Europe/Helsinki's 1942 fall-back transition was 10-04 at 01:00, not
+ 10-03 at 00:00. (Thanks to Konstantin Hyppönen.)
+
+ Pacific/Pago_Pago has been changed from UT -11:30 to -11 for the
+ period from 1911 to 1950.
+
+ Pacific/Chatham has been changed to New Zealand standard time plus
+ 45 minutes for the period before 1957, reflecting a 1956 remark in
+ the New Zealand parliament.
+
+ Europe/Budapest has several pre-1946 corrections: in 1918 the transition
+ out of DST was on 09-16, not 09-29; in 1919 it was on 11-24, not 09-15; in
+ 1945 it was on 11-01, not 11-03; in 1941 the transition to DST was 04-08
+ not 04-06 at 02:00; and there was no DST in 1920.
+
+ Africa/Accra is now assumed to have observed DST from 1920 through 1935.
+
+ Time in Russia before 1927 or so has been corrected by a few seconds in
+ the following zones: Europe/Moscow, Asia/Irkutsk, Asia/Tbilisi,
+ Asia/Tashkent, Asia/Vladivostok, Asia/Yekaterinburg, Europe/Helsinki, and
+ Europe/Riga. Also, Moscow's location has been changed to its Kilometer 0
+ point. (Thanks to Vladimir Karpinsky for the Moscow changes.)
+
+ Changes affecting data format
+
+ A new file 'zone1970.tab' supersedes 'zone.tab' in the installed data.
+ The new file's extended format allows multiple country codes per zone.
+ The older file is still installed but is deprecated; its format is
+ not changing and it will still be distributed for a while, but new
+ applications should use the new file.
+
+ The new file format simplifies maintenance of obscure locations.
+ To test this, it adds coverage for the Crozet Islands and the
+ Scattered Islands. (Thanks to Tobias Conradi and Antoine Leca.)
+
+ The file 'iso3166.tab' is planned to switch from ASCII to UTF-8.
+ It is still ASCII now, but commentary about the switch has been added.
+ The new file 'zone1970.tab' already uses UTF-8.
+
+ Changes affecting code
+
+ 'localtime', 'mktime', etc. now use much less stack space if ALL_STATE
+ is defined. (Thanks to Elliott Hughes for reporting the problem.)
+
+ 'zic' no longer mishandles input when ignoring case in locales that
+ are not compatible with English, e.g., unibyte Turkish locales when
+ compiled with HAVE_GETTEXT.
+
+ Error diagnostics of 'zic' and 'yearistype' have been reworded so that
+ they no longer use ASCII '-' as if it were a dash.
+
+ 'zic' now rejects output file names that contain '.' or '..' components.
+ (Thanks to Tim Parenti for reporting the problem.)
+
+ 'zic -v' now warns about output file names that do not follow
+ POSIX rules, or that contain a digit or '.'. (Thanks to Arthur
+ David Olson for starting the ball rolling on this.)
+
+ Some lint has been removed when using GCC_DEBUG_FLAGS with GCC 4.9.0.
+
+ Changes affecting build procedure
+
+ 'zic' no longer links in localtime.o and asctime.o, as they're not needed.
+ (Thanks to John Cochran.)
+
+ Changes affecting documentation and commentary
+
+ The 'Theory' file documents legacy names, the longstanding
+ exceptions to the POSIX-inspired file name rules.
+
+ The 'zic' documentation clarifies the role of time types when
+ interpreting dates. (Thanks to Arthur David Olson.)
+
+ Documentation and commentary now prefer UTF-8 to US-ASCII,
+ allowing the use of proper accents in foreign words and names.
+ Code and data have not changed because of this. (Thanks to
+ Garrett Wollman, Ian Abbott, and Guy Harris for helping to debug
+ this.)
+
+ Non-HTML documentation and commentary now use plain-text URLs instead of
+ HTML insertions, and are more consistent about bracketing URLs when they
+ are not already surrounded by white space. (Thanks to suggestions by
+ Steffen Nurpmeso.)
+
+ There is new commentary about Xujiahui Observatory, the five time-zone
+ project in China from 1918 to 1949, timekeeping in Japanese-occupied
+ Shanghai, and Tibet Time in the 1950s. The sharp-eyed can spot the
+ warlord Jin Shuren in the data.
+
+ Commentary about the coverage of each Russian zone has been standardized.
+ (Thanks to Tim Parenti).
+
+ There is new commentary about contemporary timekeeping in Ethiopia.
+
+ Obsolete comments about a 2007 proposal for DST in Kuwait has been removed.
+
+ There is new commentary about time in Poland in 1919.
+
+ Proper credit has been given to DST inventor George Vernon Hudson.
+
+ Commentary about time in Metlakatla, AK and Resolute, NU has been
+ improved, with a new source for the former.
+
+ In zone.tab, Pacific/Easter no longer mentions Salas y Gómez, as it
+ is uninhabited.
+
+ Commentary about permanent Antarctic bases has been updated.
+
+ Several typos have been corrected. (Thanks to Tim Parenti for
+ contributing some of these fixes.)
+
+ tz-link.htm now mentions the JavaScript libraries Moment Timezone,
+ TimezoneJS.Date, Walltime-js, and Timezone. (Thanks to a heads-up
+ from Matt Johnson.) Also, it mentions the Go 'latlong' package.
+ (Thanks to a heads-up from Dirkjan Ochtman.)
+
+ The files usno1988, usno1989, usno1989a, usno1995, usno1997, and usno1998
+ have been removed. These obsolescent US Naval Observatory entries were no
+ longer helpful for maintenance. (Thanks to Tim Parenti for the suggestion.)
+
+
+Release 2014e - 2014-06-12 21:53:52 -0700
+
+ Changes affecting near-future time stamps
+
+ Egypt's 2014 Ramadan-based transitions are June 26 and July 31 at 24:00.
+ (Thanks to Imed Chihi.) Guess that from 2015 on Egypt will temporarily
+ switch to standard time at 24:00 the last Thursday before Ramadan, and
+ back to DST at 00:00 the first Friday after Ramadan.
+
+ Similarly, Morocco's are June 28 at 03:00 and August 2 at 02:00. (Thanks
+ to Milamber Space Network.) Guess that from 2015 on Morocco will
+ temporarily switch to standard time at 03:00 the last Saturday before
+ Ramadan, and back to DST at 02:00 the first Saturday after Ramadan.
+
+ Changes affecting past time stamps
+
+ The abbreviation "MSM" (Moscow Midsummer Time) is now used instead of
+ "MSD" for Moscow's double daylight time in summer 1921. Also, a typo
+ "VLASST" has been repaired to be "VLAST" for Vladivostok summer time
+ in 1991. (Thanks to Hank W. for reporting the problems.)
+
+ Changes affecting commentary
+
+ tz-link.htm now cites RFC 7265 for jCal, mentions PTP and the
+ draft CalDAV extension, updates URLs for TSP, TZInfo, IATA, and
+ removes stale pointers to World Time Explorer and WORLDTIME.
+
+
+Release 2014d - 2014-05-27 21:34:40 -0700
+
+ Changes affecting code
+
+ zic no longer generates files containing time stamps before the Big Bang.
+ This works around GNOME bug 730332
+ <https://bugzilla.gnome.org/show_bug.cgi?id=730332>.
+ (Thanks to Leonardo Chiquitto for reporting the bug, and to
+ Arthur David Olson and James Cloos for suggesting improvements to the fix.)
+
+ Changes affecting documentation
+
+ tz-link.htm now mentions GNOME.
+
+
+Release 2014c - 2014-05-13 07:44:13 -0700
+
+ Changes affecting near-future time stamps
+
+ Egypt observes DST starting 2014-05-15 at 24:00.
+ (Thanks to Ahmad El-Dardiry and Gunther Vermier.)
+ Details have not been announced, except that DST will not be observed
+ during Ramadan. Guess that DST will stop during the same Ramadan dates as
+ Morocco, and that Egypt's future spring and fall transitions will be the
+ same as 2010 when it last observed DST, namely April's last Friday at
+ 00:00 to September's last Thursday at 23:00 standard time. Also, guess
+ that Ramadan transitions will be at 00:00 standard time.
+
+ Changes affecting code
+
+ zic now generates transitions for minimum time values, eliminating guesswork
+ when handling low-valued time stamps. (Thanks to Arthur David Olson.)
+
+ Port to Cygwin sans glibc. (Thanks to Arthur David Olson.)
+
+ Changes affecting commentary and documentation
+
+ Remove now-confusing comment about Jordan. (Thanks to Oleksii Nochovnyi.)
+
+
+Release 2014b - 2014-03-24 21:28:50 -0700
+
+ Changes affecting near-future time stamps
+
+ Crimea switches to Moscow time on 2014-03-30 at 02:00 local time.
+ (Thanks to Alexander Krivenyshev.) Move its zone.tab entry from UA to RU.
+
+ New entry for Troll station, Antarctica. (Thanks to Paul-Inge Flakstad and
+ Bengt-Inge Larsson.) This is currently an approximation; a better version
+ will require the zic and localtime fixes mentioned below, and the plan is
+ to wait for a while until at least the zic fixes propagate.
+
+ Changes affecting code
+
+ 'zic' and 'localtime' no longer reject locations needing four transitions
+ per year for the foreseeable future. (Thanks to Andrew Main (Zefram).)
+ Also, 'zic' avoids some unlikely failures due to integer overflow.
+
+ Changes affecting build procedure
+
+ 'make check' now detects Rule lines defined but never used.
+ The NZAQ rules, an instance of this problem, have been removed.
+
+ Changes affecting commentary and documentation
+
+ Fix Tuesday/Thursday typo in description of time in Israel.
+ (Thanks to Bert Katz via Pavel Kharitonov and Mike Frysinger.)
+
+ Microsoft Windows 8.1 doesn't support tz database names. (Thanks
+ to Donald MacQueen.) Instead, the Microsoft Windows Store app
+ library supports them.
+
+ Add comments about Johnston Island time in the 1960s.
+ (Thanks to Lyle McElhaney.)
+
+ Morocco's 2014 DST start will be as predicted.
+ (Thanks to Sebastien Willemijns.)
+
+
+Release 2014a - 2014-03-07 23:30:29 -0800
+
+ Changes affecting near-future time stamps
+
+ Turkey begins DST on 2014-03-31, not 03-30. (Thanks to Faruk Pasin for
+ the heads-up, and to Tim Parenti for simplifying the update.)
+
+ Changes affecting past time stamps
+
+ Fiji ended DST on 2014-01-19 at 02:00, not the previously-scheduled 03:00.
+ (Thanks to Steffen Thorsen.)
+
+ Ukraine switched from Moscow to Eastern European time on 1990-07-01
+ (not 1992-01-01), and observed DST during the entire next winter.
+ (Thanks to Vladimir in Moscow via Alois Treindl.)
+
+ In 1988 Israel observed DST from 04-10 to 09-04, not 04-09 to 09-03.
+ (Thanks to Avigdor Finkelstein.)
+
+ Changes affecting code
+
+ A uninitialized-storage bug in 'localtime' has been fixed.
+ (Thanks to Logan Chien.)
+
+ Changes affecting the build procedure
+
+ The settings for 'make check_web' now default to Ubuntu 13.10.
+
+ Changes affecting commentary and documentation
+
+ The boundary of the US Pacific time zone is given more accurately.
+ (Thanks to Alan Mintz.)
+
+ Chile's 2014 DST will be as predicted. (Thanks to José Miguel Garrido.)
+
+ Paraguay's 2014 DST will be as predicted. (Thanks to Carlos Raúl Perasso.)
+
+ Better descriptions of countries with same time zone history as
+ Trinidad and Tobago since 1970. (Thanks to Alan Barrett for suggestion.)
+
+ Several changes affect tz-link.htm, the main web page.
+
+ Mention Time.is (thanks to Even Scharning) and WX-now (thanks to
+ David Braverman).
+
+ Mention xCal (Internet RFC 6321) and jCal.
+
+ Microsoft has some support for tz database names.
+
+ CLDR data formats include both XML and JSON.
+
+ Mention Maggiolo's map of solar vs standard time.
+ (Thanks to Arthur David Olson.)
+
+ Mention TZ4Net. (Thanks to Matt Johnson.)
+
+ Mention the timezone-olson Haskell package.
+
+ Mention zeitverschiebung.net. (Thanks to Martin Jäger.)
+
+ Remove moribund links to daylight-savings-time.info and to
+ Simple Timer + Clocks.
+
+ Update two links. (Thanks to Oscar van Vlijmen.)
+
+ Fix some formatting glitches, e.g., remove random newlines from
+ abbr elements' title attributes.
+
+
+Release 2013i - 2013-12-17 07:25:23 -0800
+
+ Changes affecting near-future time stamps:
+
+ Jordan switches back to standard time at 00:00 on December 20, 2013.
+ The 2006-2011 transition schedule is planned to resume in 2014.
+ (Thanks to Steffen Thorsen.)
+
+ Changes affecting past time stamps:
+
+ In 2004, Cuba began DST on March 28, not April 4.
+ (Thanks to Steffen Thorsen.)
+
+ Changes affecting code
+
+ The compile-time flag NOSOLAR has been removed, as nowadays the
+ benefit of slightly shrinking runtime table size is outweighed by the
+ cost of disallowing potential future updates that exceed old limits.
+
+ Changes affecting documentation and commentary
+
+ The files solar87, solar88, and solar89 are no longer distributed.
+ They were a negative experiment - that is, a demonstration that
+ tz data can represent solar time only with some difficulty and error.
+ Their presence in the distribution caused confusion, as Riyadh
+ civil time was generally not solar time in those years.
+
+ tz-link.htm now mentions Noda Time. (Thanks to Matt Johnson.)
+
+
+Release 2013h - 2013-10-25 15:32:32 -0700
+
+ Changes affecting current and future time stamps:
+
+ Libya has switched its UT offset back to +02 without DST, instead
+ of +01 with DST. (Thanks to Even Scharning.)
+
+ Western Sahara (Africa/El_Aaiun) uses Morocco's DST rules.
+ (Thanks to Gwillim Law.)
+
+ Changes affecting future time stamps:
+
+ Acre and (we guess) western Amazonas will switch from UT -04 to -05
+ on 2013-11-10. This affects America/Rio_Branco and America/Eirunepe.
+ (Thanks to Steffen Thorsen.)
+
+ Add entries for DST transitions in Morocco in the year 2038.
+ This avoids some year-2038 glitches introduced in 2013g.
+ (Thanks to Yoshito Umaoka for reporting the problem.)
+
+ Changes affecting API
+
+ The 'tzselect' command no longer requires the 'select' command,
+ and should now work with /bin/sh on more platforms. It also works
+ around a bug in BusyBox awk before version 1.21.0. (Thanks to
+ Patrick 'P. J.' McDermott and Alan Barrett.)
+
+ Changes affecting code
+
+ Fix localtime overflow bugs with 32-bit unsigned time_t.
+
+ zdump no longer assumes sscanf returns maximal values on overflow.
+
+ Changes affecting the build procedure
+
+ The builder can specify which programs to use, if any, instead of
+ 'ar' and 'ranlib', and libtz.a is now built locally before being
+ installed. (Thanks to Michael Forney.)
+
+ A dependency typo in the 'zdump' rule has been fixed.
+ (Thanks to Andrew Paprocki.)
+
+ The Makefile has been simplified by assuming that 'mkdir -p' and 'cp -f'
+ work as specified by POSIX.2-1992 or later; this is portable nowadays.
+
+ 'make clean' no longer removes 'leapseconds', since it's
+ host-independent and is part of the distribution.
+
+ The unused makefile macros TZCSRCS, TZDSRCS, DATESRCS have been removed.
+
+ Changes affecting documentation and commentary
+
+ tz-link.htm now mentions TC TIMEZONE's draft time zone service protocol
+ (thanks to Mike Douglass) and TimezoneJS.Date (thanks to Jim Fehrle).
+
+ Update URLs in tz-link page. Add URLs for Microsoft Windows, since
+ 8.1 introduces tz support. Remove URLs for Tru64 and UnixWare (no
+ longer maintained) and for old advisories. SOFA now does C.
+
+Release 2013g - 2013-09-30 21:08:26 -0700
+
+ Changes affecting current and near-future time stamps
+
+ Morocco now observes DST from the last Sunday in March to the last
+ Sunday in October, not April to September respectively. (Thanks
+ to Steffen Thorsen.)
+
+ Changes affecting 'zic'
+
+ 'zic' now runs on platforms that lack both hard links and symlinks.
+ (Thanks to Theo Veenker for reporting the problem, for MinGW.)
+ Also, fix some bugs on platforms that lack hard links but have symlinks.
+
+ 'zic -v' again warns that Asia/Tehran has no POSIX environment variable
+ to predict the far future, fixing a bug introduced in 2013e.
+
+ Changes affecting the build procedure
+
+ The 'leapseconds' file is again put into the tzdata tarball.
+ Also, 'leapseconds.awk', so tzdata is self-contained. (Thanks to
+ Matt Burgess and Ian Abbott.) The timestamps of these and other
+ dependent files in tarballs are adjusted more consistently.
+
+ Changes affecting documentation and commentary
+
+ The README file is now part of the data tarball as well as the code.
+ It now states that files are public domain unless otherwise specified.
+ (Thanks to Andrew Main (Zefram) for asking for clarifications.)
+ Its details about the 1989 release moved to a place of honor near
+ the end of NEWS.
+
+
+Release 2013f - 2013-09-24 23:37:36 -0700
+
+ Changes affecting near-future time stamps
+
+ Tocantins will very likely not observe DST starting this spring.
+ (Thanks to Steffen Thorsen.)
+
+ Jordan will likely stay at UT +03 indefinitely, and will not fall
+ back this fall.
+
+ Palestine will fall back at 00:00, not 01:00. (Thanks to Steffen Thorsen.)
+
+ Changes affecting API
+
+ The types of the global variables 'timezone' and 'altzone' (if present)
+ have been changed back to 'long'. This is required for 'timezone'
+ by POSIX, and for 'altzone' by common practice, e.g., Solaris 11.
+ These variables were originally 'long' in the tz code, but were
+ mistakenly changed to 'time_t' in 1987; nobody reported the
+ incompatibility until now. The difference matters on x32, where
+ 'long' is 32 bits and 'time_t' is 64. (Thanks to Elliott Hughes.)
+
+ Changes affecting the build procedure
+
+ Avoid long strings in leapseconds.awk to work around a mawk bug.
+ (Thanks to Cyril Baurand.)
+
+ Changes affecting documentation and commentary
+
+ New file 'NEWS' that contains release notes like this one.
+
+ Paraguay's law does not specify DST transition time; 00:00 is customary.
+ (Thanks to Waldemar Villamayor-Venialbo.)
+
+ Minor capitalization fixes.
+
+ Changes affecting version-control only
+
+ The experimental GitHub repository now contains annotated and
+ signed tags for recent releases, e.g., '2013e' for Release 2013e.
+ Releases are tagged starting with 2012e; earlier releases were
+ done differently, and tags would either not have a simple name or
+ not exactly match what was released.
+
+ 'make set-timestamps' is now simpler and a bit more portable.
+
+
+Release 2013e - 2013-09-19 23:50:04 -0700
+
+ Changes affecting near-future time stamps
+
+ This year Fiji will start DST on October 27, not October 20.
+ (Thanks to David Wheeler for the heads-up.) For now, guess that
+ Fiji will continue to spring forward the Sunday before the fourth
+ Monday in October.
+
+ Changes affecting current and future time zone abbreviations
+
+ Use WIB/WITA/WIT rather than WIT/CIT/EIT for alphabetic Indonesian
+ time zone abbreviations since 1932. (Thanks to George Ziegler,
+ Priyadi Iman Nurcahyo, Zakaria, Jason Grimes, Martin Pitt, and
+ Benny Lin.) This affects Asia/Dili, Asia/Jakarta, Asia/Jayapura,
+ Asia/Makassar, and Asia/Pontianak.
+
+ Use ART (UT -03, standard time), rather than WARST (also -03, but
+ daylight saving time) for San Luis, Argentina since 2009.
+
+ Changes affecting Godthåb time stamps after 2037 if version mismatch
+
+ Allow POSIX-like TZ strings where the transition time's hour can
+ range from -167 through 167, instead of the POSIX-required 0
+ through 24. E.g., TZ='FJT-12FJST,M10.3.1/146,M1.3.4/75' for the
+ new Fiji rules. This is a more-compact way to represent
+ far-future time stamps for America/Godthab, America/Santiago,
+ Antarctica/Palmer, Asia/Gaza, Asia/Hebron, Asia/Jerusalem,
+ Pacific/Easter, and Pacific/Fiji. Other zones are unaffected by
+ this change. (Derived from a suggestion by Arthur David Olson.)
+
+ Allow POSIX-like TZ strings where daylight saving time is in
+ effect all year. E.g., TZ='WART4WARST,J1/0,J365/25' for Western
+ Argentina Summer Time all year. This supports a more-compact way
+ to represent the 2013d data for America/Argentina/San_Luis.
+ Because of the change for San Luis noted above this change does not
+ affect the current data. (Thanks to Andrew Main (Zefram) for
+ suggestions that improved this change.)
+
+ Where these two TZ changes take effect, there is a minor extension
+ to the tz file format in that it allows new values for the
+ embedded TZ-format string, and the tz file format version number
+ has therefore been increased from 2 to 3 as a precaution.
+ Version-2-based client code should continue to work as before for
+ all time stamps before 2038. Existing version-2-based client code
+ (tzcode, GNU/Linux, Solaris) has been tested on version-3-format
+ files, and typically works in practice even for time stamps after
+ 2037; the only known exception is America/Godthab.
+
+ Changes affecting time stamps before 1970
+
+ Pacific/Johnston is now a link to Pacific/Honolulu. This corrects
+ some errors before 1947.
+
+ Some zones have been turned into links, when they differ from existing
+ zones only in older data entries that were likely invented or that
+ differ only in LMT or transitions from LMT. These changes affect
+ only time stamps before 1943. The affected zones are:
+ Africa/Juba, America/Anguilla, America/Aruba, America/Dominica,
+ America/Grenada, America/Guadeloupe, America/Marigot,
+ America/Montserrat, America/St_Barthelemy, America/St_Kitts,
+ America/St_Lucia, America/St_Thomas, America/St_Vincent,
+ America/Tortola, and Europe/Vaduz. (Thanks to Alois Treindl for
+ confirming that the old Europe/Vaduz zone was wrong and the new
+ link is better for WWII-era times.)
+
+ Change Kingston Mean Time from -5:07:12 to -5:07:11. This affects
+ America/Cayman, America/Jamaica and America/Grand_Turk time stamps
+ from 1890 to 1912.
+
+ Change the UT offset of Bern Mean Time from 0:29:44 to 0:29:46.
+ This affects Europe/Zurich time stamps from 1853 to 1894. (Thanks
+ to Alois Treindl).
+
+ Change the date of the circa-1850 Zurich transition from 1849-09-12
+ to 1853-07-16, overriding Shanks with data from Messerli about
+ postal and telegraph time in Switzerland.
+
+ Changes affecting time zone abbreviations before 1970
+
+ For Asia/Jakarta, use BMT (not JMT) for mean time from 1923 to 1932,
+ as Jakarta was called Batavia back then.
+
+ Changes affecting API
+
+ The 'zic' command now outputs a dummy transition when far-future
+ data can't be summarized using a TZ string, and uses a 402-year
+ window rather than a 400-year window. For the current data, this
+ affects only the Asia/Tehran file. It does not affect any of the
+ time stamps that this file represents, so zdump outputs the same
+ information as before. (Thanks to Andrew Main (Zefram).)
+
+ The 'date' command has a new '-r' option, which lets you specify
+ the integer time to display, a la FreeBSD.
+
+ The 'tzselect' command has two new options '-c' and '-n', which lets you
+ select a zone based on latitude and longitude.
+
+ The 'zic' command's '-v' option now warns about constructs that
+ require the new version-3 binary file format. (Thanks to Arthur
+ David Olson for the suggestion.)
+
+ Support for floating-point time_t has been removed.
+ It was always dicey, and POSIX no longer requires it.
+ (Thanks to Eric Blake for suggesting to the POSIX committee to
+ remove it, and thanks to Alan Barrett, Clive D.W. Feather, Andy
+ Heninger, Arthur David Olson, and Alois Treindl, for reporting
+ bugs and elucidating some of the corners of the old floating-point
+ implementation.)
+
+ The signatures of 'offtime', 'timeoff', and 'gtime' have been
+ changed back to the old practice of using 'long' to represent UT
+ offsets. This had been inadvertently and mistakenly changed to
+ 'int_fast32_t'. (Thanks to Christos Zoulas.)
+
+ The code avoids undefined behavior on integer overflow in some
+ more places, including gmtime, localtime, mktime and zdump.
+
+ Changes affecting the zdump utility
+
+ zdump now outputs "UT" when referring to Universal Time, not "UTC".
+ "UTC" does not make sense for time stamps that predate the introduction
+ of UTC, whereas "UT", a more-generic term, does. (Thanks to Steve Allen
+ for clarifying UT vs UTC.)
+
+ Data changes affecting behavior of tzselect and similar programs
+
+ Country code BQ is now called the more-common name "Caribbean Netherlands"
+ rather than the more-official "Bonaire, St Eustatius & Saba".
+
+ Remove from zone.tab the names America/Montreal, America/Shiprock,
+ and Antarctica/South_Pole, as they are equivalent to existing
+ same-country-code zones for post-1970 time stamps. The data entries for
+ these names are unchanged, so the names continue to work as before.
+
+ Changes affecting code internals
+
+ zic -c now runs way faster on 64-bit hosts when given large numbers.
+
+ zic now uses vfprintf to avoid allocating and freeing some memory.
+
+ tzselect now computes the list of continents from the data,
+ rather than have it hard-coded.
+
+ Minor changes pacify GCC 4.7.3 and GCC 4.8.1.
+
+ Changes affecting the build procedure
+
+ The 'leapseconds' file is now generated automatically from a
+ new file 'leap-seconds.list', which is a copy of
+ <ftp://time.nist.gov/pub/leap-seconds.list>.
+ A new source file 'leapseconds.awk' implements this.
+ The goal is simplification of the future maintenance of 'leapseconds'.
+
+ When building the 'posix' or 'right' subdirectories, if the
+ subdirectory would be a copy of the default subdirectory, it is
+ now made a symbolic link if that is supported. This saves about
+ 2 MB of file system space.
+
+ The links America/Shiprock and Antarctica/South_Pole have been
+ moved to the 'backward' file. This affects only nondefault builds
+ that omit 'backward'.
+
+ Changes affecting version-control only
+
+ .gitignore now ignores 'date'.
+
+ Changes affecting documentation and commentary
+
+ Changes to the 'tzfile' man page
+
+ It now mentions that the binary file format may be extended in
+ future versions by appending data.
+
+ It now refers to the 'zdump' and 'zic' man pages.
+
+ Changes to the 'zic' man page
+
+ It lists conditions that elicit a warning with '-v'.
+
+ It says that the behavior is unspecified when duplicate names
+ are given, or if the source of one link is the target of another.
+
+ Its examples are updated to match the latest data.
+
+ The definition of white space has been clarified slightly.
+ (Thanks to Michael Deckers.)
+
+ Changes to the 'Theory' file
+
+ There is a new section about the accuracy of the tz database,
+ describing the many ways that errors can creep in, and
+ explaining why so many of the pre-1970 time stamps are wrong or
+ misleading (thanks to Steve Allen, Lester Caine, and Garrett
+ Wollman for discussions that contributed to this).
+
+ The 'Theory' file describes LMT better (this follows a
+ suggestion by Guy Harris).
+
+ It refers to the 2013 edition of POSIX rather than the 2004 edition.
+
+ It's mentioned that excluding 'backward' should not affect the
+ other data, and it suggests at least one zone.tab name per
+ inhabited country (thanks to Stephen Colebourne).
+
+ Some longstanding restrictions on names are documented, e.g.,
+ 'America/New_York' precludes 'America/New_York/Bronx'.
+
+ It gives more reasons for the 1970 cutoff.
+
+ It now mentions which time_t variants are supported, such as
+ signed integer time_t. (Thanks to Paul Goyette for reporting
+ typos in an experimental version of this change.)
+
+ (Thanks to Philip Newton for correcting typos in these changes.)
+
+ Documentation and commentary is more careful to distinguish UT in
+ general from UTC in particular. (Thanks to Steve Allen.)
+
+ Add a better source for the Zurich 1894 transition.
+ (Thanks to Pierre-Yves Berger.)
+
+ Update shapefile citations in tz-link.htm. (Thanks to Guy Harris.)
+
+
+Release 2013d - 2013-07-05 07:38:01 -0700
+
+ Changes affecting future time stamps:
+
+ Morocco's midsummer transitions this year are July 7 and August 10,
+ not July 9 and August 8. (Thanks to Andrew Paprocki.)
+
+ Israel now falls back on the last Sunday of October.
+ (Thanks to Ephraim Silverberg.)
+
+ Changes affecting past time stamps:
+
+ Specify Jerusalem's location more precisely; this changes the pre-1880
+ times by 2 s.
+
+ Changing affecting metadata only:
+
+ Fix typos in the entries for country codes BQ and SX.
+
+ Changes affecting code:
+
+ Rework the code to fix a bug with handling Australia/Macquarie on
+ 32-bit hosts (thanks to Arthur David Olson).
+
+ Port to platforms like NetBSD, where time_t can be wider than long.
+
+ Add support for testing time_t types other than the system's.
+ Run 'make check_time_t_alternatives' to try this out.
+ Currently, the tests fail for unsigned time_t;
+ this should get fixed at some point.
+
+ Changes affecting documentation and commentary:
+
+ Deemphasize the significance of national borders.
+
+ Update the zdump man page.
+
+ Remove obsolete NOID comment (thanks to Denis Excoffier).
+
+ Update several URLs and comments in the web pages.
+
+ Spelling fixes (thanks to Kevin Lyda and Jonathan Leffler).
+
+ Update URL for CLDR Zone->Tzid table (thanks to Yoshito Umaoka).
+
+
+Release 2013c - 2013-04-19 16:17:40 -0700
+
+ Changes affecting current and future time stamps:
+
+ Palestine observed DST starting March 29, 2013. (Thanks to
+ Steffen Thorsen.) From 2013 on, Gaza and Hebron both observe DST,
+ with the predicted rules being the last Thursday in March at 24:00
+ to the first Friday on or after September 21 at 01:00.
+
+ Assume that the recent change to Paraguay's DST rules is permanent,
+ by moving the end of DST to the 4th Sunday in March every year.
+ (Thanks to Carlos Raúl Perasso.)
+
+ Changes affecting past time stamps:
+
+ Fix some historical data for Palestine to agree with that of
+ timeanddate.com, as follows:
+
+ The spring 2008 change in Gaza and Hebron was on 00:00 Mar 28, not
+ 00:00 Apr 1.
+
+ The fall 2009 change in Gaza and Hebron on Sep 4 was at 01:00, not
+ 02:00.
+
+ The spring 2010 change in Hebron was 00:00 Mar 26, not 00:01 Mar 27.
+
+ The spring 2011 change in Gaza was 00:01 Apr 1, not 12:01 Apr 2.
+
+ The spring 2011 change in Hebron on Apr 1 was at 00:01, not 12:01.
+
+ The fall 2011 change in Hebron on Sep 30 was at 00:00, not 03:00.
+
+ Fix times of habitation for Macquarie to agree with the Tasmania
+ Parks & Wildlife Service history, which indicates that permanent
+ habitation was 1899-1919 and 1948 on.
+
+ Changing affecting metadata only:
+
+ Macquarie Island is politically part of Australia, not Antarctica.
+ (Thanks to Tobias Conradi.)
+
+ Sort Macquarie more-consistently with other parts of Australia.
+ (Thanks to Tim Parenti.)
+
+
+Release 2013b - 2013-03-10 22:33:40 -0700
+
+ Changes affecting current and future time stamps:
+
+ Haiti uses US daylight-saving rules this year, and presumably future years.
+ This changes time stamps starting today. (Thanks to Steffen Thorsen.)
+
+ Paraguay will end DST on March 24 this year.
+ (Thanks to Steffen Thorsen.) For now, assume it's just this year.
+
+ Morocco does not observe DST during Ramadan;
+ try to predict Ramadan in Morocco as best we can.
+ (Thanks to Erik Homoet for the heads-up.)
+
+ Changes affecting commentary:
+
+ Update URLs in tz-link page. Add URLs for webOS, BB10, iOS.
+ Update URL for Solaris. Mention Internet RFC 6557.
+ Update Internet RFCs 2445->5545, 2822->5322.
+ Switch from FTP to HTTP for Internet RFCs.
+
+
+Release 2013a - 2013-02-27 09:20:35 -0800
+
+ Change affecting binary data format:
+
+ The zone offset at the end of version-2-format zone files is now
+ allowed to be 24:00, as per POSIX.1-2008. (Thanks to Arthur David Olson.)
+
+ Changes affecting current and future time stamps:
+
+ Chile's 2013 rules, and we guess rules for 2014 and later, will be
+ the same as 2012, namely Apr Sun>=23 03:00 UTC to Sep Sun>=2 04:00 UTC.
+ (Thanks to Steffen Thorsen and Robert Elz.)
+
+ New Zones Asia/Khandyga, Asia/Ust-Nera, Europe/Busingen.
+ (Thanks to Tobias Conradi and Arthur David Olson.)
+
+ Many changes affect historical time stamps before 1940.
+ These were deduced from: Milne J. Civil time. Geogr J. 1899
+ Feb;13(2):173-94 <http://www.jstor.org/stable/1774359>.
+
+ Changes affecting the code:
+
+ Fix zic bug that mishandled Egypt's 2010 changes (this also affected
+ the data). (Thanks to Arthur David Olson.)
+
+ Fix localtime bug when time_t is unsigned and data files were generated
+ by a signed time_t system. (Thanks to Doug Bailey for reporting and
+ to Arthur David Olson for fixing.)
+
+ Allow the email address for bug reports to be set by the packager.
+ The default is tz@iana.org, as before. (Thanks to Joseph S. Myers.)
+
+ Update HTML checking to be compatible with Ubuntu 12.10.
+
+ Check that files are a safe subset of ASCII. At some point we may
+ relax this requirement to a safe subset of UTF-8. Without the
+ check, some non-UTF-8 encodings were leaking into the distribution.
+
+ Commentary changes:
+
+ Restore a comment about copyright notices that was inadvertently deleted.
+ (Thanks to Arthur David Olson.)
+
+ Improve the commentary about which districts observe what times
+ in Russia. (Thanks to Oscar van Vlijmen and Arthur David Olson).
+
+ Add web page links to tz.js.
+
+ Add "Run by the Monkeys" to tz-art. (Thanks to Arthur David Olson.)
+
+
+Release 2012j - 2012-11-12 18:34:49 -0800
+
+ Libya moved to CET this weekend, but with DST planned next year.
+ (Thanks to Even Scharning, Steffen Thorsen, and Tim Parenti.)
+
+ Signatures now have the extension .asc, not .sign, as that's more
+ standard. (Thanks to Phil Pennock.)
+
+ The output of 'zdump --version', and of 'zic --version', now
+ uses a format that is more typical for --version.
+ (Thanks to Joseph S. Myers.)
+
+ The output of 'tzselect --help', 'zdump --help', and 'zic --help'
+ now uses tz@iana.org rather than the old elsie address.
+
+ zic -v now complains about abbreviations that are less than 3
+ or more than 6 characters, as per Posix. Formerly, it checked
+ for abbreviations that were more than 3.
+
+ 'make public' no longer puts its temporary directory under /tmp,
+ and uses the just-built zic rather than the system zic.
+
+ Various fixes to documentation and commentary.
+
+
+Release 2012i - 2012-11-03 12:57:09 -0700
+
+ Cuba switches from DST tomorrow at 01:00. (Thanks to Steffen Thorsen.)
+
+ Linker flags can now be specified via LDFLAGS.
+ AWK now defaults to 'awk', not 'nawk'.
+ The shell in tzselect now defaults to /bin/bash, but this can
+ be overridden by specifying KSHELL.
+ The main web page now mentions the unofficial GitHub repository.
+ (Thanks to Mike Frysinger.)
+
+ Tarball signatures can now be built by running 'make signatures'.
+ There are also new makefile rules 'tarballs', 'check_public', and
+ separate makefile rules for each tarball and signature file.
+ A few makefile rules are now more portable to strict POSIX.
+
+ The main web page now lists the canonical IANA URL.
+
+
+Release 2012h - 2012-10-26 22:49:10 -0700
+
+ Bahia no longer has DST. (Thanks to Kelley Cook.)
+
+ Tocantins has DST. (Thanks to Rodrigo Severo.)
+
+ Israel has new DST rules next year. (Thanks to Ephraim Silverberg.)
+
+ Jordan stays on DST this winter. (Thanks to Steffen Thorsen.)
+
+ Web page updates.
+
+ More C modernization, except that at Arthur David Olson's suggestion
+ the instances of 'register' were kept.
+
+
+Release 2012g - 2012-10-17 20:59:45 -0700
+
+ Samoa fall 2012 and later. (Thanks to Nicholas Pereira and Robert Elz.)
+
+ Palestine fall 2012. (Thanks to Steffen Thorsen.)
+
+ Assume C89.
+
+ To attack the version-number problem, this release ships the file
+ 'Makefile' (which contains the release number) in both the tzcode and
+ the tzdata tarballs. The two Makefiles are identical, and should be
+ identical in any matching pair of tarballs, so it shouldn't matter
+ which order you extract the tarballs. Perhaps we can come up with a
+ better version-number scheme at some point; this scheme does have the
+ virtue of not adding more files.
+
+
+Release 2012f - 2012-09-12 23:17:03 -0700
+
+ * australasia (Pacific/Fiji): Fiji DST is October 21 through January
+ 20 this year. (Thanks to Steffen Thorsen.)
+
+
+Release 2012e - 2012-08-02 20:44:55 -0700
+
+ * australasia (Pacific/Fakaofo): Tokelau is UT +13, not +14.
+ (Thanks to Steffen Thorsen.)
+
+ * Use a single version number for both code and data.
+
+ * .gitignore: New file.
+
+ * Remove trailing white space.
+
+
+Release code2012c-data2012d - 2012-07-19 16:35:33 -0700
+
+ Changes for Morocco's time stamps, which take effect in a couple of
+ hours, along with infrastructure changes to accommodate how the tz
+ code and data are released on IANA.
+
+
+Release data2012c - 2012-03-27 12:17:25 -0400
+
+ africa
+ Summer time changes for Morocco (to start late April 2012)
+
+ asia
+ Changes for 2012 for Gaza & the West Bank (Hebron) and Syria
+
+ northamerica
+ Haiti following US/Canada rules for 2012 (and we're assuming,
+ for now anyway, for the future).
+
+
+Release 2012b - 2012-03-02 12:29:15 +0700
+
+ There is just one change to tzcode2012b (compared with 2012a):
+ the Makefile that was accidentally included with 2012a has been
+ replaced with the version that should have been there, which is
+ identical with the previous version (from tzcode2011i).
+
+ There are just two changes in tzdata2012b compared with 2012a.
+
+ Most significantly, summer time in Cuba has been delayed 3 weeks
+ (now starts April 1 rather than March 11). Since Mar 11 (the old start
+ date, as listed in 2012a) is just a little over a week away, this
+ change is urgent.
+
+ Less importantly, an excess tab in one of the changes in zone.tab
+ in 2012a has been removed.
+
+
+Release 2012a - 2012-03-01 18:28:10 +0700
+
+ The changes in tzcode2012a (compared to the previous version, 2011i)
+ are entirely to the README and tz-art.htm and tz-link.htm files, if
+ none of those concern you, you can ignore the code update. The changes
+ reflect the changed addresses for the mailing list and the code and
+ data distribution points & methods (and a link to DateTime::TimeZone::Tzfile
+ has been added to tz-link.htm).
+
+ In tzdata2012a (compared to the previous release, which was 2011n)
+ the major changes are:
+ Chile 2011/2012 and 2012/2013 summer time date adjustments.
+ Falkland Islands onto permanent summer time (we're assuming for the
+ foreseeable future, though 2012 is all we're fairly certain of.)
+ Armenia has abolished Summer Time.
+ Tokelau jumped the International Date Line back last December
+ (just the same as their near neighbour, Samoa).
+ America/Creston is a new zone for a small area of British Columbia
+ There will be a leapsecond 2012-06-30 23:59:60 UTC.
+
+ Other minor changes are:
+ Corrections to 1918 Canadian summer time end dates.
+ Updated URL for UK time zone history (in comments)
+ A few typos in Le Corre's list of free French place names (comments)
+
+
+Release data2011n - 2011-10-30 14:57:54 +0700
+
+ There are three changes of note - most urgently, Cuba (America/Havana)
+ has extended summer time by two weeks, now to end on Nov 13, rather than
+ the (already past) Oct 30. Second, the Pridnestrovian Moldavian Republic
+ (Europe/Tiraspol) decided not to split from the rest of Moldova after
+ all, and consequently that zone has been removed (again) and reinstated
+ in the "backward" file as a link to Europe/Chisinau. And third, the
+ end date for Fiji's summer time this summer was moved forward from the
+ earlier planned Feb 26, to Jan 22.
+
+ Apart from that, Moldova (MD) returns to a single entry in zone.tab
+ (and the incorrect syntax that was in the 2011m version of that file
+ is so fixed - it would have been fixed in a different way had this
+ change not happened - that's the "missing" sccs version id).
+
+
+Release data2011m - 2011-10-24 21:42:16 +0700
+
+ In particular, the typos in comments in the data (2011-11-17 should have
+ been 2011-10-17 as Alan Barrett noted, and spelling of Tiraspol that
+ Tim Parenti noted) have been fixed, and the change for Ukraine has been
+ made in all 4 Ukrainian zones, rather than just Kiev (again, thanks to
+ Tim Parenti, and also Denys Gavrysh)
+
+ In addition, I added Europe/Tiraspol to zone.tab.
+
+ This time, all the files have new version numbers... (including the files
+ otherwise unchanged in 2011m that were changed in 2011l but didn't get new
+ version numbers there...)
+
+
+Release data2011l - 2011-10-10 11:15:43 +0700
+
+ There are just 2 changes that cause different generated tzdata files from
+ zic, to Asia/Hebron and Pacific/Fiji - the possible change for Bahia, Brazil
+ is included, but commented out. Compared with the diff I sent out last week,
+ this version also includes attributions for the sources for the changes
+ (in much the same format as ado used, but the html tags have not been
+ checked, verified, or used in any way at all, so if there are errors there,
+ please let me know.)
+
+
+Release data2011k - 2011-09-20 17:54:03 -0400
+
+ [not summarized]
+
+
+Release data2011j - 2011-09-12 09:22:49 -0400
+
+ (contemporary changes for Samoa; past changes for Kenya, Uganda, and
+ Tanzania); there are also two spelling corrections to comments in
+ the australasia file (with thanks to Christos Zoulas).
+
+
+Release 2011i - 2011-08-29 05:56:32 -0400
+
+ [not summarized]
+
+
+Release data2011h - 2011-06-15 18:41:48 -0400
+
+ Russia and Curaçao changes
+
+
+Release 2011g - 2011-04-25 09:07:22 -0400
+
+ update the rules for Egypt to reflect its abandonment of DST this year
+
+
+Release 2011f - 2011-04-06 17:14:53 -0400
+
+ [not summarized]
+
+
+Release 2011e - 2011-03-31 16:04:38 -0400
+
+ Morocco, Chile, and tz-link changes
+
+
+Release 2011d - 2011-03-14 09:18:01 -0400
+
+ changes that impact present-day time stamps in Cuba, Samoa, and Turkey
+
+
+Release 2011c - 2011-03-07 09:30:09 -0500
+
+ These do affect current time stamps in Chile and Annette Island, Canada.
+
+
+Release 2011b - 2011-02-07 08:44:50 -0500
+
+ [not summarized]
+
+
+Release 2011a - 2011-01-24 10:30:16 -0500
+
+ [not summarized]
+
+
+Release data2010o - 2010-11-01 09:18:23 -0400
+
+ change to the end of DST in Fiji in 2011
+
+
+Release 2010n - 2010-10-25 08:19:17 -0400
+
+ [not summarized]
+
+
+Release 2010m - 2010-09-27 09:24:48 -0400
+
+ Hong Kong, Vostok, and zic.c changes
+
+
+Release 2010l - 2010-08-16 06:57:25 -0400
+
+ [not summarized]
+
+
+Release 2010k - 2010-07-26 10:42:27 -0400
+
+ [not summarized]
+
+
+Release 2010j - 2010-05-10 09:07:48 -0400
+
+ changes for Bahía de Banderas and for version naming
+
+
+Release data2010i - 2010-04-16 18:50:45 -0400
+
+ the end of DST in Morocco on 2010-08-08
+
+
+Release data2010h - 2010-04-05 09:58:56 -0400
+
+ [not summarized]
+
+
+Release data2010g - 2010-03-24 11:14:53 -0400
+
+ [not summarized]
+
+
+Release 2010f - 2010-03-22 09:45:46 -0400
+
+ [not summarized]
+
+
+Release data2010e - 2010-03-08 14:24:27 -0500
+
+ corrects the Dhaka bug found by Danvin Ruangchan
+
+
+Release data2010d - 2010-03-06 07:26:01 -0500
+
+ [not summarized]
+
+
+Release 2010c - 2010-03-01 09:20:58 -0500
+
+ changes including KRE's suggestion for earlier initialization of
+ "goahead" and "goback" structure elements
+
+
+Release code2010a - 2010-02-16 10:40:04 -0500
+
+ [not summarized]
+
+
+Release data2010b - 2010-01-20 12:37:01 -0500
+
+ Mexico changes
+
+
+Release data2010a - 2010-01-18 08:30:04 -0500
+
+ changes to Dhaka
+
+
+Release data2009u - 2009-12-26 08:32:28 -0500
+
+ changes to DST in Bangladesh
+
+
+Release 2009t - 2009-12-21 13:24:27 -0500
+
+ [not summarized]
+
+
+Release data2009s - 2009-11-14 10:26:32 -0500
+
+ (cosmetic) Antarctica change and the DST-in-Fiji-in-2009-and-2010 change
+
+
+Release 2009r - 2009-11-09 10:10:31 -0500
+
+ "antarctica" and "tz-link.htm" changes
+
+
+Release 2009q - 2009-11-02 09:12:40 -0500
+
+ with two corrections as reported by Eric Muller and Philip Newton
+
+
+Release data2009p - 2009-10-23 15:05:27 -0400
+
+ Argentina (including San Luis) changes (with the correction from
+ Mariano Absatz)
+
+
+Release data2009o - 2009-10-14 16:49:38 -0400
+
+ Samoa (commentary only), Pakistan, and Bangladesh changes
+
+
+Release data2009n - 2009-09-22 15:13:38 -0400
+
+ added commentary for Argentina and a change to the end of DST in
+ 2009 in Pakistan
+
+
+Release data2009m - 2009-09-03 10:23:43 -0400
+
+ Samoa and Palestine changes
+
+
+Release data2009l - 2009-08-14 09:13:07 -0400
+
+ Samoa (comments only) and Egypt
+
+
+Release 2009k - 2009-07-20 09:46:08 -0400
+
+ [not summarized]
+
+
+Release data2009j - 2009-06-15 06:43:59 -0400
+
+ Bangladesh change (with a short turnaround since the DST change is
+ impending)
+
+
+Release 2009i - 2009-06-08 09:21:22 -0400
+
+ updating for DST in Bangladesh this year
+
+
+Release 2009h - 2009-05-26 09:19:14 -0400
+
+ [not summarized]
+
+
+Release data2009g - 2009-04-20 16:34:07 -0400
+
+ Cairo
+
+
+Release data2009f - 2009-04-10 11:00:52 -0400
+
+ correct DST in Pakistan
+
+
+Release 2009e - 2009-04-06 09:08:11 -0400
+
+ [not summarized]
+
+
+Release 2009d - 2009-03-23 09:38:12 -0400
+
+ Morocco, Tunisia, Argentina, and American Astronomical Society changes
+
+
+Release data2009c - 2009-03-16 09:47:51 -0400
+
+ change to the start of Cuban DST
+
+
+Release 2009b - 2009-02-09 11:15:22 -0500
+
+ [not summarized]
+
+
+Release 2009a - 2009-01-21 10:09:39 -0500
+
+ [not summarized]
+
+
+Release data2008i - 2008-10-21 12:10:25 -0400
+
+ southamerica and zone.tab files, with Argentina DST rule changes and
+ United States zone reordering and recommenting
+
+
+Release 2008h - 2008-10-13 07:33:56 -0400
+
+ [not summarized]
+
+
+Release 2008g - 2008-10-06 09:03:18 -0400
+
+ Fix a broken HTML anchor and update Brazil's DST transitions;
+ there's also a slight reordering of information in tz-art.htm.
+
+
+Release data2008f - 2008-09-09 22:33:26 -0400
+
+ [not summarized]
+
+
+Release 2008e - 2008-07-28 14:11:17 -0400
+
+ changes by Arthur David Olson and Jesper Nørgaard Welen
+
+
+Release data2008d - 2008-07-07 09:51:38 -0400
+
+ changes by Arthur David Olson, Paul Eggert, and Rodrigo Severo
+
+
+Release data2008c - 2008-05-19 17:48:03 -0400
+
+ Pakistan, Morocco, and Mongolia
+
+
+Release data2008b - 2008-03-24 08:30:59 -0400
+
+ including renaming Asia/Calcutta to Asia/Kolkata, with a backward
+ link provided
+
+
+Release 2008a - 2008-03-08 05:42:16 -0500
+
+ [not summarized]
+
+
+Release 2007k - 2007-12-31 10:25:22 -0500
+
+ most importantly, changes to the "southamerica" file based on
+ Argentina's readoption of daylight saving time
+
+
+Release 2007j - 2007-12-03 09:51:01 -0500
+
+ 1. eliminate the "P" (parameter) macro;
+
+ 2. the "noncontroversial" changes circulated on the time zone
+ mailing list (less the changes to "logwtmp.c");
+
+ 3. eliminate "too many transition" errors when "min" is used in time
+ zone rules;
+
+ 4. changes by Paul Eggert (including updated information for Venezuela).
+
+
+Release data2007i - 2007-10-30 10:28:11 -0400
+
+ changes for Cuba and Syria
+
+
+Release 2007h - 2007-10-01 10:05:51 -0400
+
+ changes by Paul Eggert, as well as an updated link to the ICU
+ project in tz-link.htm
+
+
+Release 2007g - 2007-08-20 10:47:59 -0400
+
+ changes by Paul Eggert
+
+ The "leapseconds" file has been updated to incorporate the most
+ recent International Earth Rotation and Reference Systems Service
+ (IERS) bulletin.
+
+ There's an addition to tz-art.htm regarding the television show "Medium".
+
+
+Release 2007f - 2007-05-07 10:46:46 -0400
+
+ changes by Paul Eggert (including Haiti, Turks and Caicos, and New
+ Zealand)
+
+ changes to zic.c to allow hour values greater than 24 (along with
+ Paul's improved time value overflow checking)
+
+
+Release 2007e - 2007-04-02 10:11:52 -0400
+
+ Syria and Honduras changes by Paul Eggert
+
+ zic.c variable renaming changes by Arthur David Olson
+
+
+Release 2007d - 2007-03-20 08:48:30 -0400
+
+ changes by Paul Eggert
+
+ the elimination of white space at the ends of lines
+
+
+Release 2007c - 2007-02-26 09:09:37 -0500
+
+ changes by Paul Eggert
+
+
+Release 2007b - 2007-02-12 09:34:20 -0500
+
+ Paul Eggert's proposed change to the quotation handling logic in zic.c.
+
+ changes to the commentary in "leapseconds" reflecting the IERS
+ announcement that there is to be no positive leap second at the end
+ of June 2007.
+
+
+Release 2007a - 2007-01-08 12:28:29 -0500
+
+ changes by Paul Eggert
+
+ Derick Rethan's Asmara change
+
+ Oscar van Vlijmen's Easter Island local mean time change
+
+ symbolic link changes
+
+
+Release 2006p - 2006-11-27 08:54:27 -0500
+
+ changes by Paul Eggert
+
+
+Release 2006o - 2006-11-06 09:18:07 -0500
+
+ changes by Paul Eggert
+
+
+Release 2006n - 2006-10-10 11:32:06 -0400
+
+ changes by Paul Eggert
+
+
+Release 2006m - 2006-10-02 15:32:35 -0400
+
+ changes for Uruguay, Palestine, and Egypt by Paul Eggert
+
+ (minimalist) changes to zic.8 to clarify "until" information
+
+
+Release data2006l - 2006-09-18 12:58:11 -0400
+
+ Paul's best-effort work on this coming weekend's Egypt time change
+
+
+Release 2006k - 2006-08-28 12:19:09 -0400
+
+ changes by Paul Eggert
+
+
+Release 2006j - 2006-08-21 09:56:32 -0400
+
+ changes by Paul Eggert
+
+
+Release code2006i - 2006-08-07 12:30:55 -0400
+
+ localtime.c fixes
+
+ Ken Pizzini's conversion script
+
+
+Release code2006h - 2006-07-24 09:19:37 -0400
+
+ adds public domain notices to four files
+
+ includes a fix for transition times being off by a second
+
+ adds a new recording to the "arts" file (information courtesy Colin Bowern)
+
+
+Release 2006g - 2006-05-08 17:18:09 -0400
+
+ northamerica changes by Paul Eggert
+
+
+Release 2006f - 2006-05-01 11:46:00 -0400
+
+ a missing version number problem is fixed (with thanks to Bradley
+ White for catching the problem)
+
+
+Release 2006d - 2006-04-17 14:33:43 -0400
+
+ changes by Paul Eggert
+
+ added new items to tz-arts.htm that were found by Paul
+
+
+Release 2006c - 2006-04-03 10:09:32 -0400
+
+ two sets of data changes by Paul Eggert
+
+ a fencepost error fix in zic.c
+
+ changes to zic.c and the "europe" file to minimize differences
+ between output produced by the old 32-bit zic and the new 64-bit
+ version
+
+
+Release 2006b - 2006-02-20 10:08:18 -0500
+ [tz32code2006b + tz64code2006b + tzdata2006b]
+
+ 64-bit code
+
+ All SCCS IDs were bumped to "8.1" for this release.
+
+
+Release 2006a - 2006-01-30 08:59:31 -0500
+
+ changes by Paul Eggert (in particular, Indiana time zone moves)
+
+ an addition to the zic manual page to describe how special-case
+ transitions are handled
+
+
+Release 2005r - 2005-12-27 09:27:13 -0500
+
+ Canadian changes by Paul Eggert
+
+ They also add "<pre>" directives to time zone data files and reflect
+ changes to warning message logic in "zdump.c" (but with calls to
+ "gettext" kept unbundled at the suggestion of Ken Pizzini).
+
+
+Release 2005q - 2005-12-13 09:17:09 -0500
+
+ Nothing earth-shaking here:
+ 1. Electronic mail addresses have been removed.
+ 2. Casts of the return value of exit have been removed.
+ 3. Casts of the argument of is.* macros have been added.
+ 4. Indentation in one section of zic.c has been fixed.
+ 5. References to dead URLs in the data files have been dealt with.
+
+
+Release 2005p - 2005-12-05 10:30:53 -0500
+
+ "systemv", "tz-link.htm", and "zdump.c" changes
+ (less the casts of arguments to the is* macros)
+
+
+Release 2005o - 2005-11-28 10:55:26 -0500
+
+ Georgia, Cuba, Nicaragua, and Jordan changes by Paul Eggert
+
+ zdump.c lint fixes by Arthur David Olson
+
+
+Release 2005n - 2005-10-03 09:44:09 -0400
+
+ changes by Paul Eggert (both the Uruguay changes and the Kyrgyzstan
+ et al. changes)
+
+
+Release 2005m - 2005-08-29 12:15:40 -0400
+
+ changes by Paul Eggert (with a small tweak to the tz-art change)
+
+ a declaration of an unused variable has been removed from zdump.c
+
+
+Release 2005l - 2005-08-22 12:06:39 -0400
+
+ changes by Paul Eggert
+
+ overflow/underflow checks by Arthur David Olson, minus changes to
+ the "Theory" file about the pending addition of 64-bit data (I grow
+ less confident of the changes being accepted with each passing day,
+ and the changes no longer increase the data files nine-fold--there's
+ less than a doubling in size by my local Sun's reckoning)
+
+
+Release 2005k - 2005-07-14 14:14:24 -0400
+
+ The "leapseconds" file has been edited to reflect the recently
+ announced leap second at the end of 2005.
+
+ I've also deleted electronic mail addresses from the files as an
+ anti-spam measure.
+
+
+Release 2005j - 2005-06-13 14:34:13 -0400
+
+ These reflect changes to limit the length of time zone abbreviations
+ and the characters used in those abbreviations.
+
+ There are also changes to handle POSIX-style "quoted" time zone
+ environment variables.
+
+ The changes were circulated on the time zone mailing list; the only
+ change since then was the removal of a couple of minimum-length of
+ abbreviation checks.
+
+
+Release data2005i - 2005-04-21 15:04:16 -0400
+
+ changes (most importantly to Nicaragua and Haiti) by Paul Eggert
+
+
+Release 2005h - 2005-04-04 11:24:47 -0400
+
+ changes by Paul Eggert
+
+ minor changes to Makefile and zdump.c to produce more useful output
+ when doing a "make typecheck"
+
+
+Release 2005g - 2005-03-14 10:11:21 -0500
+
+ changes by Paul Eggert (a change to current DST rules in Uruguay and
+ an update to a link to time zone software)
+
+
+Release 2005f - 2005-03-01 08:45:32 -0500
+
+ data and documentation changes by Paul Eggert
+
+
+Release 2005e - 2005-02-10 15:59:44 -0500
+
+ [not summarized]
+
+
+Release code2005d - 2005-01-31 09:21:47 -0500
+
+ make zic complain about links to links if the -v flag is used
+
+ have "make public" do more code checking
+
+ add an include to "localtime.c" for the benefit of gcc systems
+
+
+Release 2005c - 2005-01-17 18:36:29 -0500
+
+ get better results when mktime runs on a system where time_t is double
+
+ changes to the data files (most importantly to Paraguay)
+
+
+Release 2005b - 2005-01-10 09:19:54 -0500
+
+ Get localtime and gmtime working on systems with exotic time_t types.
+
+ Update the leap second commentary in the "leapseconds" file.
+
+
+Release 2005a - 2005-01-01 13:13:44 -0500
+
+ [not summarized]
+
+
+Release code2004i - 2004-12-14 13:42:58 -0500
+
+ Deal with systems where time_t is unsigned.
+
+
+Release code2004h - 2004-12-07 11:40:18 -0500
+
+ 64-bit-time_t changes
+
+
+Release 2004g - 2004-11-02 09:06:01 -0500
+
+ update to Cuba (taking effect this weekend)
+
+ other changes by Paul Eggert
+
+ correction of the spelling of Oslo
+
+ changed versions of difftime.c and private.h
+
+
+Release code2004f - 2004-10-21 10:25:22 -0400
+
+ Cope with wide-ranging tm_year values.
+
+
+Release 2004e - 2004-10-11 14:47:21 -0400
+
+ Brazil/Argentina/Israel changes by Paul Eggert
+
+ changes to tz-link.htm by Paul
+
+ one small fix to Makefile
+
+
+Release 2004d - 2004-09-22 08:27:29 -0400
+
+ Avoid overflow problems when TM_YEAR_BASE is added to an integer.
+
+
+Release 2004c - 2004-08-11 12:06:26 -0400
+
+ asctime-related changes
+
+ (variants of) some of the documentation changes suggested by Paul Eggert
+
+
+Release 2004b - 2004-07-19 14:33:35 -0400
+
+ data changes by Paul Eggert - most importantly, updates for Argentina
+
+
+Release 2004a - 2004-05-27 12:00:47 -0400
+
+ changes by Paul Eggert
+
+ Handle DST transitions that occur at the end of a month in some
+ years but at the start of the following month in other years.
+
+ Add a copy of the correspondence that's the basis for claims about
+ DST in the Navajo Nation.
+
+
+Release 2003e - 2003-12-15 09:36:47 -0500
+
+ changes by Arthur David Olson (primarily code changes)
+
+ changes by Paul Eggert (primarily data changes)
+
+ minor changes to "Makefile" and "northamerica" (in the latter case,
+ optimization of the "Toronto" rules)
+
+
+Release 2003d - 2003-10-06 09:34:44 -0400
+
+ changes by Paul Eggert
+
+
+Release 2003c - 2003-09-16 10:47:05 -0400
+
+ Fix bad returns in zic.c's inleap function.
+ Thanks to Bradley White for catching the problem!
+
+
+Release 2003b - 2003-09-16 07:13:44 -0400
+
+ Add a "--version" option (and documentation) to the zic and zdump commands.
+
+ changes to overflow/underflow checking in zic
+
+ a localtime typo fix.
+
+ Update the leapseconds and tz-art.htm files.
+
+
+Release 2003a - 2003-03-24 09:30:54 -0500
+
+ changes by Paul Eggert
+
+ a few additions and modifications to the tz-art.htm file
+
+
+Release 2002d - 2002-10-15 13:12:42 -0400
+
+ changes by Paul Eggert, less the "Britain (UK)" change in iso3166.tab
+
+ There's also a new time zone quote in "tz-art.htm".
+
+
+Release 2002c - 2002-04-04 11:55:20 -0500
+
+ changes by Paul Eggert
+
+ Change zic.c to avoid creating symlinks to files that don't exist.
+
+
+Release 2002b - 2002-01-28 12:56:03 -0500
+
+ [These change notes are for Release 2002a, which was corrupted.
+ 2002b was a corrected version of 2002a.]
+
+ changes by Paul Eggert
+
+ Update the "leapseconds" file to note that there'll be no leap
+ second at the end of June, 2002.
+
+ Change "zic.c" to deal with a problem in handling the "Asia/Bishkek" zone.
+
+ Change to "difftime.c" to avoid sizeof problems.
+
+
+Release 2001d - 2001-10-09 13:31:32 -0400
+
+ changes by Paul Eggert
+
+
+Release 2001c - 2001-06-05 13:59:55 -0400
+
+ changes by Paul Eggert and Andrew Brown
+
+
+Release 2001b - 2001-04-05 16:44:38 -0400
+
+ changes by Paul Eggert (modulo jnorgard's typo fix)
+
+ tz-art.htm has been HTMLified.
+
+
+Release 2001a - 2001-03-13 12:57:44 -0500
+
+ changes by Paul Eggert
+
+ An addition to the "leapseconds" file: comments with the text of the
+ latest IERS leap second notice.
+
+ Trailing white space has been removed from data file lines, and
+ repeated spaces in "Rule Jordan" lines in the "asia" file have been
+ converted to tabs.
+
+
+Release 2000h - 2000-12-14 15:33:38 -0500
+
+ changes by Paul Eggert
+
+ one typo fix in the "art" file
+
+ With providence, this is the last update of the millennium.
+
+
+Release 2000g - 2000-10-10 11:35:22 -0400
+
+ changes by Paul Eggert
+
+ correction of John Mackin's name submitted by Robert Elz
+
+ Garry Shandling's Daylight Saving Time joke (!?!) from the recent
+ Emmy Awards broadcast.
+
+
+Release 2000f - 2000-08-10 09:31:58 -0400
+
+ changes by Paul Eggert
+
+ Added information in "tz-art.htm" on a Seinfeld reference to DST.
+
+ Error checking and messages in the "yearistype" script have been
+ improved.
+
+
+Release 2000e - 2000-07-31 09:27:54 -0400
+
+ data changes by Paul Eggert
+
+ a change to the default value of the defined constant HAVE_STRERROR
+
+ the addition of a Dave Barry quote on DST to the tz-arts file
+
+
+Release 2000d - 2000-04-20 15:43:04 -0400
+
+ changes to the documentation and code of strftime for C99 conformance
+
+ a bug fix for date.c
+
+ These are based on (though modified from) changes by Paul Eggert.
+
+
+Release 2000c - 2000-03-04 10:31:43 -0500
+
+ changes by Paul Eggert
+
+
+Release 2000b - 2000-02-21 12:16:29 -0500
+
+ changes by Paul Eggert and Joseph Myers
+
+ modest tweaks to the tz-art.htm and tz-link.htm files
+
+
+Release 2000a - 2000-01-18 09:21:26 -0500
+
+ changes by Paul Eggert
+
+ The two hypertext documents have also been renamed.
+
+
+Release code1999i-data1999j - 1999-11-15 18:43:22 -0500
+
+ Paul Eggert's changes
+
+ additions to the "zic" manual page and the "Arts.htm" file
+
+
+Release code1999h-data1999i - 1999-11-08 14:55:21 -0500
+
+ [not summarized]
+
+
+Release data1999h - 1999-10-07 03:50:29 -0400
+
+ changes by Paul Eggert to "europe" (most importantly, fixing
+ Lithuania and Estonia)
+
+
+Release 1999g - 1999-09-28 11:06:18 -0400
+
+ data changes by Paul Eggert (most importantly, the change for
+ Lebanon that buys correctness for this coming Sunday)
+
+ The "code" file contains changes to "Makefile" and "checktab.awk" to
+ allow better checking of time zone files before they are published.
+
+
+Release 1999f - 1999-09-23 09:48:14 -0400
+
+ changes by Arthur David Olson and Paul Eggert
+
+
+Release 1999e - 1999-08-17 15:20:54 -0400
+
+ changes circulated by Paul Eggert, although the change to handling
+ of DST-specifying time zone names has been commented out for now
+ (search for "XXX" in "localtime.c" for details). These files also
+ do not make any changes to the start of DST in Brazil.
+
+ In addition to Paul's changes, there are updates to "Arts.htm" and
+ cleanups of URLs.
+
+
+Release 1999d - 1999-03-30 11:31:07 -0500
+
+ changes by Paul Eggert
+
+ The Makefile's "make public" rule has also been changed to do a test
+ compile of each individual time zone data file (which should help
+ avoid problems such as the one we had with Nicosia).
+
+
+Release 1999c - 1999-03-25 09:47:47 -0500
+
+ changes by Paul Eggert, most importantly the change for Chile.
+
+
+Release 1999b - 1999-02-01 17:51:44 -0500
+
+ changes by Paul Eggert
+
+ code changes (suggested by Mani Varadarajan, mani at be.com) for
+ correct handling of symbolic links when building using a relative directory
+
+ code changes to generate correct messages for failed links
+
+ updates to the URLs in Arts.htm
+
+
+Release 1999a - 1999-01-19 16:20:29 -0500
+
+ error message internationalizations and corrections in zic.c and
+ zdump.c (as suggested by Vladimir Michl, vladimir.michl at upol.cz,
+ to whom thanks!)
+
+
+Release code1998h-data1998i - 1998-10-01 09:56:10 -0400
+
+ changes for Brazil, Chile, and Germany
+
+ support for use of "24:00" in the input files for the time zone compiler
+
+
+Release code1998g-data1998h - 1998-09-24 10:50:28 -0400
+
+ changes by Paul Eggert
+
+ correction to a define in the "private.h" file
+
+
+Release data1998g - 1998-08-11 03:28:35 -0000
+ [tzdata1998g.tar.gz is missing!]
+
+ Lithuanian change provided by mgedmin at pub.osf.it
+
+ Move creation of the GMT link with Etc/GMT to "etcetera" (from
+ "backward") to ensure that the GMT file is created even where folks
+ don't want the "backward" links (as suggested by Paul Eggert).
+
+
+Release data1998f - 1998-07-20 13:50:00 -0000
+ [tzdata1998f.tar.gz is missing!]
+
+ Update the "leapseconds" file to include the newly-announced
+ insertion at the end of 1998.
+
+
+Release code1998f - 1998-06-01 10:18:31 -0400
+
+ addition to localtime.c by Guy Harris
+
+
+Release 1998e - 1998-05-28 09:56:26 -0400
+
+ The Makefile is changed to produce zoneinfo-posix rather than
+ zoneinfo/posix, and to produce zoneinfo-leaps rather than
+ zoneinfo/right.
+
+ data changes by Paul Eggert
+
+ changes from Guy Harris to provide asctime_r and ctime_r
+
+ A usno1998 file (substantially identical to usno1997) has been added.
+
+
+Release 1998d - 1998-05-14 11:58:34 -0400
+
+ changes to comments (in particular, elimination of references to CIA maps).
+ "Arts.htm", "WWW.htm", "asia", and "australasia" are the only places
+ where changes occur.
+
+
+Release 1998c - 1998-02-28 12:32:26 -0500
+
+ changes by Paul Eggert (save the "French correction," on which I'll
+ wait for the dust to settle)
+
+ symlink changes
+
+ changes and additions to Arts.htm
+
+
+Release 1998b - 1998-01-17 14:31:51 -0500
+
+ URL cleanups and additions
+
+
+Release 1998a - 1998-01-13 12:37:35 -0500
+
+ changes by Paul Eggert
+
+
+Release code1997i-data1997k - 1997-12-29 09:53:41 -0500
+
+ changes by Paul Eggert, with minor modifications from Arthur David
+ Olson to make the files more browser friendly
+
+
+Release code1997h-data1997j - 1997-12-18 17:47:35 -0500
+
+ minor changes to put "TZif" at the start of each time zone information file
+
+ a rule has also been added to the Makefile so you can
+ make zones
+ to just recompile the zone information files (rather than doing a
+ full "make install" with its other effects).
+
+
+Release data1997i - 1997-10-07 08:45:38 -0400
+
+ changes to Africa by Paul Eggert
+
+
+Release code1997g-data1997h - 1997-09-04 16:56:54 -0400
+
+ corrections for Uruguay (and other locations)
+
+ Arthur David Olson's simple-minded fix allowing mktime to both
+ correctly handle leap seconds and correctly handle tm_sec values
+ upon which arithmetic has been performed.
+
+
+Release code1997f-data1997g - 1997-07-19 13:15:02 -0400
+
+ Paul Eggert's updates
+
+ a small change to a function prototype;
+
+ "Music" has been renamed "Arts.htm", HTMLified, and augmented to
+ include information on Around the World in Eighty Days.
+
+
+Release code1997e-data1997f - 1997-05-03 18:52:34 -0400
+
+ fixes to zic's error handling
+
+ changes inspired by the item circulated on Slovenia
+
+ The description of Web resources has been HTMLified for browsing
+ convenience.
+
+ A new piece of tz-related music has been added to the "Music" file.
+
+
+Release code1997d-data1997e - 1997-03-29 12:48:52 -0500
+
+ Paul Eggert's latest suggestions
+
+
+Release code1997c-data1997d - 1997-03-07 20:37:54 -0500
+
+ changes to "zic.c" to correct performance of the "-s" option
+
+ a new file "usno1997"
+
+
+Release data1997c - 1997-03-04 09:58:18 -0500
+
+ changes in Israel
+
+
+Release 1997b - 1997-02-27 18:34:19 -0500
+
+ The data file incorporates the 1997 leap second.
+
+ The code file incorporates Arthur David Olson's take on the
+ zic/multiprocessor/directory-creation situation.
+
+
+Release 1997a - 1997-01-21 09:11:10 -0500
+
+ Paul Eggert's Antarctica (and other changes)
+
+ Arthur David Olson finessed the "getopt" issue by checking against
+ both -1 and EOF (regardless of POSIX, SunOS 4.1.1's manual says -1
+ is returned while SunOS 5.5's manual says EOF is returned).
+
+
+Release code1996o-data1996n - 1996-12-27 21:42:05 -0500
+
+ Paul Eggert's latest changes
+
+
+Release code1996n - 1996-12-16 09:42:02 -0500
+
+ link snapping fix from Bruce Evans (via Garrett Wollman)
+
+
+Release data1996m - 1996-11-24 02:37:34 -0000
+ [tzdata1996m.tar.gz is missing!]
+
+ Paul Eggert's batch of changes
+
+
+Release code1996m-data1996l - 1996-11-05 14:00:12 -0500
+
+ No functional changes here; the files have simply been changed to
+ make more use of ISO style dates in comments. The names of the above
+ files now include the year in full.
+
+
+Release code96l - 1996-09-08 17:12:20 -0400
+
+ tzcode96k was missing a couple of pieces.
+
+
+Release 96k - 1996-09-08 16:06:22 -0400
+
+ the latest round of changes from Paul Eggert
+
+ the recent Year 2000 material
+
+
+Release code96j - 1996-07-30 13:18:53 -0400
+
+ Set sp->typecnt as suggested by Timothy Patrick Murphy.
+
+
+Release code96i - 1996-07-27 20:11:35 -0400
+
+ Paul's suggested patch for strftime %V week numbers
+
+
+Release data96i - 1996-07-01 18:13:04 -0400
+
+ "northamerica" and "europe" changes by Paul Eggert
+
+
+Release code96h - 1996-06-05 08:02:21 -0400
+
+ fix for handling transitions specified in Universal Time
+
+ Some "public domain" notices have also been added.
+
+
+Release code96g - 1996-05-16 14:00:26 -0400
+
+ fix for the simultaneous-DST-and-zone-change challenge
+
+
+Release data96h - 1996-05-09 17:40:51 -0400
+
+ changes by Paul Eggert
+
+
+Release code96f-data96g - 1996-05-03 03:09:59 -0000
+ [tzcode96f.tar.gz + tzdata96g.tar.gz are both missing!]
+
+ The changes get us some of the way to fixing the problems noted in Paul
+ Eggert's letter yesterday (in addition to a few others). The approach
+ has been to make zic a bit smarter about figuring out what time zone
+ abbreviations apply just after the time specified in the "UNTIL" part
+ of a zone line. Putting the smarts in zic means avoiding having
+ transition times show up in both "Zone" lines and "Rule" lines, which
+ in turn avoids multiple transition time entries in time zone files.
+ (This also makes the zic input files such as "europe" a bit shorter and
+ should ease maintenance.)
+
+
+Release data96f - 1996-04-19 19:20:03 -0000
+ [tzdata96f.tar.gz is missing!]
+
+ The only changes are to the "northamerica" file; the time zone
+ abbreviation for Denver is corrected to MST (and MDT), and the
+ comments for Mexico have been updated.
+
+
+Release data96e - 1996-03-19 17:37:26 -0500
+
+ Proposals by Paul Eggert, in particular the Portugal change that
+ comes into play at the end of this month.
+
+
+Release data96d - 1996-03-18 20:49:39 -0500
+
+ [not summarized]
+
+
+Release code96e - 1996-02-29 15:43:27 -0000
+ [tzcode96e.tar.gz is missing!]
+
+ internationalization changes and the fix to the documentation for strftime
+
+
+Release code96d-data96c - 1996-02-12 11:05:27 -0500
+
+ The "code" file simply updates Bob Kridle's electronic address.
+
+ The "data" file updates rules for Mexico.
+
+
+Release data96b - 1996-01-27 15:44:42 -0500
+
+ Kiribati change
+
+
+Release code96c - 1996-01-16 16:58:15 -0500
+
+ leap-year streamlining and binary-search changes
+
+ fix to newctime.3
+
+
+Release code96b - 1996-01-10 20:42:39 -0500
+
+ fixes and enhancements from Paul Eggert, including code that
+ emulates the behavior of recent versions of the SunOS "date"
+ command.
+
+
+Release 96a - 1996-01-06 09:08:24 -0500
+
+ Israel updates
+
+ fixes to strftime.c for correct ISO 8601 week number generation,
+ plus support for two new formats ('G' and 'g') to give ISO 8601 year
+ numbers (which are not necessarily the same as calendar year numbers)
+
+
+Release code95i-data95m - 1995-12-21 12:46:47 -0500
+
+ The latest revisions from Paul Eggert are included, the usno1995
+ file has been updated, and a new file ("WWW") covering useful URLs
+ has been added.
+
+
+Release code95h-data95l - 1995-12-19 18:10:12 -0500
+
+ A simplification of a macro definition, a change to data for Sudan,
+ and (for last minute shoppers) notes in the "Music" file on the CD
+ "Old Man Time".
+
+
+Release code95g-data95k - 1995-10-30 10:32:47 -0500
+
+ (slightly reformatted) 8-bit-clean proposed patch
+
+ minor patch: US/Eastern -> America/New_York
+
+ snapshot of the USNO's latest data ("usno1995")
+
+ some other minor cleanups
+
+
+Release code95f-data95j - 1995-10-28 21:01:34 -0000
+ [tzcode95f.tar.gz + tzdata95j.tar.gz are both missing!]
+
+ European cleanups
+
+ support for 64-bit time_t's
+
+ optimization in localtime.c
+
+
+Release code95e - 1995-10-13 13:23:57 -0400
+
+ the mktime change to scan from future to past when trying to find time zone
+ offsets
+
+
+Release data95i - 1995-09-26 10:43:26 -0400
+
+ For Canada/Central, guess that the Sun customer's "one week too
+ early" was just a approximation, and the true error is one month
+ too early. This is consistent with the rest of Canada.
+
+
+Release data95h - 1995-09-21 11:26:48 -0400
+
+ latest changes from Paul Eggert
+
+
+Release code95d - 1995-09-14 11:14:45 -0400
+
+ the addition of a "Music" file, which documents four recorded
+ versions of the tune "Save That Time".
+
+
+Release data95g - 1995-09-01 17:21:36 -0400
+
+ "yearistype" correction
+
+
+Release data95f - 1995-08-28 20:46:56 -0400
+
+ Paul Eggert's change to the australasia file
+
+
+Release data95e - 1995-07-08 18:02:34 -0400
+
+ The only change is a leap second at the end of this year.
+ Thanks to Bradley White for forwarding news on the leap second.
+
+
+Release data95d - 1995-07-03 13:26:22 -0400
+
+ Paul Eggert's changes
+
+
+Release data95c - 1995-07-02 19:19:28 -0400
+
+ changes to "asia", "backward", "europe", and "southamerica"
+ (read: northamericacentrics need not apply)
+
+
+Release code95c - 1995-03-13 14:00:46 -0500
+
+ one-line fix for sign extension problems in detzcode
+
+
+Release 95b - 1995-03-04 11:22:38 -0500
+
+ Minor changes in both:
+
+ The "code" file contains a workaround for the lack of "unistd.h" in
+ Microsoft C++ version 7.
+
+ The "data" file contains a fixed "Link" for America/Shiprock.
+
+
+Release 94h - 1994-12-10 12:51:14 -0500
+
+ The files:
+
+ * incorporate the changes to "zdump" and "date" to make changes to
+ the "TZ" environment variable permanent;
+
+ * incorporate the table changes by Paul Eggert;
+
+ * include (and document) support for universal time specifications in
+ data files - but do not (yet) include use of this feature in the
+ data files.
+
+ Think of this as "TZ Classic" - the software has been set up not to break if
+ universal time shows up in its input, and data entries have been
+ left as is so as not to break existing implementations.
+
+
+Release data94f - 1994-08-20 12:56:09 -0400
+
+ (with thanks!) the latest data updates from Paul Eggert
+
+
+Release data94e - 1994-06-04 13:13:53 -0400
+
+ [not summarized]
+
+
+Release code94g - 1994-05-05 12:14:07 -0400
+
+ fix missing "optind.c" and a reference to it in the Makefile
+
+
+Release code94f - 1994-05-05 13:00:33 -0000
+ [tzcode94f.tar.gz is missing!]
+
+ changes to avoid overflow in difftime, as well as changes to cope
+ with the 52/53 challenge in strftime
+
+
+Release code94e - 1994-03-30 23:32:59 -0500
+
+ change for the benefit of PCTS
+
+
+Release 94d - 1994-02-24 15:42:25 -0500
+
+ Avoid clashes with POSIX semantics for zones such as GMT+4.
+
+ Some other very minor housekeeping is also present.
+
+
+Release code94c - 1994-02-10 08:52:40 -0500
+
+ Fix bug where mkdirs was broken unless you compile with
+ -fwritable-strings (which is generally losing to do).
+
+
+Release 94b - 1994-02-07 10:04:33 -0500
+
+ work by Paul Eggert who notes:
+
+ I found another book of time zone histories by E W Whitman; it's not
+ as extensive as Shanks but has a few goodies of its own. I used it
+ to update the tables. I also fixed some more as a result of
+ correspondence with Adam David and Peter Ilieve, and move some stray
+ links from 'europe' to 'backward'. I corrected some scanning errors
+ in usno1989.
+
+ As far as the code goes, I fixed zic to allow years in the range
+ INT_MIN to INT_MAX; this fixed a few boundary conditions around 1900.
+ And I cleaned up the zic documentation a little bit.
+
+
+Release data94a - 1994-02-03 08:58:54 -0500
+
+ It simply incorporates the recently announced leap second into the
+ "leapseconds" file.
+
+
+Release 93g - 1993-11-22 17:28:27 -0500
+
+ Paul Eggert has provided a good deal of historic information (based
+ on Shanks), and there are some code changes to deal with the buglets
+ that crawled out in dealing with the new information.
+
+
+Release 93f - 1993-10-15 12:27:46 -0400
+
+ Paul Eggert's changes
+
+
+Release 93e - 1993-09-05 21:21:44 -0400
+
+ This has updated data for Israel, England, and Kwajalein. There's
+ also an update to "zdump" to cope with Kwajalein's 24-hour jump.
+ Thanks to Paul Eggert and Peter Ilieve for the changes.
+
+
+Release 93d - 1993-06-17 23:34:17 -0400
+
+ new fix and new data on Israel
+
+
+Release 93c - 1993-06-06 19:31:55 -0400
+
+ [not summarized]
+
+
+Release 93b - 1993-02-02 14:53:58 -0500
+
+ updated "leapseconds" file
+
+
+Release 93 - 1993-01-08 07:01:06 -0500
+
+ At kre's suggestion, the package has been split in two - a code piece
+ (which also includes documentation) that's only of use to folks who
+ want to recompile things and a data piece useful to anyone who can
+ run "zic".
+
+ The new version has a few changes to the data files, a few
+ portability changes, and an off-by-one fix (with thanks to
+ Tom Karzes at deshaw.com for providing a description and a
+ solution).
+
+
+Release 92c - 1992-11-21 17:35:36 -0000
+ [tz92c.tar.Z is missing!]
+
+ The fallout from the latest round of DST transitions.
+
+ There are changes for Portugal, Saskatchewan, and "Pacific-New";
+ there's also a change to "zic.c" that makes it portable to more systems.
+
+
+Release 92 - 1992-04-25 18:17:03 -0000
+ [tz92.tar.Z is missing!]
+
+ By popular demand (well, at any rate, following a request by kre at munnari)
+
+
+The 1989 update of the time zone package featured:
+
+ * POSIXization (including interpretation of POSIX-style TZ environment
+ variables, provided by Guy Harris),
+ * ANSIfication (including versions of "mktime" and "difftime"),
+ * SVIDulation (an "altzone" variable)
+ * MACHination (the "gtime" function)
+ * corrections to some time zone data (including corrections to the rules
+ for Great Britain and New Zealand)
+ * reference data from the United States Naval Observatory for folks who
+ want to do additional time zones
+ * and the 1989 data for Saudi Arabia.
+
+ (Since this code will be treated as "part of the implementation" in some
+ places and as "part of the application" in others, there's no good way to
+ name functions, such as timegm, that are not part of the proposed ANSI C
+ standard; such functions have kept their old, underscore-free names in this
+ update.)
+
+ And the "dysize" function has disappeared; it was present to allow
+ compilation of the "date" command on old BSD systems, and a version of "date"
+ is now provided in the package. The "date" command is not created when you
+ "make all" since it may lack options provided by the version distributed with
+ your operating system, or may not interact with the system in the same way
+ the native version does.
+
+ Since POSIX frowns on correct leap second handling, the default behavior of
+ the "zic" command (in the absence of a "-L" option) has been changed to omit
+ leap second information from its output files.
+
+
+-----
+Notes
+
+This file contains copies of the part of each release announcement
+that talks about the changes in that release. The text has been
+adapted and reformatted for the purposes of this file.
+
+Traditionally a release R consists of a pair of tarball files,
+tzcodeR.tar.gz and tzdataR.tar.gz. However, some releases (e.g.,
+code2010a, data2012c) consist of just one or the other tarball, and a
+few (e.g., code2012c-data2012d) have tarballs with mixed version
+numbers. Recent releases also come in an experimental format
+consisting of a single tarball tzdb-R.tar.lz with extra data.
+
+Release time stamps are taken from the release's commit (for newer,
+Git-based releases), from the newest file in the tarball (for older
+releases, where this info is available) or from the email announcing
+the release (if all else fails; these are marked with a time zone of
+-0000 and an "is missing!" comment).
+
+Earlier versions of the code and data were not announced on the tz
+list and are not summarized here.
+
+This file is in the public domain.
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/contrib/tzdata/README b/contrib/tzdata/README
new file mode 100644
index 0000000..8a09aa2
--- /dev/null
+++ b/contrib/tzdata/README
@@ -0,0 +1,71 @@
+README for the tz distribution
+
+"What time is it?" -- Richard Deacon as The King
+"Any time you want it to be." -- Frank Baxter as The Scientist
+ (from the Bell System film "About Time")
+
+The Time Zone Database (often called tz or zoneinfo) contains code and
+data that represent the history of local time for many representative
+locations around the globe. It is updated periodically to reflect
+changes made by political bodies to time zone boundaries, UTC offsets,
+and daylight-saving rules.
+
+Here is a recipe for acquiring, building, installing, and testing the
+tz distribution on a GNU/Linux or similar host.
+
+To acquire the distribution, run the following shell commands:
+
+ mkdir tz
+ cd tz
+ wget --retr-symlinks 'ftp://ftp.iana.org/tz/tz*-latest.tar.gz'
+ gzip -dc tzcode-latest.tar.gz | tar -xf -
+ gzip -dc tzdata-latest.tar.gz | tar -xf -
+
+Alternatively, the following shell commands acquire the same
+distribution, with extra data useful for regression testing:
+
+ wget --retr-symlinks 'ftp://ftp.iana.org/tz/tzdb-latest.tar.lz'
+ lzip -dc tzdb-latest.tar.lz | tar -xf -
+
+Be sure to read the comments in "Makefile" and make any changes needed
+to make things right for your system, especially if you are using some
+platform other than GNU/Linux. Then run the following commands,
+substituting your desired installation directory for "$HOME/tzdir":
+
+ make TOPDIR=$HOME/tzdir install
+ $HOME/tzdir/etc/zdump -v America/Los_Angeles
+
+Historical local time information has been included here to:
+
+* provide a compendium of data about the history of civil time
+ that is useful even if not 100% accurate;
+
+* give an idea of the variety of local time rules that have
+ existed in the past and thus an idea of the variety that may be
+ expected in the future;
+
+* provide a test of the generality of the local time rule description
+ system.
+
+The information in the time zone data files is by no means authoritative;
+fixes and enhancements are welcome. Please see the file CONTRIBUTING
+for details.
+
+Thanks to these Time Zone Caballeros who've made major contributions to the
+time conversion package: Keith Bostic; Bob Devine; Paul Eggert; Robert Elz;
+Guy Harris; Mark Horton; John Mackin; and Bradley White. Thanks also to
+Michael Bloom, Art Neilson, Stephen Prince, John Sovereign, and Frank Wales
+for testing work, and to Gwillim Law for checking local mean time data.
+Thanks in particular to Arthur David Olson, the project's founder and first
+maintainer, to whom the time zone community owes the greatest debt of all.
+None of them are responsible for remaining errors.
+
+Look in <ftp://ftp.iana.org/tz/releases/> for updated versions of these files.
+
+Please send comments or information to tz@iana.org.
+
+-----
+
+This file is in the public domain, so clarified as of 2009-05-17 by
+Arthur David Olson. The other files in this distribution are either
+public domain or BSD licensed; see the file LICENSE for details.
diff --git a/contrib/tzdata/Theory b/contrib/tzdata/Theory
new file mode 100644
index 0000000..677baf6
--- /dev/null
+++ b/contrib/tzdata/Theory
@@ -0,0 +1,840 @@
+Theory and pragmatics of the tz code and data
+
+
+----- Outline -----
+
+ Scope of the tz database
+ Names of time zone rules
+ Time zone abbreviations
+ Accuracy of the tz database
+ Time and date functions
+ Calendrical issues
+ Time and time zones on Mars
+
+
+----- Scope of the tz database -----
+
+The tz database attempts to record the history and predicted future of
+all computer-based clocks that track civil time. To represent this
+data, the world is partitioned into regions whose clocks all agree
+about time stamps that occur after the somewhat-arbitrary cutoff point
+of the POSIX Epoch (1970-01-01 00:00:00 UTC). For each such region,
+the database records all known clock transitions, and labels the region
+with a notable location. Although 1970 is a somewhat-arbitrary
+cutoff, there are significant challenges to moving the cutoff earlier
+even by a decade or two, due to the wide variety of local practices
+before computer timekeeping became prevalent.
+
+Clock transitions before 1970 are recorded for each such location,
+because most systems support time stamps before 1970 and could
+misbehave if data entries were omitted for pre-1970 transitions.
+However, the database is not designed for and does not suffice for
+applications requiring accurate handling of all past times everywhere,
+as it would take far too much effort and guesswork to record all
+details of pre-1970 civil timekeeping.
+
+As described below, reference source code for using the tz database is
+also available. The tz code is upwards compatible with POSIX, an
+international standard for UNIX-like systems. As of this writing, the
+current edition of POSIX is:
+
+ The Open Group Base Specifications Issue 7
+ IEEE Std 1003.1, 2013 Edition
+ <http://pubs.opengroup.org/onlinepubs/9699919799/>
+
+
+
+----- Names of time zone rules -----
+
+Each of the database's time zone rules has a unique name.
+Inexperienced users are not expected to select these names unaided.
+Distributors should provide documentation and/or a simple selection
+interface that explains the names; for one example, see the 'tzselect'
+program in the tz code. The Unicode Common Locale Data Repository
+<http://cldr.unicode.org/> contains data that may be useful for other
+selection interfaces.
+
+The time zone rule naming conventions attempt to strike a balance
+among the following goals:
+
+ * Uniquely identify every region where clocks have agreed since 1970.
+ This is essential for the intended use: static clocks keeping local
+ civil time.
+
+ * Indicate to experts where that region is.
+
+ * Be robust in the presence of political changes. For example, names
+ of countries are ordinarily not used, to avoid incompatibilities
+ when countries change their name (e.g. Zaire->Congo) or when
+ locations change countries (e.g. Hong Kong from UK colony to
+ China).
+
+ * Be portable to a wide variety of implementations.
+
+ * Use a consistent naming conventions over the entire world.
+
+Names normally have the form AREA/LOCATION, where AREA is the name
+of a continent or ocean, and LOCATION is the name of a specific
+location within that region. North and South America share the same
+area, 'America'. Typical names are 'Africa/Cairo', 'America/New_York',
+and 'Pacific/Honolulu'.
+
+Here are the general rules used for choosing location names,
+in decreasing order of importance:
+
+ Use only valid POSIX file name components (i.e., the parts of
+ names other than '/'). Do not use the file name
+ components '.' and '..'. Within a file name component,
+ use only ASCII letters, '.', '-' and '_'. Do not use
+ digits, as that might create an ambiguity with POSIX
+ TZ strings. A file name component must not exceed 14
+ characters or start with '-'. E.g., prefer 'Brunei'
+ to 'Bandar_Seri_Begawan'. Exceptions: see the discussion
+ of legacy names below.
+ A name must not be empty, or contain '//', or start or end with '/'.
+ Do not use names that differ only in case. Although the reference
+ implementation is case-sensitive, some other implementations
+ are not, and they would mishandle names differing only in case.
+ If one name A is an initial prefix of another name AB (ignoring case),
+ then B must not start with '/', as a regular file cannot have
+ the same name as a directory in POSIX. For example,
+ 'America/New_York' precludes 'America/New_York/Bronx'.
+ Uninhabited regions like the North Pole and Bouvet Island
+ do not need locations, since local time is not defined there.
+ There should typically be at least one name for each ISO 3166-1
+ officially assigned two-letter code for an inhabited country
+ or territory.
+ If all the clocks in a region have agreed since 1970,
+ don't bother to include more than one location
+ even if subregions' clocks disagreed before 1970.
+ Otherwise these tables would become annoyingly large.
+ If a name is ambiguous, use a less ambiguous alternative;
+ e.g. many cities are named San José and Georgetown, so
+ prefer 'Costa_Rica' to 'San_Jose' and 'Guyana' to 'Georgetown'.
+ Keep locations compact. Use cities or small islands, not countries
+ or regions, so that any future time zone changes do not split
+ locations into different time zones. E.g. prefer 'Paris'
+ to 'France', since France has had multiple time zones.
+ Use mainstream English spelling, e.g. prefer 'Rome' to 'Roma', and
+ prefer 'Athens' to the Greek 'Αθήνα' or the Romanized 'Athína'.
+ The POSIX file name restrictions encourage this rule.
+ Use the most populous among locations in a zone,
+ e.g. prefer 'Shanghai' to 'Beijing'. Among locations with
+ similar populations, pick the best-known location,
+ e.g. prefer 'Rome' to 'Milan'.
+ Use the singular form, e.g. prefer 'Canary' to 'Canaries'.
+ Omit common suffixes like '_Islands' and '_City', unless that
+ would lead to ambiguity. E.g. prefer 'Cayman' to
+ 'Cayman_Islands' and 'Guatemala' to 'Guatemala_City',
+ but prefer 'Mexico_City' to 'Mexico' because the country
+ of Mexico has several time zones.
+ Use '_' to represent a space.
+ Omit '.' from abbreviations in names, e.g. prefer 'St_Helena'
+ to 'St._Helena'.
+ Do not change established names if they only marginally
+ violate the above rules. For example, don't change
+ the existing name 'Rome' to 'Milan' merely because
+ Milan's population has grown to be somewhat greater
+ than Rome's.
+ If a name is changed, put its old spelling in the 'backward' file.
+ This means old spellings will continue to work.
+
+The file 'zone1970.tab' lists geographical locations used to name time
+zone rules. It is intended to be an exhaustive list of names for
+geographic regions as described above; this is a subset of the names
+in the data. Although a 'zone1970.tab' location's longitude
+corresponds to its LMT offset with one hour for every 15 degrees east
+longitude, this relationship is not exact.
+
+Older versions of this package used a different naming scheme,
+and these older names are still supported.
+See the file 'backward' for most of these older names
+(e.g., 'US/Eastern' instead of 'America/New_York').
+The other old-fashioned names still supported are
+'WET', 'CET', 'MET', and 'EET' (see the file 'europe').
+
+Older versions of this package defined legacy names that are
+incompatible with the first rule of location names, but which are
+still supported. These legacy names are mostly defined in the file
+'etcetera'. Also, the file 'backward' defines the legacy names
+'GMT0', 'GMT-0', 'GMT+0' and 'Canada/East-Saskatchewan', and the file
+'northamerica' defines the legacy names 'EST5EDT', 'CST6CDT',
+'MST7MDT', and 'PST8PDT'.
+
+Excluding 'backward' should not affect the other data. If
+'backward' is excluded, excluding 'etcetera' should not affect the
+remaining data.
+
+
+----- Time zone abbreviations -----
+
+When this package is installed, it generates time zone abbreviations
+like 'EST' to be compatible with human tradition and POSIX.
+Here are the general rules used for choosing time zone abbreviations,
+in decreasing order of importance:
+
+ Use three or more characters that are ASCII alphanumerics or '+' or '-'.
+ Previous editions of this database also used characters like
+ ' ' and '?', but these characters have a special meaning to
+ the shell and cause commands like
+ set `date`
+ to have unexpected effects.
+ Previous editions of this rule required upper-case letters,
+ but the Congressman who introduced Chamorro Standard Time
+ preferred "ChST", so lower-case letters are now allowed.
+ Also, POSIX from 2001 on relaxed the rule to allow '-', '+',
+ and alphanumeric characters from the portable character set
+ in the current locale. In practice ASCII alphanumerics and
+ '+' and '-' are safe in all locales.
+
+ In other words, in the C locale the POSIX extended regular
+ expression [-+[:alnum:]]{3,} should match the abbreviation.
+ This guarantees that all abbreviations could have been
+ specified by a POSIX TZ string.
+
+ Use abbreviations that are in common use among English-speakers,
+ e.g. 'EST' for Eastern Standard Time in North America.
+ We assume that applications translate them to other languages
+ as part of the normal localization process; for example,
+ a French application might translate 'EST' to 'HNE'.
+
+ For zones whose times are taken from a city's longitude, use the
+ traditional xMT notation, e.g. 'PMT' for Paris Mean Time.
+ The only name like this in current use is 'GMT'.
+
+ Use 'LMT' for local mean time of locations before the introduction
+ of standard time; see "Scope of the tz database".
+
+ If there is no common English abbreviation, use numeric offsets like
+ -05 and +0830 that are generated by zic's %z notation.
+
+ [The remaining guidelines predate the introduction of %z.
+ They are problematic as they mean tz data entries invent
+ notation rather than record it. These guidelines are now
+ deprecated and the plan is to gradually move to %z for
+ inhabited locations and to "-00" for uninhabited locations.]
+
+ If there is no common English abbreviation, abbreviate the English
+ translation of the usual phrase used by native speakers.
+ If this is not available or is a phrase mentioning the country
+ (e.g. "Cape Verde Time"), then:
+
+ When a country is identified with a single or principal zone,
+ append 'T' to the country's ISO code, e.g. 'CVT' for
+ Cape Verde Time. For summer time append 'ST';
+ for double summer time append 'DST'; etc.
+ Otherwise, take the first three letters of an English place
+ name identifying each zone and append 'T', 'ST', etc.
+ as before; e.g. 'VLAST' for VLAdivostok Summer Time.
+
+ Use UT (with time zone abbreviation '-00') for locations while
+ uninhabited. The leading '-' is a flag that the time
+ zone is in some sense undefined; this notation is
+ derived from Internet RFC 3339.
+
+Application writers should note that these abbreviations are ambiguous
+in practice: e.g. 'CST' has a different meaning in China than
+it does in the United States. In new applications, it's often better
+to use numeric UT offsets like '-0600' instead of time zone
+abbreviations like 'CST'; this avoids the ambiguity.
+
+
+----- Accuracy of the tz database -----
+
+The tz database is not authoritative, and it surely has errors.
+Corrections are welcome and encouraged; see the file CONTRIBUTING.
+Users requiring authoritative data should consult national standards
+bodies and the references cited in the database's comments.
+
+Errors in the tz database arise from many sources:
+
+ * The tz database predicts future time stamps, and current predictions
+ will be incorrect after future governments change the rules.
+ For example, if today someone schedules a meeting for 13:00 next
+ October 1, Casablanca time, and tomorrow Morocco changes its
+ daylight saving rules, software can mess up after the rule change
+ if it blithely relies on conversions made before the change.
+
+ * The pre-1970 entries in this database cover only a tiny sliver of how
+ clocks actually behaved; the vast majority of the necessary
+ information was lost or never recorded. Thousands more zones would
+ be needed if the tz database's scope were extended to cover even
+ just the known or guessed history of standard time; for example,
+ the current single entry for France would need to split into dozens
+ of entries, perhaps hundreds. And in most of the world even this
+ approach would be misleading due to widespread disagreement or
+ indifference about what times should be observed. In her 2015 book
+ "The Global Transformation of Time, 1870-1950", Vanessa Ogle writes
+ "Outside of Europe and North America there was no system of time
+ zones at all, often not even a stable landscape of mean times,
+ prior to the middle decades of the twentieth century". See:
+ Timothy Shenk, Booked: A Global History of Time. Dissent 2015-12-17
+ https://www.dissentmagazine.org/blog/booked-a-global-history-of-time-vanessa-ogle
+
+ * Most of the pre-1970 data entries come from unreliable sources, often
+ astrology books that lack citations and whose compilers evidently
+ invented entries when the true facts were unknown, without
+ reporting which entries were known and which were invented.
+ These books often contradict each other or give implausible entries,
+ and on the rare occasions when they are checked they are
+ typically found to be incorrect.
+
+ * For the UK the tz database relies on years of first-class work done by
+ Joseph Myers and others; see <http://www.polyomino.org.uk/british-time/>.
+ Other countries are not done nearly as well.
+
+ * Sometimes, different people in the same city would maintain clocks
+ that differed significantly. Railway time was used by railroad
+ companies (which did not always agree with each other),
+ church-clock time was used for birth certificates, etc.
+ Often this was merely common practice, but sometimes it was set by law.
+ For example, from 1891 to 1911 the UT offset in France was legally
+ 0:09:21 outside train stations and 0:04:21 inside.
+
+ * Although a named location in the tz database stands for the
+ containing region, its pre-1970 data entries are often accurate for
+ only a small subset of that region. For example, Europe/London
+ stands for the United Kingdom, but its pre-1847 times are valid
+ only for locations that have London's exact meridian, and its 1847
+ transition to GMT is known to be valid only for the L&NW and the
+ Caledonian railways.
+
+ * The tz database does not record the earliest time for which a zone's
+ data entries are thereafter valid for every location in the region.
+ For example, Europe/London is valid for all locations in its
+ region after GMT was made the standard time, but the date of
+ standardization (1880-08-02) is not in the tz database, other than
+ in commentary. For many zones the earliest time of validity is
+ unknown.
+
+ * The tz database does not record a region's boundaries, and in many
+ cases the boundaries are not known. For example, the zone
+ America/Kentucky/Louisville represents a region around the city of
+ Louisville, the boundaries of which are unclear.
+
+ * Changes that are modeled as instantaneous transitions in the tz
+ database were often spread out over hours, days, or even decades.
+
+ * Even if the time is specified by law, locations sometimes
+ deliberately flout the law.
+
+ * Early timekeeping practices, even assuming perfect clocks, were
+ often not specified to the accuracy that the tz database requires.
+
+ * Sometimes historical timekeeping was specified more precisely
+ than what the tz database can handle. For example, from 1909 to
+ 1937 Netherlands clocks were legally UT +00:19:32.13, but the tz
+ database cannot represent the fractional second.
+
+ * Even when all the timestamp transitions recorded by the tz database
+ are correct, the tz rules that generate them may not faithfully
+ reflect the historical rules. For example, from 1922 until World
+ War II the UK moved clocks forward the day following the third
+ Saturday in April unless that was Easter, in which case it moved
+ clocks forward the previous Sunday. Because the tz database has no
+ way to specify Easter, these exceptional years are entered as
+ separate tz Rule lines, even though the legal rules did not change.
+
+ * The tz database models pre-standard time using the proleptic Gregorian
+ calendar and local mean time (LMT), but many people used other
+ calendars and other timescales. For example, the Roman Empire used
+ the Julian calendar, and had 12 varying-length daytime hours with a
+ non-hour-based system at night.
+
+ * Early clocks were less reliable, and data entries do not represent
+ this unreliability.
+
+ * As for leap seconds, civil time was not based on atomic time before
+ 1972, and we don't know the history of earth's rotation accurately
+ enough to map SI seconds to historical solar time to more than
+ about one-hour accuracy. See: Morrison LV, Stephenson FR.
+ Historical values of the Earth's clock error Delta T and the
+ calculation of eclipses. J Hist Astron. 2004;35:327-36
+ <http://adsabs.harvard.edu/full/2004JHA....35..327M>;
+ Historical values of the Earth's clock error. J Hist Astron. 2005;36:339
+ <http://adsabs.harvard.edu/full/2005JHA....36..339M>.
+
+ * The relationship between POSIX time (that is, UTC but ignoring leap
+ seconds) and UTC is not agreed upon after 1972. Although the POSIX
+ clock officially stops during an inserted leap second, at least one
+ proposed standard has it jumping back a second instead; and in
+ practice POSIX clocks more typically either progress glacially during
+ a leap second, or are slightly slowed while near a leap second.
+
+ * The tz database does not represent how uncertain its information is.
+ Ideally it would contain information about when data entries are
+ incomplete or dicey. Partial temporal knowledge is a field of
+ active research, though, and it's not clear how to apply it here.
+
+In short, many, perhaps most, of the tz database's pre-1970 and future
+time stamps are either wrong or misleading. Any attempt to pass the
+tz database off as the definition of time should be unacceptable to
+anybody who cares about the facts. In particular, the tz database's
+LMT offsets should not be considered meaningful, and should not prompt
+creation of zones merely because two locations differ in LMT or
+transitioned to standard time at different dates.
+
+
+----- Time and date functions -----
+
+The tz code contains time and date functions that are upwards
+compatible with those of POSIX.
+
+POSIX has the following properties and limitations.
+
+* In POSIX, time display in a process is controlled by the
+ environment variable TZ. Unfortunately, the POSIX TZ string takes
+ a form that is hard to describe and is error-prone in practice.
+ Also, POSIX TZ strings can't deal with other (for example, Israeli)
+ daylight saving time rules, or situations where more than two
+ time zone abbreviations are used in an area.
+
+ The POSIX TZ string takes the following form:
+
+ stdoffset[dst[offset][,date[/time],date[/time]]]
+
+ where:
+
+ std and dst
+ are 3 or more characters specifying the standard
+ and daylight saving time (DST) zone names.
+ Starting with POSIX.1-2001, std and dst may also be
+ in a quoted form like "<UTC+10>"; this allows
+ "+" and "-" in the names.
+ offset
+ is of the form '[+-]hh:[mm[:ss]]' and specifies the
+ offset west of UT. 'hh' may be a single digit; 0<=hh<=24.
+ The default DST offset is one hour ahead of standard time.
+ date[/time],date[/time]
+ specifies the beginning and end of DST. If this is absent,
+ the system supplies its own rules for DST, and these can
+ differ from year to year; typically US DST rules are used.
+ time
+ takes the form 'hh:[mm[:ss]]' and defaults to 02:00.
+ This is the same format as the offset, except that a
+ leading '+' or '-' is not allowed.
+ date
+ takes one of the following forms:
+ Jn (1<=n<=365)
+ origin-1 day number not counting February 29
+ n (0<=n<=365)
+ origin-0 day number counting February 29 if present
+ Mm.n.d (0[Sunday]<=d<=6[Saturday], 1<=n<=5, 1<=m<=12)
+ for the dth day of week n of month m of the year,
+ where week 1 is the first week in which day d appears,
+ and '5' stands for the last week in which day d appears
+ (which may be either the 4th or 5th week).
+ Typically, this is the only useful form;
+ the n and Jn forms are rarely used.
+
+ Here is an example POSIX TZ string, for US Pacific time using rules
+ appropriate from 1987 through 2006:
+
+ TZ='PST8PDT,M4.1.0/02:00,M10.5.0/02:00'
+
+ This POSIX TZ string is hard to remember, and mishandles time stamps
+ before 1987 and after 2006. With this package you can use this
+ instead:
+
+ TZ='America/Los_Angeles'
+
+* POSIX does not define the exact meaning of TZ values like "EST5EDT".
+ Typically the current US DST rules are used to interpret such values,
+ but this means that the US DST rules are compiled into each program
+ that does time conversion. This means that when US time conversion
+ rules change (as in the United States in 1987), all programs that
+ do time conversion must be recompiled to ensure proper results.
+
+* The TZ environment variable is process-global, which makes it hard
+ to write efficient, thread-safe applications that need access
+ to multiple time zones.
+
+* In POSIX, there's no tamper-proof way for a process to learn the
+ system's best idea of local wall clock. (This is important for
+ applications that an administrator wants used only at certain times -
+ without regard to whether the user has fiddled the "TZ" environment
+ variable. While an administrator can "do everything in UTC" to get
+ around the problem, doing so is inconvenient and precludes handling
+ daylight saving time shifts - as might be required to limit phone
+ calls to off-peak hours.)
+
+* POSIX provides no convenient and efficient way to determine the UT
+ offset and time zone abbreviation of arbitrary time stamps,
+ particularly for time zone settings that do not fit into the
+ POSIX model.
+
+* POSIX requires that systems ignore leap seconds.
+
+* The tz code attempts to support all the time_t implementations
+ allowed by POSIX. The time_t type represents a nonnegative count of
+ seconds since 1970-01-01 00:00:00 UTC, ignoring leap seconds.
+ In practice, time_t is usually a signed 64- or 32-bit integer; 32-bit
+ signed time_t values stop working after 2038-01-19 03:14:07 UTC, so
+ new implementations these days typically use a signed 64-bit integer.
+ Unsigned 32-bit integers are used on one or two platforms,
+ and 36-bit and 40-bit integers are also used occasionally.
+ Although earlier POSIX versions allowed time_t to be a
+ floating-point type, this was not supported by any practical
+ systems, and POSIX.1-2013 and the tz code both require time_t
+ to be an integer type.
+
+These are the extensions that have been made to the POSIX functions:
+
+* The "TZ" environment variable is used in generating the name of a file
+ from which time zone information is read (or is interpreted a la
+ POSIX); "TZ" is no longer constrained to be a three-letter time zone
+ name followed by a number of hours and an optional three-letter
+ daylight time zone name. The daylight saving time rules to be used
+ for a particular time zone are encoded in the time zone file;
+ the format of the file allows U.S., Australian, and other rules to be
+ encoded, and allows for situations where more than two time zone
+ abbreviations are used.
+
+ It was recognized that allowing the "TZ" environment variable to
+ take on values such as "America/New_York" might cause "old" programs
+ (that expect "TZ" to have a certain form) to operate incorrectly;
+ consideration was given to using some other environment variable
+ (for example, "TIMEZONE") to hold the string used to generate the
+ time zone information file name. In the end, however, it was decided
+ to continue using "TZ": it is widely used for time zone purposes;
+ separately maintaining both "TZ" and "TIMEZONE" seemed a nuisance;
+ and systems where "new" forms of "TZ" might cause problems can simply
+ use TZ values such as "EST5EDT" which can be used both by
+ "new" programs (a la POSIX) and "old" programs (as zone names and
+ offsets).
+
+* The code supports platforms with a UT offset member in struct tm,
+ e.g., tm_gmtoff.
+
+* The code supports platforms with a time zone abbreviation member in
+ struct tm, e.g., tm_zone.
+
+* Since the "TZ" environment variable can now be used to control time
+ conversion, the "daylight" and "timezone" variables are no longer
+ needed. (These variables are defined and set by "tzset"; however, their
+ values will not be used by "localtime.")
+
+* Functions tzalloc, tzfree, localtime_rz, and mktime_z for
+ more-efficient thread-safe applications that need to use
+ multiple time zones. The tzalloc and tzfree functions
+ allocate and free objects of type timezone_t, and localtime_rz
+ and mktime_z are like localtime_r and mktime with an extra
+ timezone_t argument. The functions were inspired by NetBSD.
+
+* A function "tzsetwall" has been added to arrange for the system's
+ best approximation to local wall clock time to be delivered by
+ subsequent calls to "localtime." Source code for portable
+ applications that "must" run on local wall clock time should call
+ "tzsetwall();" if such code is moved to "old" systems that don't
+ provide tzsetwall, you won't be able to generate an executable program.
+ (These time zone functions also arrange for local wall clock time to be
+ used if tzset is called - directly or indirectly - and there's no "TZ"
+ environment variable; portable applications should not, however, rely
+ on this behavior since it's not the way SVR2 systems behave.)
+
+* Negative time_t values are supported, on systems where time_t is signed.
+
+* These functions can account for leap seconds, thanks to Bradley White.
+
+Points of interest to folks with other systems:
+
+* Code compatible with this package is already part of many platforms,
+ including GNU/Linux, Android, the BSDs, Chromium OS, Cygwin, AIX, iOS,
+ BlackBery 10, macOS, Microsoft Windows, OpenVMS, and Solaris.
+ On such hosts, the primary use of this package
+ is to update obsolete time zone rule tables.
+ To do this, you may need to compile the time zone compiler
+ 'zic' supplied with this package instead of using the system 'zic',
+ since the format of zic's input is occasionally extended,
+ and a platform may still be shipping an older zic.
+
+* The UNIX Version 7 "timezone" function is not present in this package;
+ it's impossible to reliably map timezone's arguments (a "minutes west
+ of GMT" value and a "daylight saving time in effect" flag) to a
+ time zone abbreviation, and we refuse to guess.
+ Programs that in the past used the timezone function may now examine
+ tzname[localtime(&clock)->tm_isdst] to learn the correct time
+ zone abbreviation to use. Alternatively, use
+ localtime(&clock)->tm_zone if this has been enabled.
+
+* The 4.2BSD gettimeofday function is not used in this package.
+ This formerly let users obtain the current UTC offset and DST flag,
+ but this functionality was removed in later versions of BSD.
+
+* In SVR2, time conversion fails for near-minimum or near-maximum
+ time_t values when doing conversions for places that don't use UT.
+ This package takes care to do these conversions correctly.
+ A comment in the source code tells how to get compatibly wrong
+ results.
+
+The functions that are conditionally compiled if STD_INSPIRED is defined
+should, at this point, be looked on primarily as food for thought. They are
+not in any sense "standard compatible" - some are not, in fact, specified in
+*any* standard. They do, however, represent responses of various authors to
+standardization proposals.
+
+Other time conversion proposals, in particular the one developed by folks at
+Hewlett Packard, offer a wider selection of functions that provide capabilities
+beyond those provided here. The absence of such functions from this package
+is not meant to discourage the development, standardization, or use of such
+functions. Rather, their absence reflects the decision to make this package
+contain valid extensions to POSIX, to ensure its broad acceptability. If
+more powerful time conversion functions can be standardized, so much the
+better.
+
+
+----- Interface stability -----
+
+The tz code and data supply the following interfaces:
+
+ * A set of zone names as per "Names of time zone rules" above.
+
+ * Library functions described in "Time and date functions" above.
+
+ * The programs tzselect, zdump, and zic, documented in their man pages.
+
+ * The format of zic input files, documented in the zic man page.
+
+ * The format of zic output files, documented in the tzfile man page.
+
+ * The format of zone table files, documented in zone1970.tab.
+
+ * The format of the country code file, documented in iso3166.tab.
+
+When these interfaces are changed, an effort is made to preserve
+backward compatibility. For example, tz data files typically do not
+rely on recently-added zic features, so that users can run older zic
+versions to process newer data files.
+
+Interfaces not listed above are less stable. For example, users
+should not rely on particular UT offsets or abbreviations for time
+stamps, as data entries are often based on guesswork and these guesses
+may be corrected or improved.
+
+
+----- Calendrical issues -----
+
+Calendrical issues are a bit out of scope for a time zone database,
+but they indicate the sort of problems that we would run into if we
+extended the time zone database further into the past. An excellent
+resource in this area is Nachum Dershowitz and Edward M. Reingold,
+Calendrical Calculations: Third Edition, Cambridge University Press (2008)
+<http://emr.cs.iit.edu/home/reingold/calendar-book/third-edition/>.
+Other information and sources are given below. They sometimes disagree.
+
+
+France
+
+Gregorian calendar adopted 1582-12-20.
+French Revolutionary calendar used 1793-11-24 through 1805-12-31,
+and (in Paris only) 1871-05-06 through 1871-05-23.
+
+
+Russia
+
+From Chris Carrier (1996-12-02):
+On 1929-10-01 the Soviet Union instituted an "Eternal Calendar"
+with 30-day months plus 5 holidays, with a 5-day week.
+On 1931-12-01 it changed to a 6-day week; in 1934 it reverted to the
+Gregorian calendar while retaining the 6-day week; on 1940-06-27 it
+reverted to the 7-day week. With the 6-day week the usual days
+off were the 6th, 12th, 18th, 24th and 30th of the month.
+(Source: Evitiar Zerubavel, _The Seven Day Circle_)
+
+
+Mark Brader reported a similar story in "The Book of Calendars", edited
+by Frank Parise (1982, Facts on File, ISBN 0-8719-6467-8), page 377. But:
+
+From: Petteri Sulonen (via Usenet)
+Date: 14 Jan 1999 00:00:00 GMT
+...
+
+If your source is correct, how come documents between 1929 and 1940 were
+still dated using the conventional, Gregorian calendar?
+
+I can post a scan of a document dated December 1, 1934, signed by
+Yenukidze, the secretary, on behalf of Kalinin, the President of the
+Executive Committee of the Supreme Soviet, if you like.
+
+
+
+Sweden (and Finland)
+
+From: Mark Brader
+Subject: Re: Gregorian reform - a part of locale?
+<news:1996Jul6.012937.29190@sq.com>
+Date: 1996-07-06
+
+In 1700, Denmark made the transition from Julian to Gregorian. Sweden
+decided to *start* a transition in 1700 as well, but rather than have one of
+those unsightly calendar gaps :-), they simply decreed that the next leap
+year after 1696 would be in 1744 - putting the whole country on a calendar
+different from both Julian and Gregorian for a period of 40 years.
+
+However, in 1704 something went wrong and the plan was not carried through;
+they did, after all, have a leap year that year. And one in 1708. In 1712
+they gave it up and went back to Julian, putting 30 days in February that
+year!...
+
+Then in 1753, Sweden made the transition to Gregorian in the usual manner,
+getting there only 13 years behind the original schedule.
+
+(A previous posting of this story was challenged, and Swedish readers
+produced the following references to support it: "Tideräkning och historia"
+by Natanael Beckman (1924) and "Tid, en bok om tideräkning och
+kalenderväsen" by Lars-Olof Lodén (1968).
+
+
+Grotefend's data
+
+From: "Michael Palmer" [with one obvious typo fixed]
+Subject: Re: Gregorian Calendar (was Re: Another FHC related question
+Newsgroups: soc.genealogy.german
+Date: Tue, 9 Feb 1999 02:32:48 -800
+...
+
+The following is a(n incomplete) listing, arranged chronologically, of
+European states, with the date they converted from the Julian to the
+Gregorian calendar:
+
+04/15 Oct 1582 - Italy (with exceptions), Spain, Portugal, Poland (Roman
+ Catholics and Danzig only)
+09/20 Dec 1582 - France, Lorraine
+
+21 Dec 1582/
+ 01 Jan 1583 - Holland, Brabant, Flanders, Hennegau
+10/21 Feb 1583 - bishopric of Liege (Lüttich)
+13/24 Feb 1583 - bishopric of Augsburg
+04/15 Oct 1583 - electorate of Trier
+05/16 Oct 1583 - Bavaria, bishoprics of Freising, Eichstedt, Regensburg,
+ Salzburg, Brixen
+13/24 Oct 1583 - Austrian Oberelsaß and Breisgau
+20/31 Oct 1583 - bishopric of Basel
+02/13 Nov 1583 - duchy of Jülich-Berg
+02/13 Nov 1583 - electorate and city of Köln
+04/15 Nov 1583 - bishopric of Würzburg
+11/22 Nov 1583 - electorate of Mainz
+16/27 Nov 1583 - bishopric of Strassburg and the margraviate of Baden
+17/28 Nov 1583 - bishopric of Münster and duchy of Cleve
+14/25 Dec 1583 - Steiermark
+
+06/17 Jan 1584 - Austria and Bohemia
+11/22 Jan 1584 - Lucerne, Uri, Schwyz, Zug, Freiburg, Solothurn
+12/23 Jan 1584 - Silesia and the Lausitz
+22 Jan/
+ 02 Feb 1584 - Hungary (legally on 21 Oct 1587)
+ Jun 1584 - Unterwalden
+01/12 Jul 1584 - duchy of Westfalen
+
+16/27 Jun 1585 - bishopric of Paderborn
+
+14/25 Dec 1590 - Transylvania
+
+22 Aug/
+ 02 Sep 1612 - duchy of Prussia
+
+13/24 Dec 1614 - Pfalz-Neuburg
+
+ 1617 - duchy of Kurland (reverted to the Julian calendar in
+ 1796)
+
+ 1624 - bishopric of Osnabrück
+
+ 1630 - bishopric of Minden
+
+15/26 Mar 1631 - bishopric of Hildesheim
+
+ 1655 - Kanton Wallis
+
+05/16 Feb 1682 - city of Strassburg
+
+18 Feb/
+ 01 Mar 1700 - Protestant Germany (including Swedish possessions in
+ Germany), Denmark, Norway
+30 Jun/
+ 12 Jul 1700 - Gelderland, Zutphen
+10 Nov/
+ 12 Dec 1700 - Utrecht, Overijssel
+
+31 Dec 1700/
+ 12 Jan 1701 - Friesland, Groningen, Zürich, Bern, Basel, Geneva,
+ Turgau, and Schaffhausen
+
+ 1724 - Glarus, Appenzell, and the city of St. Gallen
+
+01 Jan 1750 - Pisa and Florence
+
+02/14 Sep 1752 - Great Britain
+
+17 Feb/
+ 01 Mar 1753 - Sweden
+
+1760-1812 - Graubünden
+
+The Russian empire (including Finland and the Baltic states) did not
+convert to the Gregorian calendar until the Soviet revolution of 1917.
+
+Source: H. Grotefend, _Taschenbuch der Zeitrechnung des deutschen
+Mittelalters und der Neuzeit_, herausgegeben von Dr. O. Grotefend
+(Hannover: Hahnsche Buchhandlung, 1941), pp. 26-28.
+
+
+----- Time and time zones on Mars -----
+
+Some people's work schedules use Mars time. Jet Propulsion Laboratory
+(JPL) coordinators have kept Mars time on and off at least since 1997
+for the Mars Pathfinder mission. Some of their family members have
+also adapted to Mars time. Dozens of special Mars watches were built
+for JPL workers who kept Mars time during the Mars Exploration
+Rovers mission (2004). These timepieces look like normal Seikos and
+Citizens but use Mars seconds rather than terrestrial seconds.
+
+A Mars solar day is called a "sol" and has a mean period equal to
+about 24 hours 39 minutes 35.244 seconds in terrestrial time. It is
+divided into a conventional 24-hour clock, so each Mars second equals
+about 1.02749125 terrestrial seconds.
+
+The prime meridian of Mars goes through the center of the crater
+Airy-0, named in honor of the British astronomer who built the
+Greenwich telescope that defines Earth's prime meridian. Mean solar
+time on the Mars prime meridian is called Mars Coordinated Time (MTC).
+
+Each landed mission on Mars has adopted a different reference for
+solar time keeping, so there is no real standard for Mars time zones.
+For example, the Mars Exploration Rover project (2004) defined two
+time zones "Local Solar Time A" and "Local Solar Time B" for its two
+missions, each zone designed so that its time equals local true solar
+time at approximately the middle of the nominal mission. Such a "time
+zone" is not particularly suited for any application other than the
+mission itself.
+
+Many calendars have been proposed for Mars, but none have achieved
+wide acceptance. Astronomers often use Mars Sol Date (MSD) which is a
+sequential count of Mars solar days elapsed since about 1873-12-29
+12:00 GMT.
+
+The tz database does not currently support Mars time, but it is
+documented here in the hopes that support will be added eventually.
+
+Sources:
+
+Michael Allison and Robert Schmunk,
+"Technical Notes on Mars Solar Time as Adopted by the Mars24 Sunclock"
+<http://www.giss.nasa.gov/tools/mars24/help/notes.html> (2012-08-08).
+
+Jia-Rui Chong, "Workdays Fit for a Martian", Los Angeles Times
+<http://articles.latimes.com/2004/jan/14/science/sci-marstime14>
+(2004-01-14), pp A1, A20-A21.
+
+Tom Chmielewski, "Jet Lag Is Worse on Mars", The Atlantic (2015-02-26)
+<http://www.theatlantic.com/technology/archive/2015/02/jet-lag-is-worse-on-mars/386033/>
+
+-----
+
+This file is in the public domain, so clarified as of 2009-05-17 by
+Arthur David Olson.
+
+-----
+Local Variables:
+coding: utf-8
+End:
diff --git a/contrib/tzdata/africa b/contrib/tzdata/africa
index f20d216..d35aaa5 100644
--- a/contrib/tzdata/africa
+++ b/contrib/tzdata/africa
@@ -343,6 +343,12 @@ Rule Egypt 2007 only - Sep Thu>=1 24:00 0 -
# decision to abandon DST permanently. See Ahram Online 2015-04-24.
# http://english.ahram.org.eg/NewsContent/1/64/128509/Egypt/Politics-/Sisi-cancels-daylight-saving-time-in-Egypt.aspx
+# From Steffen Thorsen (2016-04-29):
+# Egypt will have DST from July 7 until the end of October....
+# http://english.ahram.org.eg/NewsContentP/1/204655/Egypt/Daylight-savings-time-returning-to-Egypt-on--July.aspx
+# From Mina Samuel (2016-07-04):
+# Egyptian government took the decision to cancel the DST,
+
Rule Egypt 2008 only - Aug lastThu 24:00 0 -
Rule Egypt 2009 only - Aug 20 24:00 0 -
Rule Egypt 2010 only - Aug 10 24:00 0 -
@@ -458,7 +464,7 @@ Zone Africa/Monrovia -0:43:08 - LMT 1882
# http://www.libyaherald.com/2013/10/24/correction-no-time-change-tomorrow/
#
# From Paul Eggert (2013-10-25):
-# For now, assume they're reverting to the pre-2012 rules of permanent UTC+2.
+# For now, assume they're reverting to the pre-2012 rules of permanent UT +02.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Libya 1951 only - Oct 14 2:00 1:00 S
@@ -858,11 +864,11 @@ Rule Morocco 2009 only - Aug 21 0:00 0 -
Rule Morocco 2010 only - May 2 0:00 1:00 S
Rule Morocco 2010 only - Aug 8 0:00 0 -
Rule Morocco 2011 only - Apr 3 0:00 1:00 S
-Rule Morocco 2011 only - Jul 31 0 0 -
+Rule Morocco 2011 only - Jul 31 0:00 0 -
Rule Morocco 2012 2013 - Apr lastSun 2:00 1:00 S
-Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2012 only - Jul 20 3:00 0 -
Rule Morocco 2012 only - Aug 20 2:00 1:00 S
+Rule Morocco 2012 only - Sep 30 3:00 0 -
Rule Morocco 2013 only - Jul 7 3:00 0 -
Rule Morocco 2013 only - Aug 10 2:00 1:00 S
Rule Morocco 2013 max - Oct lastSun 3:00 0 -
diff --git a/contrib/tzdata/antarctica b/contrib/tzdata/antarctica
index 2af088f..6da1aef 100644
--- a/contrib/tzdata/antarctica
+++ b/contrib/tzdata/antarctica
@@ -10,10 +10,8 @@
# http://www.spri.cam.ac.uk/bob/periant.htm
# for information.
# Unless otherwise specified, we have no time zone information.
-#
-# Except for the French entries,
-# I made up all time zone abbreviations mentioned here; corrections welcome!
-# FORMAT is 'zzz' and GMTOFF is 0 for locations while uninhabited.
+
+# FORMAT is '-00' and GMTOFF is 0 for locations while uninhabited.
# Argentina - year-round bases
# Belgrano II, Confin Coast, -770227-0343737, since 1972-02-05
@@ -29,7 +27,7 @@
# previously sealers and scientific personnel wintered
# Margaret Turner reports
# http://web.archive.org/web/20021204222245/http://www.dstc.qut.edu.au/DST/marg/daylight.html
-# (1999-09-30) that they're UTC+5, with no DST;
+# (1999-09-30) that they're UT +05, with no DST;
# presumably this is when they have visitors.
#
# year-round bases
@@ -66,25 +64,29 @@
# Background:
# http://www.timeanddate.com/news/time/antartica-time-changes-2010.html
+# From Steffen Thorsen (2016-10-28):
+# Australian Antarctica Division informed us that Casey changed time
+# zone to UTC+11 in "the morning of 22nd October 2016".
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Casey 0 - zzz 1969
- 8:00 - AWST 2009 Oct 18 2:00
- # Australian Western Std Time
- 11:00 - CAST 2010 Mar 5 2:00 # Casey Time
- 8:00 - AWST 2011 Oct 28 2:00
- 11:00 - CAST 2012 Feb 21 17:00u
- 8:00 - AWST
-Zone Antarctica/Davis 0 - zzz 1957 Jan 13
- 7:00 - DAVT 1964 Nov # Davis Time
- 0 - zzz 1969 Feb
- 7:00 - DAVT 2009 Oct 18 2:00
- 5:00 - DAVT 2010 Mar 10 20:00u
- 7:00 - DAVT 2011 Oct 28 2:00
- 5:00 - DAVT 2012 Feb 21 20:00u
- 7:00 - DAVT
-Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
- 6:00 - MAWT 2009 Oct 18 2:00 # Mawson Time
- 5:00 - MAWT
+Zone Antarctica/Casey 0 - -00 1969
+ 8:00 - +08 2009 Oct 18 2:00
+ 11:00 - +11 2010 Mar 5 2:00
+ 8:00 - +08 2011 Oct 28 2:00
+ 11:00 - +11 2012 Feb 21 17:00u
+ 8:00 - +08 2016 Oct 22
+ 11:00 - +11
+Zone Antarctica/Davis 0 - -00 1957 Jan 13
+ 7:00 - +07 1964 Nov
+ 0 - -00 1969 Feb
+ 7:00 - +07 2009 Oct 18 2:00
+ 5:00 - +05 2010 Mar 10 20:00u
+ 7:00 - +07 2011 Oct 28 2:00
+ 5:00 - +05 2012 Feb 21 20:00u
+ 7:00 - +07
+Zone Antarctica/Mawson 0 - -00 1954 Feb 13
+ 6:00 - +06 2009 Oct 18 2:00
+ 5:00 - +05
# References:
# Casey Weather (1998-02-26)
# http://www.antdiv.gov.au/aad/exop/sfo/casey/casey_aws.html
@@ -137,8 +139,8 @@ Zone Antarctica/Mawson 0 - zzz 1954 Feb 13
# fishing stations operated variously 1819/1931
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
- 5:00 - TFT # ISO code TF Time
+Zone Indian/Kerguelen 0 - -00 1950 # Port-aux-Français
+ 5:00 - +05
#
# year-round base in the main continent
# Dumont d'Urville, Île des Pétrels, -6640+14001, since 1956-11
@@ -148,10 +150,10 @@ Zone Indian/Kerguelen 0 - zzz 1950 # Port-aux-Français
# It was destroyed by fire on 1952-01-14.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/DumontDUrville 0 - zzz 1947
- 10:00 - PMT 1952 Jan 14 # Port-Martin Time
- 0 - zzz 1956 Nov
- 10:00 - DDUT # Dumont-d'Urville Time
+Zone Antarctica/DumontDUrville 0 - -00 1947
+ 10:00 - +10 1952 Jan 14
+ 0 - -00 1956 Nov
+ 10:00 - +10
# France & Italy - year-round base
# Concordia, -750600+1232000, since 2005
@@ -176,8 +178,8 @@ Zone Antarctica/DumontDUrville 0 - zzz 1947
# was established on 1957-01-29. Since Syowa station is still the main
# station of Japan, it's appropriate for the principal location.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
- 3:00 - SYOT # Syowa Time
+Zone Antarctica/Syowa 0 - -00 1957 Jan 29
+ 3:00 - +03
# See:
# NIPR Antarctic Research Activities (1999-08-17)
# http://www.nipr.ac.jp/english/ara01.html
@@ -214,19 +216,19 @@ Zone Antarctica/Syowa 0 - zzz 1957 Jan 29
# correct, but they should be quite close to the actual dates.
#
# From Paul Eggert (2014-03-21):
-# The CET-switching Troll rules require zic from tzcode 2014b or later, so as
+# The CET-switching Troll rules require zic from tz 2014b or later, so as
# suggested by Bengt-Inge Larsson comment them out for now, and approximate
# with only UTC and CEST. Uncomment them when 2014b is more prevalent.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-#Rule Troll 2005 max - Mar 1 1:00u 1:00 CET
-Rule Troll 2005 max - Mar lastSun 1:00u 2:00 CEST
-#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 CET
-#Rule Troll 2004 max - Nov 7 1:00u 0:00 UTC
+#Rule Troll 2005 max - Mar 1 1:00u 1:00 +01
+Rule Troll 2005 max - Mar lastSun 1:00u 2:00 +02
+#Rule Troll 2005 max - Oct lastSun 1:00u 1:00 +01
+#Rule Troll 2004 max - Nov 7 1:00u 0:00 +00
# Remove the following line when uncommenting the above '#Rule' lines.
-Rule Troll 2004 max - Oct lastSun 1:00u 0:00 UTC
+Rule Troll 2004 max - Oct lastSun 1:00u 0:00 +00
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Troll 0 - zzz 2005 Feb 12
+Zone Antarctica/Troll 0 - -00 2005 Feb 12
0:00 Troll %s
# Poland - year-round base
@@ -265,10 +267,10 @@ Zone Antarctica/Troll 0 - zzz 2005 Feb 12
# changes during the year and does not necessarily correspond to mean
# solar noon. So the Vostok time might have been whatever the clocks
# happened to be during their visit. So we still don't really know what time
-# it is at Vostok. But we'll guess UTC+6.
+# it is at Vostok. But we'll guess +06.
#
-Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
- 6:00 - VOST # Vostok time
+Zone Antarctica/Vostok 0 - -00 1957 Dec 16
+ 6:00 - +06
# S Africa - year-round bases
# Marion Island, -4653+03752
@@ -300,8 +302,8 @@ Zone Antarctica/Vostok 0 - zzz 1957 Dec 16
# <http://webexhibits.org/daylightsaving/g.html> says Rothera is -03 all year.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Rothera 0 - zzz 1976 Dec 1
- -3:00 - ROTT # Rothera time
+Zone Antarctica/Rothera 0 - -00 1976 Dec 1
+ -3:00 - -03
# Uruguay - year round base
# Artigas, King George Island, -621104-0585107
diff --git a/contrib/tzdata/asia b/contrib/tzdata/asia
index 5467024..67164b3 100644
--- a/contrib/tzdata/asia
+++ b/contrib/tzdata/asia
@@ -79,13 +79,9 @@ Rule E-EurAsia 1979 1995 - Sep lastSun 0:00 0 -
Rule E-EurAsia 1996 max - Oct lastSun 0:00 0 -
Rule RussiaAsia 1981 1984 - Apr 1 0:00 1:00 S
Rule RussiaAsia 1981 1983 - Oct 1 0:00 0 -
-Rule RussiaAsia 1984 1991 - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1985 1991 - Mar lastSun 2:00s 1:00 S
-Rule RussiaAsia 1992 only - Mar lastSat 23:00 1:00 S
-Rule RussiaAsia 1992 only - Sep lastSat 23:00 0 -
-Rule RussiaAsia 1993 max - Mar lastSun 2:00s 1:00 S
-Rule RussiaAsia 1993 1995 - Sep lastSun 2:00s 0 -
-Rule RussiaAsia 1996 max - Oct lastSun 2:00s 0 -
+Rule RussiaAsia 1984 1995 - Sep lastSun 2:00s 0 -
+Rule RussiaAsia 1985 2011 - Mar lastSun 2:00s 1:00 S
+Rule RussiaAsia 1996 2011 - Oct lastSun 2:00s 0 -
# Afghanistan
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -120,31 +116,37 @@ Zone Asia/Kabul 4:36:48 - LMT 1890
# http://www.worldtimezone.com/dst_news/dst_news_armenia03.html
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Yerevan 2:58:00 - LMT 1924 May 2
- 3:00 - YERT 1957 Mar # Yerevan Time
- 4:00 RussiaAsia YER%sT 1991 Mar 31 2:00s
- 3:00 1:00 YERST 1991 Sep 23 # independence
- 3:00 RussiaAsia AM%sT 1995 Sep 24 2:00s
- 4:00 - AMT 1997
- 4:00 RussiaAsia AM%sT 2012 Mar 25 2:00s
- 4:00 - AMT
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1995 Sep 24 2:00s
+ 4:00 - +04 1997
+ 4:00 RussiaAsia +04/+05
# Azerbaijan
+
# From Rustam Aliyev of the Azerbaijan Internet Forum (2005-10-23):
# According to the resolution of Cabinet of Ministers, 1997
# From Paul Eggert (2015-09-17): It was Resolution No. 21 (1997-03-17).
# http://code.az/files/daylight_res.pdf
+
+# From Steffen Thorsen (2016-03-17):
+# ... the Azerbaijani Cabinet of Ministers has cancelled switching to
+# daylight saving time....
+# http://www.azernews.az/azerbaijan/94137.html
+# http://vestnikkavkaza.net/news/Azerbaijani-Cabinet-of-Ministers-cancels-daylight-saving-time.html
+# http://en.apa.az/xeber_azerbaijan_abolishes_daylight_savings_ti_240862.html
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Azer 1997 max - Mar lastSun 4:00 1:00 S
-Rule Azer 1997 max - Oct lastSun 5:00 0 -
+Rule Azer 1997 2015 - Mar lastSun 4:00 1:00 S
+Rule Azer 1997 2015 - Oct lastSun 5:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Baku 3:19:24 - LMT 1924 May 2
- 3:00 - BAKT 1957 Mar # Baku Time
- 4:00 RussiaAsia BAK%sT 1991 Mar 31 2:00s
- 3:00 1:00 BAKST 1991 Aug 30 # independence
- 3:00 RussiaAsia AZ%sT 1992 Sep lastSat 23:00
- 4:00 - AZT 1996 # Azerbaijan Time
- 4:00 EUAsia AZ%sT 1997
- 4:00 Azer AZ%sT
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1992 Sep lastSun 2:00s
+ 4:00 - +04 1996
+ 4:00 EUAsia +04/+05 1997
+ 4:00 Azer +04/+05
# Bahrain
# See Asia/Qatar.
@@ -263,7 +265,7 @@ Zone Asia/Brunei 7:39:40 - LMT 1926 Mar # Bandar Seri Begawan
# Milne says 6:24:40 was the meridian of the time ball observatory at Rangoon.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Asia/Rangoon 6:24:40 - LMT 1880 # or Yangon
+Zone Asia/Yangon 6:24:40 - LMT 1880 # or Rangoon
6:24:40 - RMT 1920 # Rangoon Mean Time?
6:30 - BURT 1942 May # Burma Time
9:00 - JST 1945 May 3
@@ -378,7 +380,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Lewiston (ME) Daily Sun (1939-05-29), p 17, said "Even the time is
# different - the occupied districts going by Tokyo time, an hour
# ahead of that prevailing in the rest of Shanghai." Guess that the
-# Xujiahui Observatory was under French control and stuck with UT+8.
+# Xujiahui Observatory was under French control and stuck with UT +08.
#
# In earlier versions of this file, China had many separate Zone entries, but
# this was based on what were apparently incorrect data in Shanks & Pottenger.
@@ -387,26 +389,26 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Proposed in 1918 and theoretically in effect until 1949 (although in practice
# mainly observed in coastal areas), the five zones were:
#
-# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT+8.5
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area) UT +08:30
# Asia/Harbin (currently a link to Asia/Shanghai)
# Heilongjiang (except Mohe county), Jilin
#
-# Zhongyuan Time ("Central plain Time") UT+8
+# Zhongyuan Time ("Central plain Time") UT +08
# Asia/Shanghai
# most of China
# This currently represents most other zones as well,
# as apparently these regions have been the same since 1970.
# Milne gives 8:05:43.2 for Xujiahui Observatory time; round to nearest.
-# Guo says Shanghai switched to UT+8 "from the end of the 19th century".
+# Guo says Shanghai switched to UT +08 "from the end of the 19th century".
#
-# Long-shu Time (probably due to Long and Shu being two names of that area) UT+7
+# Long-shu Time (probably due to Long and Shu being two names of the area) UT +07
# Asia/Chongqing (currently a link to Asia/Shanghai)
# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
# Yangchun, Yangjiang, Yu'nan, and Yunfu.
#
-# Xin-zang Time ("Xinjiang-Tibet Time") UT+6
+# Xin-zang Time ("Xinjiang-Tibet Time") UT +06
# Asia/Urumqi
# This currently represents Kunlun Time as well,
# as apparently the two regions have been the same since 1970.
@@ -419,7 +421,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Shihezi, Changji, Yanqi, Heshuo, Tuokexun, Tulufan, Shanshan, Hami,
# Fukang, Kuitun, Kumukuli, Miquan, Qitai, and Turfan.
#
-# Kunlun Time UT+5.5
+# Kunlun Time UT +05:30
# Asia/Kashgar (currently a link to Asia/Urumqi)
# West Tibet, including Pulan, Aheqi, Shufu, Shule;
# West Xinjiang, including Aksu, Atushi, Yining, Hetian, Cele, Luopu, Nileke,
@@ -435,7 +437,7 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
#
# On the other hand, ethnic Uyghurs, who make up about half the
# population of Xinjiang, typically use "Xinjiang time" which is two
-# hours behind Beijing time, or UTC +0600. The government of the Xinjiang
+# hours behind Beijing time, or UT +06. The government of the Xinjiang
# Uyghur Autonomous Region, (XAUR, or just Xinjiang for short) as well as
# local governments such as the Ürümqi city government use both times in
# publications, referring to what is popularly called Xinjiang time as
@@ -491,8 +493,8 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# having the same time as Beijing.
# From Paul Eggert (2014-06-30):
-# In the early days of the PRC, Tibet was given its own time zone (UT+6) but
-# this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
+# In the early days of the PRC, Tibet was given its own time zone (UT +06)
+# but this was withdrawn in 1959 and never reinstated; see Tubten Khétsun,
# Memories of life in Lhasa under Chinese Rule, Columbia U Press, ISBN
# 978-0231142861 (2008), translator's introduction by Matthew Akester, p x.
# As this is before our 1970 cutoff, Tibet doesn't need a separate zone.
@@ -506,12 +508,12 @@ Rule PRC 1987 1991 - Apr Sun>=10 0:00 1:00 D
# Republics, the Soviet Union, the Kuomintang, and the People's Republic of
# China, and tracking down all these organizations' timekeeping rules would be
# quite a trick. Approximate this lost history by a transition from LMT to
-# XJT at the start of 1928, the year of accession of the warlord Jin Shuren,
+# UT +06 at the start of 1928, the year of accession of the warlord Jin Shuren,
# which happens to be the date given by Shanks & Pottenger (no doubt as a
-# guess) as the transition from LMT. Ignore the usage of UT+8 before
-# 1986-02-01 under the theory that the transition date to UT+8 is unknown and
+# guess) as the transition from LMT. Ignore the usage of +08 before
+# 1986-02-01 under the theory that the transition date to +08 is unknown and
# that the sort of users who prefer Asia/Urumqi now typically ignored the
-# UT+8 mandate back then.
+# +08 mandate back then.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Beijing time, used throughout China; represented by Shanghai.
@@ -716,7 +718,7 @@ Zone Asia/Hong_Kong 7:36:42 - LMT 1904 Oct 30
# be found from historical government announcement database.
# From Paul Eggert (2014-07-03):
-# As per Yu-Cheng Chuang, say that Taiwan was at UT+9 from 1937-10-01
+# As per Yu-Cheng Chuang, say that Taiwan was at UT +09 from 1937-10-01
# until 1945-09-21 at 01:00, overriding Shanks & Pottenger.
# Likewise, use Yu-Cheng Chuang's data for DST in Taiwan.
@@ -769,9 +771,19 @@ Zone Asia/Macau 7:34:20 - LMT 1912 Jan 1
###############################################################################
# Cyprus
-#
+
# Milne says the Eastern Telegraph Company used 2:14:00. Stick with LMT.
+# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
+
+# From Paul Eggert (2016-09-09):
+# Yesterday's Cyprus Mail reports that Northern Cyprus followed Turkey's
+# lead and switched from +02/+03 to +03 year-round.
+# http://cyprus-mail.com/2016/09/08/two-time-zones-cyprus-turkey-will-not-turn-clocks-back-next-month/
#
+# From Even Scharning (2016-10-31):
+# Looks like the time zone split in Cyprus went through last night.
+# http://cyprus-mail.com/2016/10/30/cyprus-new-division-two-time-zones-now-reality/
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Cyprus 1975 only - Apr 13 0:00 1:00 S
Rule Cyprus 1975 only - Oct 12 0:00 0 -
@@ -786,7 +798,10 @@ Rule Cyprus 1981 1998 - Mar lastSun 0:00 1:00 S
Zone Asia/Nicosia 2:13:28 - LMT 1921 Nov 14
2:00 Cyprus EE%sT 1998 Sep
2:00 EUAsia EE%sT
-# IATA SSIM (1998-09) has Cyprus using EU rules for the first time.
+Zone Asia/Famagusta 2:15:48 - LMT 1921 Nov 14
+ 2:00 Cyprus EE%sT 1998 Sep
+ 2:00 EUAsia EE%sT 2016 Sep 8
+ 3:00 - +03
# Classically, Cyprus belongs to Asia; e.g. see Herodotus, Histories, I.72.
# However, for various reasons many users expect to find it under Europe.
@@ -830,16 +845,15 @@ Link Asia/Nicosia Europe/Nicosia
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tbilisi 2:59:11 - LMT 1880
2:59:11 - TBMT 1924 May 2 # Tbilisi Mean Time
- 3:00 - TBIT 1957 Mar # Tbilisi Time
- 4:00 RussiaAsia TBI%sT 1991 Mar 31 2:00s
- 3:00 1:00 TBIST 1991 Apr 9 # independence
- 3:00 RussiaAsia GE%sT 1992 # Georgia Time
- 3:00 E-EurAsia GE%sT 1994 Sep lastSun
- 4:00 E-EurAsia GE%sT 1996 Oct lastSun
- 4:00 1:00 GEST 1997 Mar lastSun
- 4:00 E-EurAsia GE%sT 2004 Jun 27
- 3:00 RussiaAsia GE%sT 2005 Mar lastSun 2:00
- 4:00 - GET
+ 3:00 - +03 1957 Mar
+ 4:00 RussiaAsia +04/+05 1991 Mar 31 2:00s
+ 3:00 RussiaAsia +03/+04 1992
+ 3:00 E-EurAsia +03/+04 1994 Sep lastSun
+ 4:00 E-EurAsia +04/+05 1996 Oct lastSun
+ 4:00 1:00 +05 1997 Mar lastSun
+ 4:00 E-EurAsia +04/+05 2004 Jun 27
+ 3:00 RussiaAsia +03/+04 2005 Mar lastSun 2:00
+ 4:00 - +04
# East Timor
@@ -874,6 +888,15 @@ Zone Asia/Dili 8:22:20 - LMT 1912 Jan 1
9:00 - TLT
# India
+
+# From Ian P. Beacock, in "A brief history of (modern) time", The Atlantic
+# http://www.theatlantic.com/technology/archive/2015/12/the-creation-of-modern-time/421419/
+# (2015-12-22):
+# In January 1906, several thousand cotton-mill workers rioted on the
+# outskirts of Bombay.... They were protesting the proposed abolition of
+# local time in favor of Indian Standard Time.... Journalists called this
+# dispute the "Battle of the Clocks." It lasted nearly half a century.
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
5:53:20 - HMT 1941 Oct # Howrah Mean Time?
@@ -907,7 +930,7 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# These would be the earliest possible times for a change.
# Régimes horaires pour le monde entier, by Henri Le Corre, (Éditions
# Traditionnelles, 1987, Paris) says that Java and Madura switched
-# from JST to UTC+07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
+# from UT +09 to +07:30 on 1945-09-23, and gives 1944-09-01 for Jayapura
# (Hollandia). For now, assume all Indonesian locations other than Jayapura
# switched on 1945-09-23.
#
@@ -918,11 +941,11 @@ Zone Asia/Kolkata 5:53:28 - LMT 1880 # Kolkata
# summary published by the Time and Frequency Laboratory of the
# Research Center for Calibration, Instrumentation and Metrology,
# Indonesia, <http://time.kim.lipi.go.id/time-eng.php> (2006-09-29).
-# The abbreviations are:
+# The time zone abbreviations and UT offsets are:
#
-# WIB - UTC+7 - Waktu Indonesia Barat (Indonesia western time)
-# WITA - UTC+8 - Waktu Indonesia Tengah (Indonesia central time)
-# WIT - UTC+9 - Waktu Indonesia Timur (Indonesia eastern time)
+# WIB - +07 - Waktu Indonesia Barat (Indonesia western time)
+# WITA - +08 - Waktu Indonesia Tengah (Indonesia central time)
+# WIT - +09 - Waktu Indonesia Timur (Indonesia eastern time)
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# Java, Sumatra
@@ -1084,8 +1107,15 @@ Rule Iran 2032 2033 - Mar 21 0:00 1:00 D
Rule Iran 2032 2033 - Sep 21 0:00 0 S
Rule Iran 2034 2035 - Mar 22 0:00 1:00 D
Rule Iran 2034 2035 - Sep 22 0:00 0 S
-Rule Iran 2036 2037 - Mar 21 0:00 1:00 D
-Rule Iran 2036 2037 - Sep 21 0:00 0 S
+#
+# The following rules are approximations starting in the year 2038.
+# These are the best post-2037 approximations available, given the
+# restrictions of a single rule using a Gregorian-based data format.
+# At some point this table will need to be extended, though quite
+# possibly Iran will change the rules first.
+Rule Iran 2036 max - Mar 21 0:00 1:00 D
+Rule Iran 2036 max - Sep 21 0:00 0 S
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Tehran 3:25:44 - LMT 1916
3:25:44 - TMT 1946 # Tehran Mean Time
@@ -1542,23 +1572,6 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# Kazakhstan
-# From Paul Eggert (1996-11-22):
-# Andrew Evtichov (1996-04-13) writes that Kazakhstan
-# stayed in sync with Moscow after 1990, and that Aqtobe (formerly Aktyubinsk)
-# and Aqtau (formerly Shevchenko) are the largest cities in their zones.
-# Guess that Aqtau and Aqtobe diverged in 1995, since that's the first time
-# IATA SSIM mentions a third time zone in Kazakhstan.
-
-# From Paul Eggert (2006-03-22):
-# German Iofis, ELSI, Almaty (2001-10-09) reports that Kazakhstan uses
-# RussiaAsia rules, instead of switching at 00:00 as the IATA has it.
-# Go with Shanks & Pottenger, who have them always using RussiaAsia rules.
-# Also go with the following claims of Shanks & Pottenger:
-#
-# - Kazakhstan did not observe DST in 1991.
-# - Qyzylorda switched from +5:00 to +6:00 on 1992-01-19 02:00.
-# - Oral switched from +5:00 to +4:00 in spring 1989.
-
# From Kazakhstan Embassy's News Bulletin No. 11
# <http://www.kazsociety.org.uk/news/2005/03/30.htm> (2005-03-21):
# The Government of Kazakhstan passed a resolution March 15 abolishing
@@ -1575,61 +1588,232 @@ Zone Asia/Amman 2:23:44 - LMT 1931
# everything else.... I guess that would make Kazakhstan time zones
# de jure UTC+5 and UTC+6 respectively.
+# From Stepan Golosunov (2016-03-27) ([*] means see later comments below):
+# Review of the linked documents from http://adilet.zan.kz/
+# produced the following data for post-1991 Kazakhstan:
+#
+# 0. Act of the Cabinet of Ministers of the USSR
+# from 1991-02-04 No. 20
+# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102010545
+# removed the extra hour ("decree time") on the territory of the USSR
+# starting with the last Sunday of March 1991.
+# It also allowed (but not mandated) Kazakh SSR, Kirghiz SSR, Tajik SSR,
+# Turkmen SSR and Uzbek SSR to not have "summer" time.
+#
+# The 1992-01-13 act also refers to the act of the Cabinet of Ministers
+# of the Kazakh SSR from 1991-03-20 No. 170 "About the act of the Cabinet
+# of Ministers of the USSR from 1991-02-04 No. 20" but I didn't found its
+# text.
+#
+# According to Izvestia newspaper No. 68 (23334) from 1991-03-20
+# (page 6; available at http://libinfo.org/newsr/newsr2574.djvu via
+# http://libinfo.org/index.php?id=58564) on 1991-03-31 at 2:00 during
+# transition to "summer" time:
+# Republic of Georgia, Latvian SSR, Lithuanian SSR, SSR Moldova,
+# Estonian SSR; Komi ASSR; Kaliningrad oblast; Nenets autonomous okrug
+# were to move clocks 1 hour forward.
+# Kazakh SSR (excluding Uralsk oblast); Republic of Kyrgyzstan, Tajik
+# SSR; Andijan, Jizzakh, Namangan, Sirdarya, Tashkent, Fergana oblasts
+# of the Uzbek SSR were to move clocks 1 hour backwards.
+# Other territories were to not move clocks.
+# When the "summer" time would end on 1991-09-29, clocks were to be
+# moved 1 hour backwards on the territory of the USSR excluding
+# Kazakhstan, Kirghizia, Uzbekistan, Turkmenia, Tajikistan.
+#
+# Apparently there were last minute changes. Apparently Kazakh act No. 170
+# was one of such changes.
+#
+# https://ru.wikipedia.org/wiki/Декретное время
+# claims that Sovetskaya Rossiya newspaper on 1991-03-29 published that
+# Nenets autonomous okrug, Komi and Kazakhstan (excluding Uralsk oblast)
+# were to not move clocks and Uralsk oblast was to move clocks
+# forward; on 1991-09-29 Kazakhstan was to move clocks backwards.
+# (Probably there were changes even after that publication. There is an
+# article claiming that Kaliningrad oblast decided on 1991-03-29 to not
+# move clocks.)
+#
+# This implies that on 1991-03-31 Asia/Oral remained on +04/+05 while
+# the rest of Kazakhstan switched from +06/+07 to +05/06 or from +05/06
+# to +04/+05. It's unclear how Kzyl-Orda oblast moved into the fifth
+# time belt. (By switching from +04/+05 to +05/+06 on 1991-09-29?) ...
+#
+# 1. Act of the Cabinet of Ministers of the Republic of Kazakhstan
+# from 1992-01-13 No. 28
+# http://adilet.zan.kz/rus/docs/P920000028_
+# (text includes modification from the 1996 act)
+# introduced new rules for calculation of time, mirroring Russian
+# 1992-01-08 act. It specified that time would be calculated
+# according to time belts plus extra hour ("decree time"), moved clocks
+# on the whole territory of Kazakhstan 1 hour forward on 1992-01-19 at
+# 2:00, specified DST rules. It acknowledged that Kazakhstan was
+# located in the fourth and the fifth time belts and specified the
+# border between them to be located east of Kustanay and Aktyubinsk
+# oblasts (notably including Turgai and Kzyl-Orda oblasts into the fifth
+# time belt).
+#
+# This means switch on 1992-01-19 at 2:00 from +04/+05 to +05/+06 for
+# Asia/Aqtau, Asia/Aqtobe, Asia/Oral, Atyrau and Kustanay oblasts; from
+# +05/+06 to +06/+07 for Asia/Almaty and Asia/Qyzylorda (and Arkalyk) [*]....
+#
+# 2. Act of the Cabinet of Ministers of the Republic of Kazakhstan
+# from 1992-03-27 No. 284
+# http://adilet.zan.kz/rus/docs/P920000284_
+# cancels extra hour ("decree time") for Uralsk and Kzyl-Orda oblasts
+# since the last Sunday of March 1992, while keeping them in the fourth
+# and the fifth time belts respectively.
+#
+# 3. Order of the Prime Minister of the Republic of Kazakhstan
+# from 1994-09-23 No. 384
+# http://adilet.zan.kz/rus/docs/R940000384_
+# cancels the extra hour ("decree time") on the territory of Mangystau
+# oblast since the last Sunday of September 1994 (saying that time on
+# the territory would correspond to the third time belt as a
+# result)....
+#
+# 4. Act of the Government of the Republic of Kazakhstan
+# from 1996-05-08 No. 575
+# http://adilet.zan.kz/rus/docs/P960000575_
+# amends the 1992-01-13 act to end summer time in October instead
+# of September, mirroring identical Russian change from 1996-04-23 act.
+#
+# 5. Act of the Government of the Republic of Kazakhstan
+# from 1999-03-26 No. 305
+# http://adilet.zan.kz/rus/docs/P990000305_
+# cancels the extra hour ("decree time") for Atyrau oblast since the
+# last Sunday of March 1999 while retaining the oblast in the fourth
+# time belt.
+#
+# This means change from +05/+06 to +04/+05.
+#
+# There is no zone for Atyrau currently (listed under Asia/Aqtau in
+# zone1970.tab).[*]
+#
+# 6. Act of the Government of the Republic of Kazakhstan
+# from 2000-11-23 No. 1749
+# http://adilet.zan.kz/rus/archive/docs/P000001749_/23.11.2000
+# replaces the previous five documents.
+#
+# The only changes I noticed are in definition of the border between the
+# fourth and the fifth time belts. They account for changes in spelling
+# and administrative division (splitting of Turgai oblast in 1997
+# probably changed time in territories incorporated into Kostanay oblast
+# (including Arkalyk) from +06/+07 to +05/+06) and move Kyzylorda oblast
+# from being in the fifth time belt and not using decree time into the
+# fourth time belt (no change in practice).[*]
+#
+# 7. Act of the Government of the Republic of Kazakhstan
+# from 2003-12-29 No. 1342
+# http://adilet.zan.kz/rus/docs/P030001342_
+# modified the 2000-11-23 act. No relevant changes, apparently.
+#
+# 8. Act of the Government of the Republic of Kazakhstan
+# from 2004-07-20 No. 775
+# http://adilet.zan.kz/rus/archive/docs/P040000775_/20.07.2004
+# modified the 2000-11-23 act to move Kostanay and Kyzylorda oblasts into
+# the fifth time belt and add Aktobe oblast to the list of regions not
+# using extra hour ("decree time"), leaving Kazakhstan with only 2 time
+# zones (+04/+05 and +06/+07). The changes were to be implemented
+# during DST transitions in 2004 and 2005 but the acts got radically
+# amended before implementation happened.
+#
+# 9. Act of the Government of the Republic of Kazakhstan
+# from 2004-09-15 No. 1059
+# http://adilet.zan.kz/rus/docs/P040001059_
+# modified the 2000-11-23 act to remove exceptions from the "decree time"
+# (leaving Kazakhstan in +05/+06 and +06/+07 zones), amended the
+# 2004-07-20 act to implement changes for Atyrau, West Kazakhstan,
+# Kostanay, Kyzylorda and Mangystau oblasts by not moving clocks
+# during the 2014 transition to "winter" time.
+#
+# This means transition from +04/+05 to +05/+06 for Atyrau oblast (no
+# zone currently), Asia/Oral, Asia/Aqtau and transition from +05/+06 to
+# +06/+07 for Kostanay oblast (Kostanay and Arkalyk, no zones currently)
+# and Asia/Qyzylorda on 2004-10-31 at 3:00....[*]
+#
+# 10. Act of the Government of the Republic of Kazakhstan
+# from 2005-03-15 No. 231
+# http://adilet.zan.kz/rus/docs/P050000231_
+# removes DST provisions from the 2000-11-23 act, removes most of the
+# (already implemented) provisions from the 2004-07-20 and 2004-09-15
+# acts, comes into effect 10 days after official publication.
+# The only practical effect seems to be the abolition of the summer
+# time.
+#
+# Unamended version of the act of the Government of the Russian Federation
+# No. 23 from 1992-01-08 [See 'europe' file for details].
+# Kazakh 1992-01-13 act appears to provide the same rules and 1992-03-27
+# act was to be enacted on the last Sunday of March 1992.
+
+# From Paul Eggert (2016-04-15):
+# The tables below should reflect Stepan Golosunov's remarks above,
+# except for the items marked "[*]" which I haven't gotten to yet.
+# It looks like we will need new zones Asia/Atyrau and Asia/Qostanay
+# to handle changes from 1992 through 2004 that we did not previously
+# know about.
+
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
#
# Almaty (formerly Alma-Ata), representing most locations in Kazakhstan
+# This includes KZ-AKM, KZ-ALA, KZ-ALM, KZ-AST, KZ-BAY, KZ-VOS, KZ-ZHA,
+# KZ-KAR, KZ-SEV, KZ-PAV, and KZ-YUZ.
Zone Asia/Almaty 5:07:48 - LMT 1924 May 2 # or Alma-Ata
- 5:00 - ALMT 1930 Jun 21 # Alma-Ata Time
- 6:00 RussiaAsia ALM%sT 1991
- 6:00 - ALMT 1992
- 6:00 RussiaAsia ALM%sT 2005 Mar 15
- 6:00 - ALMT
-# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.)
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
+ 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
+ 6:00 RussiaAsia +06/+07 2004 Oct 31 2:00s
+ 6:00 - +06
+# Qyzylorda (aka Kyzylorda, Kizilorda, Kzyl-Orda, etc.) (KZ-KZY)
Zone Asia/Qyzylorda 4:21:52 - LMT 1924 May 2
- 4:00 - KIZT 1930 Jun 21 # Kizilorda Time
- 5:00 - KIZT 1981 Apr 1
- 5:00 1:00 KIZST 1981 Oct 1
- 6:00 - KIZT 1982 Apr 1
- 5:00 RussiaAsia KIZ%sT 1991
- 5:00 - KIZT 1991 Dec 16 # independence
- 5:00 - QYZT 1992 Jan 19 2:00
- 6:00 RussiaAsia QYZ%sT 2005 Mar 15
- 6:00 - QYZT
-# Aqtobe (aka Aktobe, formerly Aktyubinsk)
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1991 Sep 29 2:00s
+ 5:00 RussiaAsia +05/+06 1992 Jan 19 2:00s
+ 6:00 RussiaAsia +06/+07 1992 Mar 29 2:00s
+ 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
+ 6:00 - +06
+# Aqtobe (aka Aktobe, formerly Aktyubinsk) (KZ-AKT)
Zone Asia/Aqtobe 3:48:40 - LMT 1924 May 2
- 4:00 - AKTT 1930 Jun 21 # Aktyubinsk Time
- 5:00 - AKTT 1981 Apr 1
- 5:00 1:00 AKTST 1981 Oct 1
- 6:00 - AKTT 1982 Apr 1
- 5:00 RussiaAsia AKT%sT 1991
- 5:00 - AKTT 1991 Dec 16 # independence
- 5:00 RussiaAsia AQT%sT 2005 Mar 15 # Aqtobe Time
- 5:00 - AQTT
-# Mangghystau
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 2004 Oct 31 2:00s
+ 5:00 - +05
+# Qostanay (KZ-KUS)
+
+# Mangghystau (KZ-MAN)
# Aqtau was not founded until 1963, but it represents an inhabited region,
# so include time stamps before 1963.
Zone Asia/Aqtau 3:21:04 - LMT 1924 May 2
- 4:00 - FORT 1930 Jun 21 # Fort Shevchenko T
- 5:00 - FORT 1963
- 5:00 - SHET 1981 Oct 1 # Shevchenko Time
- 6:00 - SHET 1982 Apr 1
- 5:00 RussiaAsia SHE%sT 1991
- 5:00 - SHET 1991 Dec 16 # independence
- 5:00 RussiaAsia AQT%sT 1995 Mar lastSun 2:00 # Aqtau Time
- 4:00 RussiaAsia AQT%sT 2005 Mar 15
- 5:00 - AQTT
-# West Kazakhstan
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1963
+ 5:00 - +05 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 1994 Sep 25 2:00s
+ 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
+ 5:00 - +05
+
+# West Kazakhstan (KZ-ZAP)
+# From Paul Eggert (2016-03-18):
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
Zone Asia/Oral 3:25:24 - LMT 1924 May 2 # or Ural'sk
- 4:00 - URAT 1930 Jun 21 # Ural'sk time
- 5:00 - URAT 1981 Apr 1
- 5:00 1:00 URAST 1981 Oct 1
- 6:00 - URAT 1982 Apr 1
- 5:00 RussiaAsia URA%sT 1989 Mar 26 2:00
- 4:00 RussiaAsia URA%sT 1991
- 4:00 - URAT 1991 Dec 16 # independence
- 4:00 RussiaAsia ORA%sT 2005 Mar 15 # Oral Time
- 5:00 - ORAT
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1989 Mar 26 2:00s
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00s
+ 5:00 RussiaAsia +05/+06 1992 Mar 29 2:00s
+ 4:00 RussiaAsia +04/+05 2004 Oct 31 2:00s
+ 5:00 - +05
# Kyrgyzstan (Kirgizstan)
# Transitions through 1991 are from Shanks & Pottenger.
@@ -1650,11 +1834,11 @@ Rule Kyrgyz 1997 2005 - Mar lastSun 2:30 1:00 S
Rule Kyrgyz 1997 2004 - Oct lastSun 2:30 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Bishkek 4:58:24 - LMT 1924 May 2
- 5:00 - FRUT 1930 Jun 21 # Frunze Time
- 6:00 RussiaAsia FRU%sT 1991 Mar 31 2:00s
- 5:00 1:00 FRUST 1991 Aug 31 2:00 # independence
- 5:00 Kyrgyz KG%sT 2005 Aug 12 # Kyrgyzstan Time
- 6:00 - KGT
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
+ 5:00 RussiaAsia +05/+06 1991 Aug 31 2:00
+ 5:00 Kyrgyz +05/+06 2005 Aug 12
+ 6:00 - +06
###############################################################################
@@ -1693,25 +1877,24 @@ Rule ROK 1957 1960 - Sep Sun>=18 0:00 0 S
Rule ROK 1987 1988 - May Sun>=8 2:00 1:00 D
Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S
-# From Paul Eggert (2014-10-30):
+# From Paul Eggert (2016-08-23):
# The Korean Wikipedia entry gives the following sources for UT offsets:
#
-# 1908: Official Journal Article No. 3994 (Edict No. 5)
+# 1908: Official Journal Article No. 3994 (decree No. 5)
# 1912: Governor-General of Korea Official Gazette Issue No. 367
# (Announcement No. 338)
# 1954: Presidential Decree No. 876 (1954-03-17)
# 1961: Law No. 676 (1961-08-07)
-# 1987: Law No. 3919 (1986-12-31)
#
-# The Wikipedia entry also has confusing information about a change
-# to UT+9 in April 1910, but then what would be the point of the later change
-# to UT+9 on 1912-01-01? Omit the 1910 change for now.
+# (Another source "1987: Law No. 3919 (1986-12-31)" was in the 2014-10-30
+# edition of the Korean Wikipedia entry.)
#
# I guessed that time zone abbreviations through 1945 followed the same
# rules as discussed under Taiwan, with nominal switches from JST to KST
# when the respective cities were taken over by the Allies after WWII.
#
-# For Pyongyang we have no information; guess no changes since World War II.
+# For Pyongyang, guess no changes from World War II until 2015, as we
+# have no information otherwise.
# From Steffen Thorsen (2015-08-07):
# According to many news sources, North Korea is going to change to
@@ -1871,7 +2054,7 @@ Zone Indian/Maldives 4:54:00 - LMT 1880 # Male
# Bill Bonnet (2005-05-19) reports that the US Embassy in Ulaanbaatar says
# there is only one time zone and that DST is observed, citing Microsoft
# Windows XP as the source. Risto Nykänen (2005-05-16) reports that
-# travelmongolia.org says there are two time zones (UTC+7, UTC+8) with no DST.
+# travelmongolia.org says there are two time zones (UT +07, +08) with no DST.
# Oscar van Vlijmen (2005-05-20) reports that the Mongolian Embassy in
# Washington, DC says there are two time zones, with DST observed.
# He also found
@@ -2111,8 +2294,8 @@ Zone Asia/Kathmandu 5:41:16 - LMT 1920
# http://www.app.com.pk/en_/index.php?option=com_content&task=view&id=99374&Itemid=2
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Pakistan 2002 only - Apr Sun>=2 0:01 1:00 S
-Rule Pakistan 2002 only - Oct Sun>=2 0:01 0 -
+Rule Pakistan 2002 only - Apr Sun>=2 0:00 1:00 S
+Rule Pakistan 2002 only - Oct Sun>=2 0:00 0 -
Rule Pakistan 2008 only - Jun 1 0:00 1:00 S
Rule Pakistan 2008 2009 - Nov 1 0:00 0 -
Rule Pakistan 2009 only - Apr 15 0:00 1:00 S
@@ -2374,9 +2557,28 @@ Zone Asia/Karachi 4:28:12 - LMT 1907
# From Paul Eggert (2015-03-03):
# http://www.timeanddate.com/time/change/west-bank/ramallah?year=2014
# says that the fall 2014 transition was Oct 23 at 24:00.
-# For future dates, guess the last Friday in March at 24:00 through
-# the first Friday on or after October 21 at 00:00. This is consistent with
-# the predictions in today's editions of the following URLs:
+
+# From Hannah Kreitem (2016-03-09):
+# http://www.palestinecabinet.gov.ps/WebSite/ar/ViewDetails?ID=31728
+# [Google translation]: "The Council also decided to start daylight
+# saving in Palestine as of one o'clock on Saturday morning,
+# 2016-03-26, to provide the clock 60 minutes ahead."
+#
+# From Paul Eggert (2016-03-12):
+# Predict spring transitions on March's last Saturday at 01:00 from now on.
+
+# From Sharef Mustafa (2016-10-19):
+# [T]he Palestinian cabinet decision (Mar 8th 2016) published on
+# http://www.palestinecabinet.gov.ps/WebSite/Upload/Decree/GOV_17/16032016134830.pdf
+# states that summer time will end on Oct 29th at 01:00.
+#
+# From Tim Parenti (2016-10-19):
+# Predict fall transitions on October's last Saturday at 01:00 from now on.
+# This is consistent with the 2016 transition as well as our spring
+# predictions.
+#
+# From Paul Eggert (2016-10-19):
+# It's also consistent with predictions in the following URLs today:
# http://www.timeanddate.com/time/change/gaza-strip/gaza
# http://www.timeanddate.com/time/change/west-bank/hebron
@@ -2407,8 +2609,10 @@ Rule Palestine 2011 only - Sep 30 0:00 0 -
Rule Palestine 2012 2014 - Mar lastThu 24:00 1:00 S
Rule Palestine 2012 only - Sep 21 1:00 0 -
Rule Palestine 2013 only - Sep Fri>=21 0:00 0 -
-Rule Palestine 2014 max - Oct Fri>=21 0:00 0 -
-Rule Palestine 2015 max - Mar lastFri 24:00 1:00 S
+Rule Palestine 2014 2015 - Oct Fri>=21 0:00 0 -
+Rule Palestine 2015 only - Mar lastFri 24:00 1:00 S
+Rule Palestine 2016 max - Mar lastSat 1:00 1:00 S
+Rule Palestine 2016 max - Oct lastSat 1:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Gaza 2:17:52 - LMT 1900 Oct
@@ -2496,7 +2700,7 @@ Link Asia/Qatar Asia/Bahrain
# earlier date.
#
# Shanks & Pottenger also state that until 1968-05-01 Saudi Arabia had two
-# time zones; the other zone, at UTC+4, was in the far eastern part of
+# time zones; the other zone, at UT +04, was in the far eastern part of
# the country. Ignore this, as it's before our 1970 cutoff.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2558,45 +2762,31 @@ Zone Asia/Singapore 6:55:25 - LMT 1901 Jan 1
# People who live in regions under Tamil control can use [TZ='Asia/Kolkata'],
# as that zone has agreed with the Tamil areas since our cutoff date of 1970.
-# From K Sethu (2006-04-25):
-# I think the abbreviation LKT originated from the world of computers at
-# the time of or subsequent to the time zone changes by SL Government
-# twice in 1996 and probably SL Government or its standardization
-# agencies never declared an abbreviation as a national standard.
-#
-# I recollect before the recent change the government announcements
-# mentioning it as simply changing Sri Lanka Standard Time or Sri Lanka
-# Time and no mention was made about the abbreviation.
-#
-# If we look at Sri Lanka Department of Government's "Official News
-# Website of Sri Lanka" ... http://www.news.lk/ we can see that they
-# use SLT as abbreviation in time stamp at the beginning of each news
-# item....
-#
-# Within Sri Lanka I think LKT is well known among computer users and
-# administrators. In my opinion SLT may not be a good choice because the
-# nation's largest telcom / internet operator Sri Lanka Telcom is well
-# known by that abbreviation - simply as SLT (there IP domains are
-# slt.lk and sltnet.lk).
-#
-# But if indeed our government has adopted SLT as standard abbreviation
-# (that we have not known so far) then it is better that it be used for
-# all computers.
-
-# From Paul Eggert (2006-04-25):
-# One possibility is that we wait for a bit for the dust to settle down
-# and then see what people actually say in practice.
+# From Sadika Sumanapala (2016-10-19):
+# According to http://www.sltime.org (maintained by Measurement Units,
+# Standards & Services Department, Sri Lanka) abbreviation for Sri Lanka
+# standard time is SLST.
+#
+# From Paul Eggert (2016-10-18):
+# "SLST" seems to be reasonably recent and rarely-used outside time
+# zone nerd sources. I searched Google News and found three uses of
+# it in the International Business Times of India in February and
+# March of this year when discussing cricket match times, but nothing
+# since then (though there has been a lot of cricket) and nothing in
+# other English-language news sources. Our old abbreviation "LKT" is
+# even worse. For now, let's use a numeric abbreviation; we can
+# switch to "SLST" if it catches on.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Colombo 5:19:24 - LMT 1880
5:19:32 - MMT 1906 # Moratuwa Mean Time
- 5:30 - IST 1942 Jan 5
- 5:30 0:30 IHST 1942 Sep
- 5:30 1:00 IST 1945 Oct 16 2:00
- 5:30 - IST 1996 May 25 0:00
- 6:30 - LKT 1996 Oct 26 0:30
- 6:00 - LKT 2006 Apr 15 0:30
- 5:30 - IST
+ 5:30 - +0530 1942 Jan 5
+ 5:30 0:30 +0530/+06 1942 Sep
+ 5:30 1:00 +0530/+0630 1945 Oct 16 2:00
+ 5:30 - +0530 1996 May 25 0:00
+ 6:30 - +0630 1996 Oct 26 0:30
+ 6:00 - +06 2006 Apr 15 0:30
+ 5:30 - +0530
# Syria
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -2765,10 +2955,10 @@ Zone Asia/Damascus 2:25:12 - LMT 1920 # Dimashq
# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Dushanbe 4:35:12 - LMT 1924 May 2
- 5:00 - DUST 1930 Jun 21 # Dushanbe Time
- 6:00 RussiaAsia DUS%sT 1991 Mar 31 2:00s
- 5:00 1:00 DUSST 1991 Sep 9 2:00s
- 5:00 - TJT # Tajikistan Time
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00s
+ 5:00 1:00 +05/+06 1991 Sep 9 2:00s
+ 5:00 - +05
# Thailand
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2782,11 +2972,10 @@ Link Asia/Bangkok Asia/Vientiane # Laos
# From Shanks & Pottenger.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Ashgabat 3:53:32 - LMT 1924 May 2 # or Ashkhabad
- 4:00 - ASHT 1930 Jun 21 # Ashkhabad Time
- 5:00 RussiaAsia ASH%sT 1991 Mar 31 2:00
- 4:00 RussiaAsia ASH%sT 1991 Oct 27 # independence
- 4:00 RussiaAsia TM%sT 1992 Jan 19 2:00
- 5:00 - TMT
+ 4:00 - +04 1930 Jun 21
+ 5:00 RussiaAsia +05/+06 1991 Mar 31 2:00
+ 4:00 RussiaAsia +04/+05 1992 Jan 19 2:00
+ 5:00 - +05
# United Arab Emirates
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -2798,20 +2987,18 @@ Link Asia/Dubai Asia/Muscat # Oman
# Byalokoz 1919 says Uzbekistan was 4:27:53.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Asia/Samarkand 4:27:53 - LMT 1924 May 2
- 4:00 - SAMT 1930 Jun 21 # Samarkand Time
- 5:00 - SAMT 1981 Apr 1
- 5:00 1:00 SAMST 1981 Oct 1
- 6:00 - TAST 1982 Apr 1 # Tashkent Time
- 5:00 RussiaAsia SAM%sT 1991 Sep 1 # independence
- 5:00 RussiaAsia UZ%sT 1992
- 5:00 - UZT
+ 4:00 - +04 1930 Jun 21
+ 5:00 - +05 1981 Apr 1
+ 5:00 1:00 +06 1981 Oct 1
+ 6:00 - +06 1982 Apr 1
+ 5:00 RussiaAsia +05/+06 1992
+ 5:00 - +05
# Milne says Tashkent was 4:37:10.8; round to nearest.
Zone Asia/Tashkent 4:37:11 - LMT 1924 May 2
- 5:00 - TAST 1930 Jun 21 # Tashkent Time
- 6:00 RussiaAsia TAS%sT 1991 Mar 31 2:00
- 5:00 RussiaAsia TAS%sT 1991 Sep 1 # independence
- 5:00 RussiaAsia UZ%sT 1992
- 5:00 - UZT
+ 5:00 - +05 1930 Jun 21
+ 6:00 RussiaAsia +06/+07 1991 Mar 31 2:00
+ 5:00 RussiaAsia +05/+06 1992
+ 5:00 - +05
# Vietnam
diff --git a/contrib/tzdata/australasia b/contrib/tzdata/australasia
index 5c272db..0bca53e 100644
--- a/contrib/tzdata/australasia
+++ b/contrib/tzdata/australasia
@@ -60,6 +60,14 @@ Zone Australia/Eucla 8:35:28 - LMT 1895 Dec
# Hamilton is the largest, but there is also a Hamilton in Victoria,
# so use Lindeman.
#
+# From J William Piggott (2016-02-20):
+# There is no location named Holiday Islands in Queensland Australia; holiday
+# islands is a colloquial term used globally. Hayman and Lindeman are at the
+# north and south extremes of the Whitsunday Islands archipelago, and
+# Hamilton is in between; it is reasonable to believe that this time zone
+# applies to all of the Whitsundays.
+# http://www.australia.gov.au/about-australia/australian-story/austn-islands
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule AQ 1971 only - Oct lastSun 2:00s 1:00 D
Rule AQ 1972 only - Feb lastSun 2:00s 0 S
@@ -235,11 +243,11 @@ Zone Australia/Lord_Howe 10:36:20 - LMT 1895 Feb
# will produce a binary file with an [A]EST-type as the first 32-bit type;
# this is required for correct handling of times before 1916 by
# pre-2013 versions of localtime.
-Zone Antarctica/Macquarie 0 - zzz 1899 Nov
+Zone Antarctica/Macquarie 0 - -00 1899 Nov
10:00 - AEST 1916 Oct 1 2:00
10:00 1:00 AEDT 1917 Feb
10:00 Aus AE%sT 1919 Apr 1 0:00s
- 0 - zzz 1948 Mar 25
+ 0 - -00 1948 Mar 25
10:00 Aus AE%sT 1967
10:00 AT AE%sT 2010 Apr 4 3:00
11:00 - MIST # Macquarie I Standard Time
@@ -342,7 +350,13 @@ Zone Indian/Cocos 6:27:40 - LMT 1900
# commencing at 2.00 am on Sunday 1st November, 2015 and ending at
# 3.00 am on Sunday 17th January, 2016.
-# From Paul Eggert (2015-09-01):
+# From Raymond Kumar (2016-10-04):
+# http://www.fiji.gov.fj/Media-Center/Press-Releases/DAYLIGHT-SAVING-STARTS-ON-6th-NOVEMBER,-2016.aspx
+# "Fiji's daylight savings will begin on Sunday, 6 November 2016, when
+# clocks go forward an hour at 2am to 3am.... Daylight Saving will
+# end at 3.00am on Sunday 15th January 2017."
+
+# From Paul Eggert (2016-10-03):
# For now, guess DST from 02:00 the first Sunday in November to
# 03:00 the third Sunday in January. Although ad hoc, it matches
# transitions since late 2014 and seems more likely to match future
@@ -537,7 +551,7 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
# Base the Bougainville entry on the Arawa-Kieta region, which appears to have
# the most people even though it was devastated in the Bougainville Civil War.
#
-# Although Shanks gives 1942-03-15 / 1943-11-01 for JST, these dates
+# Although Shanks gives 1942-03-15 / 1943-11-01 for UT +09, these dates
# are apparently rough guesswork from the starts of military campaigns.
# The World War II entries below are instead based on Arawa-Kieta.
# The Japanese occupied Kieta in July 1942,
@@ -545,8 +559,8 @@ Zone Pacific/Port_Moresby 9:48:40 - LMT 1880
# http://pwencycl.kgbudge.com/B/o/Bougainville.htm
# and seem to have controlled it until their 1945-08-21 surrender.
#
-# The Autonomous Region of Bougainville plans to switch from UTC+10 to UTC+11
-# on 2014-12-28 at 02:00. They call UTC+11 "Bougainville Standard Time";
+# The Autonomous Region of Bougainville switched from UT +10 to +11
+# on 2014-12-28 at 02:00. They call +11 "Bougainville Standard Time";
# abbreviate this as BST. See:
# http://www.bougainville24.com/bougainville-issues/bougainville-gets-own-timezone/
#
@@ -612,7 +626,7 @@ Link Pacific/Pago_Pago Pacific/Midway # in US minor outlying islands
# From Paul Eggert (2014-06-27):
# The International Date Line Act 2011
# http://www.parliament.gov.ws/images/ACTS/International_Date_Line_Act__2011_-_Eng.pdf
-# changed Samoa from UTC-11 to UTC+13, effective "12 o'clock midnight, on
+# changed Samoa from UT -11 to +13, effective "12 o'clock midnight, on
# Thursday 29th December 2011". The International Date Line was adjusted
# accordingly.
@@ -688,11 +702,13 @@ Rule Tonga 1999 only - Oct 7 2:00s 1:00 S
Rule Tonga 2000 only - Mar 19 2:00s 0 -
Rule Tonga 2000 2001 - Nov Sun>=1 2:00 1:00 S
Rule Tonga 2001 2002 - Jan lastSun 2:00 0 -
+Rule Tonga 2016 max - Nov Sun>=1 2:00 1:00 S
+Rule Tonga 2017 max - Jan Sun>=15 3:00 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Pacific/Tongatapu 12:19:20 - LMT 1901
- 12:20 - TOT 1941 # Tonga Time
- 13:00 - TOT 1999
- 13:00 Tonga TO%sT
+ 12:20 - +1220 1941
+ 13:00 - +13 1999
+ 13:00 Tonga +13/+14
# Tuvalu
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -707,7 +723,7 @@ Zone Pacific/Funafuti 11:56:52 - LMT 1901
# 1886-1891; Baker was similar but exact dates are not known.
# Inhabited by civilians 1935-1942; U.S. military bases 1943-1944;
# uninhabited thereafter.
-# Howland observed Hawaii Standard Time (UT-10:30) in 1937;
+# Howland observed Hawaii Standard Time (UT -10:30) in 1937;
# see page 206 of Elgen M. Long and Marie K. Long,
# Amelia Earhart: the Mystery Solved, Simon & Schuster (2000).
# So most likely Howland and Baker observed Hawaii Time from 1935
@@ -1465,7 +1481,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# Zealand time. I understand that is the time they keep locally, anyhow."
# For now, assume this practice goes back to the introduction of standard time
# in New Zealand, as this would make Chatham Islands time almost exactly match
-# LMT back when New Zealand was at UTC+11:30; also, assume Chatham Islands did
+# LMT back when New Zealand was at UT +11:30; also, assume Chatham Islands did
# not observe New Zealand's prewar DST.
###############################################################################
@@ -1521,7 +1537,7 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# For now, we assume the Ladrones switched at the same time as the Philippines;
# see Asia/Manila.
-# US Public Law 106-564 (2000-12-23) made UTC+10 the official standard time,
+# US Public Law 106-564 (2000-12-23) made UT +10 the official standard time,
# under the name "Chamorro Standard Time". There is no official abbreviation,
# but Congressman Robert A. Underwood, author of the bill that became law,
# wrote in a press release (2000-12-27) that he will seek the use of "ChST".
@@ -1533,15 +1549,15 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# "I am certain, having lived there for the past decade, that 'Truk'
# (now properly known as Chuuk) ... is in the time zone GMT+10."
#
-# Shanks & Pottenger write that Truk switched from UTC+10 to UTC+11
+# Shanks & Pottenger write that Truk switched from UT +10 to +11
# on 1978-10-01; ignore this for now.
# From Paul Eggert (1999-10-29):
# The Federated States of Micronesia Visitors Board writes in
# The Federated States of Micronesia - Visitor Information (1999-01-26)
# http://www.fsmgov.org/info/clocks.html
-# that Truk and Yap are UTC+10, and Ponape and Kosrae are UTC+11.
-# We don't know when Kosrae switched from UTC+12; assume January 1 for now.
+# that Truk and Yap are UT +10, and Ponape and Kosrae are +11.
+# We don't know when Kosrae switched from +12; assume January 1 for now.
# Midway
@@ -1607,11 +1623,11 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# ordaining - by a masterpiece of diplomatic flattery - that
# the Fourth of July should be celebrated twice in that year."
-# Although Shanks & Pottenger says they both switched to UTC-11:30
-# in 1911, and to UTC-11 in 1950. many earlier sources give UTC-11
+# Although Shanks & Pottenger says they both switched to UT -11:30
+# in 1911, and to -11 in 1950. many earlier sources give -11
# for American Samoa, e.g., the US National Bureau of Standards
# circular "Standard Time Throughout the World", 1932.
-# Assume American Samoa switched to UTC-11 in 1911, not 1950,
+# Assume American Samoa switched to -11 in 1911, not 1950,
# and that after 1950 they agreed until (western) Samoa skipped a
# day in 2011. Assume also that the Samoas follow the US and New
# Zealand's "ST"/"DT" style of daylight-saving abbreviations.
@@ -1698,9 +1714,17 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901
# of January the standard time in the Kingdom shall be moved backward by one
# hour to 1:00am.
-# From Pulu 'Anau (2002-11-05):
+# From Pulu ʻAnau (2002-11-05):
# The law was for 3 years, supposedly to get renewed. It wasn't.
+# From Pulu ʻAnau (2016-10-27):
+# http://mic.gov.to/news-today/press-releases/6375-daylight-saving-set-to-run-from-6-november-2016-to-15-january-2017
+# Cannot find anyone who knows the rules, has seen the duration or has seen
+# the cabinet decision, but it appears we are following Fiji's rule set.
+#
+# From Tim Parenti (2016-10-26):
+# Assume Tonga will observe DST from the first Sunday in November at 02:00
+# through the third Sunday in January at 03:00, like Fiji, for now.
# Wake
diff --git a/contrib/tzdata/backward b/contrib/tzdata/backward
index 8b0fef5..aa23dd8 100644
--- a/contrib/tzdata/backward
+++ b/contrib/tzdata/backward
@@ -23,6 +23,7 @@ Link America/Argentina/Mendoza America/Mendoza
Link America/Toronto America/Montreal
Link America/Rio_Branco America/Porto_Acre
Link America/Argentina/Cordoba America/Rosario
+Link America/Tijuana America/Santa_Isabel
Link America/Denver America/Shiprock
Link America/Port_of_Spain America/Virgin
Link Pacific/Auckland Antarctica/South_Pole
@@ -35,6 +36,7 @@ Link Asia/Shanghai Asia/Harbin
Link Asia/Urumqi Asia/Kashgar
Link Asia/Kathmandu Asia/Katmandu
Link Asia/Macau Asia/Macao
+Link Asia/Yangon Asia/Rangoon
Link Asia/Ho_Chi_Minh Asia/Saigon
Link Asia/Jerusalem Asia/Tel_Aviv
Link Asia/Thimphu Asia/Thimbu
diff --git a/contrib/tzdata/backzone b/contrib/tzdata/backzone
new file mode 100644
index 0000000..4a5085f
--- /dev/null
+++ b/contrib/tzdata/backzone
@@ -0,0 +1,677 @@
+# Zones that go back beyond the scope of the tz database
+
+# This file is in the public domain.
+
+# This file is by no means authoritative; if you think you know
+# better, go ahead and edit it (and please send any changes to
+# tz@iana.org for general use in the future). For more, please see
+# the file CONTRIBUTING in the tz distribution.
+
+
+# From Paul Eggert (2014-10-31):
+
+# This file contains data outside the normal scope of the tz database,
+# in that its zones do not differ from normal tz zones after 1970.
+# Links in this file point to zones in this file, superseding links in
+# the file 'backward'.
+
+# Although zones in this file may be of some use for analyzing
+# pre-1970 time stamps, they are less reliable, cover only a tiny
+# sliver of the pre-1970 era, and cannot feasibly be improved to cover
+# most of the era. Because the zones are out of normal scope for the
+# database, less effort is put into maintaining this file. Many of
+# the zones were formerly in other source files, but were removed or
+# replaced by links as their data entries were questionable and/or they
+# differed from other zones only in pre-1970 time stamps.
+
+# Unless otherwise specified, the source for data through 1990 is:
+# Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition),
+# San Diego: ACS Publications, Inc. (2003).
+# Unfortunately this book contains many errors and cites no sources.
+
+# This file is not intended to be compiled standalone, as it
+# assumes rules from other files. In the tz distribution, use
+# 'make PACKRATDATA=backzone zones' to compile and install this file.
+
+# Zones are sorted by zone name. Each zone is preceded by the
+# name of the country that the zone is in, along with any other
+# commentary and rules associated with the entry.
+#
+# As explained in the zic man page, the zone columns are:
+# Zone NAME GMTOFF RULES FORMAT [UNTIL]
+
+# Ethiopia
+# From Paul Eggert (2014-07-31):
+# Like the Swahili of Kenya and Tanzania, many Ethiopians keep a
+# 12-hour clock starting at our 06:00, so their "8 o'clock" is our
+# 02:00 or 14:00. Keep this in mind when you ask the time in Amharic.
+#
+# Shanks & Pottenger write that Ethiopia had six narrowly-spaced time
+# zones between 1870 and 1890, that they merged to 38E50 (2:35:20) in
+# 1890, and that they switched to 3:00 on 1936-05-05. Perhaps 38E50
+# was for Adis Dera. Quite likely the Shanks data entries are wrong
+# anyway.
+Zone Africa/Addis_Ababa 2:34:48 - LMT 1870
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+
+# Eritrea
+Zone Africa/Asmara 2:35:32 - LMT 1870
+ 2:35:32 - AMT 1890 # Asmara Mean Time
+ 2:35:20 - ADMT 1936 May 5 # Adis Dera MT
+ 3:00 - EAT
+Link Africa/Asmara Africa/Asmera
+
+# Mali (southern)
+Zone Africa/Bamako -0:32:00 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Jun 20
+ 0:00 - GMT
+
+# Central African Republic
+Zone Africa/Bangui 1:14:20 - LMT 1912
+ 1:00 - WAT
+
+# Gambia
+Zone Africa/Banjul -1:06:36 - LMT 1912
+ -1:06:36 - BMT 1935 # Banjul Mean Time
+ -1:00 - WAT 1964
+ 0:00 - GMT
+
+# Malawi
+Zone Africa/Blantyre 2:20:00 - LMT 1903 Mar
+ 2:00 - CAT
+
+# Republic of the Congo
+Zone Africa/Brazzaville 1:01:08 - LMT 1912
+ 1:00 - WAT
+
+# Burundi
+Zone Africa/Bujumbura 1:57:28 - LMT 1890
+ 2:00 - CAT
+
+# Guinea
+Zone Africa/Conakry -0:54:52 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960
+ 0:00 - GMT
+
+# Senegal
+Zone Africa/Dakar -1:09:44 - LMT 1912
+ -1:00 - WAT 1941 Jun
+ 0:00 - GMT
+
+# Tanzania
+Zone Africa/Dar_es_Salaam 2:37:08 - LMT 1931
+ 3:00 - EAT 1948
+ 2:45 - BEAUT 1961
+ 3:00 - EAT
+
+# Djibouti
+Zone Africa/Djibouti 2:52:36 - LMT 1911 Jul
+ 3:00 - EAT
+
+# Cameroon
+# Whitman says they switched to 1:00 in 1920; go with Shanks & Pottenger.
+Zone Africa/Douala 0:38:48 - LMT 1912
+ 1:00 - WAT
+# Sierra Leone
+# From Paul Eggert (2014-08-12):
+# The following table is from Shanks & Pottenger, but it can't be right.
+# Whitman gives Mar 31 - Aug 31 for 1931 on.
+# The International Hydrographic Bulletin, 1932-33, p 63 says that
+# Sierra Leone would advance its clocks by 20 minutes on 1933-10-01.
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule SL 1935 1942 - Jun 1 0:00 0:40 SLST
+Rule SL 1935 1942 - Oct 1 0:00 0 WAT
+Rule SL 1957 1962 - Jun 1 0:00 1:00 SLST
+Rule SL 1957 1962 - Sep 1 0:00 0 GMT
+Zone Africa/Freetown -0:53:00 - LMT 1882
+ -0:53:00 - FMT 1913 Jun # Freetown Mean Time
+ -1:00 SL %s 1957
+ 0:00 SL %s
+
+# Botswana
+# From Paul Eggert (2013-02-21):
+# Milne says they were regulated by the Cape Town Signal in 1899;
+# assume they switched to 2:00 when Cape Town did.
+Zone Africa/Gaborone 1:43:40 - LMT 1885
+ 1:30 - SAST 1903 Mar
+ 2:00 - CAT 1943 Sep 19 2:00
+ 2:00 1:00 CAST 1944 Mar 19 2:00
+ 2:00 - CAT
+
+# Zimbabwe
+Zone Africa/Harare 2:04:12 - LMT 1903 Mar
+ 2:00 - CAT
+
+# South Sudan
+Zone Africa/Juba 2:06:24 - LMT 1931
+ 2:00 Sudan CA%sT 2000 Jan 15 12:00
+ 3:00 - EAT
+
+# Uganda
+Zone Africa/Kampala 2:09:40 - LMT 1928 Jul
+ 3:00 - EAT 1930
+ 2:30 - BEAT 1948
+ 2:45 - BEAUT 1957
+ 3:00 - EAT
+
+# Rwanda
+Zone Africa/Kigali 2:00:16 - LMT 1935 Jun
+ 2:00 - CAT
+
+# Democratic Republic of the Congo (west)
+Zone Africa/Kinshasa 1:01:12 - LMT 1897 Nov 9
+ 1:00 - WAT
+
+# Gabon
+Zone Africa/Libreville 0:37:48 - LMT 1912
+ 1:00 - WAT
+
+# Togo
+Zone Africa/Lome 0:04:52 - LMT 1893
+ 0:00 - GMT
+
+# Angola
+#
+# Shanks gives 1911-05-26 for the transition to WAT,
+# evidently confusing the date of the Portuguese decree
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# with the date that it took effect, namely 1912-01-01.
+#
+Zone Africa/Luanda 0:52:56 - LMT 1892
+ 0:52:04 - AOT 1912 Jan 1 # Angola Time
+ 1:00 - WAT
+
+# Democratic Republic of the Congo (east)
+Zone Africa/Lubumbashi 1:49:52 - LMT 1897 Nov 9
+ 2:00 - CAT
+
+# Zambia
+Zone Africa/Lusaka 1:53:08 - LMT 1903 Mar
+ 2:00 - CAT
+
+# Equatorial Guinea
+#
+# Although Shanks says that Malabo switched from UT +00 to +01 on 1963-12-15,
+# a Google Books search says that London Calling, Issues 432-465 (1948), p 19,
+# says that Spanish Guinea was at +01 back then. The Shanks data entries
+# are most likely wrong, but we have nothing better; use them here for now.
+#
+Zone Africa/Malabo 0:35:08 - LMT 1912
+ 0:00 - GMT 1963 Dec 15
+ 1:00 - WAT
+
+# Lesotho
+Zone Africa/Maseru 1:50:00 - LMT 1903 Mar
+ 2:00 - SAST 1943 Sep 19 2:00
+ 2:00 1:00 SAST 1944 Mar 19 2:00
+ 2:00 - SAST
+
+# Swaziland
+Zone Africa/Mbabane 2:04:24 - LMT 1903 Mar
+ 2:00 - SAST
+
+# Somalia
+Zone Africa/Mogadishu 3:01:28 - LMT 1893 Nov
+ 3:00 - EAT 1931
+ 2:30 - BEAT 1957
+ 3:00 - EAT
+
+# Niger
+Zone Africa/Niamey 0:08:28 - LMT 1912
+ -1:00 - WAT 1934 Feb 26
+ 0:00 - GMT 1960
+ 1:00 - WAT
+
+# Mauritania
+Zone Africa/Nouakchott -1:03:48 - LMT 1912
+ 0:00 - GMT 1934 Feb 26
+ -1:00 - WAT 1960 Nov 28
+ 0:00 - GMT
+
+# Burkina Faso
+Zone Africa/Ouagadougou -0:06:04 - LMT 1912
+ 0:00 - GMT
+
+# Benin
+# Whitman says they switched to 1:00 in 1946, not 1934;
+# go with Shanks & Pottenger.
+Zone Africa/Porto-Novo 0:10:28 - LMT 1912 Jan 1
+ 0:00 - GMT 1934 Feb 26
+ 1:00 - WAT
+
+# São Tomé and Príncipe
+Zone Africa/Sao_Tome 0:26:56 - LMT 1884
+ -0:36:32 - LMT 1912 # Lisbon Mean Time
+ 0:00 - GMT
+
+# Mali (northern)
+Zone Africa/Timbuktu -0:12:04 - LMT 1912
+ 0:00 - GMT
+
+# Anguilla
+Zone America/Anguilla -4:12:16 - LMT 1912 Mar 2
+ -4:00 - AST
+
+# Antigua and Barbuda
+Zone America/Antigua -4:07:12 - LMT 1912 Mar 2
+ -5:00 - EST 1951
+ -4:00 - AST
+
+# Chubut, Argentina
+# The name "Comodoro Rivadavia" exceeds the 14-byte POSIX limit.
+Zone America/Argentina/ComodRivadavia -4:30:00 - LMT 1894 Oct 31
+ -4:16:48 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Mar 3
+ -4:00 - WART 1991 Oct 20
+ -3:00 Arg AR%sT 1999 Oct 3
+ -4:00 Arg AR%sT 2000 Mar 3
+ -3:00 - ART 2004 Jun 1
+ -4:00 - WART 2004 Jun 20
+ -3:00 - ART
+
+# Aruba
+Zone America/Aruba -4:40:24 - LMT 1912 Feb 12 # Oranjestad
+ -4:30 - ANT 1965 # Netherlands Antilles Time
+ -4:00 - AST
+
+# Cayman Is
+Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
+ -5:07:11 - KMT 1912 Feb # Kingston Mean Time
+ -5:00 - EST
+
+# Canada
+Zone America/Coral_Harbour -5:32:40 - LMT 1884
+ -5:00 NT_YK E%sT 1946
+ -5:00 - EST
+
+# Dominica
+Zone America/Dominica -4:05:36 - LMT 1911 Jul 1 0:01 # Roseau
+ -4:00 - AST
+
+# Baja California
+# See 'northamerica' for why this entry is here rather than there.
+Zone America/Ensenada -7:46:28 - LMT 1922 Jan 1 0:13:32
+ -8:00 - PST 1927 Jun 10 23:00
+ -7:00 - MST 1930 Nov 16
+ -8:00 - PST 1942 Apr
+ -7:00 - MST 1949 Jan 14
+ -8:00 - PST 1996
+ -8:00 Mexico P%sT
+
+# Grenada
+Zone America/Grenada -4:07:00 - LMT 1911 Jul # St George's
+ -4:00 - AST
+
+# Guadeloupe
+Zone America/Guadeloupe -4:06:08 - LMT 1911 Jun 8 # Pointe-à-Pitre
+ -4:00 - AST
+
+# Canada
+#
+# From Paul Eggert (2015-03-24):
+# Since 1970 most of Quebec has been like Toronto; see
+# America/Toronto. However, earlier versions of the tz database
+# mistakenly relied on data from Shanks & Pottenger saying that Quebec
+# differed from Ontario after 1970, and the following rules and zone
+# were created for most of Quebec from the incorrect Shanks &
+# Pottenger data. The post-1970 entries have been corrected, but the
+# pre-1970 entries are unchecked and probably have errors.
+#
+# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+Rule Mont 1917 only - Mar 25 2:00 1:00 D
+Rule Mont 1917 only - Apr 24 0:00 0 S
+Rule Mont 1919 only - Mar 31 2:30 1:00 D
+Rule Mont 1919 only - Oct 25 2:30 0 S
+Rule Mont 1920 only - May 2 2:30 1:00 D
+Rule Mont 1920 1922 - Oct Sun>=1 2:30 0 S
+Rule Mont 1921 only - May 1 2:00 1:00 D
+Rule Mont 1922 only - Apr 30 2:00 1:00 D
+Rule Mont 1924 only - May 17 2:00 1:00 D
+Rule Mont 1924 1926 - Sep lastSun 2:30 0 S
+Rule Mont 1925 1926 - May Sun>=1 2:00 1:00 D
+Rule Mont 1927 1937 - Apr lastSat 24:00 1:00 D
+Rule Mont 1927 1937 - Sep lastSat 24:00 0 S
+Rule Mont 1938 1940 - Apr lastSun 0:00 1:00 D
+Rule Mont 1938 1939 - Sep lastSun 0:00 0 S
+Rule Mont 1946 1973 - Apr lastSun 2:00 1:00 D
+Rule Mont 1945 1948 - Sep lastSun 2:00 0 S
+Rule Mont 1949 1950 - Oct lastSun 2:00 0 S
+Rule Mont 1951 1956 - Sep lastSun 2:00 0 S
+Rule Mont 1957 1973 - Oct lastSun 2:00 0 S
+Zone America/Montreal -4:54:16 - LMT 1884
+ -5:00 Mont E%sT 1918
+ -5:00 Canada E%sT 1919
+ -5:00 Mont E%sT 1942 Feb 9 2:00s
+ -5:00 Canada E%sT 1946
+ -5:00 Mont E%sT 1974
+ -5:00 Canada E%sT
+
+# Montserrat
+# From Paul Eggert (2006-03-22):
+# In 1995 volcanic eruptions forced evacuation of Plymouth, the capital.
+# world.gazetteer.com says Cork Hill is the most populous location now.
+Zone America/Montserrat -4:08:52 - LMT 1911 Jul 1 0:01 # Cork Hill
+ -4:00 - AST
+
+# Argentina
+# This entry was intended for the following areas, but has been superseded by
+# more detailed zones.
+# Santa Fe (SF), Entre Ríos (ER), Corrientes (CN), Misiones (MN), Chaco (CC),
+# Formosa (FM), La Pampa (LP), Chubut (CH)
+Zone America/Rosario -4:02:40 - LMT 1894 Nov
+ -4:16:44 - CMT 1920 May
+ -4:00 - ART 1930 Dec
+ -4:00 Arg AR%sT 1969 Oct 5
+ -3:00 Arg AR%sT 1991 Jul
+ -3:00 - ART 1999 Oct 3 0:00
+ -4:00 Arg AR%sT 2000 Mar 3 0:00
+ -3:00 - ART
+
+# St Kitts-Nevis
+Zone America/St_Kitts -4:10:52 - LMT 1912 Mar 2 # Basseterre
+ -4:00 - AST
+
+# St Lucia
+Zone America/St_Lucia -4:04:00 - LMT 1890 # Castries
+ -4:04:00 - CMT 1912 # Castries Mean Time
+ -4:00 - AST
+
+# Virgin Is
+Zone America/St_Thomas -4:19:44 - LMT 1911 Jul # Charlotte Amalie
+ -4:00 - AST
+
+# St Vincent and the Grenadines
+Zone America/St_Vincent -4:04:56 - LMT 1890 # Kingstown
+ -4:04:56 - KMT 1912 # Kingstown Mean Time
+ -4:00 - AST
+
+# British Virgin Is
+Zone America/Tortola -4:18:28 - LMT 1911 Jul # Road Town
+ -4:00 - AST
+
+# McMurdo, Ross Island, since 1955-12
+Zone Antarctica/McMurdo 0 - -00 1956
+ 12:00 NZ NZ%sT
+Link Antarctica/McMurdo Antarctica/South_Pole
+
+# Yemen
+# Milne says 2:59:54 was the meridian of the saluting battery at Aden,
+# and that Yemen was at 1:55:56, the meridian of the Hagia Sophia.
+Zone Asia/Aden 2:59:54 - LMT 1950
+ 3:00 - AST
+
+# Bahrain
+Zone Asia/Bahrain 3:22:20 - LMT 1920 # Manamah
+ 4:00 - GST 1972 Jun
+ 3:00 - AST
+
+# India
+#
+# From Paul Eggert (2014-09-06):
+# The 1876 Report of the Secretary of the [US] Navy, p 305 says that Madras
+# civil time was 5:20:57.3.
+#
+# From Paul Eggert (2014-08-21):
+# In tomorrow's The Hindu, Nitya Menon reports that India had two civil time
+# zones starting in 1884, one in Bombay and one in Calcutta, and that railways
+# used a third time zone based on Madras time (80 deg. 18'30" E). Also,
+# in 1881 Bombay briefly switched to Madras time, but switched back. See:
+# http://www.thehindu.com/news/cities/chennai/madras-375-when-madras-clocked-the-time/article6339393.ece
+#Zone Asia/Chennai [not enough info to complete]
+
+# China
+# Long-shu Time (probably due to Long and Shu being two names of that area)
+# Guangxi, Guizhou, Hainan, Ningxia, Sichuan, Shaanxi, and Yunnan;
+# most of Gansu; west Inner Mongolia; west Qinghai; and the Guangdong
+# counties Deqing, Enping, Kaiping, Luoding, Taishan, Xinxing,
+# Yangchun, Yangjiang, Yu'nan, and Yunfu.
+Zone Asia/Chongqing 7:06:20 - LMT 1928 # or Chungking
+ 7:00 - LONT 1980 May # Long-shu Time
+ 8:00 PRC C%sT
+Link Asia/Chongqing Asia/Chungking
+
+# Vietnam
+# From Paul Eggert (2014-10-13):
+# See Asia/Ho_Chi_Minh for the source for this data.
+# Trần's book says the 1954-55 transition to 07:00 in Hanoi was in
+# October 1954, with exact date and time unspecified.
+Zone Asia/Hanoi 7:03:24 - LMT 1906 Jul 1
+ 7:06:30 - PLMT 1911 May 1
+ 7:00 - ICT 1942 Dec 31 23:00
+ 8:00 - IDT 1945 Mar 14 23:00
+ 9:00 - JST 1945 Sep 2
+ 7:00 - ICT 1947 Apr 1
+ 8:00 - IDT 1954 Oct
+ 7:00 - ICT
+
+# China
+# Changbai Time ("Long-white Time", Long-white = Heilongjiang area)
+# Heilongjiang (except Mohe county), Jilin
+Zone Asia/Harbin 8:26:44 - LMT 1928 # or Haerbin
+ 8:30 - CHAT 1932 Mar # Changbai Time
+ 8:00 - CST 1940
+ 9:00 - CHAT 1966 May
+ 8:30 - CHAT 1980 May
+ 8:00 PRC C%sT
+
+# far west China
+Zone Asia/Kashgar 5:03:56 - LMT 1928 # or Kashi or Kaxgar
+ 5:30 - KAST 1940 # Kashgar Time
+ 5:00 - KAST 1980 May
+ 8:00 PRC C%sT
+
+# Kuwait
+Zone Asia/Kuwait 3:11:56 - LMT 1950
+ 3:00 - AST
+
+
+# Oman
+# Milne says 3:54:24 was the meridian of the Muscat Tidal Observatory.
+Zone Asia/Muscat 3:54:24 - LMT 1920
+ 4:00 - GST
+
+# India
+# From Paul Eggert (2014-08-11), after a heads-up from Stephen Colebourne:
+# According to a Portuguese decree (1911-05-26)
+# http://dre.pt/pdf1sdip/1911/05/12500/23132313.pdf
+# Portuguese India switched to UT +05 on 1912-01-01.
+#Zone Asia/Panaji [not enough info to complete]
+
+# Cambodia
+# From Paul Eggert (2014-10-11):
+# See Asia/Ho_Chi_Minh for the source for most of this data. Also, guess
+# (1) Cambodia reverted to UT +07 on 1945-09-02, when Vietnam did, and
+# (2) they also reverted to +07 on 1953-11-09, the date of independence.
+# These guesses are probably wrong but they're better than guessing no
+# transitions there.
+Zone Asia/Phnom_Penh 6:59:40 - LMT 1906 Jul 1
+ 7:06:30 - PLMT 1911 May 1
+ 7:00 - ICT 1942 Dec 31 23:00
+ 8:00 - IDT 1945 Mar 14 23:00
+ 9:00 - JST 1945 Sep 2
+ 7:00 - ICT 1947 Apr 1
+ 8:00 - IDT 1953 Nov 9
+ 7:00 - ICT
+
+# Israel
+Zone Asia/Tel_Aviv 2:19:04 - LMT 1880
+ 2:21 - JMT 1918
+ 2:00 Zion I%sT
+
+# Laos
+# From Paul Eggert (2014-10-11):
+# See Asia/Ho_Chi_Minh for the source for most of this data.
+# Trần's book says that Laos reverted to UT +07 on 1955-04-15.
+# Also, guess that Laos reverted to +07 on 1945-09-02, when Vietnam did;
+# this is probably wrong but it's better than guessing no transition.
+Zone Asia/Vientiane 6:50:24 - LMT 1906 Jul 1
+ 7:06:30 - PLMT 1911 May 1
+ 7:00 - ICT 1942 Dec 31 23:00
+ 8:00 - IDT 1945 Mar 14 23:00
+ 9:00 - JST 1945 Sep 2
+ 7:00 - ICT 1947 Apr 1
+ 8:00 - IDT 1955 Apr 15
+ 7:00 - ICT
+
+# Jan Mayen
+# From Whitman:
+Zone Atlantic/Jan_Mayen -1:00 - EGT
+
+# St Helena
+Zone Atlantic/St_Helena -0:22:48 - LMT 1890 # Jamestown
+ -0:22:48 - JMT 1951 # Jamestown Mean Time
+ 0:00 - GMT
+
+# Northern Ireland
+Zone Europe/Belfast -0:23:40 - LMT 1880 Aug 2
+ -0:25:21 - DMT 1916 May 21 2:00
+ # DMT = Dublin/Dunsink MT
+ -0:25:21 1:00 IST 1916 Oct 1 2:00s
+ # IST = Irish Summer Time
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Guernsey
+# Data from Joseph S. Myers
+# http://mm.icann.org/pipermail/tz/2013-September/019883.html
+# References to be added
+# LMT Location - 49.27N -2.33E - St.Peter Port
+Zone Europe/Guernsey -0:09:19 - LMT 1913 Jun 18
+ 0:00 GB-Eire %s 1940 Jul 2
+ 1:00 C-Eur CE%sT 1945 May 8
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Isle of Man
+#
+# From Lester Caine (2013-09-04):
+# The Isle of Man legislation is now on-line at
+# <http://www.legislation.gov.im>, starting with the original Statutory
+# Time Act in 1883 and including additional confirmation of some of
+# the dates of the 'Summer Time' orders originating at
+# Westminster. There is a little uncertainty as to the starting date
+# of the first summer time in 1916 which may have be announced a
+# couple of days late. There is still a substantial number of
+# documents to work through, but it is thought that every GB change
+# was also implemented on the island.
+#
+# AT4 of 1883 - The Statutory Time et cetera Act 1883 -
+# LMT Location - 54.1508N -4.4814E - Tynwald Hill ( Manx parliament )
+Zone Europe/Isle_of_Man -0:17:55 - LMT 1883 Mar 30 0:00s
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Jersey
+# Data from Joseph S. Myers
+# http://mm.icann.org/pipermail/tz/2013-September/019883.html
+# References to be added
+# LMT Location - 49.187N -2.107E - St. Helier
+Zone Europe/Jersey -0:08:25 - LMT 1898 Jun 11 16:00u
+ 0:00 GB-Eire %s 1940 Jul 2
+ 1:00 C-Eur CE%sT 1945 May 8
+ 0:00 GB-Eire %s 1968 Oct 27
+ 1:00 - BST 1971 Oct 31 2:00u
+ 0:00 GB-Eire %s 1996
+ 0:00 EU GMT/BST
+
+# Slovenia
+Zone Europe/Ljubljana 0:58:04 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Bosnia and Herzegovina
+Zone Europe/Sarajevo 1:13:40 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Macedonia
+Zone Europe/Skopje 1:25:44 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Moldova / Transnistria
+Zone Europe/Tiraspol 1:58:32 - LMT 1880
+ 1:55 - CMT 1918 Feb 15 # Chisinau MT
+ 1:44:24 - BMT 1931 Jul 24 # Bucharest MT
+ 2:00 Romania EE%sT 1940 Aug 15
+ 2:00 1:00 EEST 1941 Jul 17
+ 1:00 C-Eur CE%sT 1944 Aug 24
+ 3:00 Russia MSK/MSD 1991 Mar 31 2:00
+ 2:00 Russia EE%sT 1992 Jan 19 2:00
+ 3:00 Russia MSK/MSD
+
+# Liechtenstein
+Zone Europe/Vaduz 0:38:04 - LMT 1894 Jun
+ 1:00 - CET 1981
+ 1:00 EU CE%sT
+
+# Croatia
+Zone Europe/Zagreb 1:03:52 - LMT 1884
+ 1:00 - CET 1941 Apr 18 23:00
+ 1:00 C-Eur CE%sT 1945 May 8 2:00s
+ 1:00 1:00 CEST 1945 Sep 16 2:00s
+ 1:00 - CET 1982 Nov 27
+ 1:00 EU CE%sT
+
+# Madagascar
+Zone Indian/Antananarivo 3:10:04 - LMT 1911 Jul
+ 3:00 - EAT 1954 Feb 27 23:00s
+ 3:00 1:00 EAST 1954 May 29 23:00s
+ 3:00 - EAT
+
+# Comoros
+Zone Indian/Comoro 2:53:04 - LMT 1911 Jul # Moroni, Gran Comoro
+ 3:00 - EAT
+
+# Mayotte
+Zone Indian/Mayotte 3:00:56 - LMT 1911 Jul # Mamoutzou
+ 3:00 - EAT
+
+# US minor outlying islands
+Zone Pacific/Johnston -10:00 - HST
+
+# US minor outlying islands
+#
+# From Mark Brader (2005-01-23):
+# [Fallacies and Fantasies of Air Transport History, by R.E.G. Davies,
+# published 1994 by Paladwr Press, McLean, VA, USA; ISBN 0-9626483-5-3]
+# reproduced a Pan American Airways timetable from 1936, for their weekly
+# "Orient Express" flights between San Francisco and Manila, and connecting
+# flights to Chicago and the US East Coast. As it uses some time zone
+# designations that I've never seen before:....
+# Fri. 6:30A Lv. HONOLOLU (Pearl Harbor), H.I. H.L.T. Ar. 5:30P Sun.
+# " 3:00P Ar. MIDWAY ISLAND . . . . . . . . . M.L.T. Lv. 6:00A "
+#
+Zone Pacific/Midway -11:49:28 - LMT 1901
+ -11:00 - NST 1956 Jun 3
+ -11:00 1:00 NDT 1956 Sep 2
+ -11:00 - NST 1967 Apr # N=Nome
+ -11:00 - BST 1983 Nov 30 # B=Bering
+ -11:00 - SST # S=Samoa
+
+# N Mariana Is
+Zone Pacific/Saipan -14:17:00 - LMT 1844 Dec 31
+ 9:43:00 - LMT 1901
+ 9:00 - MPT 1969 Oct # N Mariana Is Time
+ 10:00 - MPT 2000 Dec 23
+ 10:00 - ChST # Chamorro Standard Time
diff --git a/contrib/tzdata/checklinks.awk b/contrib/tzdata/checklinks.awk
new file mode 100644
index 0000000..5b3e157
--- /dev/null
+++ b/contrib/tzdata/checklinks.awk
@@ -0,0 +1,48 @@
+# Check links in tz tables.
+
+# Contributed by Paul Eggert. This file is in the public domain.
+
+BEGIN {
+ # Special marker indicating that the name is defined as a Zone.
+ # It is a newline so that it cannot match a valid name.
+ # It is not null so that its slot does not appear unset.
+ Zone = "\n"
+}
+
+/^Zone/ {
+ if (defined[$2]) {
+ if (defined[$2] == Zone) {
+ printf "%s: Zone has duplicate definition\n", $2
+ } else {
+ printf "%s: Link with same name as Zone\n", $2
+ }
+ status = 1
+ }
+ defined[$2] = Zone
+}
+
+/^Link/ {
+ if (defined[$3]) {
+ if (defined[$3] == Zone) {
+ printf "%s: Link with same name as Zone\n", $3
+ } else if (defined[$3] == $2) {
+ printf "%s: Link has duplicate definition\n", $3
+ } else {
+ printf "%s: Link to both %s and %s\n", $3, defined[$3], $2
+ }
+ status = 1
+ }
+ used[$2] = 1
+ defined[$3] = $2
+}
+
+END {
+ for (tz in used) {
+ if (defined[tz] != Zone) {
+ printf "%s: Link to non-zone\n", tz
+ status = 1
+ }
+ }
+
+ exit status
+}
diff --git a/contrib/tzdata/checktab.awk b/contrib/tzdata/checktab.awk
new file mode 100644
index 0000000..2397673
--- /dev/null
+++ b/contrib/tzdata/checktab.awk
@@ -0,0 +1,177 @@
+# Check tz tables for consistency.
+
+# Contributed by Paul Eggert. This file is in the public domain.
+
+BEGIN {
+ FS = "\t"
+
+ if (!iso_table) iso_table = "iso3166.tab"
+ if (!zone_table) zone_table = "zone1970.tab"
+ if (!want_warnings) want_warnings = -1
+
+ while (getline <iso_table) {
+ iso_NR++
+ if ($0 ~ /^#/) continue
+ if (NF != 2) {
+ printf "%s:%d: wrong number of columns\n", \
+ iso_table, iso_NR >>"/dev/stderr"
+ status = 1
+ }
+ cc = $1
+ name = $2
+ if (cc !~ /^[A-Z][A-Z]$/) {
+ printf "%s:%d: invalid country code '%s'\n", \
+ iso_table, iso_NR, cc >>"/dev/stderr"
+ status = 1
+ }
+ if (cc <= cc0) {
+ if (cc == cc0) {
+ s = "duplicate";
+ } else {
+ s = "out of order";
+ }
+
+ printf "%s:%d: country code '%s' is %s\n", \
+ iso_table, iso_NR, cc, s \
+ >>"/dev/stderr"
+ status = 1
+ }
+ cc0 = cc
+ if (name2cc[name]) {
+ printf "%s:%d: '%s' and '%s' have the same name\n", \
+ iso_table, iso_NR, name2cc[name], cc \
+ >>"/dev/stderr"
+ status = 1
+ }
+ name2cc[name] = cc
+ cc2name[cc] = name
+ cc2NR[cc] = iso_NR
+ }
+
+ cc0 = ""
+
+ while (getline <zone_table) {
+ zone_NR++
+ if ($0 ~ /^#/) continue
+ if (NF != 3 && NF != 4) {
+ printf "%s:%d: wrong number of columns\n", \
+ zone_table, zone_NR >>"/dev/stderr"
+ status = 1
+ }
+ split($1, cca, /,/)
+ cc = cca[1]
+ coordinates = $2
+ tz = $3
+ comments = $4
+ if (cc < cc0) {
+ printf "%s:%d: country code '%s' is out of order\n", \
+ zone_table, zone_NR, cc >>"/dev/stderr"
+ status = 1
+ }
+ cc0 = cc
+ tztab[tz] = 1
+ tz2comments[tz] = comments
+ tz2NR[tz] = zone_NR
+ for (i in cca) {
+ cc = cca[i]
+ cctz = cc tz
+ cctztab[cctz] = 1
+ if (cc2name[cc]) {
+ cc_used[cc]++
+ } else {
+ printf "%s:%d: %s: unknown country code\n", \
+ zone_table, zone_NR, cc >>"/dev/stderr"
+ status = 1
+ }
+ }
+ if (coordinates !~ /^[-+][0-9][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9]$/ \
+ && coordinates !~ /^[-+][0-9][0-9][0-5][0-9][0-5][0-9][-+][01][0-9][0-9][0-5][0-9][0-5][0-9]$/) {
+ printf "%s:%d: %s: invalid coordinates\n", \
+ zone_table, zone_NR, coordinates >>"/dev/stderr"
+ status = 1
+ }
+ }
+
+ for (cctz in cctztab) {
+ cc = substr (cctz, 1, 2)
+ tz = substr (cctz, 3)
+ if (1 < cc_used[cc]) {
+ comments_needed[tz] = cc
+ }
+ }
+ for (cctz in cctztab) {
+ cc = substr (cctz, 1, 2)
+ tz = substr (cctz, 3)
+ if (!comments_needed[tz] && tz2comments[tz]) {
+ printf "%s:%d: unnecessary comment '%s'\n", \
+ zone_table, tz2NR[tz], tz2comments[tz] \
+ >>"/dev/stderr"
+ tz2comments[tz] = 0
+ status = 1
+ } else if (comments_needed[tz] && !tz2comments[tz]) {
+ printf "%s:%d: missing comment for %s\n", \
+ zone_table, tz2NR[tz], comments_needed[tz] \
+ >>"/dev/stderr"
+ tz2comments[tz] = 1
+ status = 1
+ }
+ }
+ FS = " "
+}
+
+$1 ~ /^#/ { next }
+
+{
+ tz = rules = ""
+ if ($1 == "Zone") {
+ tz = $2
+ ruleUsed[$4] = 1
+ } else if ($1 == "Link" && zone_table == "zone.tab") {
+ # Ignore Link commands if source and destination basenames
+ # are identical, e.g. Europe/Istanbul versus Asia/Istanbul.
+ src = $2
+ dst = $3
+ while ((i = index(src, "/"))) src = substr(src, i+1)
+ while ((i = index(dst, "/"))) dst = substr(dst, i+1)
+ if (src != dst) tz = $3
+ } else if ($1 == "Rule") {
+ ruleDefined[$2] = 1
+ } else {
+ ruleUsed[$2] = 1
+ }
+ if (tz && tz ~ /\//) {
+ if (!tztab[tz]) {
+ printf "%s: no data for '%s'\n", zone_table, tz \
+ >>"/dev/stderr"
+ status = 1
+ }
+ zoneSeen[tz] = 1
+ }
+}
+
+END {
+ for (tz in ruleDefined) {
+ if (!ruleUsed[tz]) {
+ printf "%s: Rule never used\n", tz
+ status = 1
+ }
+ }
+ for (tz in tztab) {
+ if (!zoneSeen[tz]) {
+ printf "%s:%d: no Zone table for '%s'\n", \
+ zone_table, tz2NR[tz], tz >>"/dev/stderr"
+ status = 1
+ }
+ }
+ if (0 < want_warnings) {
+ for (cc in cc2name) {
+ if (!cc_used[cc]) {
+ printf "%s:%d: warning: " \
+ "no Zone entries for %s (%s)\n", \
+ iso_table, cc2NR[cc], cc, cc2name[cc]
+ }
+ }
+ }
+
+ exit status
+}
diff --git a/contrib/tzdata/etcetera b/contrib/tzdata/etcetera
index 3d271a5..99ad2c7 100644
--- a/contrib/tzdata/etcetera
+++ b/contrib/tzdata/etcetera
@@ -8,6 +8,13 @@
# need now for the entries that are not on UTC are for ships at sea
# that cannot use POSIX TZ settings.
+# Starting with POSIX 1003.1-2001, the entries below are all
+# unnecessary as settings for the TZ environment variable. E.g.,
+# instead of TZ='Etc/GMT+4' one can use the POSIX setting TZ='<-04>+4'.
+#
+# Do not use a POSIX TZ setting like TZ='GMT+4', which is four hours
+# behind GMT but uses the completely misleading abbreviation "GMT".
+
Zone Etc/GMT 0 - GMT
Zone Etc/UTC 0 - UTC
Zone Etc/UCT 0 - UCT
@@ -26,23 +33,13 @@ Link Etc/GMT Etc/GMT-0
Link Etc/GMT Etc/GMT+0
Link Etc/GMT Etc/GMT0
-# We use POSIX-style signs in the Zone names and the output abbreviations,
+# Be consistent with POSIX TZ settings in the Zone names,
# even though this is the opposite of what many people expect.
# POSIX has positive signs west of Greenwich, but many people expect
# positive signs east of Greenwich. For example, TZ='Etc/GMT+4' uses
-# the abbreviation "GMT+4" and corresponds to 4 hours behind UT
+# the abbreviation "-04" and corresponds to 4 hours behind UT
# (i.e. west of Greenwich) even though many people would expect it to
# mean 4 hours ahead of UT (i.e. east of Greenwich).
-#
-# In the draft 5 of POSIX 1003.1-200x, the angle bracket notation allows for
-# TZ='<GMT-4>+4'; if you want time zone abbreviations conforming to
-# ISO 8601 you can use TZ='<-0400>+4'. Thus the commonly-expected
-# offset is kept within the angle bracket (and is used for display)
-# while the POSIX sign is kept outside the angle bracket (and is used
-# for calculation).
-#
-# Do not use a TZ setting like TZ='GMT+4', which is four hours behind
-# GMT but uses the completely misleading abbreviation "GMT".
# Earlier incarnations of this package were not POSIX-compliant,
# and had lines such as
@@ -51,30 +48,31 @@ Link Etc/GMT Etc/GMT0
# way does a
# zic -l GMT-12
# so we moved the names into the Etc subdirectory.
+# Also, the time zone abbreviations are now compatible with %z.
-Zone Etc/GMT-14 14 - GMT-14 # 14 hours ahead of GMT
-Zone Etc/GMT-13 13 - GMT-13
-Zone Etc/GMT-12 12 - GMT-12
-Zone Etc/GMT-11 11 - GMT-11
-Zone Etc/GMT-10 10 - GMT-10
-Zone Etc/GMT-9 9 - GMT-9
-Zone Etc/GMT-8 8 - GMT-8
-Zone Etc/GMT-7 7 - GMT-7
-Zone Etc/GMT-6 6 - GMT-6
-Zone Etc/GMT-5 5 - GMT-5
-Zone Etc/GMT-4 4 - GMT-4
-Zone Etc/GMT-3 3 - GMT-3
-Zone Etc/GMT-2 2 - GMT-2
-Zone Etc/GMT-1 1 - GMT-1
-Zone Etc/GMT+1 -1 - GMT+1
-Zone Etc/GMT+2 -2 - GMT+2
-Zone Etc/GMT+3 -3 - GMT+3
-Zone Etc/GMT+4 -4 - GMT+4
-Zone Etc/GMT+5 -5 - GMT+5
-Zone Etc/GMT+6 -6 - GMT+6
-Zone Etc/GMT+7 -7 - GMT+7
-Zone Etc/GMT+8 -8 - GMT+8
-Zone Etc/GMT+9 -9 - GMT+9
-Zone Etc/GMT+10 -10 - GMT+10
-Zone Etc/GMT+11 -11 - GMT+11
-Zone Etc/GMT+12 -12 - GMT+12
+Zone Etc/GMT-14 14 - +14
+Zone Etc/GMT-13 13 - +13
+Zone Etc/GMT-12 12 - +12
+Zone Etc/GMT-11 11 - +11
+Zone Etc/GMT-10 10 - +10
+Zone Etc/GMT-9 9 - +09
+Zone Etc/GMT-8 8 - +08
+Zone Etc/GMT-7 7 - +07
+Zone Etc/GMT-6 6 - +06
+Zone Etc/GMT-5 5 - +05
+Zone Etc/GMT-4 4 - +04
+Zone Etc/GMT-3 3 - +03
+Zone Etc/GMT-2 2 - +02
+Zone Etc/GMT-1 1 - +01
+Zone Etc/GMT+1 -1 - -01
+Zone Etc/GMT+2 -2 - -02
+Zone Etc/GMT+3 -3 - -03
+Zone Etc/GMT+4 -4 - -04
+Zone Etc/GMT+5 -5 - -05
+Zone Etc/GMT+6 -6 - -06
+Zone Etc/GMT+7 -7 - -07
+Zone Etc/GMT+8 -8 - -08
+Zone Etc/GMT+9 -9 - -09
+Zone Etc/GMT+10 -10 - -10
+Zone Etc/GMT+11 -11 - -11
+Zone Etc/GMT+12 -12 - -12
diff --git a/contrib/tzdata/europe b/contrib/tzdata/europe
index 358a048..4709cc7 100644
--- a/contrib/tzdata/europe
+++ b/contrib/tzdata/europe
@@ -75,8 +75,7 @@
# 1:00 CET CEST CEMT Central Europe
# 1:00:14 SET Swedish (1879-1899)*
# 2:00 EET EEST Eastern Europe
-# 3:00 FET Further-eastern Europe (2011-2014)*
-# 3:00 MSK MSD MSM* Minsk, Moscow
+# 3:00 MSK MSD Moscow
# From Peter Ilieve (1994-12-04),
# The original six [EU members]: Belgium, France, (West) Germany, Italy,
@@ -583,16 +582,33 @@ Rule E-Eur 1979 1995 - Sep lastSun 0:00 0 -
Rule E-Eur 1981 max - Mar lastSun 0:00 1:00 S
Rule E-Eur 1996 max - Oct lastSun 0:00 0 -
+
+# Daylight saving time for Russia and the Soviet Union
+#
+# The 1917-1921 decree URLs are from Alexander Belopolsky (2016-08-23).
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Russia 1917 only - Jul 1 23:00 1:00 MST # Moscow Summer Time
+#
+# Decree No. 142 (1917-12-22) http://istmat.info/node/28137
Rule Russia 1917 only - Dec 28 0:00 0 MMT # Moscow Mean Time
+#
+# Decree No. 497 (1918-05-30) http://istmat.info/node/30001
Rule Russia 1918 only - May 31 22:00 2:00 MDST # Moscow Double Summer Time
Rule Russia 1918 only - Sep 16 1:00 1:00 MST
+#
+# Decree No. 258 (1919-05-29) http://istmat.info/node/37949
Rule Russia 1919 only - May 31 23:00 2:00 MDST
-Rule Russia 1919 only - Jul 1 2:00 1:00 MSD
+#
+Rule Russia 1919 only - Jul 1 0:00u 1:00 MSD
Rule Russia 1919 only - Aug 16 0:00 0 MSK
+#
+# Decree No. 63 (1921-02-03) http://istmat.info/node/45840
Rule Russia 1921 only - Feb 14 23:00 1:00 MSD
-Rule Russia 1921 only - Mar 20 23:00 2:00 MSM # Midsummer
+#
+# Decree No. 121 (1921-03-07) http://istmat.info/node/45949
+Rule Russia 1921 only - Mar 20 23:00 2:00 +05
+#
Rule Russia 1921 only - Sep 1 0:00 1:00 MSD
Rule Russia 1921 only - Oct 1 0:00 0 -
# Act No. 925 of the Council of Ministers of the USSR (1980-10-24):
@@ -600,16 +616,40 @@ Rule Russia 1981 1984 - Apr 1 0:00 1:00 S
Rule Russia 1981 1983 - Oct 1 0:00 0 -
# Act No. 967 of the Council of Ministers of the USSR (1984-09-13), repeated in
# Act No. 227 of the Council of Ministers of the USSR (1989-03-14):
-Rule Russia 1984 1991 - Sep lastSun 2:00s 0 -
-Rule Russia 1985 1991 - Mar lastSun 2:00s 1:00 S
+Rule Russia 1984 1995 - Sep lastSun 2:00s 0 -
+Rule Russia 1985 2010 - Mar lastSun 2:00s 1:00 S
#
-Rule Russia 1992 only - Mar lastSat 23:00 1:00 S
-Rule Russia 1992 only - Sep lastSat 23:00 0 -
-Rule Russia 1993 2010 - Mar lastSun 2:00s 1:00 S
-Rule Russia 1993 1995 - Sep lastSun 2:00s 0 -
Rule Russia 1996 2010 - Oct lastSun 2:00s 0 -
# As described below, Russia's 2014 change affects Zone data, not Rule data.
+# From Stepan Golosunov (2016-03-07):
+# Wikipedia and other sources refer to the Act of the Council of
+# Ministers of the USSR from 1988-01-04 No. 5 and the Act of the
+# Council of Ministers of the USSR from 1989-03-14 No. 227.
+#
+# I did not find full texts of these acts. For the 1989 one we have
+# title at http://base.garant.ru/70754136/ :
+# "About change in calculation of time on the territories of
+# Lithuanian SSR, Latvian SSR and Estonian SSR, Astrakhan,
+# Kaliningrad, Kirov, Kuybyshev, Ulyanovsk and Uralsk oblasts".
+# And http://astrozet.net/files/Zones/DOC/RU/1980-925.txt appears to
+# contain quotes from both acts: Since last Sunday of March 1988 rules
+# of the second time belt are installed in Volgograd and Saratov
+# oblasts. Since last Sunday of March 1989:
+# a) Lithuanian SSR, Latvian SSR, Estonian SSR, Kaliningrad oblast:
+# second time belt rules without extra hour (Moscow-1);
+# b) Astrakhan, Kirov, Kuybyshev, Ulyanovsk oblasts: second time belt
+# rules (Moscow time)
+# c) Uralsk oblast: third time belt rules (Moscow+1).
+
+# From Stepan Golosunov (2016-03-27):
+# Unamended version of the act of the
+# Government of the Russian Federation No. 23 from 08.01.1992
+# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102014034&rdk=0
+# says that every year clocks were to be moved forward on last Sunday
+# of March at 2 hours and moved backwards on last Sunday of September
+# at 3 hours. It was amended in 1996 to replace September with October.
+
# From Alexander Krivenyshev (2011-06-14):
# According to Kremlin press service, Russian President Dmitry Medvedev
# signed a federal law "On calculation of time" on June 9, 2011.
@@ -731,6 +771,14 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
1:00 EU CE%sT
# Belarus
+#
+# From Stepan Golosunov (2016-07-02):
+# http://www.lawbelarus.com/repub/sub30/texf9611.htm
+# (Act of the Cabinet of Ministers of the Republic of Belarus from
+# 1992-03-25 No. 157) ... says clocks were to be moved forward at 2:00
+# on last Sunday of March and backward at 3:00 on last Sunday of September
+# (the same as previous USSR and contemporary Russian regulations).
+#
# From Yauhen Kharuzhy (2011-09-16):
# By latest Belarus government act Europe/Minsk timezone was changed to
# GMT+3 without DST (was GMT+2 with DST).
@@ -743,8 +791,6 @@ Zone Europe/Vienna 1:05:21 - LMT 1893 Apr
# From Alexander Bokovoy (2014-10-09):
# Belarussian government decided against changing to winter time....
# http://eng.belta.by/all_news/society/Belarus-decides-against-adjusting-time-in-Russias-wake_i_76335.html
-# From Paul Eggert (2014-10-08):
-# Hence Belarus can share time zone abbreviations with Moscow again.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Minsk 1:50:16 - LMT 1880
@@ -754,12 +800,8 @@ Zone Europe/Minsk 1:50:16 - LMT 1880
1:00 C-Eur CE%sT 1944 Jul 3
3:00 Russia MSK/MSD 1990
3:00 - MSK 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
- 2:00 - EET 1992 Mar 29 0:00s
- 2:00 1:00 EEST 1992 Sep 27 0:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET 2014 Oct 26 1:00s
- 3:00 - MSK
+ 3:00 - +03
# Belgium
#
@@ -1005,6 +1047,12 @@ Zone Atlantic/Faroe -0:27:04 - LMT 1908 Jan 11 # Tórshavn
# startkart.no says Thule does not observe DST, but this is clearly an error,
# so go with Shanks & Pottenger for Thule transitions until this year.
# For 2007 on assume Thule will stay in sync with US DST rules.
+
+# From J William Piggott (2016-02-20):
+# "Greenland north of the community of Scoresbysund" is officially named
+# "National Park" by Executive Order:
+# http://naalakkersuisut.gl/~/media/Nanoq/Files/Attached%20Files/Engelske-tekster/Legislation/Executive%20Order%20National%20Park.rtf
+# It is their only National Park.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Thule 1991 1992 - Mar lastSun 2:00 1:00 D
@@ -1030,6 +1078,10 @@ Zone America/Thule -4:35:08 - LMT 1916 Jul 28 # Pituffik air base
-4:00 Thule A%sT
# Estonia
+#
+# From Paul Eggert (2016-03-18):
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+#
# From Peter Ilieve (1994-10-15):
# A relative in Tallinn confirms the accuracy of the data for 1989 onwards
# [through 1994] and gives the legal authority for it,
@@ -1257,7 +1309,7 @@ Zone Europe/Paris 0:09:21 - LMT 1891 Mar 15 0:01
# http://www.parlament-berlin.de/pds-fraktion.nsf/727459127c8b66ee8525662300459099/defc77cb784f180ac1256c2b0030274b/$FILE/bersarint.pdf
# says that Bersarin issued an order to use Moscow time on May 20.
# However, Moscow did not observe daylight saving in 1945, so
-# this was equivalent to CEMT (GMT+3), not GMT+4.
+# this was equivalent to UT +03, not +04.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
@@ -1448,73 +1500,84 @@ Zone Atlantic/Reykjavik -1:28 - LMT 1908
# But these events all occurred before the 1970 cutoff,
# so record only the time in Rome.
#
-# From Paul Eggert (2006-03-22):
-# For Italian DST we have three sources: Shanks & Pottenger, Whitman, and
-# F. Pollastri
-# Day-light Saving Time in Italy (2006-02-03)
-# http://toi.iriti.cnr.it/uk/ienitlt.html
-# ('FP' below), taken from an Italian National Electrotechnical Institute
-# publication. When the three sources disagree, guess who's right, as follows:
-#
-# year FP Shanks&P. (S) Whitman (W) Go with:
-# 1916 06-03 06-03 24:00 06-03 00:00 FP & W
-# 09-30 09-30 24:00 09-30 01:00 FP; guess 24:00s
-# 1917 04-01 03-31 24:00 03-31 00:00 FP & S
-# 09-30 09-29 24:00 09-30 01:00 FP & W
-# 1918 03-09 03-09 24:00 03-09 00:00 FP & S
-# 10-06 10-05 24:00 10-06 01:00 FP & W
-# 1919 03-01 03-01 24:00 03-01 00:00 FP & S
-# 10-04 10-04 24:00 10-04 01:00 FP; guess 24:00s
-# 1920 03-20 03-20 24:00 03-20 00:00 FP & S
-# 09-18 09-18 24:00 10-01 01:00 FP; guess 24:00s
-# 1944 04-02 04-03 02:00 S (see C-Eur)
-# 09-16 10-02 03:00 FP; guess 24:00s
-# 1945 09-14 09-16 24:00 FP; guess 24:00s
-# 1970 05-21 05-31 00:00 S
-# 09-20 09-27 00:00 S
+# From Michael Deckers (2016-10-24):
+# http://www.ac-ilsestante.it/MERIDIANE/ora_legale quotes a law of 1893-08-10
+# ... [translated as] "The preceding dispositions will enter into
+# force at the instant at which, according to the time specified in
+# the 1st article, the 1st of November 1893 will begin...."
+#
+# From Pierpaolo Bernardi (2016-10-20):
+# The authoritative source for time in Italy is the national metrological
+# institute, which has a summary page of historical DST data at
+# http://www.inrim.it/res/tf/ora_legale_i.shtml
+# (2016-10-24):
+# http://www.renzobaldini.it/le-ore-legali-in-italia/
+# has still different data for 1944. It divides Italy in two, as
+# there were effectively two governments at the time, north of Gothic
+# Line German controlled territory, official government RSI, and south
+# of the Gothic Line, controlled by allied armies.
+#
+# From Brian Inglis (2016-10-23):
+# Viceregal LEGISLATIVE DECREE. 14 September 1944, no. 219.
+# Restoration of Standard Time. (044U0219) (OJ 62 of 30.9.1944) ...
+# Given the R. law decreed on 1944-03-29, no. 92, by which standard time is
+# advanced to sixty minutes later starting at hour two on 1944-04-02; ...
+# Starting at hour three on the date 1944-09-17 standard time will be resumed.
+#
+# From Paul Eggert (2016-10-27):
+# Go with INRiM for DST rules, except as corrected by Inglis for 1944
+# for the Kingdom of Italy. This is consistent with Renzo Baldini.
+# Model Rome's occupation by using using C-Eur rules from 1943-09-10
+# to 1944-06-04; although Rome was an open city during this period, it
+# was effectively controlled by Germany.
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
-Rule Italy 1916 only - Jun 3 0:00s 1:00 S
-Rule Italy 1916 only - Oct 1 0:00s 0 -
-Rule Italy 1917 only - Apr 1 0:00s 1:00 S
-Rule Italy 1917 only - Sep 30 0:00s 0 -
-Rule Italy 1918 only - Mar 10 0:00s 1:00 S
-Rule Italy 1918 1919 - Oct Sun>=1 0:00s 0 -
-Rule Italy 1919 only - Mar 2 0:00s 1:00 S
-Rule Italy 1920 only - Mar 21 0:00s 1:00 S
-Rule Italy 1920 only - Sep 19 0:00s 0 -
-Rule Italy 1940 only - Jun 15 0:00s 1:00 S
-Rule Italy 1944 only - Sep 17 0:00s 0 -
-Rule Italy 1945 only - Apr 2 2:00 1:00 S
-Rule Italy 1945 only - Sep 15 0:00s 0 -
-Rule Italy 1946 only - Mar 17 2:00s 1:00 S
-Rule Italy 1946 only - Oct 6 2:00s 0 -
-Rule Italy 1947 only - Mar 16 0:00s 1:00 S
-Rule Italy 1947 only - Oct 5 0:00s 0 -
-Rule Italy 1948 only - Feb 29 2:00s 1:00 S
-Rule Italy 1948 only - Oct 3 2:00s 0 -
-Rule Italy 1966 1968 - May Sun>=22 0:00 1:00 S
-Rule Italy 1966 1969 - Sep Sun>=22 0:00 0 -
-Rule Italy 1969 only - Jun 1 0:00 1:00 S
-Rule Italy 1970 only - May 31 0:00 1:00 S
-Rule Italy 1970 only - Sep lastSun 0:00 0 -
-Rule Italy 1971 1972 - May Sun>=22 0:00 1:00 S
-Rule Italy 1971 only - Sep lastSun 1:00 0 -
-Rule Italy 1972 only - Oct 1 0:00 0 -
-Rule Italy 1973 only - Jun 3 0:00 1:00 S
-Rule Italy 1973 1974 - Sep lastSun 0:00 0 -
-Rule Italy 1974 only - May 26 0:00 1:00 S
-Rule Italy 1975 only - Jun 1 0:00s 1:00 S
-Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
-Rule Italy 1976 only - May 30 0:00s 1:00 S
-Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
-Rule Italy 1978 only - Oct 1 0:00s 0 -
-Rule Italy 1979 only - Sep 30 0:00s 0 -
+Rule Italy 1916 only - Jun 3 24:00 1:00 S
+Rule Italy 1916 1917 - Sep 30 24:00 0 -
+Rule Italy 1917 only - Mar 31 24:00 1:00 S
+Rule Italy 1918 only - Mar 9 24:00 1:00 S
+Rule Italy 1918 only - Oct 6 24:00 0 -
+Rule Italy 1919 only - Mar 1 24:00 1:00 S
+Rule Italy 1919 only - Oct 4 24:00 0 -
+Rule Italy 1920 only - Mar 20 24:00 1:00 S
+Rule Italy 1920 only - Sep 18 24:00 0 -
+Rule Italy 1940 only - Jun 14 24:00 1:00 S
+Rule Italy 1942 only - Nov 2 2:00s 0 -
+Rule Italy 1943 only - Mar 29 2:00s 1:00 S
+Rule Italy 1943 only - Oct 4 2:00s 0 -
+Rule Italy 1944 only - Apr 2 2:00s 1:00 S
+Rule Italy 1944 only - Sep 17 2:00s 0 -
+Rule Italy 1945 only - Apr 2 2:00 1:00 S
+Rule Italy 1945 only - Sep 15 1:00 0 -
+Rule Italy 1946 only - Mar 17 2:00s 1:00 S
+Rule Italy 1946 only - Oct 6 2:00s 0 -
+Rule Italy 1947 only - Mar 16 0:00s 1:00 S
+Rule Italy 1947 only - Oct 5 0:00s 0 -
+Rule Italy 1948 only - Feb 29 2:00s 1:00 S
+Rule Italy 1948 only - Oct 3 2:00s 0 -
+Rule Italy 1966 1968 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1966 only - Sep 24 24:00 0 -
+Rule Italy 1967 1969 - Sep Sun>=22 0:00s 0 -
+Rule Italy 1969 only - Jun 1 0:00s 1:00 S
+Rule Italy 1970 only - May 31 0:00s 1:00 S
+Rule Italy 1970 only - Sep lastSun 0:00s 0 -
+Rule Italy 1971 1972 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1971 only - Sep lastSun 0:00s 0 -
+Rule Italy 1972 only - Oct 1 0:00s 0 -
+Rule Italy 1973 only - Jun 3 0:00s 1:00 S
+Rule Italy 1973 1974 - Sep lastSun 0:00s 0 -
+Rule Italy 1974 only - May 26 0:00s 1:00 S
+Rule Italy 1975 only - Jun 1 0:00s 1:00 S
+Rule Italy 1975 1977 - Sep lastSun 0:00s 0 -
+Rule Italy 1976 only - May 30 0:00s 1:00 S
+Rule Italy 1977 1979 - May Sun>=22 0:00s 1:00 S
+Rule Italy 1978 only - Oct 1 0:00s 0 -
+Rule Italy 1979 only - Sep 30 0:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Rome 0:49:56 - LMT 1866 Sep 22
- 0:49:56 - RMT 1893 Nov 1 0:00s # Rome Mean
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1944 Jul
+ 0:49:56 - RMT 1893 Oct 31 23:49:56 # Rome Mean
+ 1:00 Italy CE%sT 1943 Sep 10
+ 1:00 C-Eur CE%sT 1944 Jun 4
1:00 Italy CE%sT 1980
1:00 EU CE%sT
@@ -1623,6 +1686,9 @@ Link Europe/Zurich Europe/Vaduz
# Lithuania
+# From Paul Eggert (2016-03-18):
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+
# From Paul Eggert (1996-11-22):
# IATA SSIM (1992/1996) says Lithuania uses W-Eur rules, but since it is
# known to be wrong about Estonia and Latvia, assume it's wrong here too.
@@ -1662,8 +1728,8 @@ Zone Europe/Vilnius 1:41:16 - LMT 1880
1:00 - CET 1940 Aug 3
3:00 - MSK 1941 Jun 24
1:00 C-Eur CE%sT 1944 Aug
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 1:00 EEST 1991 Sep 29 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
+ 2:00 Russia EE%sT 1991 Sep 29 2:00s
2:00 C-Eur EE%sT 1998
2:00 - EET 1998 Mar 29 1:00u
1:00 EU CE%sT 1999 Oct 31 1:00u
@@ -1710,6 +1776,10 @@ Zone Europe/Luxembourg 0:24:36 - LMT 1904 Jun
# See Europe/Belgrade.
# Malta
+#
+# From Paul Eggert (2016-10-21):
+# Assume 1900-1972 was like Rome, overriding Shanks.
+#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Malta 1973 only - Mar 31 0:00s 1:00 S
Rule Malta 1973 only - Sep 29 0:00s 0 -
@@ -1720,14 +1790,22 @@ Rule Malta 1975 1980 - Sep Sun>=15 2:00 0 -
Rule Malta 1980 only - Mar 31 2:00 1:00 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Malta 0:58:04 - LMT 1893 Nov 2 0:00s # Valletta
- 1:00 Italy CE%sT 1942 Nov 2 2:00s
- 1:00 C-Eur CE%sT 1945 Apr 2 2:00s
1:00 Italy CE%sT 1973 Mar 31
1:00 Malta CE%sT 1981
1:00 EU CE%sT
# Moldova
+# From Stepan Golosunov (2016-03-07):
+# the act of the government of the Republic of Moldova Nr. 132 from 1990-05-04
+# http://lex.justice.md/viewdoc.php?action=view&view=doc&id=298782&lang=2
+# ... says that since 1990-05-06 on the territory of the Moldavian SSR
+# time would be calculated as the standard time of the second time belt
+# plus one hour of the "summer" time. To implement that clocks would be
+# adjusted one hour backwards at 1990-05-06 2:00. After that "summer"
+# time would be cancelled last Sunday of September at 3:00 and
+# reintroduced last Sunday of March at 2:00.
+
# From Paul Eggert (2006-03-22):
# A previous version of this database followed Shanks & Pottenger, who write
# that Tiraspol switched to Moscow time on 1992-01-19 at 02:00.
@@ -1786,9 +1864,7 @@ Zone Europe/Chisinau 1:55:20 - LMT 1880
2:00 Romania EE%sT 1940 Aug 15
2:00 1:00 EEST 1941 Jul 17
1:00 C-Eur CE%sT 1944 Aug 24
- 3:00 Russia MSK/MSD 1990
- 3:00 - MSK 1990 May 6
- 2:00 - EET 1991
+ 3:00 Russia MSK/MSD 1990 May 6 2:00
2:00 Russia EE%sT 1992
2:00 E-Eur EE%sT 1997
# See Romania commentary for the guessed 1997 transition to EU rules.
@@ -1845,7 +1921,7 @@ Zone Europe/Monaco 0:29:32 - LMT 1891 Mar 15
# Amsterdam mean time.
# The data entries before 1945 are taken from
-# http://www.phys.uu.nl/~vgent/wettijd/wettijd.htm
+# http://www.staff.science.uu.nl/~gent0113/wettijd/wettijd.htm
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Neth 1916 only - May 1 0:00 1:00 NST # Netherlands Summer Time
@@ -2210,7 +2286,6 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# http://www.worldtimezone.com/dst_news/dst_news_russia-map-2014-07.html
# From Paul Eggert (2006-03-22):
-# Except for Moscow after 1919-07-01, I invented the time zone abbreviations.
# Moscow time zone abbreviations after 1919-07-01, and Moscow rules after 1991,
# are from Andrey A. Chernov. The rest is from Shanks & Pottenger,
# except we follow Chernov's report that 1992 DST transitions were Sat
@@ -2266,16 +2341,32 @@ Zone Europe/Bucharest 1:44:24 - LMT 1891 Oct
# Europe/Kaliningrad covers...
# 39 RU-KGD Kaliningrad Oblast
+# From Paul Eggert (2016-03-18):
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+
+# From Stepan Golosunov (2016-03-07):
+# http://www.rgo.ru/ru/kaliningradskoe-oblastnoe-otdelenie/ob-otdelenii/publikacii/kak-nam-zhilos-bez-letnego-vremeni
+# confirms that the 1989 change to Moscow-1 was implemented.
+# (The article, though, is misattributed to 1990 while saying that
+# summer->winter transition would be done on the 24 of September. But
+# 1990-09-24 was Monday, while 1989-09-24 was Sunday as expected.)
+# ...
+# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
+# says that Kaliningrad switched to Moscow-1 on 1989-03-26, avoided
+# at the last moment switch to Moscow-1 on 1991-03-31, switched to
+# Moscow on 1991-11-03, switched to Moscow-1 on 1992-01-19.
+
Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
1:00 C-Eur CE%sT 1945
2:00 Poland CE%sT 1946
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
+ 3:00 Russia MSK/MSD 1989 Mar 26 2:00s
2:00 Russia EE%sT 2011 Mar 27 2:00s
- 3:00 - FET 2014 Oct 26 2:00s
+ 3:00 - +03 2014 Oct 26 2:00s
2:00 - EET
-# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
+# From Paul Eggert (2016-02-21), per Tim Parenti (2014-07-03) and
+# Oscar van Vlijmen (2001-08-25):
# Europe/Moscow covers...
# 01 RU-AD Adygea, Republic of
# 05 RU-DA Dagestan, Republic of
@@ -2318,12 +2409,102 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
# 68 RU-TAM Tambov Oblast
# 69 RU-TVE Tver Oblast
# 71 RU-TUL Tula Oblast
-# 73 RU-ULY Ulyanovsk Oblast
# 76 RU-YAR Yaroslavl Oblast
# 77 RU-MOW Moscow
# 78 RU-SPE Saint Petersburg
# 83 RU-NEN Nenets Autonomous Okrug
+# From Paul Eggert (2016-08-23):
+# The Soviets switched to UT-based time in 1919. Decree No. 59
+# (1919-02-08) http://istmat.info/node/35567 established UT-based time
+# zones, and Decree No. 147 (1919-03-29) http://istmat.info/node/35854
+# specified a transition date of 1919-07-01, apparently at 00:00 UT.
+# No doubt only the Soviet-controlled regions switched on that date;
+# later transitions to UT-based time in other parts of Russia are
+# taken from what appear to be guesses by Shanks.
+# (Thanks to Alexander Belopolsky for pointers to the decrees.)
+
+# From Stepan Golosunov (2016-03-07):
+# 11. Regions-violators, 1981-1982.
+# Wikipedia refers to
+# http://maps.monetonos.ru/maps/raznoe/Old_Maps/Old_Maps/Articles/022/3_1981.html
+# http://besp.narod.ru/nauka_1981_3.htm
+#
+# The second link provides two articles scanned from the Nauka i Zhizn
+# magazine No. 3, 1981 and a scan of the short article attributed to
+# the Trud newspaper from February 1982. The first link provides the
+# same Nauka i Zhizn articles converted to the text form (but misses
+# time belt changes map).
+#
+# The second Nauka i Zhizn article says that in addition to
+# introduction of summer time on 1981-04-01 there are some time belt
+# border changes on 1981-10-01, mostly affecting Nenets Autonomous
+# Okrug, Krasnoyarsk Krai, Yakutia, Magadan Oblast and Chukotka
+# according to the provided map (colored one). In addition to that
+# "time violators" (regions which were not using rules of the time
+# belts in which they were located) would not be moving off the DST on
+# 1981-10-01 to restore the decree time usage. (Komi ASSR was
+# supposed to repeat that move in October 1982 to account for the 2
+# hour difference.) Map depicting "time violators" before 1981-10-01
+# is also provided.
+#
+# The article from Trud says that 1981-10-01 changes caused problems
+# and some territories would be moved to pre-1981-10-01 time by not
+# moving to summer time on 1982-04-01. Namely: Dagestan,
+# Kabardino-Balkar, Kalmyk, Komi, Mari, Mordovian, North Ossetian,
+# Tatar, Chechen-Ingush and Chuvash ASSR, Krasnodar and Stavropol
+# krais, Arkhangelsk, Vladimir, Vologda, Voronezh, Gorky, Ivanovo,
+# Kostroma, Lipetsk, Penza, Rostov, Ryazan, Tambov, Tyumen and
+# Yaroslavl oblasts, Nenets and Evenk autonomous okrugs, Khatangsky
+# district of Taymyr Autonomous Okrug. As a result Evenk Autonomous
+# Okrug and Khatangsky district of Taymyr Autonomous Okrug would end
+# up on Moscow+4, Tyumen Oblast on Moscow+2 and the rest on Moscow
+# time.
+#
+# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
+# attributes the 1982 changes to the Act of the Council of Ministers
+# of the USSR No. 126 from 18.02.1982. 1980-925.txt also adds
+# Udmurtia to the list of affected territories and lists Khatangsky
+# district separately from Taymyr Autonomous Okrug. Probably erroneously.
+#
+# The affected territories are currently listed under Europe/Moscow,
+# Asia/Yekaterinburg and Asia/Krasnoyarsk.
+#
+# 12. Udmurtia
+# The fact that Udmurtia is depicted as a violator in the Nauka i
+# Zhizn article hints at Izhevsk being on different time from
+# Kuybyshev before 1981-10-01. Udmurtia is not mentioned in the 1989 act.
+# http://astrozet.net/files/Zones/DOC/RU/1980-925.txt
+# implies Udmurtia was on Moscow time after 1982-04-01.
+# Wikipedia implies Udmurtia being on Moscow+1 until 1991.
+#
+# ...
+#
+# All Russian zones are supposed to have by default a -1 change at
+# 1991-03-31 2:00 (cancellation of the decree time in the USSR) and a +1
+# change at 1992-01-19 2:00 (restoration of the decree time in Russia).
+#
+# There were some exceptions, though.
+# Wikipedia says newspapers listed Astrakhan, Saratov, Kirov, Volgograd,
+# Izhevsk, Grozny, Kazan and Samara as such exceptions for the 1992
+# change. (Different newspapers providing different lists. And some
+# lists found in the internet are quite wild.)
+#
+# And apparently some exceptions were reverted in the last moment.
+# http://www.kaliningradka.ru/site_pc/cherez/index.php?ELEMENT_ID=40091
+# says that Kaliningrad decided not to be an exception 2 days before the
+# 1991-03-31 switch and one person at
+# http://izhevsk.ru/forum_light_message/50/682597-m8369040.html
+# says he remembers that Samara opted out of the 1992-01-19 exception
+# 2 days before the switch.
+#
+#
+# From Paul Eggert (2016-03-18):
+# Given the above, we appear to be missing some Zone entries for the
+# chaotic early 1980s in Russia. It's not clear what these entries
+# should be. For now, sweep this under the rug and just document the
+# time in Moscow.
+
# From Vladimir Karpinsky (2014-07-08):
# LMT in Moscow (before Jul 3, 1916) is 2:30:17, that was defined by Moscow
# Observatory (coordinates: 55 deg. 45'29.70", 37 deg. 34'05.30")....
@@ -2344,7 +2525,7 @@ Zone Europe/Kaliningrad 1:22:00 - LMT 1893 Apr
Zone Europe/Moscow 2:30:17 - LMT 1880
2:30:17 - MMT 1916 Jul 3 # Moscow Mean Time
- 2:31:19 Russia %s 1919 Jul 1 2:00
+ 2:31:19 Russia %s 1919 Jul 1 0:00u
3:00 Russia %s 1921 Oct
3:00 Russia MSK/MSD 1922 Oct
2:00 - EET 1930 Jun 21
@@ -2397,47 +2578,101 @@ Zone Europe/Simferopol 2:16:24 - LMT 1880
3:00 - MSK
-# From Tim Parenti (2014-07-03):
-# Europe/Volgograd covers...
+# From Paul Eggert (2016-03-18):
+# Europe/Astrakhan covers:
# 30 RU-AST Astrakhan Oblast
+#
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+
+# From Alexander Krivenyshev (2016-01-12):
+# On February 10, 2016 Astrakhan Oblast got approval by the Federation
+# Council to change its time zone to UTC+4 (from current UTC+3 Moscow time)....
+# This Federal Law shall enter into force on 27 March 2016 at 02:00.
+# From Matt Johnson (2016-03-09):
+# http://publication.pravo.gov.ru/Document/View/0001201602150056
+
+Zone Europe/Astrakhan 3:12:12 - LMT 1924 May
+ 3:00 - +03 1930 Jun 21
+ 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 4:00 - +04 1992 Mar 29 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03 2016 Mar 27 2:00s
+ 4:00 - +04
+
+# From Paul Eggert (2016-03-18):
+# Europe/Volgograd covers:
# 34 RU-VGG Volgograd Oblast
-# 43 RU-KIR Kirov Oblast
# 64 RU-SAR Saratov Oblast
-
-# From Paul Eggert (2006-05-09):
-# Shanks & Pottenger say Kirov is still at +0400 but Wikipedia says +0300.
-# Perhaps it switched after the others? But we have no data.
+# The 1988 transition is from USSR act No. 5 (1988-01-04).
Zone Europe/Volgograd 2:57:40 - LMT 1920 Jan 3
- 3:00 - TSAT 1925 Apr 6 # Tsaritsyn Time
- 3:00 - STAT 1930 Jun 21 # Stalingrad Time
- 4:00 - STAT 1961 Nov 11
- 4:00 Russia VOL%sT 1989 Mar 26 2:00s # Volgograd T
- 3:00 Russia VOL%sT 1991 Mar 31 2:00s
- 4:00 - VOLT 1992 Mar 29 2:00s
- 3:00 Russia MSK/MSD 2011 Mar 27 2:00s
- 4:00 - MSK 2014 Oct 26 2:00s
- 3:00 - MSK
-
+ 3:00 - +03 1930 Jun 21
+ 4:00 - +04 1961 Nov 11
+ 4:00 Russia +04/+05 1988 Mar 27 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 4:00 - +04 1992 Mar 29 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03
+
+# From Paul Eggert (2016-03-18):
+# Europe/Kirov covers:
+# 43 RU-KIR Kirov Oblast
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+#
+Zone Europe/Kirov 3:18:48 - LMT 1919 Jul 1 0:00u
+ 3:00 - +03 1930 Jun 21
+ 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 4:00 - +04 1992 Mar 29 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Europe/Samara covers...
# 18 RU-UD Udmurt Republic
# 63 RU-SAM Samara Oblast
+# From Paul Eggert (2016-03-18):
# Byalokoz 1919 says Samara was 3:20:20.
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+
+Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 0:00u
+ 3:00 - +03 1930 Jun 21
+ 4:00 - +04 1935 Jan 27
+ 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 2:00 Russia +02/+03 1991 Sep 29 2:00s
+ 3:00 - +03 1991 Oct 20 3:00
+ 4:00 Russia +04/+05 2010 Mar 28 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04
+
+# From Paul Eggert (2016-03-18):
+# Europe/Ulyanovsk covers:
+# 73 RU-ULY Ulyanovsk Oblast
-Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
- 3:00 - SAMT 1930 Jun 21
- 4:00 - SAMT 1935 Jan 27
- 4:00 Russia KUY%sT 1989 Mar 26 2:00s # Kuybyshev
- 3:00 Russia MSK/MSD 1991 Mar 31 2:00s
- 2:00 Russia EE%sT 1991 Sep 29 2:00s
- 3:00 - KUYT 1991 Oct 20 3:00
- 4:00 Russia SAM%sT 2010 Mar 28 2:00s # Samara Time
- 3:00 Russia SAM%sT 2011 Mar 27 2:00s
- 4:00 - SAMT
-
+# The 1989 transition is from USSR act No. 227 (1989-03-14).
+
+# From Alexander Krivenyshev (2016-02-17):
+# Ulyanovsk ... on their way to change time zones by March 27, 2016 at 2am.
+# Ulyanovsk Oblast ... from MSK to MSK+1 (UTC+3 to UTC+4) ...
+# 920582-6 ... 02/17/2016 The State Duma passed the bill in the first reading.
+# From Matt Johnson (2016-03-09):
+# http://publication.pravo.gov.ru/Document/View/0001201603090051
+
+Zone Europe/Ulyanovsk 3:13:36 - LMT 1919 Jul 1 0:00u
+ 3:00 - +03 1930 Jun 21
+ 4:00 Russia +04/+05 1989 Mar 26 2:00s
+ 3:00 Russia +03/+04 1991 Mar 31 2:00s
+ 2:00 Russia +02/+03 1992 Jan 19 2:00s
+ 3:00 Russia +03/+04 2011 Mar 27 2:00s
+ 4:00 - +04 2014 Oct 26 2:00s
+ 3:00 - +03 2016 Mar 27 2:00s
+ 4:00 - +04
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Yekaterinburg covers...
@@ -2461,47 +2696,140 @@ Zone Europe/Samara 3:20:20 - LMT 1919 Jul 1 2:00
Zone Asia/Yekaterinburg 4:02:33 - LMT 1916 Jul 3
3:45:05 - PMT 1919 Jul 15 4:00
- 4:00 - SVET 1930 Jun 21 # Sverdlovsk Time
- 5:00 Russia SVE%sT 1991 Mar 31 2:00s
- 4:00 Russia SVE%sT 1992 Jan 19 2:00s
- 5:00 Russia YEK%sT 2011 Mar 27 2:00s
- 6:00 - YEKT 2014 Oct 26 2:00s
- 5:00 - YEKT
+ 4:00 - +04 1930 Jun 21
+ 5:00 Russia +05/+06 1991 Mar 31 2:00s
+ 4:00 Russia +04/+05 1992 Jan 19 2:00s
+ 5:00 Russia +05/+06 2011 Mar 27 2:00s
+ 6:00 - +06 2014 Oct 26 2:00s
+ 5:00 - +05
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Omsk covers...
-# 04 RU-AL Altai Republic
-# 22 RU-ALT Altai Krai
# 55 RU-OMS Omsk Oblast
# Byalokoz 1919 says Omsk was 4:53:30.
Zone Asia/Omsk 4:53:30 - LMT 1919 Nov 14
- 5:00 - OMST 1930 Jun 21 # Omsk Time
- 6:00 Russia OMS%sT 1991 Mar 31 2:00s
- 5:00 Russia OMS%sT 1992 Jan 19 2:00s
- 6:00 Russia OMS%sT 2011 Mar 27 2:00s
- 7:00 - OMST 2014 Oct 26 2:00s
- 6:00 - OMST
-
+ 5:00 - +05 1930 Jun 21
+ 6:00 Russia +06/+07 1991 Mar 31 2:00s
+ 5:00 Russia +05/+06 1992 Jan 19 2:00s
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07 2014 Oct 26 2:00s
+ 6:00 - +06
+
+# From Paul Eggert (2016-02-22):
+# Asia/Barnaul covers:
+# 04 RU-AL Altai Republic
+# 22 RU-ALT Altai Krai
-# From Tim Parenti (2014-07-03):
-# Asia/Novosibirsk covers...
+# Data before 1991 are from Shanks & Pottenger.
+
+# From Stepan Golosunov (2016-03-07):
+# Letter of Bank of Russia from 1995-05-25
+# http://www.bestpravo.ru/rossijskoje/lj-akty/y3a.htm
+# suggests that Altai Republic transitioned to Moscow+3 on
+# 1995-05-28.
+#
+# http://regnum.ru/news/society/1957270.html
+# has some historical data for Altai Krai:
+# before 1957: west part on UTC+6, east on UTC+7
+# after 1957: UTC+7
+# since 1995: UTC+6
+# http://barnaul.rusplt.ru/index/pochemu_altajskij_kraj_okazalsja_v_neprivychnom_chasovom_pojase-17648.html
+# confirms that and provides more details including 1995-05-28 transition date.
+
+# From Alexander Krivenyshev (2016-02-17):
+# Altai Krai and Altai Republic on their way to change time zones
+# by March 27, 2016 at 2am....
+# Altai Republic / Gorno-Altaysk MSK+3 to MSK+4 (UTC+6 to UTC+7) ...
+# Altai Krai / Barnaul MSK+3 to MSK+4 (UTC+6 to UTC+7)
+# From Matt Johnson (2016-03-09):
+# http://publication.pravo.gov.ru/Document/View/0001201603090043
+# http://publication.pravo.gov.ru/Document/View/0001201603090038
+
+Zone Asia/Barnaul 5:35:00 - LMT 1919 Dec 10
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 1995 May 28
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07 2014 Oct 26 2:00s
+ 6:00 - +06 2016 Mar 27 2:00s
+ 7:00 - +07
+
+# From Paul Eggert (2016-03-18):
+# Asia/Novosibirsk covers:
# 54 RU-NVS Novosibirsk Oblast
-# 70 RU-TOM Tomsk Oblast
-# From Paul Eggert (2006-08-19): I'm guessing about Tomsk here; it's
-# not clear when it switched from +7 to +6.
+# From Stepan Golosunov (2016-05-30):
+# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
+# moves Novosibirsk oblast from UTC+6 to UTC+7.
+# From Stepan Golosunov (2016-07-04):
+# The law was signed yesterday and published today on
+# http://publication.pravo.gov.ru/Document/View/0001201607040064
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
- 6:00 - NOVT 1930 Jun 21 # Novosibirsk Time
- 7:00 Russia NOV%sT 1991 Mar 31 2:00s
- 6:00 Russia NOV%sT 1992 Jan 19 2:00s
- 7:00 Russia NOV%sT 1993 May 23 # say Shanks & P.
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s
- 7:00 - NOVT 2014 Oct 26 2:00s
- 6:00 - NOVT
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07 2014 Oct 26 2:00s
+ 6:00 - +06 2016 Jul 24 2:00s
+ 7:00 - +07
+
+# From Paul Eggert (2016-03-18):
+# Asia/Tomsk covers:
+# 70 RU-TOM Tomsk Oblast
+
+# From Stepan Golosunov (2016-03-24):
+# Byalokoz listed Tomsk at 5:39:51.
+
+# From Stanislaw A. Kuzikowski (1994-06-29):
+# Tomsk is still 4 hours ahead of Moscow.
+
+# From Stepan Golosunov (2016-03-19):
+# http://pravo.gov.ru/proxy/ips/?docbody=&nd=102075743
+# (fifth time belt being UTC+5+1(decree time)
+# / UTC+5+1(decree time)+1(summer time)) ...
+# Note that time belts (numbered from 2 (Moscow) to 12 according to their
+# GMT/UTC offset and having too many exceptions like regions formally
+# belonging to one belt but using time from another) were replaced
+# with time zones in 2011 with different numbering (there was a
+# 2-hour gap between second and third zones in 2011-2014).
+
+# From Stepan Golosunov (2016-04-12):
+# http://asozd2.duma.gov.ru/main.nsf/(SpravkaNew)?OpenAgent&RN=1006865-6
+# This bill was approved in the first reading today. It moves Tomsk oblast
+# from UTC+6 to UTC+7 and is supposed to come into effect on 2016-05-29 at
+# 2:00. The bill needs to be approved in the second and the third readings by
+# the State Duma, approved by the Federation Council, signed by the President
+# and published to become a law. Minor changes in the text are to be expected
+# before the second reading (references need to be updated to account for the
+# recent changes).
+#
+# Judging by the ultra-short one-day amendments period, recent similar laws,
+# the State Duma schedule and the Federation Council schedule
+# http://www.duma.gov.ru/legislative/planning/day-shedule/por_vesna_2016/
+# http://council.gov.ru/activity/meetings/schedule/63303
+# I speculate that the final text of the bill will be proposed tomorrow, the
+# bill will be approved in the second and the third readings on Friday,
+# approved by the Federation Council on 2016-04-20, signed by the President and
+# published as a law around 2016-04-26.
+
+# From Matt Johnson (2016-04-26):
+# http://publication.pravo.gov.ru/Document/View/0001201604260048
+
+Zone Asia/Tomsk 5:39:51 - LMT 1919 Dec 22
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 2002 May 1 3:00
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07 2014 Oct 26 2:00s
+ 6:00 - +06 2016 May 29 2:00s
+ 7:00 - +07
# From Tim Parenti (2014-07-03):
@@ -2526,23 +2854,18 @@ Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
#
# Thus, when Russia will switch to DST on the night of March 28, 2010
# Kemerovo region (Kemerovo oblast') will not change the clock.
-#
-# As a result, Kemerovo oblast' will be in the same time zone as
-# Novosibirsk, Omsk, Tomsk, Barnaul and Altai Republic.
# From Tim Parenti (2014-07-02), per Alexander Krivenyshev (2014-07-02):
# The Kemerovo region will remain at UTC+7 through the 2014-10-26 change, thus
# realigning itself with KRAT.
Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
- 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2010 Mar 28 2:00s
- 6:00 Russia NOV%sT 2011 Mar 27 2:00s # Novosibirsk
- 7:00 - NOVT 2014 Oct 26 2:00s
- 7:00 - KRAT # Krasnoyarsk Time
-
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 2010 Mar 28 2:00s
+ 6:00 Russia +06/+07 2011 Mar 27 2:00s
+ 7:00 - +07
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
# Asia/Krasnoyarsk covers...
@@ -2556,12 +2879,12 @@ Zone Asia/Novokuznetsk 5:48:48 - LMT 1924 May 1
# Byalokoz 1919 says Krasnoyarsk was 6:11:26.
Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
- 6:00 - KRAT 1930 Jun 21 # Krasnoyarsk Time
- 7:00 Russia KRA%sT 1991 Mar 31 2:00s
- 6:00 Russia KRA%sT 1992 Jan 19 2:00s
- 7:00 Russia KRA%sT 2011 Mar 27 2:00s
- 8:00 - KRAT 2014 Oct 26 2:00s
- 7:00 - KRAT
+ 6:00 - +06 1930 Jun 21
+ 7:00 Russia +07/+08 1991 Mar 31 2:00s
+ 6:00 Russia +06/+07 1992 Jan 19 2:00s
+ 7:00 Russia +07/+08 2011 Mar 27 2:00s
+ 8:00 - +08 2014 Oct 26 2:00s
+ 7:00 - +07
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -2578,12 +2901,12 @@ Zone Asia/Krasnoyarsk 6:11:26 - LMT 1920 Jan 6
Zone Asia/Irkutsk 6:57:05 - LMT 1880
6:57:05 - IMT 1920 Jan 25 # Irkutsk Mean Time
- 7:00 - IRKT 1930 Jun 21 # Irkutsk Time
- 8:00 Russia IRK%sT 1991 Mar 31 2:00s
- 7:00 Russia IRK%sT 1992 Jan 19 2:00s
- 8:00 Russia IRK%sT 2011 Mar 27 2:00s
- 9:00 - IRKT 2014 Oct 26 2:00s
- 8:00 - IRKT
+ 7:00 - +07 1930 Jun 21
+ 8:00 Russia +08/+09 1991 Mar 31 2:00s
+ 7:00 Russia +07/+08 1992 Jan 19 2:00s
+ 8:00 Russia +08/+09 2011 Mar 27 2:00s
+ 9:00 - +09 2014 Oct 26 2:00s
+ 8:00 - +08
# From Tim Parenti (2014-07-06):
@@ -2593,13 +2916,20 @@ Zone Asia/Irkutsk 6:57:05 - LMT 1880
# Note: Effective 2008-03-01, (75) Chita Oblast and (80) Agin-Buryat
# Autonomous Okrug merged to form (92, RU-ZAB) Zabaykalsky Krai.
+# From Alexander Krivenyshev (2016-01-02):
+# [The] time zone in the Trans-Baikal Territory (Zabaykalsky Krai) -
+# Asia/Chita [is changing] from UTC+8 to UTC+9. Effective date will
+# be March 27, 2016 at 2:00am....
+# http://publication.pravo.gov.ru/Document/View/0001201512300107
+
Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT 2014 Oct 26 2:00s
- 8:00 - IRKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2011 Mar 27 2:00s
+ 10:00 - +10 2014 Oct 26 2:00s
+ 8:00 - +08 2016 Mar 27 2:00
+ 9:00 - +09
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -2639,12 +2969,12 @@ Zone Asia/Chita 7:33:52 - LMT 1919 Dec 15
# Byalokoz 1919 says Yakutsk was 8:38:58.
Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2011 Mar 27 2:00s
- 10:00 - YAKT 2014 Oct 26 2:00s
- 9:00 - YAKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2011 Mar 27 2:00s
+ 10:00 - +10 2014 Oct 26 2:00s
+ 9:00 - +09
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -2662,12 +2992,12 @@ Zone Asia/Yakutsk 8:38:58 - LMT 1919 Dec 15
# Go with Byalokoz.
Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
- 9:00 - VLAT 1930 Jun 21 # Vladivostok Time
- 10:00 Russia VLA%sT 1991 Mar 31 2:00s
- 9:00 Russia VLA%sT 1992 Jan 19 2:00s
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2014 Oct 26 2:00s
- 10:00 - VLAT
+ 9:00 - +09 1930 Jun 21
+ 10:00 Russia +10/+11 1991 Mar 31 2:00s
+ 9:00 Russia +09/+10 1992 Jan 19 2:00s
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10
# From Tim Parenti (2014-07-03):
@@ -2685,14 +3015,14 @@ Zone Asia/Vladivostok 8:47:31 - LMT 1922 Nov 15
# This transition is no doubt wrong, but we have no better info.
Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAK%sT 1991 Mar 31 2:00s
- 8:00 Russia YAK%sT 1992 Jan 19 2:00s
- 9:00 Russia YAK%sT 2004
- 10:00 Russia VLA%sT 2011 Mar 27 2:00s
- 11:00 - VLAT 2011 Sep 13 0:00s # Decree 725?
- 10:00 - YAKT 2014 Oct 26 2:00s
- 9:00 - YAKT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1991 Mar 31 2:00s
+ 8:00 Russia +08/+09 1992 Jan 19 2:00s
+ 9:00 Russia +09/+10 2004
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2011 Sep 13 0:00s # Decree 725?
+ 10:00 - +10 2014 Oct 26 2:00s
+ 9:00 - +09
# From Tim Parenti (2014-07-03):
@@ -2701,16 +3031,21 @@ Zone Asia/Khandyga 9:02:13 - LMT 1919 Dec 15
# ...with the exception of:
# 65-11 **** Severo-Kurilsky District (North Kuril Islands)
+# From Matt Johnson (2016-02-22):
+# Asia/Sakhalin is moving (in entirety) from UTC+10 to UTC+11 ...
+# (2016-03-09):
+# http://publication.pravo.gov.ru/Document/View/0001201603090044
+
# The Zone name should be Asia/Yuzhno-Sakhalinsk, but that's too long.
Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
- 9:00 - JCST 1937 Oct 1
- 9:00 - JST 1945 Aug 25
- 11:00 Russia SAK%sT 1991 Mar 31 2:00s # Sakhalin T
- 10:00 Russia SAK%sT 1992 Jan 19 2:00s
- 11:00 Russia SAK%sT 1997 Mar lastSun 2:00s
- 10:00 Russia SAK%sT 2011 Mar 27 2:00s
- 11:00 - SAKT 2014 Oct 26 2:00s
- 10:00 - SAKT
+ 9:00 - +09 1945 Aug 25
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s # Sakhalin T
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 1997 Mar lastSun 2:00s
+ 10:00 Russia +10/+11 2011 Mar 27 2:00s
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10 2016 Mar 27 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2009-11-29):
@@ -2724,13 +3059,22 @@ Zone Asia/Sakhalin 9:30:48 - LMT 1905 Aug 23
# until now by Asia/Magadan, will instead move to UTC+11. These regions will
# need their own zone.
+# From Alexander Krivenyshev (2016-03-27):
+# ... draft bill 948300-6 to change its time zone from UTC+10 to UTC+11 ...
+# will take ... effect ... on April 24, 2016 at 2 o'clock
+#
+# From Matt Johnson (2016-04-05):
+# ... signed by the President today ...
+# http://publication.pravo.gov.ru/Document/View/0001201604050038
+
Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
- 10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2014 Oct 26 2:00s
- 10:00 - MAGT
+ 10:00 - +10 1930 Jun 21 # Magadan Time
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2014 Oct 26 2:00s
+ 10:00 - +10 2016 Apr 24 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-06):
@@ -2773,17 +3117,14 @@ Zone Asia/Magadan 10:03:12 - LMT 1924 May 2
# in Russian.) In addition, Srednekolymsk appears to be a much older
# settlement and the population of Zyryanka seems to be declining.
# Go with Srednekolymsk.
-#
-# Since Magadan Oblast moves to UTC+10 on 2014-10-26, we cannot keep using MAGT
-# as the abbreviation. Use SRET instead.
Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
- 10:00 - MAGT 1930 Jun 21 # Magadan Time
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2014 Oct 26 2:00s
- 11:00 - SRET # Srednekolymsk Time
+ 10:00 - +10 1930 Jun 21
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2014 Oct 26 2:00s
+ 11:00 - +11
# From Tim Parenti (2014-07-03):
@@ -2801,14 +3142,14 @@ Zone Asia/Srednekolymsk 10:14:52 - LMT 1924 May 2
# UTC+12 since at least then, too.
Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
- 8:00 - YAKT 1930 Jun 21 # Yakutsk Time
- 9:00 Russia YAKT 1981 Apr 1
- 11:00 Russia MAG%sT 1991 Mar 31 2:00s
- 10:00 Russia MAG%sT 1992 Jan 19 2:00s
- 11:00 Russia MAG%sT 2011 Mar 27 2:00s
- 12:00 - MAGT 2011 Sep 13 0:00s # Decree 725?
- 11:00 - VLAT 2014 Oct 26 2:00s
- 10:00 - VLAT
+ 8:00 - +08 1930 Jun 21
+ 9:00 Russia +09/+10 1981 Apr 1
+ 11:00 Russia +11/+12 1991 Mar 31 2:00s
+ 10:00 Russia +10/+11 1992 Jan 19 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12 2011 Sep 13 0:00s # Decree 725?
+ 11:00 - +11 2014 Oct 26 2:00s
+ 10:00 - +10
# From Tim Parenti (2014-07-03), per Oscar van Vlijmen (2001-08-25):
@@ -2821,12 +3162,12 @@ Zone Asia/Ust-Nera 9:32:54 - LMT 1919 Dec 15
# The Zone name should be Asia/Petropavlovsk-Kamchatski or perhaps
# Asia/Petropavlovsk-Kamchatsky, but these are too long.
Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
- 11:00 - PETT 1930 Jun 21 # P-K Time
- 12:00 Russia PET%sT 1991 Mar 31 2:00s
- 11:00 Russia PET%sT 1992 Jan 19 2:00s
- 12:00 Russia PET%sT 2010 Mar 28 2:00s
- 11:00 Russia PET%sT 2011 Mar 27 2:00s
- 12:00 - PETT
+ 11:00 - +11 1930 Jun 21
+ 12:00 Russia +12/+13 1991 Mar 31 2:00s
+ 11:00 Russia +11/+12 1992 Jan 19 2:00s
+ 12:00 Russia +12/+13 2010 Mar 28 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12
# From Tim Parenti (2014-07-03):
@@ -2834,13 +3175,13 @@ Zone Asia/Kamchatka 10:34:36 - LMT 1922 Nov 10
# 87 RU-CHU Chukotka Autonomous Okrug
Zone Asia/Anadyr 11:49:56 - LMT 1924 May 2
- 12:00 - ANAT 1930 Jun 21 # Anadyr Time
- 13:00 Russia ANA%sT 1982 Apr 1 0:00s
- 12:00 Russia ANA%sT 1991 Mar 31 2:00s
- 11:00 Russia ANA%sT 1992 Jan 19 2:00s
- 12:00 Russia ANA%sT 2010 Mar 28 2:00s
- 11:00 Russia ANA%sT 2011 Mar 27 2:00s
- 12:00 - ANAT
+ 12:00 - +12 1930 Jun 21
+ 13:00 Russia +13/+14 1982 Apr 1 0:00s
+ 12:00 Russia +12/+13 1991 Mar 31 2:00s
+ 11:00 Russia +11/+12 1992 Jan 19 2:00s
+ 12:00 Russia +12/+13 2010 Mar 28 2:00s
+ 11:00 Russia +11/+12 2011 Mar 27 2:00s
+ 12:00 - +12
# San Marino
@@ -3099,22 +3440,24 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# Turkey
-# From Amar Devegowda (2007-01-03):
-# The time zone rules for Istanbul, Turkey have not been changed for years now.
-# ... The latest rules are available at:
-# http://www.timeanddate.com/worldclock/timezone.html?n=107
-# From Steffen Thorsen (2007-01-03):
-# I have been able to find press records back to 1996 which all say that
-# DST started 01:00 local time and end at 02:00 local time. I am not sure
-# what happened before that. One example for each year from 1996 to 2001:
-# http://newspot.byegm.gov.tr/arsiv/1996/21/N4.htm
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING97/03/97X03X25.TXT
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING98/03/98X03X02.HTM
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING99/10/99X10X26.HTM#%2016
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2000/03/00X03X06.HTM#%2021
-# http://www.byegm.gov.tr/YAYINLARIMIZ/CHR/ING2001/03/23x03x01.HTM#%2027
-# From Paul Eggert (2007-01-03):
-# Prefer the above source to Shanks & Pottenger for time stamps after 1990.
+# From Kıvanç Yazan (2016-09-25):
+# 1) For 1986-2006, DST started at 01:00 local and ended at 02:00 local, with
+# no exceptions.
+# 2) 1994's lastSun was overridden with Mar 20 ...
+# Here are official papers:
+# http://www.resmigazete.gov.tr/arsiv/19032.pdf - page 2 for 1986
+# http://www.resmigazete.gov.tr/arsiv/19400.pdf - page 4 for 1987
+# http://www.resmigazete.gov.tr/arsiv/19752.pdf - page 15 for 1988
+# http://www.resmigazete.gov.tr/arsiv/20102.pdf - page 6 for 1989
+# http://www.resmigazete.gov.tr/arsiv/20464.pdf - page 1 for 1990 - 1992
+# http://www.resmigazete.gov.tr/arsiv/21531.pdf - page 15 for 1993 - 1995
+# http://www.resmigazete.gov.tr/arsiv/21879.pdf - page 1 for overriding 1994
+# http://www.resmigazete.gov.tr/arsiv/22588.pdf - page 1 for 1996, 1997
+# http://www.resmigazete.gov.tr/arsiv/23286.pdf - page 10 for 1998 - 2000
+# http://www.resmigazete.gov.tr/eskiler/2001/03/20010324.htm#2 - for 2001
+# http://www.resmigazete.gov.tr/eskiler/2002/03/20020316.htm#2 - for 2002-2006
+# From Paul Eggert (2016-09-25):
+# Prefer the above sources to Shanks & Pottenger for time stamps after 1985.
# From Steffen Thorsen (2007-03-09):
# Starting 2007 though, it seems that they are adopting EU's 1:00 UTC
@@ -3154,6 +3497,20 @@ Zone Europe/Zurich 0:34:08 - LMT 1853 Jul 16 # See above comment.
# It's officially announced now by the Ministry of Energy.
# Turkey delays winter time to 8th of November 04:00
# http://www.aa.com.tr/tr/turkiye/yaz-saati-uygulamasi-8-kasimda-sona-erecek/362217
+#
+# From BBC News (2015-10-25):
+# Confused Turks are asking "what's the time?" after automatic clocks defied a
+# government decision ... "For the next two weeks #Turkey is on EEST... Erdogan
+# Engineered Standard Time," said Twitter user @aysekarahasan.
+# http://www.bbc.com/news/world-europe-34631326
+
+# From Burak AYDIN (2016-09-08):
+# Turkey will stay in Daylight Saving Time even in winter....
+# http://www.resmigazete.gov.tr/eskiler/2016/09/20160908-2.pdf
+#
+# From Paul Eggert (2016-09-07):
+# The change is permanent, so this is the new standard time in Turkey.
+# It takes effect today, which is not much notice.
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Turkey 1916 only - May 1 0:00 1:00 S
@@ -3209,16 +3566,16 @@ Rule Turkey 1983 only - Jul 31 0:00 1:00 S
Rule Turkey 1983 only - Oct 2 0:00 0 -
Rule Turkey 1985 only - Apr 20 0:00 1:00 S
Rule Turkey 1985 only - Sep 28 0:00 0 -
-Rule Turkey 1986 1990 - Mar lastSun 2:00s 1:00 S
-Rule Turkey 1986 1990 - Sep lastSun 2:00s 0 -
-Rule Turkey 1991 2006 - Mar lastSun 1:00s 1:00 S
-Rule Turkey 1991 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1986 1993 - Mar lastSun 1:00s 1:00 S
+Rule Turkey 1986 1995 - Sep lastSun 1:00s 0 -
+Rule Turkey 1994 only - Mar 20 1:00s 1:00 S
+Rule Turkey 1995 2006 - Mar lastSun 1:00s 1:00 S
Rule Turkey 1996 2006 - Oct lastSun 1:00s 0 -
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Istanbul 1:55:52 - LMT 1880
1:56:56 - IMT 1910 Oct # Istanbul Mean Time?
2:00 Turkey EE%sT 1978 Oct 15
- 3:00 Turkey TR%sT 1985 Apr 20 # Turkey Time
+ 3:00 Turkey +03/+04 1985 Apr 20
2:00 Turkey EE%sT 2007
2:00 EU EE%sT 2011 Mar 27 1:00u
2:00 - EET 2011 Mar 28 1:00u
@@ -3226,7 +3583,8 @@ Zone Europe/Istanbul 1:55:52 - LMT 1880
2:00 - EET 2014 Mar 31 1:00u
2:00 EU EE%sT 2015 Oct 25 1:00u
2:00 1:00 EEST 2015 Nov 8 1:00u
- 2:00 EU EE%sT
+ 2:00 EU EE%sT 2016 Sep 7
+ 3:00 - +03
Link Europe/Istanbul Asia/Istanbul # Istanbul is in both continents.
# Ukraine
diff --git a/contrib/tzdata/factory b/contrib/tzdata/factory
index 839118d..336b3ef 100644
--- a/contrib/tzdata/factory
+++ b/contrib/tzdata/factory
@@ -1,9 +1,10 @@
# This file is in the public domain, so clarified as of
# 2009-05-17 by Arthur David Olson.
-# For companies who don't want to put time zone specification in
-# their installation procedures. When users run date, they'll get the message.
-# Also useful for the "comp.sources" version.
+# For distributors who don't want to put time zone specification in
+# their installation procedures. Users that run 'date' will get the
+# time zone abbreviation "-00", indicating that the actual time zone
+# is unknown.
# Zone NAME GMTOFF RULES FORMAT
Zone Factory 0 - "Local time zone must be set--use tzsetup"
diff --git a/contrib/tzdata/leap-seconds.list b/contrib/tzdata/leap-seconds.list
index 0a0bacb..22fa785 100644
--- a/contrib/tzdata/leap-seconds.list
+++ b/contrib/tzdata/leap-seconds.list
@@ -143,7 +143,7 @@
# Boulder, Colorado
# Judah.Levine@nist.gov
#
-# Last Update of leap second values: 5 January 2015
+# Last Update of leap second values: 8 July 2016
#
# The following line shows this last update date in NTP timestamp
# format. This is the date on which the most recent change to
@@ -151,7 +151,7 @@
# be identified by the unique pair of characters in the first two
# columns as shown below.
#
-#$ 3629404800
+#$ 3676924800
#
# The NTP timestamps are in units of seconds since the NTP epoch,
# which is 1 January 1900, 00:00:00. The Modified Julian Day number
@@ -199,10 +199,10 @@
# current -- the update time stamp, the data and the name of the file
# will not change.
#
-# Updated through IERS Bulletin C50
-# File expires on: 28 June 2016
+# Updated through IERS Bulletin C52
+# File expires on: 28 June 2017
#
-#@ 3676060800
+#@ 3707596800
#
2272060800 10 # 1 Jan 1972
2287785600 11 # 1 Jul 1972
@@ -231,6 +231,7 @@
3439756800 34 # 1 Jan 2009
3550089600 35 # 1 Jul 2012
3644697600 36 # 1 Jul 2015
+3692217600 37 # 1 Jan 2017
#
# the following special comment contains the
# hash value of the data in this file computed
@@ -246,4 +247,4 @@
# the hash line is also ignored in the
# computation.
#
-#h 3d037453 3acade76 570bd8f8 be2b8bc9 55ec6fe8
+#h dacf2c42 2c4765d6 3c797af8 2cf630eb 699c8c67
diff --git a/contrib/tzdata/leapseconds b/contrib/tzdata/leapseconds
index 70ec6d1..b4411f9 100644
--- a/contrib/tzdata/leapseconds
+++ b/contrib/tzdata/leapseconds
@@ -6,6 +6,7 @@
# leap-seconds.list file available from most NIST time servers.
# If the URL <ftp://time.nist.gov/pub/leap-seconds.list> does not work,
# you should be able to pick up leap-seconds.list from a secondary NIST server.
+# See <http://tf.nist.gov/tf-cgi/servers.cgi> for a list of secondary servers.
# For more about leap-seconds.list, please see
# The NTP Timescale and Leap Seconds
# http://www.eecis.udel.edu/~mills/leap.html
@@ -55,6 +56,7 @@ Leap 2005 Dec 31 23:59:60 + S
Leap 2008 Dec 31 23:59:60 + S
Leap 2012 Jun 30 23:59:60 + S
Leap 2015 Jun 30 23:59:60 + S
+Leap 2016 Dec 31 23:59:60 + S
-# Updated through IERS Bulletin C50
-# File expires on: 28 June 2016
+# Updated through IERS Bulletin C52
+# File expires on: 28 June 2017
diff --git a/contrib/tzdata/leapseconds.awk b/contrib/tzdata/leapseconds.awk
new file mode 100644
index 0000000..21fe540
--- /dev/null
+++ b/contrib/tzdata/leapseconds.awk
@@ -0,0 +1,76 @@
+# Generate the 'leapseconds' file from 'leap-seconds.list'.
+
+# This file is in the public domain.
+
+BEGIN {
+ print "# Allowance for leap seconds added to each time zone file."
+ print ""
+ print "# This file is in the public domain."
+ print ""
+ print "# This file is generated automatically from the data in the public-domain"
+ print "# leap-seconds.list file available from most NIST time servers."
+ print "# If the URL <ftp://time.nist.gov/pub/leap-seconds.list> does not work,"
+ print "# you should be able to pick up leap-seconds.list from a secondary NIST server."
+ print "# See <http://tf.nist.gov/tf-cgi/servers.cgi> for a list of secondary servers."
+ print "# For more about leap-seconds.list, please see"
+ print "# The NTP Timescale and Leap Seconds"
+ print "# http://www.eecis.udel.edu/~mills/leap.html"
+ print ""
+ print "# The International Earth Rotation and Reference Systems Service"
+ print "# periodically uses leap seconds to keep UTC to within 0.9 s of UT1"
+ print "# (which measures the true angular orientation of the earth in space); see"
+ print "# Terry J Quinn, The BIPM and the accurate measure of time,"
+ print "# Proc IEEE 79, 7 (July 1991), 894-905 <http://dx.doi.org/10.1109/5.84965>."
+ print "# There were no leap seconds before 1972, because the official mechanism"
+ print "# accounting for the discrepancy between atomic time and the earth's rotation"
+ print "# did not exist until the early 1970s."
+ print ""
+ print "# The correction (+ or -) is made at the given time, so lines"
+ print "# will typically look like:"
+ print "# Leap YEAR MON DAY 23:59:60 + R/S"
+ print "# or"
+ print "# Leap YEAR MON DAY 23:59:59 - R/S"
+ print ""
+ print "# If the leapsecond is Rolling (R) the given time is local time."
+ print "# If the leapsecond is Stationary (S) the given time is UTC."
+ print ""
+ print "# Leap YEAR MONTH DAY HH:MM:SS CORR R/S"
+}
+
+/^ *$/ { next }
+
+/^#\tUpdated through/ || /^#\tFile expires on:/ {
+ last_lines = last_lines $0 "\n"
+}
+
+/^#/ { next }
+
+{
+ NTP_timestamp = $1
+ TAI_minus_UTC = $2
+ hash_mark = $3
+ one = $4
+ month = $5
+ year = $6
+ if (old_TAI_minus_UTC) {
+ if (old_TAI_minus_UTC < TAI_minus_UTC) {
+ sign = "23:59:60\t+"
+ } else {
+ sign = "23:59:59\t-"
+ }
+ if (month == "Jan") {
+ year--;
+ month = "Dec";
+ day = 31
+ } else if (month == "Jul") {
+ month = "Jun";
+ day = 30
+ }
+ printf "Leap\t%s\t%s\t%s\t%s\tS\n", year, month, day, sign
+ }
+ old_TAI_minus_UTC = TAI_minus_UTC
+}
+
+END {
+ printf "\n%s", last_lines
+}
diff --git a/contrib/tzdata/northamerica b/contrib/tzdata/northamerica
index 7658a45..e1ed9e4 100644
--- a/contrib/tzdata/northamerica
+++ b/contrib/tzdata/northamerica
@@ -24,8 +24,32 @@
# was the result of his proposals at the Convention of Railroad Trunk Lines
# in New York City (1869-10). His 1870 proposal was based on Washington, DC,
# but in 1872-05 he moved the proposed origin to Greenwich.
-# His proposal was adopted by the railroads on 1883-11-18 at 12:00,
-# and the most of the country soon followed suit.
+
+# From Paul Eggert (2016-09-21):
+# Dowd's proposal left many details unresolved, such as where to draw
+# lines between time zones. The key individual who made time zones
+# work in the US was William Frederick Allen - railway engineer,
+# managing editor of the Travelers' Guide, and secretary of the
+# General Time Convention, a railway standardization group. Allen
+# spent months in dialogs with scientific and railway leaders,
+# developed a workable plan to institute time zones, and presented it
+# to the General Time Convention on 1883-04-11, saying that his plan
+# meant "local time would be practically abolished" - a plus for
+# railway scheduling. By the next convention on 1883-10-11 nearly all
+# railroads had agreed and it took effect on 1883-11-18 at 12:00.
+# That Sunday was called the "day of two noons", as the eastern parts
+# of the new zones observed noon twice. Allen witnessed the
+# transition in New York City, writing:
+#
+# I heard the bells of St. Paul's strike on the old time. Four
+# minutes later, obedient to the electrical signal from the Naval
+# Observatory ... the time-ball made its rapid descent, the chimes
+# of old Trinity rang twelve measured strokes, and local time was
+# abandoned, probably forever.
+#
+# Most of the US soon followed suit. See:
+# Bartky IR. The adoption of standard time. Technol Cult 1989 Jan;30(1):25-56.
+# http://dx.doi.org/10.2307/3105430
# From Paul Eggert (2005-04-16):
# That 1883 transition occurred at 12:00 new time, not at 12:00 old time.
@@ -325,6 +349,16 @@ Zone America/New_York -4:56:02 - LMT 1883 Nov 18 12:03:58
# Statue 175 closer in synch with the US Congress' intent....
# http://www.legis.state.wi.us/2007/data/acts/07Act3.pdf
+# From an email administrator of the City of Fort Pierre, SD (2015-12-21):
+# Fort Pierre is technically located in the Mountain time zone as is
+# the rest of Stanley County. Most of Stanley County and Fort Pierre
+# uses the Central time zone due to doing most of their business in
+# Pierre so it simplifies schedules. I have lived in Stanley County
+# all my life and it has been that way since I can remember. (43 years!)
+#
+# From Paul Eggert (2015-12-25):
+# Assume this practice predates 1970, so Fort Pierre can use America/Chicago.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
Rule Chicago 1920 only - Jun 13 2:00 1:00 D
Rule Chicago 1920 1921 - Oct lastSun 2:00 0 S
@@ -403,11 +437,42 @@ Zone America/Denver -6:59:56 - LMT 1883 Nov 18 12:00:04
# north of the Salmon River, and the towns of Burgdorf and Warren),
# Nevada (except West Wendover), Oregon (except the northern 3/4 of
# Malheur county), and Washington
+
+# From Paul Eggert (2016-08-20):
+# In early February 1948, in response to California's electricity shortage,
+# PG&E changed power frequency from 60 to 59.5 Hz during daylight hours,
+# causing electric clocks to lose six minutes per day. (This did not change
+# legal time, and is not part of the data here.) See:
+# Ross SA. An energy crisis from the past: Northern California in 1948.
+# Working Paper No. 8, Institute of Governmental Studies, UC Berkeley,
+# 1973-11. http://escholarship.org/uc/item/8x22k30c
+#
+# In another measure to save electricity, DST was instituted from 1948-03-14
+# at 02:01 to 1949-01-16 at 02:00, with the governor having the option to move
+# the fallback transition earlier. See pages 3-4 of:
+# http://clerk.assembly.ca.gov/sites/clerk.assembly.ca.gov/files/archive/Statutes/1948/48Vol1_Chapters.pdf
+#
+# In response:
+#
+# Governor Warren received a torrent of objecting mail, and it is not too much
+# to speculate that the objections to Daylight Saving Time were one important
+# factor in the defeat of the Dewey-Warren Presidential ticket in California.
+# -- Ross, p 25
+#
+# On December 8 the governor exercised the option, setting the date to January 1
+# (LA Times 1948-12-09). The transition time was 02:00 (LA Times 1949-01-01).
+#
+# Despite the controversy, in 1949 California voters approved Proposition 12,
+# which established DST from April's last Sunday at 01:00 until September's
+# last Sunday at 02:00. This was amended by 1962's Proposition 6, which changed
+# the fall-back date to October's last Sunday. See:
+# http://repository.uchastings.edu/cgi/viewcontent.cgi?article=1501&context=ca_ballot_props
+# http://repository.uchastings.edu/cgi/viewcontent.cgi?article=1636&context=ca_ballot_props
#
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER
-Rule CA 1948 only - Mar 14 2:00 1:00 D
+Rule CA 1948 only - Mar 14 2:01 1:00 D
Rule CA 1949 only - Jan 1 2:00 0 S
-Rule CA 1950 1966 - Apr lastSun 2:00 1:00 D
+Rule CA 1950 1966 - Apr lastSun 1:00 1:00 D
Rule CA 1950 1961 - Sep lastSun 2:00 0 S
Rule CA 1962 1966 - Oct lastSun 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -481,6 +546,12 @@ Zone America/Los_Angeles -7:52:58 - LMT 1883 Nov 18 12:07:02
# For lack of better information, assume that Metlakatla's
# abandonment of use of daylight saving resulted from the 1983 vote.
+# From Steffen Thorsen (2015-11-09):
+# It seems Metlakatla did go off PST on Sunday, November 1, changing
+# their time to AKST and are going to follow Alaska's DST, switching
+# between AKST and AKDT from now on....
+# http://www.krbd.org/2015/10/30/annette-island-times-they-are-a-changing/
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Juneau 15:02:19 - LMT 1867 Oct 18
-8:57:41 - LMT 1900 Aug 20 12:00
@@ -506,7 +577,8 @@ Zone America/Metlakatla 15:13:42 - LMT 1867 Oct 18
-8:00 US P%sT 1946
-8:00 - PST 1969
-8:00 US P%sT 1983 Oct 30 2:00
- -8:00 - PST
+ -8:00 - PST 2015 Nov 1 2:00
+ -9:00 US AK%sT
Zone America/Yakutat 14:41:05 - LMT 1867 Oct 18
-9:18:55 - LMT 1900 Aug 20 12:00
-9:00 - YST 1942
@@ -2174,39 +2246,39 @@ Rule NT_YK 1980 2006 - Oct lastSun 2:00 0 S
Rule NT_YK 1987 2006 - Apr Sun>=1 2:00 1:00 D
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
# aka Panniqtuuq
-Zone America/Pangnirtung 0 - zzz 1921 # trading post est.
+Zone America/Pangnirtung 0 - -00 1921 # trading post est.
-4:00 NT_YK A%sT 1995 Apr Sun>=1 2:00
-5:00 Canada E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# formerly Frobisher Bay
-Zone America/Iqaluit 0 - zzz 1942 Aug # Frobisher Bay est.
+Zone America/Iqaluit 0 - -00 1942 Aug # Frobisher Bay est.
-5:00 NT_YK E%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 Canada E%sT
# aka Qausuittuq
-Zone America/Resolute 0 - zzz 1947 Aug 31 # Resolute founded
+Zone America/Resolute 0 - -00 1947 Aug 31 # Resolute founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT 2006 Oct 29 2:00
-5:00 - EST 2007 Mar 11 3:00
-6:00 Canada C%sT
# aka Kangiqiniq
-Zone America/Rankin_Inlet 0 - zzz 1957 # Rankin Inlet founded
+Zone America/Rankin_Inlet 0 - -00 1957 # Rankin Inlet founded
-6:00 NT_YK C%sT 2000 Oct 29 2:00
-5:00 - EST 2001 Apr 1 3:00
-6:00 Canada C%sT
# aka Iqaluktuuttiaq
-Zone America/Cambridge_Bay 0 - zzz 1920 # trading post est.?
+Zone America/Cambridge_Bay 0 - -00 1920 # trading post est.?
-7:00 NT_YK M%sT 1999 Oct 31 2:00
-6:00 Canada C%sT 2000 Oct 29 2:00
-5:00 - EST 2000 Nov 5 0:00
-6:00 - CST 2001 Apr 1 3:00
-7:00 Canada M%sT
-Zone America/Yellowknife 0 - zzz 1935 # Yellowknife founded?
+Zone America/Yellowknife 0 - -00 1935 # Yellowknife founded?
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
-Zone America/Inuvik 0 - zzz 1953 # Inuvik founded
+Zone America/Inuvik 0 - -00 1953 # Inuvik founded
-8:00 NT_YK P%sT 1979 Apr lastSun 2:00
-7:00 NT_YK M%sT 1980
-7:00 Canada M%sT
@@ -2458,13 +2530,22 @@ Zone America/Merida -5:58:28 - LMT 1922 Jan 1 0:01:32
-6:00 - CST 1981 Dec 23
-5:00 - EST 1982 Dec 2
-6:00 Mexico C%sT
-# Coahuila, Durango, Nuevo León, Tamaulipas (near US border)
+# Coahuila, Nuevo León, Tamaulipas (near US border)
+# This includes the following municipalities:
+# in Coahuila: Ocampo, Acuña, Zaragoza, Jiménez, Piedras Negras, Nava,
+# Guerrero, Hidalgo.
+# in Nuevo León: Anáhuac, Los Aldama.
+# in Tamaulipas: Nuevo Laredo, Guerrero, Mier, Miguel Alemán, Camargo,
+# Gustavo Díaz Ordaz, Reynosa, Río Bravo, Valle Hermoso, Matamoros.
+# See: Inicia mañana Horario de Verano en zona fronteriza, El Universal,
+# 2016-03-12
+# http://www.eluniversal.com.mx/articulo/estados/2016/03/12/inicia-manana-horario-de-verano-en-zona-fronteriza
Zone America/Matamoros -6:40:00 - LMT 1921 Dec 31 23:20:00
-6:00 - CST 1988
-6:00 US C%sT 1989
-6:00 Mexico C%sT 2010
-6:00 US C%sT
-# Coahuila, Durango, Nuevo León, Tamaulipas (away from US border)
+# Durango; Coahuila, Nuevo León, Tamaulipas (away from US border)
Zone America/Monterrey -6:41:16 - LMT 1921 Dec 31 23:18:44
-6:00 - CST 1988
-6:00 US C%sT 1989
@@ -2480,6 +2561,9 @@ Zone America/Mexico_City -6:36:36 - LMT 1922 Jan 1 0:23:24
-6:00 - CST 2002 Feb 20
-6:00 Mexico C%sT
# Chihuahua (near US border)
+# This includes the municipalities of Janos, Ascensión, Juárez, Guadalupe,
+# Práxedis G Guerrero, Coyame del Sotol, Ojinaga, and Manuel Benavides.
+# (See the 2016-03-12 El Universal source mentioned above.)
Zone America/Ojinaga -6:57:40 - LMT 1922 Jan 1 0:02:20
-7:00 - MST 1927 Jun 10 23:00
-6:00 - CST 1930 Nov 15
@@ -2567,7 +2651,7 @@ Zone America/Bahia_Banderas -7:01:00 - LMT 1921 Dec 31 23:59:00
-7:00 Mexico M%sT 2010 Apr 4 2:00
-6:00 Mexico C%sT
-# Baja California (near US border)
+# Baja California
Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-7:00 - MST 1924
-8:00 - PST 1927 Jun 10 23:00
@@ -2587,25 +2671,6 @@ Zone America/Tijuana -7:48:04 - LMT 1922 Jan 1 0:11:56
-8:00 US P%sT 2002 Feb 20
-8:00 Mexico P%sT 2010
-8:00 US P%sT
-# Baja California (away from US border)
-Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32
- -7:00 - MST 1924
- -8:00 - PST 1927 Jun 10 23:00
- -7:00 - MST 1930 Nov 15
- -8:00 - PST 1931 Apr 1
- -8:00 1:00 PDT 1931 Sep 30
- -8:00 - PST 1942 Apr 24
- -8:00 1:00 PWT 1945 Aug 14 23:00u
- -8:00 1:00 PPT 1945 Nov 12 # Peace
- -8:00 - PST 1948 Apr 5
- -8:00 1:00 PDT 1949 Jan 14
- -8:00 - PST 1954
- -8:00 CA P%sT 1961
- -8:00 - PST 1976
- -8:00 US P%sT 1996
- -8:00 Mexico P%sT 2001
- -8:00 US P%sT 2002 Feb 20
- -8:00 Mexico P%sT
# From Paul Eggert (2006-03-22):
# Formerly there was an America/Ensenada zone, which differed from
# America/Tijuana only in that it did not observe DST from 1976
@@ -2618,6 +2683,13 @@ Zone America/Santa_Isabel -7:39:28 - LMT 1922 Jan 1 0:20:32
# other than America/Tijuana for Baja, but it's not clear yet what its
# name or contents should be.
#
+# From Paul Eggert (2015-10-08):
+# Formerly there was an America/Santa_Isabel zone, but this appears to
+# have come from a misreading of
+# http://dof.gob.mx/nota_detalle.php?codigo=5127480&fecha=06/01/2010
+# It has been moved to the 'backward' file.
+#
+#
# Revillagigedo Is
# no information
@@ -2692,17 +2764,7 @@ Zone Atlantic/Bermuda -4:19:18 - LMT 1930 Jan 1 2:00 # Hamilton
-4:00 US A%sT
# Cayman Is
-
-# From Paul Eggert (2015-05-15):
-# The Cayman government has decided to introduce DST in 2016, the idea being
-# to keep in sync with New York. The legislation hasn't passed but the change
-# seems quite likely. See: Meade B. Cayman 27.
-# http://www.cayman27.com.ky/2015/05/15/clock-ticks-toward-daylight-saving-time-in-cayman
-
-Zone America/Cayman -5:25:32 - LMT 1890 # Georgetown
- -5:07:11 - KMT 1912 Feb # Kingston Mean Time
- -5:00 - EST 2016
- -5:00 US E%sT
+# See America/Panama.
# Costa Rica
@@ -3065,6 +3127,13 @@ Zone America/Guatemala -6:02:04 - LMT 1918 Oct 5
# http://radiovision2000haiti.net/public/haiti-avis-changement-dheure-dimanche/
# http://www.canalplushaiti.net/?p=6714
+# From Steffen Thorsen (2016-03-12):
+# Jean Antoine, editor of www.haiti-reference.com informed us that Haiti
+# are not going on DST this year. Several other resources confirm this: ...
+# http://www.radiotelevisioncaraibes.com/presse/heure_d_t_pas_de_changement_d_heure_pr_vu_pour_cet_ann_e.html
+# http://www.vantbefinfo.com/changement-dheure-pas-pour-haiti/
+# http://news.anmwe.com/haiti-lheure-nationale-ne-sera-ni-avancee-ni-reculee-cette-annee/
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Haiti 1983 only - May 8 0:00 1:00 D
Rule Haiti 1984 1987 - Apr lastSun 0:00 1:00 D
@@ -3075,8 +3144,8 @@ Rule Haiti 1988 1997 - Apr Sun>=1 1:00s 1:00 D
Rule Haiti 1988 1997 - Oct lastSun 1:00s 0 S
Rule Haiti 2005 2006 - Apr Sun>=1 0:00 1:00 D
Rule Haiti 2005 2006 - Oct lastSun 0:00 0 S
-Rule Haiti 2012 max - Mar Sun>=8 2:00 1:00 D
-Rule Haiti 2012 max - Nov Sun>=1 2:00 0 S
+Rule Haiti 2012 2015 - Mar Sun>=8 2:00 1:00 D
+Rule Haiti 2012 2015 - Nov Sun>=1 2:00 0 S
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Port-au-Prince -4:49:20 - LMT 1890
-4:49 - PPMT 1917 Jan 24 12:00 # P-a-P MT
@@ -3225,6 +3294,7 @@ Zone America/Managua -5:45:08 - LMT 1890
Zone America/Panama -5:18:08 - LMT 1890
-5:19:36 - CMT 1908 Apr 22 # Colón Mean Time
-5:00 - EST
+Link America/Panama America/Cayman
# Puerto Rico
# There are too many San Juans elsewhere, so we'll use 'Puerto_Rico'.
@@ -3266,7 +3336,7 @@ Zone America/Miquelon -3:44:40 - LMT 1911 May 15 # St Pierre
# indicating that the normal ET rules are followed.
#
# From Paul Eggert (2014-08-19):
-# The 2014-08-13 Cabinet meeting decided to stay on UTC-4 year-round. See:
+# The 2014-08-13 Cabinet meeting decided to stay on UT -04 year-round. See:
# http://tcweeklynews.com/daylight-savings-time-to-be-maintained-p5353-127.htm
# Model this as a switch from EST/EDT to AST ...
# From Chris Walton (2014-11-04):
diff --git a/contrib/tzdata/southamerica b/contrib/tzdata/southamerica
index 50d118e..5321451 100644
--- a/contrib/tzdata/southamerica
+++ b/contrib/tzdata/southamerica
@@ -410,9 +410,9 @@ Rule Arg 2008 only - Oct Sun>=15 0:00 1:00 S
# stuck on Summer daylight savings time even though the summer is over.
# From Paul Eggert (2013-09-05):
-# Perhaps San Luis operates on the legal fiction that it is at UTC-4
+# Perhaps San Luis operates on the legal fiction that it is at -04
# with perpetual summer time, but ordinary usage typically seems to
-# just say it's at UTC-3; see, for example,
+# just say it's at -03; see, for example,
# http://es.wikipedia.org/wiki/Hora_oficial_argentina
# We've documented similar situations as being plain changes to
# standard time, so let's do that here too. This does not change UTC
@@ -1221,6 +1221,20 @@ Zone America/Rio_Branco -4:31:12 - LMT 1914
# From Paul Eggert (2015-03-03):
# For now, assume that the extension will persist indefinitely.
+# From Juan Correa (2016-03-18):
+# The decree regarding DST has been published in today's Official Gazette:
+# http://www.diariooficial.interior.gob.cl/versiones-anteriores/do/20160318/
+# http://www.leychile.cl/Navegar?idNorma=1088502
+# It does consider the second Saturday of May and August as the dates
+# for the transition; and it lists DST dates until 2019, but I think
+# this scheme will stick.
+#
+# From Paul Eggert (2016-03-18):
+# For now, assume the pattern holds for the indefinite future.
+# The decree says transitions occur at 24:00; in practice this appears
+# to mean 24:00 mainland time, not 24:00 local time, so that Easter
+# Island is always two hours behind the mainland.
+
# Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
Rule Chile 1927 1931 - Sep 1 0:00 1:00 S
Rule Chile 1928 1932 - Apr 1 0:00 0 -
@@ -1252,8 +1266,10 @@ Rule Chile 2009 only - Mar Sun>=9 3:00u 0 -
Rule Chile 2010 only - Apr Sun>=1 3:00u 0 -
Rule Chile 2011 only - May Sun>=2 3:00u 0 -
Rule Chile 2011 only - Aug Sun>=16 4:00u 1:00 S
-Rule Chile 2012 2015 - Apr Sun>=23 3:00u 0 -
+Rule Chile 2012 2014 - Apr Sun>=23 3:00u 0 -
Rule Chile 2012 2014 - Sep Sun>=2 4:00u 1:00 S
+Rule Chile 2016 max - May Sun>=9 3:00u 0 -
+Rule Chile 2016 max - Aug Sun>=9 4:00u 1:00 S
# IATA SSIM anomalies: (1992-02) says 1992-03-14;
# (1996-09) says 1998-03-08. Ignore these.
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
@@ -1270,13 +1286,11 @@ Zone America/Santiago -4:42:46 - LMT 1890
-4:00 1:00 CLST 1946 Sep 1 # central Chile
-4:00 - CLT 1947 Apr 1
-5:00 - CLT 1947 May 21 23:00
- -4:00 Chile CL%sT 2015 Apr 26 3:00u
- -3:00 - CLT
+ -4:00 Chile CL%sT
Zone Pacific/Easter -7:17:28 - LMT 1890
-7:17:28 - EMT 1932 Sep # Easter Mean Time
-7:00 Chile EAS%sT 1982 Mar 14 3:00u # Easter Time
- -6:00 Chile EAS%sT 2015 Apr 26 3:00u
- -5:00 - EAST
+ -6:00 Chile EAS%sT
#
# Salas y Gómez Island is uninhabited.
# Other Chilean locations, including Juan Fernández Is, Desventuradas Is,
@@ -1295,11 +1309,10 @@ Zone Pacific/Easter -7:17:28 - LMT 1890
# Palmer used to be supplied from Argentina.
#
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
-Zone Antarctica/Palmer 0 - zzz 1965
+Zone Antarctica/Palmer 0 - -00 1965
-4:00 Arg AR%sT 1969 Oct 5
-3:00 Arg AR%sT 1982 May
- -4:00 Chile CL%sT 2015 Apr 26 3:00u
- -3:00 - CLT
+ -4:00 Chile CL%sT
# Colombia
@@ -1742,9 +1755,25 @@ Zone America/Montevideo -3:44:44 - LMT 1898 Jun 28
# resolution publication)
# http://www.globovision.com/news.php?nid=72208
+# From Alexander Krivenyshev (2016-04-15):
+# https://actualidad.rt.com/actualidad/204758-venezuela-modificar-huso-horario-sequia-elnino
+#
+# From Paul Eggert (2016-04-15):
+# Clocks advance 30 minutes on 2016-05-01 at 02:30....
+# "'Venezuela's new time-zone: hours without light, hours without water,
+# hours of presidential broadcasts, hours of lines,' quipped comedian
+# Jean Mary Curró ...". See: Cawthorne A, Kai D. Venezuela scraps
+# half-hour time difference set by Chavez. Reuters 2016-04-15 14:50 -0400
+# http://www.reuters.com/article/us-venezuela-timezone-idUSKCN0XC2BE
+#
+# From Matt Johnson (2016-04-20):
+# ... published in the official Gazette [2016-04-18], here:
+# http://historico.tsj.gob.ve/gaceta_ext/abril/1842016/E-1842016-4551.pdf
+
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone America/Caracas -4:27:44 - LMT 1890
-4:27:40 - CMT 1912 Feb 12 # Caracas Mean Time?
-4:30 - VET 1965 Jan 1 0:00 # Venezuela T.
-4:00 - VET 2007 Dec 9 3:00
- -4:30 - VET
+ -4:30 - VET 2016 May 1 2:30
+ -4:00 - VET
diff --git a/contrib/tzdata/version b/contrib/tzdata/version
new file mode 100644
index 0000000..bc96124
--- /dev/null
+++ b/contrib/tzdata/version
@@ -0,0 +1 @@
+2016i
diff --git a/contrib/tzdata/zone.tab b/contrib/tzdata/zone.tab
index 935143f..f4969d2 100644
--- a/contrib/tzdata/zone.tab
+++ b/contrib/tzdata/zone.tab
@@ -30,22 +30,22 @@ AI +1812-06304 America/Anguilla
AL +4120+01950 Europe/Tirane
AM +4011+04430 Asia/Yerevan
AO -0848+01314 Africa/Luanda
-AQ -7750+16636 Antarctica/McMurdo McMurdo, South Pole, Scott (New Zealand time)
-AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
-AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
-AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
-AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
-AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
-AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adelie Land
-AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
-AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
+AQ -7750+16636 Antarctica/McMurdo New Zealand time - McMurdo, South Pole
+AQ -6617+11031 Antarctica/Casey Casey
+AQ -6835+07758 Antarctica/Davis Davis
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville
+AQ -6736+06253 Antarctica/Mawson Mawson
+AQ -6448-06406 Antarctica/Palmer Palmer
+AQ -6734-06808 Antarctica/Rothera Rothera
+AQ -690022+0393524 Antarctica/Syowa Syowa
+AQ -720041+0023206 Antarctica/Troll Troll
+AQ -7824+10654 Antarctica/Vostok Vostok
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
-AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
-AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
+AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
+AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN)
AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
AR -2649-06513 America/Argentina/Tucuman Tucuman (TM)
-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH)
AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
@@ -56,17 +56,17 @@ AS -1416-17042 Pacific/Pago_Pago
AT +4813+01620 Europe/Vienna
AU -3133+15905 Australia/Lord_Howe Lord Howe Island
AU -5430+15857 Antarctica/Macquarie Macquarie Island
-AU -4253+14719 Australia/Hobart Tasmania - most locations
-AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -4253+14719 Australia/Hobart Tasmania (most areas)
+AU -3956+14352 Australia/Currie Tasmania (King Island)
AU -3749+14458 Australia/Melbourne Victoria
-AU -3352+15113 Australia/Sydney New South Wales - most locations
-AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
-AU -2728+15302 Australia/Brisbane Queensland - most locations
-AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3352+15113 Australia/Sydney New South Wales (most areas)
+AU -3157+14127 Australia/Broken_Hill New South Wales (Yancowinna)
+AU -2728+15302 Australia/Brisbane Queensland (most areas)
+AU -2016+14900 Australia/Lindeman Queensland (Whitsunday Islands)
AU -3455+13835 Australia/Adelaide South Australia
AU -1228+13050 Australia/Darwin Northern Territory
-AU -3157+11551 Australia/Perth Western Australia - most locations
-AU -3143+12852 Australia/Eucla Western Australia - Eucla area
+AU -3157+11551 Australia/Perth Western Australia (most areas)
+AU -3143+12852 Australia/Eucla Western Australia (Eucla)
AW +1230-06958 America/Aruba
AX +6006+01957 Europe/Mariehamn
AZ +4023+04951 Asia/Baku
@@ -85,63 +85,63 @@ BN +0456+11455 Asia/Brunei
BO -1630-06809 America/La_Paz
BQ +120903-0681636 America/Kralendijk
BR -0351-03225 America/Noronha Atlantic islands
-BR -0127-04829 America/Belem Amapa, E Para
-BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
+BR -0127-04829 America/Belem Para (east); Amapa
+BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB)
BR -0803-03454 America/Recife Pernambuco
BR -0712-04812 America/Araguaina Tocantins
BR -0940-03543 America/Maceio Alagoas, Sergipe
BR -1259-03831 America/Bahia Bahia
-BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -2332-04637 America/Sao_Paulo Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)
BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
BR -1535-05605 America/Cuiaba Mato Grosso
-BR -0226-05452 America/Santarem W Para
+BR -0226-05452 America/Santarem Para (west)
BR -0846-06354 America/Porto_Velho Rondonia
BR +0249-06040 America/Boa_Vista Roraima
-BR -0308-06001 America/Manaus E Amazonas
-BR -0640-06952 America/Eirunepe W Amazonas
+BR -0308-06001 America/Manaus Amazonas (east)
+BR -0640-06952 America/Eirunepe Amazonas (west)
BR -0958-06748 America/Rio_Branco Acre
BS +2505-07721 America/Nassau
BT +2728+08939 Asia/Thimphu
BW -2439+02555 Africa/Gaborone
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
-CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI
-CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton)
-CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
-CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
-CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
-CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations
-CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
-CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
-CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
-CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
-CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
-CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
-CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
-CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
-CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
-CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
-CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
-CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
-CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
-CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
-CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
-CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
-CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
-CA +5848-12242 America/Fort_Nelson Mountain Standard Time - Fort Nelson, British Columbia
-CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
-CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
-CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast)
+CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE
+CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton)
+CA +4606-06447 America/Moncton Atlantic - New Brunswick
+CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas)
+CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore)
+CA +4339-07923 America/Toronto Eastern - ON, QC (most areas)
+CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73)
+CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay)
+CA +6344-06828 America/Iqaluit Eastern - NU (most east areas)
+CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung)
+CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H)
+CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba
+CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances)
+CA +744144-0944945 America/Resolute Central - NU (Resolute)
+CA +624900-0920459 America/Rankin_Inlet Central - NU (central)
+CA +5024-10439 America/Regina CST - SK (most areas)
+CA +5017-10750 America/Swift_Current CST - SK (midwest)
+CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W)
+CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
+CA +6227-11421 America/Yellowknife Mountain - NT (central)
+CA +682059-1334300 America/Inuvik Mountain - NT (west)
+CA +4906-11631 America/Creston MST - BC (Creston)
+CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
+CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
+CA +4916-12307 America/Vancouver Pacific - BC (most areas)
+CA +6043-13503 America/Whitehorse Pacific - Yukon (south)
+CA +6404-13925 America/Dawson Pacific - Yukon (north)
CC -1210+09655 Indian/Cocos
-CD -0418+01518 Africa/Kinshasa west Dem. Rep. of Congo
-CD -1140+02728 Africa/Lubumbashi east Dem. Rep. of Congo
+CD -0418+01518 Africa/Kinshasa Dem. Rep. of Congo (west)
+CD -1140+02728 Africa/Lubumbashi Dem. Rep. of Congo (east)
CF +0422+01835 Africa/Bangui
CG -0416+01517 Africa/Brazzaville
CH +4723+00832 Europe/Zurich
CI +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
-CL -3327-07040 America/Santiago most locations
+CL -3327-07040 America/Santiago Chile (most areas)
CL -2709-10926 Pacific/Easter Easter Island
CM +0403+00942 Africa/Douala
CN +3114+12128 Asia/Shanghai Beijing Time
@@ -152,30 +152,31 @@ CU +2308-08222 America/Havana
CV +1455-02331 Atlantic/Cape_Verde
CW +1211-06900 America/Curacao
CX -1025+10543 Indian/Christmas
-CY +3510+03322 Asia/Nicosia
+CY +3510+03322 Asia/Nicosia Cyprus (most areas)
+CY +3507+03357 Asia/Famagusta Northern Cyprus
CZ +5005+01426 Europe/Prague
-DE +5230+01322 Europe/Berlin most locations
+DE +5230+01322 Europe/Berlin Germany (most areas)
DE +4742+00841 Europe/Busingen Busingen
DJ +1136+04309 Africa/Djibouti
DK +5540+01235 Europe/Copenhagen
DM +1518-06124 America/Dominica
DO +1828-06954 America/Santo_Domingo
DZ +3647+00303 Africa/Algiers
-EC -0210-07950 America/Guayaquil mainland
+EC -0210-07950 America/Guayaquil Ecuador (mainland)
EC -0054-08936 Pacific/Galapagos Galapagos Islands
EE +5925+02445 Europe/Tallinn
EG +3003+03115 Africa/Cairo
EH +2709-01312 Africa/El_Aaiun
ER +1520+03853 Africa/Asmara
-ES +4024-00341 Europe/Madrid mainland
-ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +4024-00341 Europe/Madrid Spain (mainland)
+ES +3553-00519 Africa/Ceuta Ceuta, Melilla
ES +2806-01524 Atlantic/Canary Canary Islands
ET +0902+03842 Africa/Addis_Ababa
FI +6010+02458 Europe/Helsinki
FJ -1808+17825 Pacific/Fiji
FK -5142-05751 Atlantic/Stanley
-FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
-FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
+FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap
+FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape
FM +0519+16259 Pacific/Kosrae Kosrae
FO +6201-00646 Atlantic/Faroe
FR +4852+00220 Europe/Paris
@@ -187,10 +188,10 @@ GF +0456-05220 America/Cayenne
GG +4927-00232 Europe/Guernsey
GH +0533-00013 Africa/Accra
GI +3608-00521 Europe/Gibraltar
-GL +6411-05144 America/Godthab most locations
-GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
-GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
-GL +7634-06847 America/Thule Thule / Pituffik
+GL +6411-05144 America/Godthab Greenland (most areas)
+GL +7646-01840 America/Danmarkshavn National Park (east coast)
+GL +7029-02158 America/Scoresbysund Scoresbysund/Ittoqqortoormiit
+GL +7634-06847 America/Thule Thule/Pituffik
GM +1328-01639 Africa/Banjul
GN +0931-01343 Africa/Conakry
GP +1614-06132 America/Guadeloupe
@@ -206,10 +207,10 @@ HN +1406-08713 America/Tegucigalpa
HR +4548+01558 Europe/Zagreb
HT +1832-07220 America/Port-au-Prince
HU +4730+01905 Europe/Budapest
-ID -0610+10648 Asia/Jakarta Java & Sumatra
-ID -0002+10920 Asia/Pontianak west & central Borneo
-ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
-ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)
+ID -0610+10648 Asia/Jakarta Java, Sumatra
+ID -0002+10920 Asia/Pontianak Borneo (west, central)
+ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)
+ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas
IE +5320-00615 Europe/Dublin
IL +314650+0351326 Asia/Jerusalem
IM +5409-00428 Europe/Isle_of_Man
@@ -235,10 +236,10 @@ KP +3901+12545 Asia/Pyongyang
KR +3733+12658 Asia/Seoul
KW +2920+04759 Asia/Kuwait
KY +1918-08123 America/Cayman
-KZ +4315+07657 Asia/Almaty most locations
-KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
-KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
-KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
+KZ +4315+07657 Asia/Almaty Kazakhstan (most areas)
+KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda
+KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe
+KZ +4431+05016 Asia/Aqtau Atyrau/Atirau/Gur'yev, Mangghystau/Mankistau
KZ +5113+05121 Asia/Oral West Kazakhstan
LA +1758+10236 Asia/Vientiane
LB +3353+03530 Asia/Beirut
@@ -257,12 +258,12 @@ MD +4700+02850 Europe/Chisinau
ME +4226+01916 Europe/Podgorica
MF +1804-06305 America/Marigot
MG -1855+04731 Indian/Antananarivo
-MH +0709+17112 Pacific/Majuro most locations
+MH +0709+17112 Pacific/Majuro Marshall Islands (most areas)
MH +0905+16720 Pacific/Kwajalein Kwajalein
MK +4159+02126 Europe/Skopje
ML +1239-00800 Africa/Bamako
-MM +1647+09610 Asia/Rangoon
-MN +4755+10653 Asia/Ulaanbaatar most locations
+MM +1647+09610 Asia/Yangon
+MN +4755+10653 Asia/Ulaanbaatar Mongolia (most areas)
MN +4801+09139 Asia/Hovd Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
MN +4804+11430 Asia/Choibalsan Dornod, Sukhbaatar
MO +2214+11335 Asia/Macau
@@ -274,20 +275,19 @@ MT +3554+01431 Europe/Malta
MU -2010+05730 Indian/Mauritius
MV +0410+07330 Indian/Maldives
MW -1547+03500 Africa/Blantyre
-MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +1924-09909 America/Mexico_City Central Time
MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo
MX +2058-08937 America/Merida Central Time - Campeche, Yucatan
-MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas away from US border
-MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo Leon, Tamaulipas near US border
-MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
-MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border
-MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
+MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
+MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border)
+MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas)
+MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border)
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
-MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
-MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
-MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahia de Banderas
-MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
-MY +0133+11020 Asia/Kuching Sabah & Sarawak
+MX +3232-11701 America/Tijuana Pacific Time US - Baja California
+MX +2048-10515 America/Bahia_Banderas Central Time - Bahia de Banderas
+MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula)
+MY +0133+11020 Asia/Kuching Sabah, Sarawak
MZ -2558+03235 Africa/Maputo
NA -2234+01706 Africa/Windhoek
NC -2216+16627 Pacific/Noumea
@@ -300,7 +300,7 @@ NO +5955+01045 Europe/Oslo
NP +2743+08519 Asia/Kathmandu
NR -0031+16655 Pacific/Nauru
NU -1901-16955 Pacific/Niue
-NZ -3652+17446 Pacific/Auckland most locations
+NZ -3652+17446 Pacific/Auckland New Zealand (most areas)
NZ -4357-17633 Pacific/Chatham Chatham Islands
OM +2336+05835 Asia/Muscat
PA +0858-07932 America/Panama
@@ -308,7 +308,7 @@ PE -1203-07703 America/Lima
PF -1732-14934 Pacific/Tahiti Society Islands
PF -0900-13930 Pacific/Marquesas Marquesas Islands
PF -2308-13457 Pacific/Gambier Gambier Islands
-PG -0930+14710 Pacific/Port_Moresby most locations
+PG -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas)
PG -0613+15534 Pacific/Bougainville Bougainville
PH +1435+12100 Asia/Manila
PK +2452+06703 Asia/Karachi
@@ -318,7 +318,7 @@ PN -2504-13005 Pacific/Pitcairn
PR +182806-0660622 America/Puerto_Rico
PS +3130+03428 Asia/Gaza Gaza Strip
PS +313200+0350542 Asia/Hebron West Bank
-PT +3843-00908 Europe/Lisbon mainland
+PT +3843-00908 Europe/Lisbon Portugal (mainland)
PT +3238-01654 Atlantic/Madeira Madeira Islands
PT +3744-02540 Atlantic/Azores Azores
PW +0720+13429 Pacific/Palau
@@ -327,27 +327,32 @@ QA +2517+05132 Asia/Qatar
RE -2052+05528 Indian/Reunion
RO +4426+02606 Europe/Bucharest
RS +4450+02030 Europe/Belgrade
-RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
-RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
-RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
-RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
-RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
-RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
-RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
-RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
-RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
-RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
-RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
-RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
-RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
-RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
-RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
-RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
-RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
-RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
-RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
-RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
+RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
+RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
+RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
+RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd, Saratov
+RU +5836+04939 Europe/Kirov MSK+00 - Kirov
+RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
+RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia
+RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk
+RU +5651+06036 Asia/Yekaterinburg MSK+02 - Urals
+RU +5500+07324 Asia/Omsk MSK+03 - Omsk
+RU +5502+08255 Asia/Novosibirsk MSK+03 - Novosibirsk
+RU +5322+08345 Asia/Barnaul MSK+04 - Altai
+RU +5630+08458 Asia/Tomsk MSK+04 - Tomsk
+RU +5345+08707 Asia/Novokuznetsk MSK+04 - Kemerovo
+RU +5601+09250 Asia/Krasnoyarsk MSK+04 - Krasnoyarsk area
+RU +5216+10420 Asia/Irkutsk MSK+05 - Irkutsk, Buryatia
+RU +5203+11328 Asia/Chita MSK+06 - Zabaykalsky
+RU +6200+12940 Asia/Yakutsk MSK+06 - Lena River
+RU +623923+1353314 Asia/Khandyga MSK+06 - Tomponsky, Ust-Maysky
+RU +4310+13156 Asia/Vladivostok MSK+07 - Amur River
+RU +643337+1431336 Asia/Ust-Nera MSK+07 - Oymyakonsky
+RU +5934+15048 Asia/Magadan MSK+08 - Magadan
+RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island
+RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); North Kuril Is
+RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka
+RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea
RW -0157+03004 Africa/Kigali
SA +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
@@ -386,45 +391,45 @@ TT +1039-06131 America/Port_of_Spain
TV -0831+17913 Pacific/Funafuti
TW +2503+12130 Asia/Taipei
TZ -0648+03917 Africa/Dar_es_Salaam
-UA +5026+03031 Europe/Kiev most locations
+UA +5026+03031 Europe/Kiev Ukraine (most areas)
UA +4837+02218 Europe/Uzhgorod Ruthenia
-UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
UG +0019+03225 Africa/Kampala
UM +1645-16931 Pacific/Johnston Johnston Atoll
UM +2813-17722 Pacific/Midway Midway Islands
UM +1917+16637 Pacific/Wake Wake Island
-US +404251-0740023 America/New_York Eastern Time
-US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
-US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
-US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
-US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
-US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
-US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
-US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
-US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County
-US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
-US +415100-0873900 America/Chicago Central Time
-US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County
-US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County
-US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
-US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
-US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
-US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County
-US +394421-1045903 America/Denver Mountain Time
-US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
-US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
-US +340308-1181434 America/Los_Angeles Pacific Time
-US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
-US +611305-1495401 America/Anchorage Alaska Time
-US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
-US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
-US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
-US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +404251-0740023 America/New_York Eastern (most areas)
+US +421953-0830245 America/Detroit Eastern - MI (most areas)
+US +381515-0854534 America/Kentucky/Louisville Eastern - KY (Louisville area)
+US +364947-0845057 America/Kentucky/Monticello Eastern - KY (Wayne)
+US +394606-0860929 America/Indiana/Indianapolis Eastern - IN (most areas)
+US +384038-0873143 America/Indiana/Vincennes Eastern - IN (Da, Du, K, Mn)
+US +410305-0863611 America/Indiana/Winamac Eastern - IN (Pulaski)
+US +382232-0862041 America/Indiana/Marengo Eastern - IN (Crawford)
+US +382931-0871643 America/Indiana/Petersburg Eastern - IN (Pike)
+US +384452-0850402 America/Indiana/Vevay Eastern - IN (Switzerland)
+US +415100-0873900 America/Chicago Central (most areas)
+US +375711-0864541 America/Indiana/Tell_City Central - IN (Perry)
+US +411745-0863730 America/Indiana/Knox Central - IN (Starke)
+US +450628-0873651 America/Menominee Central - MI (Wisconsin border)
+US +470659-1011757 America/North_Dakota/Center Central - ND (Oliver)
+US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural)
+US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer)
+US +394421-1045903 America/Denver Mountain (most areas)
+US +433649-1161209 America/Boise Mountain - ID (south); OR (east)
+US +332654-1120424 America/Phoenix MST - Arizona (except Navajo)
+US +340308-1181434 America/Los_Angeles Pacific
+US +611305-1495401 America/Anchorage Alaska (most areas)
+US +581807-1342511 America/Juneau Alaska - Juneau area
+US +571035-1351807 America/Sitka Alaska - Sitka area
+US +550737-1313435 America/Metlakatla Alaska - Annette Island
+US +593249-1394338 America/Yakutat Alaska - Yakutat
+US +643004-1652423 America/Nome Alaska (west)
US +515248-1763929 America/Adak Aleutian Islands
US +211825-1575130 Pacific/Honolulu Hawaii
UY -3453-05611 America/Montevideo
-UZ +3940+06648 Asia/Samarkand west Uzbekistan
-UZ +4120+06918 Asia/Tashkent east Uzbekistan
+UZ +3940+06648 Asia/Samarkand Uzbekistan (west)
+UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
VA +415408+0122711 Europe/Vatican
VC +1309-06114 America/St_Vincent
VE +1030-06656 America/Caracas
diff --git a/contrib/tzdata/zone1970.tab b/contrib/tzdata/zone1970.tab
index a66f0f6..5598d560 100644
--- a/contrib/tzdata/zone1970.tab
+++ b/contrib/tzdata/zone1970.tab
@@ -39,21 +39,21 @@ AE,OM +2518+05518 Asia/Dubai
AF +3431+06912 Asia/Kabul
AL +4120+01950 Europe/Tirane
AM +4011+04430 Asia/Yerevan
-AQ -6734-06808 Antarctica/Rothera Rothera Station, Adelaide Island
-AQ -6448-06406 Antarctica/Palmer Palmer Station, Anvers Island
-AQ -6736+06253 Antarctica/Mawson Mawson Station, Holme Bay
-AQ -6835+07758 Antarctica/Davis Davis Station, Vestfold Hills
-AQ -6617+11031 Antarctica/Casey Casey Station, Bailey Peninsula
-AQ -7824+10654 Antarctica/Vostok Vostok Station, Lake Vostok
-AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville Station, Adélie Land
-AQ -690022+0393524 Antarctica/Syowa Syowa Station, E Ongul I
-AQ -720041+0023206 Antarctica/Troll Troll Station, Queen Maud Land
+AQ -6617+11031 Antarctica/Casey Casey
+AQ -6835+07758 Antarctica/Davis Davis
+AQ -6640+14001 Antarctica/DumontDUrville Dumont-d'Urville
+AQ -6736+06253 Antarctica/Mawson Mawson
+AQ -6448-06406 Antarctica/Palmer Palmer
+AQ -6734-06808 Antarctica/Rothera Rothera
+AQ -690022+0393524 Antarctica/Syowa Syowa
+AQ -720041+0023206 Antarctica/Troll Troll
+AQ -7824+10654 Antarctica/Vostok Vostok
AR -3436-05827 America/Argentina/Buenos_Aires Buenos Aires (BA, CF)
-AR -3124-06411 America/Argentina/Cordoba most locations (CB, CC, CN, ER, FM, MN, SE, SF)
-AR -2447-06525 America/Argentina/Salta (SA, LP, NQ, RN)
+AR -3124-06411 America/Argentina/Cordoba Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
+AR -2447-06525 America/Argentina/Salta Salta (SA, LP, NQ, RN)
AR -2411-06518 America/Argentina/Jujuy Jujuy (JY)
AR -2649-06513 America/Argentina/Tucuman Tucumán (TM)
-AR -2828-06547 America/Argentina/Catamarca Catamarca (CT), Chubut (CH)
+AR -2828-06547 America/Argentina/Catamarca Catamarca (CT); Chubut (CH)
AR -2926-06651 America/Argentina/La_Rioja La Rioja (LR)
AR -3132-06831 America/Argentina/San_Juan San Juan (SJ)
AR -3253-06849 America/Argentina/Mendoza Mendoza (MZ)
@@ -64,17 +64,17 @@ AS,UM -1416-17042 Pacific/Pago_Pago Samoa, Midway
AT +4813+01620 Europe/Vienna
AU -3133+15905 Australia/Lord_Howe Lord Howe Island
AU -5430+15857 Antarctica/Macquarie Macquarie Island
-AU -4253+14719 Australia/Hobart Tasmania - most locations
-AU -3956+14352 Australia/Currie Tasmania - King Island
+AU -4253+14719 Australia/Hobart Tasmania (most areas)
+AU -3956+14352 Australia/Currie Tasmania (King Island)
AU -3749+14458 Australia/Melbourne Victoria
-AU -3352+15113 Australia/Sydney New South Wales - most locations
-AU -3157+14127 Australia/Broken_Hill New South Wales - Yancowinna
-AU -2728+15302 Australia/Brisbane Queensland - most locations
-AU -2016+14900 Australia/Lindeman Queensland - Holiday Islands
+AU -3352+15113 Australia/Sydney New South Wales (most areas)
+AU -3157+14127 Australia/Broken_Hill New South Wales (Yancowinna)
+AU -2728+15302 Australia/Brisbane Queensland (most areas)
+AU -2016+14900 Australia/Lindeman Queensland (Whitsunday Islands)
AU -3455+13835 Australia/Adelaide South Australia
AU -1228+13050 Australia/Darwin Northern Territory
-AU -3157+11551 Australia/Perth Western Australia - most locations
-AU -3143+12852 Australia/Eucla Western Australia - Eucla area
+AU -3157+11551 Australia/Perth Western Australia (most areas)
+AU -3143+12852 Australia/Eucla Western Australia (Eucla)
AZ +4023+04951 Asia/Baku
BB +1306-05937 America/Barbados
BD +2343+09025 Asia/Dhaka
@@ -84,58 +84,58 @@ BM +3217-06446 Atlantic/Bermuda
BN +0456+11455 Asia/Brunei
BO -1630-06809 America/La_Paz
BR -0351-03225 America/Noronha Atlantic islands
-BR -0127-04829 America/Belem Amapá, E Pará
-BR -0343-03830 America/Fortaleza NE Brazil (MA, PI, CE, RN, PB)
+BR -0127-04829 America/Belem Pará (east); Amapá
+BR -0343-03830 America/Fortaleza Brazil (northeast: MA, PI, CE, RN, PB)
BR -0803-03454 America/Recife Pernambuco
BR -0712-04812 America/Araguaina Tocantins
BR -0940-03543 America/Maceio Alagoas, Sergipe
BR -1259-03831 America/Bahia Bahia
-BR -2332-04637 America/Sao_Paulo S & SE Brazil (GO, DF, MG, ES, RJ, SP, PR, SC, RS)
+BR -2332-04637 America/Sao_Paulo Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)
BR -2027-05437 America/Campo_Grande Mato Grosso do Sul
BR -1535-05605 America/Cuiaba Mato Grosso
-BR -0226-05452 America/Santarem W Pará
+BR -0226-05452 America/Santarem Pará (west)
BR -0846-06354 America/Porto_Velho Rondônia
BR +0249-06040 America/Boa_Vista Roraima
-BR -0308-06001 America/Manaus E Amazonas
-BR -0640-06952 America/Eirunepe W Amazonas
+BR -0308-06001 America/Manaus Amazonas (east)
+BR -0640-06952 America/Eirunepe Amazonas (west)
BR -0958-06748 America/Rio_Branco Acre
BS +2505-07721 America/Nassau
BT +2728+08939 Asia/Thimphu
BY +5354+02734 Europe/Minsk
BZ +1730-08812 America/Belize
-CA +4734-05243 America/St_Johns Newfoundland Time, including SE Labrador
-CA +4439-06336 America/Halifax Atlantic Time - Nova Scotia (peninsula), PEI
-CA +4612-05957 America/Glace_Bay Atlantic Time - Nova Scotia (Cape Breton)
-CA +4606-06447 America/Moncton Atlantic Time - New Brunswick
-CA +5320-06025 America/Goose_Bay Atlantic Time - Labrador - most locations
-CA +5125-05707 America/Blanc-Sablon Atlantic Standard Time - Quebec - Lower North Shore
-CA +4339-07923 America/Toronto Eastern Time - Ontario & Quebec - most locations
-CA +4901-08816 America/Nipigon Eastern Time - Ontario & Quebec - places that did not observe DST 1967-1973
-CA +4823-08915 America/Thunder_Bay Eastern Time - Thunder Bay, Ontario
-CA +6344-06828 America/Iqaluit Eastern Time - east Nunavut - most locations
-CA +6608-06544 America/Pangnirtung Eastern Time - Pangnirtung, Nunavut
-CA +744144-0944945 America/Resolute Central Time - Resolute, Nunavut
-CA +484531-0913718 America/Atikokan Eastern Standard Time - Atikokan, Ontario and Southampton I, Nunavut
-CA +624900-0920459 America/Rankin_Inlet Central Time - central Nunavut
-CA +4953-09709 America/Winnipeg Central Time - Manitoba & west Ontario
-CA +4843-09434 America/Rainy_River Central Time - Rainy River & Fort Frances, Ontario
-CA +5024-10439 America/Regina Central Standard Time - Saskatchewan - most locations
-CA +5017-10750 America/Swift_Current Central Standard Time - Saskatchewan - midwest
-CA +5333-11328 America/Edmonton Mountain Time - Alberta, east British Columbia & west Saskatchewan
-CA +690650-1050310 America/Cambridge_Bay Mountain Time - west Nunavut
-CA +6227-11421 America/Yellowknife Mountain Time - central Northwest Territories
-CA +682059-1334300 America/Inuvik Mountain Time - west Northwest Territories
-CA +4906-11631 America/Creston Mountain Standard Time - Creston, British Columbia
-CA +5946-12014 America/Dawson_Creek Mountain Standard Time - Dawson Creek & Fort Saint John, British Columbia
-CA +5848-12242 America/Fort_Nelson Mountain Standard Time - Fort Nelson, British Columbia
-CA +4916-12307 America/Vancouver Pacific Time - west British Columbia
-CA +6043-13503 America/Whitehorse Pacific Time - south Yukon
-CA +6404-13925 America/Dawson Pacific Time - north Yukon
+CA +4734-05243 America/St_Johns Newfoundland; Labrador (southeast)
+CA +4439-06336 America/Halifax Atlantic - NS (most areas); PE
+CA +4612-05957 America/Glace_Bay Atlantic - NS (Cape Breton)
+CA +4606-06447 America/Moncton Atlantic - New Brunswick
+CA +5320-06025 America/Goose_Bay Atlantic - Labrador (most areas)
+CA +5125-05707 America/Blanc-Sablon AST - QC (Lower North Shore)
+CA +4339-07923 America/Toronto Eastern - ON, QC (most areas)
+CA +4901-08816 America/Nipigon Eastern - ON, QC (no DST 1967-73)
+CA +4823-08915 America/Thunder_Bay Eastern - ON (Thunder Bay)
+CA +6344-06828 America/Iqaluit Eastern - NU (most east areas)
+CA +6608-06544 America/Pangnirtung Eastern - NU (Pangnirtung)
+CA +484531-0913718 America/Atikokan EST - ON (Atikokan); NU (Coral H)
+CA +4953-09709 America/Winnipeg Central - ON (west); Manitoba
+CA +4843-09434 America/Rainy_River Central - ON (Rainy R, Ft Frances)
+CA +744144-0944945 America/Resolute Central - NU (Resolute)
+CA +624900-0920459 America/Rankin_Inlet Central - NU (central)
+CA +5024-10439 America/Regina CST - SK (most areas)
+CA +5017-10750 America/Swift_Current CST - SK (midwest)
+CA +5333-11328 America/Edmonton Mountain - AB; BC (E); SK (W)
+CA +690650-1050310 America/Cambridge_Bay Mountain - NU (west)
+CA +6227-11421 America/Yellowknife Mountain - NT (central)
+CA +682059-1334300 America/Inuvik Mountain - NT (west)
+CA +4906-11631 America/Creston MST - BC (Creston)
+CA +5946-12014 America/Dawson_Creek MST - BC (Dawson Cr, Ft St John)
+CA +5848-12242 America/Fort_Nelson MST - BC (Ft Nelson)
+CA +4916-12307 America/Vancouver Pacific - BC (most areas)
+CA +6043-13503 America/Whitehorse Pacific - Yukon (south)
+CA +6404-13925 America/Dawson Pacific - Yukon (north)
CC -1210+09655 Indian/Cocos
CH,DE,LI +4723+00832 Europe/Zurich Swiss time
CI,BF,GM,GN,ML,MR,SH,SL,SN,ST,TG +0519-00402 Africa/Abidjan
CK -2114-15946 Pacific/Rarotonga
-CL -3327-07040 America/Santiago most locations
+CL -3327-07040 America/Santiago Chile (most areas)
CL -2709-10926 Pacific/Easter Easter Island
CN +3114+12128 Asia/Shanghai Beijing Time
CN +4348+08735 Asia/Urumqi Xinjiang Time
@@ -145,25 +145,26 @@ CU +2308-08222 America/Havana
CV +1455-02331 Atlantic/Cape_Verde
CW,AW,BQ,SX +1211-06900 America/Curacao
CX -1025+10543 Indian/Christmas
-CY +3510+03322 Asia/Nicosia
+CY +3510+03322 Asia/Nicosia Cyprus (most areas)
+CY +3507+03357 Asia/Famagusta Northern Cyprus
CZ,SK +5005+01426 Europe/Prague
-DE +5230+01322 Europe/Berlin Berlin time
+DE +5230+01322 Europe/Berlin Germany (most areas)
DK +5540+01235 Europe/Copenhagen
DO +1828-06954 America/Santo_Domingo
DZ +3647+00303 Africa/Algiers
-EC -0210-07950 America/Guayaquil mainland
+EC -0210-07950 America/Guayaquil Ecuador (mainland)
EC -0054-08936 Pacific/Galapagos Galápagos Islands
EE +5925+02445 Europe/Tallinn
EG +3003+03115 Africa/Cairo
EH +2709-01312 Africa/El_Aaiun
-ES +4024-00341 Europe/Madrid mainland
-ES +3553-00519 Africa/Ceuta Ceuta & Melilla
+ES +4024-00341 Europe/Madrid Spain (mainland)
+ES +3553-00519 Africa/Ceuta Ceuta, Melilla
ES +2806-01524 Atlantic/Canary Canary Islands
FI,AX +6010+02458 Europe/Helsinki
FJ -1808+17825 Pacific/Fiji
FK -5142-05751 Atlantic/Stanley
-FM +0725+15147 Pacific/Chuuk Chuuk (Truk) and Yap
-FM +0658+15813 Pacific/Pohnpei Pohnpei (Ponape)
+FM +0725+15147 Pacific/Chuuk Chuuk/Truk, Yap
+FM +0658+15813 Pacific/Pohnpei Pohnpei/Ponape
FM +0519+16259 Pacific/Kosrae Kosrae
FO +6201-00646 Atlantic/Faroe
FR +4852+00220 Europe/Paris
@@ -172,10 +173,10 @@ GE +4143+04449 Asia/Tbilisi
GF +0456-05220 America/Cayenne
GH +0533-00013 Africa/Accra
GI +3608-00521 Europe/Gibraltar
-GL +6411-05144 America/Godthab most locations
-GL +7646-01840 America/Danmarkshavn east coast, north of Scoresbysund
-GL +7029-02158 America/Scoresbysund Scoresbysund / Ittoqqortoormiit
-GL +7634-06847 America/Thule Thule / Pituffik
+GL +6411-05144 America/Godthab Greenland (most areas)
+GL +7646-01840 America/Danmarkshavn National Park (east coast)
+GL +7029-02158 America/Scoresbysund Scoresbysund/Ittoqqortoormiit
+GL +7634-06847 America/Thule Thule/Pituffik
GR +3758+02343 Europe/Athens
GS -5416-03632 Atlantic/South_Georgia
GT +1438-09031 America/Guatemala
@@ -186,10 +187,10 @@ HK +2217+11409 Asia/Hong_Kong
HN +1406-08713 America/Tegucigalpa
HT +1832-07220 America/Port-au-Prince
HU +4730+01905 Europe/Budapest
-ID -0610+10648 Asia/Jakarta Java & Sumatra
-ID -0002+10920 Asia/Pontianak west & central Borneo
-ID -0507+11924 Asia/Makassar east & south Borneo, Sulawesi (Celebes), Bali, Nusa Tengarra, west Timor
-ID -0232+14042 Asia/Jayapura west New Guinea (Irian Jaya) & Malukus (Moluccas)
+ID -0610+10648 Asia/Jakarta Java, Sumatra
+ID -0002+10920 Asia/Pontianak Borneo (west, central)
+ID -0507+11924 Asia/Makassar Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)
+ID -0232+14042 Asia/Jayapura New Guinea (West Papua / Irian Jaya); Malukus/Moluccas
IE +5320-00615 Europe/Dublin
IL +314650+0351326 Asia/Jerusalem
IN +2232+08822 Asia/Kolkata
@@ -208,11 +209,10 @@ KI -0308-17105 Pacific/Enderbury Phoenix Islands
KI +0152-15720 Pacific/Kiritimati Line Islands
KP +3901+12545 Asia/Pyongyang
KR +3733+12658 Asia/Seoul
-KY +1918-08123 America/Cayman
-KZ +4315+07657 Asia/Almaty most locations
-KZ +4448+06528 Asia/Qyzylorda Qyzylorda (Kyzylorda, Kzyl-Orda)
-KZ +5017+05710 Asia/Aqtobe Aqtobe (Aktobe)
-KZ +4431+05016 Asia/Aqtau Atyrau (Atirau, Gur'yev), Mangghystau (Mankistau)
+KZ +4315+07657 Asia/Almaty Kazakhstan (most areas)
+KZ +4448+06528 Asia/Qyzylorda Qyzylorda/Kyzylorda/Kzyl-Orda
+KZ +5017+05710 Asia/Aqtobe Aqtobe/Aktobe
+KZ +4431+05016 Asia/Aqtau Atyrau/Atirau/Gur'yev, Mangghystau/Mankistau
KZ +5113+05121 Asia/Oral West Kazakhstan
LB +3353+03530 Asia/Beirut
LK +0656+07951 Asia/Colombo
@@ -224,10 +224,10 @@ LY +3254+01311 Africa/Tripoli
MA +3339-00735 Africa/Casablanca
MC +4342+00723 Europe/Monaco
MD +4700+02850 Europe/Chisinau
-MH +0709+17112 Pacific/Majuro most locations
+MH +0709+17112 Pacific/Majuro Marshall Islands (most areas)
MH +0905+16720 Pacific/Kwajalein Kwajalein
-MM +1647+09610 Asia/Rangoon
-MN +4755+10653 Asia/Ulaanbaatar most locations
+MM +1647+09610 Asia/Yangon
+MN +4755+10653 Asia/Ulaanbaatar Mongolia (most areas)
MN +4801+09139 Asia/Hovd Bayan-Ölgii, Govi-Altai, Hovd, Uvs, Zavkhan
MN +4804+11430 Asia/Choibalsan Dornod, Sükhbaatar
MO +2214+11335 Asia/Macau
@@ -235,25 +235,24 @@ MQ +1436-06105 America/Martinique
MT +3554+01431 Europe/Malta
MU -2010+05730 Indian/Mauritius
MV +0410+07330 Indian/Maldives
-MX +1924-09909 America/Mexico_City Central Time - most locations
+MX +1924-09909 America/Mexico_City Central Time
MX +2105-08646 America/Cancun Eastern Standard Time - Quintana Roo
MX +2058-08937 America/Merida Central Time - Campeche, Yucatán
-MX +2540-10019 America/Monterrey Mexican Central Time - Coahuila, Durango, Nuevo León, Tamaulipas away from US border
-MX +2550-09730 America/Matamoros US Central Time - Coahuila, Durango, Nuevo León, Tamaulipas near US border
-MX +2313-10625 America/Mazatlan Mountain Time - S Baja, Nayarit, Sinaloa
-MX +2838-10605 America/Chihuahua Mexican Mountain Time - Chihuahua away from US border
-MX +2934-10425 America/Ojinaga US Mountain Time - Chihuahua near US border
+MX +2540-10019 America/Monterrey Central Time - Durango; Coahuila, Nuevo León, Tamaulipas (most areas)
+MX +2550-09730 America/Matamoros Central Time US - Coahuila, Nuevo León, Tamaulipas (US border)
+MX +2313-10625 America/Mazatlan Mountain Time - Baja California Sur, Nayarit, Sinaloa
+MX +2838-10605 America/Chihuahua Mountain Time - Chihuahua (most areas)
+MX +2934-10425 America/Ojinaga Mountain Time US - Chihuahua (US border)
MX +2904-11058 America/Hermosillo Mountain Standard Time - Sonora
-MX +3232-11701 America/Tijuana US Pacific Time - Baja California near US border
-MX +3018-11452 America/Santa_Isabel Mexican Pacific Time - Baja California away from US border
-MX +2048-10515 America/Bahia_Banderas Mexican Central Time - Bahía de Banderas
-MY +0310+10142 Asia/Kuala_Lumpur peninsular Malaysia
-MY +0133+11020 Asia/Kuching Sabah & Sarawak
-MZ,BI,BW,CD,MW,RW,ZM,ZW -2558+03235 Africa/Maputo Central Africa Time (UTC+2)
+MX +3232-11701 America/Tijuana Pacific Time US - Baja California
+MX +2048-10515 America/Bahia_Banderas Central Time - Bahía de Banderas
+MY +0310+10142 Asia/Kuala_Lumpur Malaysia (peninsula)
+MY +0133+11020 Asia/Kuching Sabah, Sarawak
+MZ,BI,BW,CD,MW,RW,ZM,ZW -2558+03235 Africa/Maputo Central Africa Time
NA -2234+01706 Africa/Windhoek
NC -2216+16627 Pacific/Noumea
NF -2903+16758 Pacific/Norfolk
-NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE +0627+00324 Africa/Lagos West Africa Time (UTC+1)
+NG,AO,BJ,CD,CF,CG,CM,GA,GQ,NE +0627+00324 Africa/Lagos West Africa Time
NI +1209-08617 America/Managua
NL +5222+00454 Europe/Amsterdam
NO,SJ +5955+01045 Europe/Oslo
@@ -262,12 +261,12 @@ NR -0031+16655 Pacific/Nauru
NU -1901-16955 Pacific/Niue
NZ,AQ -3652+17446 Pacific/Auckland New Zealand time
NZ -4357-17633 Pacific/Chatham Chatham Islands
-PA +0858-07932 America/Panama
+PA,KY +0858-07932 America/Panama
PE -1203-07703 America/Lima
PF -1732-14934 Pacific/Tahiti Society Islands
PF -0900-13930 Pacific/Marquesas Marquesas Islands
PF -2308-13457 Pacific/Gambier Gambier Islands
-PG -0930+14710 Pacific/Port_Moresby most locations
+PG -0930+14710 Pacific/Port_Moresby Papua New Guinea (most areas)
PG -0613+15534 Pacific/Bougainville Bougainville
PH +1435+12100 Asia/Manila
PK +2452+06703 Asia/Karachi
@@ -277,36 +276,41 @@ PN -2504-13005 Pacific/Pitcairn
PR +182806-0660622 America/Puerto_Rico
PS +3130+03428 Asia/Gaza Gaza Strip
PS +313200+0350542 Asia/Hebron West Bank
-PT +3843-00908 Europe/Lisbon mainland
+PT +3843-00908 Europe/Lisbon Portugal (mainland)
PT +3238-01654 Atlantic/Madeira Madeira Islands
PT +3744-02540 Atlantic/Azores Azores
PW +0720+13429 Pacific/Palau
PY -2516-05740 America/Asuncion
QA,BH +2517+05132 Asia/Qatar
-RE,TF -2052+05528 Indian/Reunion Réunion, Crozet Is, Scattered Is
+RE,TF -2052+05528 Indian/Reunion Réunion, Crozet, Scattered Islands
RO +4426+02606 Europe/Bucharest
RS,BA,HR,ME,MK,SI +4450+02030 Europe/Belgrade
-RU +5443+02030 Europe/Kaliningrad Moscow-01 - Kaliningrad
-RU +554521+0373704 Europe/Moscow Moscow+00 - west Russia
-RU +4457+03406 Europe/Simferopol Moscow+00 - Crimea
-RU +4844+04425 Europe/Volgograd Moscow+00 - Caspian Sea
-RU +5312+05009 Europe/Samara Moscow+00 (Moscow+01 after 2014-10-26) - Samara, Udmurtia
-RU +5651+06036 Asia/Yekaterinburg Moscow+02 - Urals
-RU +5500+07324 Asia/Omsk Moscow+03 - west Siberia
-RU +5502+08255 Asia/Novosibirsk Moscow+03 - Novosibirsk
-RU +5345+08707 Asia/Novokuznetsk Moscow+03 (Moscow+04 after 2014-10-26) - Kemerovo
-RU +5601+09250 Asia/Krasnoyarsk Moscow+04 - Yenisei River
-RU +5216+10420 Asia/Irkutsk Moscow+05 - Lake Baikal
-RU +5203+11328 Asia/Chita Moscow+06 (Moscow+05 after 2014-10-26) - Zabaykalsky
-RU +6200+12940 Asia/Yakutsk Moscow+06 - Lena River
-RU +623923+1353314 Asia/Khandyga Moscow+06 - Tomponsky, Ust-Maysky
-RU +4310+13156 Asia/Vladivostok Moscow+07 - Amur River
-RU +4658+14242 Asia/Sakhalin Moscow+07 - Sakhalin Island
-RU +643337+1431336 Asia/Ust-Nera Moscow+07 - Oymyakonsky
-RU +5934+15048 Asia/Magadan Moscow+08 (Moscow+07 after 2014-10-26) - Magadan
-RU +6728+15343 Asia/Srednekolymsk Moscow+08 - E Sakha, N Kuril Is
-RU +5301+15839 Asia/Kamchatka Moscow+08 (Moscow+09 after 2014-10-26) - Kamchatka
-RU +6445+17729 Asia/Anadyr Moscow+08 (Moscow+09 after 2014-10-26) - Bering Sea
+RU +5443+02030 Europe/Kaliningrad MSK-01 - Kaliningrad
+RU +554521+0373704 Europe/Moscow MSK+00 - Moscow area
+RU +4457+03406 Europe/Simferopol MSK+00 - Crimea
+RU +4844+04425 Europe/Volgograd MSK+00 - Volgograd, Saratov
+RU +5836+04939 Europe/Kirov MSK+00 - Kirov
+RU +4621+04803 Europe/Astrakhan MSK+01 - Astrakhan
+RU +5312+05009 Europe/Samara MSK+01 - Samara, Udmurtia
+RU +5420+04824 Europe/Ulyanovsk MSK+01 - Ulyanovsk
+RU +5651+06036 Asia/Yekaterinburg MSK+02 - Urals
+RU +5500+07324 Asia/Omsk MSK+03 - Omsk
+RU +5502+08255 Asia/Novosibirsk MSK+03 - Novosibirsk
+RU +5322+08345 Asia/Barnaul MSK+04 - Altai
+RU +5630+08458 Asia/Tomsk MSK+04 - Tomsk
+RU +5345+08707 Asia/Novokuznetsk MSK+04 - Kemerovo
+RU +5601+09250 Asia/Krasnoyarsk MSK+04 - Krasnoyarsk area
+RU +5216+10420 Asia/Irkutsk MSK+05 - Irkutsk, Buryatia
+RU +5203+11328 Asia/Chita MSK+06 - Zabaykalsky
+RU +6200+12940 Asia/Yakutsk MSK+06 - Lena River
+RU +623923+1353314 Asia/Khandyga MSK+06 - Tomponsky, Ust-Maysky
+RU +4310+13156 Asia/Vladivostok MSK+07 - Amur River
+RU +643337+1431336 Asia/Ust-Nera MSK+07 - Oymyakonsky
+RU +5934+15048 Asia/Magadan MSK+08 - Magadan
+RU +4658+14242 Asia/Sakhalin MSK+08 - Sakhalin Island
+RU +6728+15343 Asia/Srednekolymsk MSK+08 - Sakha (E); North Kuril Is
+RU +5301+15839 Asia/Kamchatka MSK+09 - Kamchatka
+RU +6445+17729 Asia/Anadyr MSK+09 - Bering Sea
SA,KW,YE +2438+04643 Asia/Riyadh
SB -0932+16012 Pacific/Guadalcanal
SC -0440+05528 Indian/Mahe
@@ -318,8 +322,8 @@ SV +1342-08912 America/El_Salvador
SY +3330+03618 Asia/Damascus
TC +2128-07108 America/Grand_Turk
TD +1207+01503 Africa/Ndjamena
-TF -492110+0701303 Indian/Kerguelen Kerguelen, St Paul I, Amsterdam I
-TH,KH,LA,VN +1345+10031 Asia/Bangkok most of Indochina
+TF -492110+0701303 Indian/Kerguelen Kerguelen, St Paul Island, Amsterdam Island
+TH,KH,LA,VN +1345+10031 Asia/Bangkok Indochina (most areas)
TJ +3835+06848 Asia/Dushanbe
TK -0922-17114 Pacific/Fakaofo
TL -0833+12535 Asia/Dili
@@ -330,44 +334,44 @@ TR +4101+02858 Europe/Istanbul
TT,AG,AI,BL,DM,GD,GP,KN,LC,MF,MS,VC,VG,VI +1039-06131 America/Port_of_Spain
TV -0831+17913 Pacific/Funafuti
TW +2503+12130 Asia/Taipei
-UA +5026+03031 Europe/Kiev most locations
+UA +5026+03031 Europe/Kiev Ukraine (most areas)
UA +4837+02218 Europe/Uzhgorod Ruthenia
-UA +4750+03510 Europe/Zaporozhye Zaporozh'ye, E Lugansk / Zaporizhia, E Luhansk
+UA +4750+03510 Europe/Zaporozhye Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
UM +1917+16637 Pacific/Wake Wake Island
-US +404251-0740023 America/New_York Eastern Time
-US +421953-0830245 America/Detroit Eastern Time - Michigan - most locations
-US +381515-0854534 America/Kentucky/Louisville Eastern Time - Kentucky - Louisville area
-US +364947-0845057 America/Kentucky/Monticello Eastern Time - Kentucky - Wayne County
-US +394606-0860929 America/Indiana/Indianapolis Eastern Time - Indiana - most locations
-US +384038-0873143 America/Indiana/Vincennes Eastern Time - Indiana - Daviess, Dubois, Knox & Martin Counties
-US +410305-0863611 America/Indiana/Winamac Eastern Time - Indiana - Pulaski County
-US +382232-0862041 America/Indiana/Marengo Eastern Time - Indiana - Crawford County
-US +382931-0871643 America/Indiana/Petersburg Eastern Time - Indiana - Pike County
-US +384452-0850402 America/Indiana/Vevay Eastern Time - Indiana - Switzerland County
-US +415100-0873900 America/Chicago Central Time
-US +375711-0864541 America/Indiana/Tell_City Central Time - Indiana - Perry County
-US +411745-0863730 America/Indiana/Knox Central Time - Indiana - Starke County
-US +450628-0873651 America/Menominee Central Time - Michigan - Dickinson, Gogebic, Iron & Menominee Counties
-US +470659-1011757 America/North_Dakota/Center Central Time - North Dakota - Oliver County
-US +465042-1012439 America/North_Dakota/New_Salem Central Time - North Dakota - Morton County (except Mandan area)
-US +471551-1014640 America/North_Dakota/Beulah Central Time - North Dakota - Mercer County
-US +394421-1045903 America/Denver Mountain Time
-US +433649-1161209 America/Boise Mountain Time - south Idaho & east Oregon
-US +332654-1120424 America/Phoenix Mountain Standard Time - Arizona (except Navajo)
-US +340308-1181434 America/Los_Angeles Pacific Time
-US +550737-1313435 America/Metlakatla Pacific Standard Time - Annette Island, Alaska
-US +611305-1495401 America/Anchorage Alaska Time
-US +581807-1342511 America/Juneau Alaska Time - Alaska panhandle
-US +571035-1351807 America/Sitka Alaska Time - southeast Alaska panhandle
-US +593249-1394338 America/Yakutat Alaska Time - Alaska panhandle neck
-US +643004-1652423 America/Nome Alaska Time - west Alaska
+US +404251-0740023 America/New_York Eastern (most areas)
+US +421953-0830245 America/Detroit Eastern - MI (most areas)
+US +381515-0854534 America/Kentucky/Louisville Eastern - KY (Louisville area)
+US +364947-0845057 America/Kentucky/Monticello Eastern - KY (Wayne)
+US +394606-0860929 America/Indiana/Indianapolis Eastern - IN (most areas)
+US +384038-0873143 America/Indiana/Vincennes Eastern - IN (Da, Du, K, Mn)
+US +410305-0863611 America/Indiana/Winamac Eastern - IN (Pulaski)
+US +382232-0862041 America/Indiana/Marengo Eastern - IN (Crawford)
+US +382931-0871643 America/Indiana/Petersburg Eastern - IN (Pike)
+US +384452-0850402 America/Indiana/Vevay Eastern - IN (Switzerland)
+US +415100-0873900 America/Chicago Central (most areas)
+US +375711-0864541 America/Indiana/Tell_City Central - IN (Perry)
+US +411745-0863730 America/Indiana/Knox Central - IN (Starke)
+US +450628-0873651 America/Menominee Central - MI (Wisconsin border)
+US +470659-1011757 America/North_Dakota/Center Central - ND (Oliver)
+US +465042-1012439 America/North_Dakota/New_Salem Central - ND (Morton rural)
+US +471551-1014640 America/North_Dakota/Beulah Central - ND (Mercer)
+US +394421-1045903 America/Denver Mountain (most areas)
+US +433649-1161209 America/Boise Mountain - ID (south); OR (east)
+US +332654-1120424 America/Phoenix MST - Arizona (except Navajo)
+US +340308-1181434 America/Los_Angeles Pacific
+US +611305-1495401 America/Anchorage Alaska (most areas)
+US +581807-1342511 America/Juneau Alaska - Juneau area
+US +571035-1351807 America/Sitka Alaska - Sitka area
+US +550737-1313435 America/Metlakatla Alaska - Annette Island
+US +593249-1394338 America/Yakutat Alaska - Yakutat
+US +643004-1652423 America/Nome Alaska (west)
US +515248-1763929 America/Adak Aleutian Islands
-US,UM +211825-1575130 Pacific/Honolulu Hawaii time
+US,UM +211825-1575130 Pacific/Honolulu Hawaii
UY -3453-05611 America/Montevideo
-UZ +3940+06648 Asia/Samarkand west Uzbekistan
-UZ +4120+06918 Asia/Tashkent east Uzbekistan
+UZ +3940+06648 Asia/Samarkand Uzbekistan (west)
+UZ +4120+06918 Asia/Tashkent Uzbekistan (east)
VE +1030-06656 America/Caracas
-VN +1045+10640 Asia/Ho_Chi_Minh south Vietnam
+VN +1045+10640 Asia/Ho_Chi_Minh Vietnam (south)
VU -1740+16825 Pacific/Efate
WF -1318-17610 Pacific/Wallis
WS -1350-17144 Pacific/Apia
diff --git a/contrib/tzdata/zoneinfo2tdf.pl b/contrib/tzdata/zoneinfo2tdf.pl
new file mode 100755
index 0000000..e05ec01
--- /dev/null
+++ b/contrib/tzdata/zoneinfo2tdf.pl
@@ -0,0 +1,52 @@
+#! /usr/bin/perl -w
+
+# Courtesy Ken Pizzini.
+
+use strict;
+
+#This file released to the public domain.
+
+# Note: error checking is poor; trust the output only if the input
+# has been checked by zic.
+
+my $contZone = '';
+while (<>) {
+ my $origline = $_;
+ my @fields = ();
+ while (s/^\s*((?:"[^"]*"|[^\s#])+)//) {
+ push @fields, $1;
+ }
+ next unless @fields;
+
+ my $type = lc($fields[0]);
+ if ($contZone) {
+ @fields >= 3 or warn "bad continuation line";
+ unshift @fields, '+', $contZone;
+ $type = 'zone';
+ }
+
+ $contZone = '';
+ if ($type eq 'zone') {
+ # Zone NAME GMTOFF RULES/SAVE FORMAT [UNTIL]
+ my $nfields = @fields;
+ $nfields >= 5 or warn "bad zone line";
+ if ($nfields > 6) {
+ #this splice is optional, depending on one's preference
+ #(one big date-time field, or componentized date and time):
+ splice(@fields, 5, $nfields-5, "@fields[5..$nfields-1]");
+ }
+ $contZone = $fields[1] if @fields > 5;
+ } elsif ($type eq 'rule') {
+ # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S
+ @fields == 10 or warn "bad rule line";
+ } elsif ($type eq 'link') {
+ # Link TARGET LINK-NAME
+ @fields == 3 or warn "bad link line";
+ } elsif ($type eq 'leap') {
+ # Leap YEAR MONTH DAY HH:MM:SS CORR R/S
+ @fields == 7 or warn "bad leap line";
+ } else {
+ warn "Fubar at input line $.: $origline";
+ }
+ print join("\t", @fields), "\n";
+}
diff --git a/lib/libc/net/linkaddr.c b/lib/libc/net/linkaddr.c
index 5be6e74..fec220a 100644
--- a/lib/libc/net/linkaddr.c
+++ b/lib/libc/net/linkaddr.c
@@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/socket.h>
+#include <net/if.h>
#include <net/if_dl.h>
#include <string.h>
@@ -125,31 +126,46 @@ link_ntoa(sdl)
const struct sockaddr_dl *sdl;
{
static char obuf[64];
- char *out = obuf;
- int i;
- u_char *in = (u_char *)LLADDR(sdl);
- u_char *inlim = in + sdl->sdl_alen;
- int firsttime = 1;
+ _Static_assert(sizeof(obuf) >= IFNAMSIZ + 20, "obuf is too small");
+ char *out;
+ const u_char *in, *inlim;
+ int namelen, i, rem;
- if (sdl->sdl_nlen) {
- bcopy(sdl->sdl_data, obuf, sdl->sdl_nlen);
- out += sdl->sdl_nlen;
- if (sdl->sdl_alen)
+ namelen = (sdl->sdl_nlen <= IFNAMSIZ) ? sdl->sdl_nlen : IFNAMSIZ;
+
+ out = obuf;
+ rem = sizeof(obuf);
+ if (namelen > 0) {
+ bcopy(sdl->sdl_data, out, namelen);
+ out += namelen;
+ rem -= namelen;
+ if (sdl->sdl_alen > 0) {
*out++ = ':';
+ rem--;
+ }
}
- while (in < inlim) {
- if (firsttime)
- firsttime = 0;
- else
+
+ in = (const u_char *)sdl->sdl_data + sdl->sdl_nlen;
+ inlim = in + sdl->sdl_alen;
+
+ while (in < inlim && rem > 1) {
+ if (in != (const u_char *)sdl->sdl_data + sdl->sdl_nlen) {
*out++ = '.';
+ rem--;
+ }
i = *in++;
if (i > 0xf) {
- out[1] = hexlist[i & 0xf];
- i >>= 4;
- out[0] = hexlist[i];
- out += 2;
- } else
+ if (rem < 3)
+ break;
+ *out++ = hexlist[i >> 4];
+ *out++ = hexlist[i & 0xf];
+ rem -= 2;
+ } else {
+ if (rem < 2)
+ break;
*out++ = hexlist[i];
+ rem--;
+ }
}
*out = 0;
return (obuf);
diff --git a/lib/libvmmapi/vmmapi.c b/lib/libvmmapi/vmmapi.c
index fb8eb78..33a3b44 100644
--- a/lib/libvmmapi/vmmapi.c
+++ b/lib/libvmmapi/vmmapi.c
@@ -427,13 +427,18 @@ vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len)
{
if (ctx->lowmem > 0) {
- if (gaddr < ctx->lowmem && gaddr + len <= ctx->lowmem)
+ if (gaddr < ctx->lowmem && len <= ctx->lowmem &&
+ gaddr + len <= ctx->lowmem)
return (ctx->baseaddr + gaddr);
}
if (ctx->highmem > 0) {
- if (gaddr >= 4*GB && gaddr + len <= 4*GB + ctx->highmem)
- return (ctx->baseaddr + gaddr);
+ if (gaddr >= 4*GB) {
+ if (gaddr < 4*GB + ctx->highmem &&
+ len <= ctx->highmem &&
+ gaddr + len <= 4*GB + ctx->highmem)
+ return (ctx->baseaddr + gaddr);
+ }
}
return (NULL);
diff --git a/sys/conf/newvers.sh b/sys/conf/newvers.sh
index 3dffb6b..1781f13 100644
--- a/sys/conf/newvers.sh
+++ b/sys/conf/newvers.sh
@@ -32,7 +32,7 @@
TYPE="FreeBSD"
REVISION="10.3"
-BRANCH="RELEASE-p12"
+BRANCH="RELEASE-p15"
if [ "X${BRANCH_OVERRIDE}" != "X" ]; then
BRANCH=${BRANCH_OVERRIDE}
fi
diff --git a/usr.sbin/ntp/config.h b/usr.sbin/ntp/config.h
index d11819c..8e153bc 100644
--- a/usr.sbin/ntp/config.h
+++ b/usr.sbin/ntp/config.h
@@ -1449,7 +1449,7 @@
#define PACKAGE_NAME "ntp"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "ntp 4.2.8p8"
+#define PACKAGE_STRING "ntp 4.2.8p9"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ntp"
@@ -1458,7 +1458,7 @@
#define PACKAGE_URL "http://www.ntp.org./"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "4.2.8p8"
+#define PACKAGE_VERSION "4.2.8p9"
/* data dir */
#define PERLLIBDIR "/usr/local/share/ntp/lib"
@@ -1639,7 +1639,7 @@ typedef unsigned int uintptr_t;
/* #undef USE_UDP_SIGPOLL */
/* Version number of package */
-#define VERSION "4.2.8p8"
+#define VERSION "4.2.8p9"
/* vsnprintf expands "%m" to strerror(errno) */
/* #undef VSNPRINTF_PERCENT_M */
@@ -1816,5 +1816,5 @@ typedef union mpinfou {
/*
* FreeBSD specific: Explicitly specify date/time for reproducible build.
*/
-#define MKREPRO_DATE "Jun 03 2016"
-#define MKREPRO_TIME "06:34:37"
+#define MKREPRO_DATE "Nov 22 2016"
+#define MKREPRO_TIME "06:54:45"
diff --git a/usr.sbin/ntp/doc/ntp-keygen.8 b/usr.sbin/ntp/doc/ntp-keygen.8
index bb7972a..22b3e9c 100644
--- a/usr.sbin/ntp/doc/ntp-keygen.8
+++ b/usr.sbin/ntp/doc/ntp-keygen.8
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYGEN 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:39:43 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:48 AM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntp.conf.5 b/usr.sbin/ntp/doc/ntp.conf.5
index 42af4a5..8a79f67 100644
--- a/usr.sbin/ntp/doc/ntp.conf.5
+++ b/usr.sbin/ntp/doc/ntp.conf.5
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:16 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:03 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1997,6 +1997,25 @@ At the same time, the manycast
scheme starts all over from the beginning and
the expanding ring shrinks to the minimum and increments
from there while collecting all servers in scope.
+.Ss Broadcast Options
+.Bl -tag -width indent
+.It Xo Ic tos
+.Oo
+.Cm bcpollbstep Ar gate
+.Oc
+.Xc
+This command provides a way to delay,
+by the specified number of broadcast poll intervals,
+believing backward time steps from a broadcast server.
+Broadcast time networks are expected to be trusted.
+In the event a broadcast server's time is stepped backwards,
+there is clear benefit to having the clients notice this change
+as soon as possible.
+Attacks such as replay attacks can happen, however,
+and even though there are a number of protections built in to
+broadcast mode, attempts to perform a replay attack are possible.
+This value defaults to 0, but can be changed
+to any number of poll intervals between 0 and 4.
.Ss Manycast Options
.Bl -tag -width indent
.It Xo Ic tos
diff --git a/usr.sbin/ntp/doc/ntp.keys.5 b/usr.sbin/ntp/doc/ntp.keys.5
index 06cf644..4dba058 100644
--- a/usr.sbin/ntp/doc/ntp.keys.5
+++ b/usr.sbin/ntp/doc/ntp.keys.5
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:20 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:06 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntpd.8 b/usr.sbin/ntp/doc/ntpd.8
index bb51eb3..c250349 100644
--- a/usr.sbin/ntp/doc/ntpd.8
+++ b/usr.sbin/ntp/doc/ntpd.8
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPD 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:22 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:08 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntpdc.8 b/usr.sbin/ntp/doc/ntpdc.8
index 39de44d..29b7929 100644
--- a/usr.sbin/ntp/doc/ntpdc.8
+++ b/usr.sbin/ntp/doc/ntpdc.8
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPDC 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:36:58 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:02:35 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntpq.8 b/usr.sbin/ntp/doc/ntpq.8
index 60e66de..3d18ae7 100644
--- a/usr.sbin/ntp/doc/ntpq.8
+++ b/usr.sbin/ntp/doc/ntpq.8
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt NTPQ 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:37:48 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 08:03:08 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/sntp.8 b/usr.sbin/ntp/doc/sntp.8
index c0ab263..8b544e5 100644
--- a/usr.sbin/ntp/doc/sntp.8
+++ b/usr.sbin/ntp/doc/sntp.8
@@ -1,11 +1,11 @@
-.Dd June 2 2016
+.Dd November 21 2016
.Dt SNTP 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed June 2, 2016 at 07:20:03 AM by AutoGen 5.18.5
+.\" It has been AutoGen-ed November 21, 2016 at 07:58:32 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -213,7 +213,7 @@ of seconds specified before giving up. The default should be
more than enough for a unicast response. If \fBsntp\fP is
only waiting for a broadcast response a longer timeout is
likely needed.
-.It Fl \-wait , " Fl \-no\-wait"
+.It Fl \-wait , Fl \-no\-wait
Wait for pending replies (if not setting the time).
The \fIno\-wait\fP form will disable the option.
This option is enabled by default.
diff --git a/usr.sbin/ntp/libntp/Makefile b/usr.sbin/ntp/libntp/Makefile
index 8bba565..74babee 100644
--- a/usr.sbin/ntp/libntp/Makefile
+++ b/usr.sbin/ntp/libntp/Makefile
@@ -17,7 +17,9 @@ NTP_SRCS= systime.c a_md5encrypt.c adjtime.c atoint.c \
emalloc.c findconfig.c getopt.c hextoint.c \
hextolfp.c humandate.c icom.c iosignal.c \
is_ip_address.c \
- lib_strbuf.c machines.c mktime.c modetoa.c \
+ lib_strbuf.c \
+ libssl_compat.c \
+ machines.c mktime.c modetoa.c \
mstolfp.c msyslog.c netof.c ntp_calendar.c \
ntp_crypto_rnd.c ntp_intres.c ntp_libopts.c \
ntp_lineedit.c ntp_random.c ntp_rfc2553.c ntp_worker.c \
diff --git a/usr.sbin/ntp/scripts/mkver b/usr.sbin/ntp/scripts/mkver
index 5318024..31a021e 100755
--- a/usr.sbin/ntp/scripts/mkver
+++ b/usr.sbin/ntp/scripts/mkver
@@ -6,7 +6,7 @@ PROG=${1-UNKNOWN}
ConfStr="$PROG"
-ConfStr="$ConfStr 4.2.8p8"
+ConfStr="$ConfStr 4.2.8p9"
case "$CSET" in
'') ;;
OpenPOWER on IntegriCloud