aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog38
-rw-r--r--CommitLog1020
-rw-r--r--NEWS253
-rwxr-xr-xconfigure20
-rw-r--r--html/miscopt.html14
-rw-r--r--include/Makefile.am1
-rw-r--r--include/Makefile.in1
-rw-r--r--include/ntp.h7
-rw-r--r--include/ntp_io.h3
-rw-r--r--include/ntp_keyacc.h13
-rw-r--r--include/ntp_stdlib.h5
-rw-r--r--include/ntp_types.h1
-rw-r--r--include/ntp_worker.h53
-rw-r--r--include/parse.h6
-rw-r--r--libntp/Makefile.am1
-rw-r--r--libntp/Makefile.in56
-rw-r--r--libntp/authkeys.c105
-rw-r--r--libntp/authreadkeys.c51
-rw-r--r--libntp/authusekey.c2
-rw-r--r--libntp/is_ip_address.c129
-rw-r--r--libntp/ntp_worker.c27
-rw-r--r--libntp/systime.c15
-rw-r--r--libntp/work_thread.c74
-rw-r--r--ntpd/invoke-ntp.conf.texi67
-rw-r--r--ntpd/invoke-ntp.keys.texi14
-rw-r--r--ntpd/invoke-ntpd.texi4
-rw-r--r--ntpd/keyword-gen-utd2
-rw-r--r--ntpd/keyword-gen.c3
-rw-r--r--ntpd/ntp.conf.5man76
-rw-r--r--ntpd/ntp.conf.5mdoc77
-rw-r--r--ntpd/ntp.conf.def71
-rw-r--r--ntpd/ntp.conf.html62
-rw-r--r--ntpd/ntp.conf.man.in76
-rw-r--r--ntpd/ntp.conf.mdoc.in77
-rw-r--r--ntpd/ntp.keys.5man18
-rw-r--r--ntpd/ntp.keys.5mdoc18
-rw-r--r--ntpd/ntp.keys.def12
-rw-r--r--ntpd/ntp.keys.html14
-rw-r--r--ntpd/ntp.keys.man.in18
-rw-r--r--ntpd/ntp.keys.mdoc.in18
-rw-r--r--ntpd/ntp_config.c14
-rw-r--r--ntpd/ntp_control.c221
-rw-r--r--ntpd/ntp_crypto.c2
-rw-r--r--ntpd/ntp_io.c367
-rw-r--r--ntpd/ntp_keyword.h971
-rw-r--r--ntpd/ntp_parser.c3091
-rw-r--r--ntpd/ntp_parser.h488
-rw-r--r--ntpd/ntp_parser.y6
-rw-r--r--ntpd/ntp_proto.c158
-rw-r--r--ntpd/ntp_request.c293
-rw-r--r--ntpd/ntp_scanner.c2
-rw-r--r--ntpd/ntp_timer.c17
-rw-r--r--ntpd/ntpd-opts.c20
-rw-r--r--ntpd/ntpd-opts.h8
-rw-r--r--ntpd/ntpd.1ntpdman8
-rw-r--r--ntpd/ntpd.1ntpdmdoc6
-rw-r--r--ntpd/ntpd.c58
-rw-r--r--ntpd/ntpd.html4
-rw-r--r--ntpd/ntpd.man.in8
-rw-r--r--ntpd/ntpd.mdoc.in6
-rw-r--r--ntpd/refclock_chu.c2
-rw-r--r--ntpd/refclock_gpsdjson.c28
-rw-r--r--ntpd/refclock_jjy.c87
-rw-r--r--ntpd/refclock_shm.c2
-rw-r--r--ntpdc/invoke-ntpdc.texi4
-rw-r--r--ntpdc/ntpdc-opts.c20
-rw-r--r--ntpdc/ntpdc-opts.h8
-rw-r--r--ntpdc/ntpdc.1ntpdcman8
-rw-r--r--ntpdc/ntpdc.1ntpdcmdoc6
-rw-r--r--ntpdc/ntpdc.c23
-rw-r--r--ntpdc/ntpdc.html4
-rw-r--r--ntpdc/ntpdc.man.in8
-rw-r--r--ntpdc/ntpdc.mdoc.in6
-rw-r--r--ntpq/invoke-ntpq.texi4
-rw-r--r--ntpq/ntpq-opts.c20
-rw-r--r--ntpq/ntpq-opts.h8
-rw-r--r--ntpq/ntpq-subs.c8
-rw-r--r--ntpq/ntpq.1ntpqman8
-rw-r--r--ntpq/ntpq.1ntpqmdoc6
-rw-r--r--ntpq/ntpq.c94
-rw-r--r--ntpq/ntpq.html4
-rw-r--r--ntpq/ntpq.man.in8
-rw-r--r--ntpq/ntpq.mdoc.in6
-rw-r--r--ntpsnmpd/invoke-ntpsnmpd.texi4
-rw-r--r--ntpsnmpd/ntpsnmpd-opts.c20
-rw-r--r--ntpsnmpd/ntpsnmpd-opts.h8
-rw-r--r--ntpsnmpd/ntpsnmpd.1ntpsnmpdman8
-rw-r--r--ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc6
-rw-r--r--ntpsnmpd/ntpsnmpd.html2
-rw-r--r--ntpsnmpd/ntpsnmpd.man.in8
-rw-r--r--ntpsnmpd/ntpsnmpd.mdoc.in6
-rw-r--r--packageinfo.sh2
-rw-r--r--scripts/calc_tickadj/calc_tickadj.1calc_tickadjman6
-rw-r--r--scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc4
-rw-r--r--scripts/calc_tickadj/calc_tickadj.html2
-rw-r--r--scripts/calc_tickadj/calc_tickadj.man.in6
-rw-r--r--scripts/calc_tickadj/calc_tickadj.mdoc.in4
-rw-r--r--scripts/calc_tickadj/invoke-calc_tickadj.texi2
-rw-r--r--scripts/invoke-plot_summary.texi4
-rw-r--r--scripts/invoke-summary.texi4
-rw-r--r--scripts/ntp-wait/invoke-ntp-wait.texi4
-rw-r--r--scripts/ntp-wait/ntp-wait-opts4
-rw-r--r--scripts/ntp-wait/ntp-wait.1ntp-waitman6
-rw-r--r--scripts/ntp-wait/ntp-wait.1ntp-waitmdoc4
-rw-r--r--scripts/ntp-wait/ntp-wait.html4
-rw-r--r--scripts/ntp-wait/ntp-wait.man.in6
-rw-r--r--scripts/ntp-wait/ntp-wait.mdoc.in4
-rw-r--r--scripts/ntpsweep/invoke-ntpsweep.texi4
-rw-r--r--scripts/ntpsweep/ntpsweep-opts4
-rw-r--r--scripts/ntpsweep/ntpsweep.1ntpsweepman6
-rw-r--r--scripts/ntpsweep/ntpsweep.1ntpsweepmdoc4
-rw-r--r--scripts/ntpsweep/ntpsweep.html4
-rw-r--r--scripts/ntpsweep/ntpsweep.man.in6
-rw-r--r--scripts/ntpsweep/ntpsweep.mdoc.in4
-rw-r--r--scripts/ntptrace/invoke-ntptrace.texi4
-rw-r--r--scripts/ntptrace/ntptrace-opts4
-rw-r--r--scripts/ntptrace/ntptrace.1ntptraceman6
-rw-r--r--scripts/ntptrace/ntptrace.1ntptracemdoc4
-rw-r--r--scripts/ntptrace/ntptrace.html4
-rw-r--r--scripts/ntptrace/ntptrace.man.in6
-rw-r--r--scripts/ntptrace/ntptrace.mdoc.in4
-rw-r--r--scripts/plot_summary-opts4
-rw-r--r--scripts/plot_summary.1plot_summaryman6
-rw-r--r--scripts/plot_summary.1plot_summarymdoc4
-rw-r--r--scripts/plot_summary.html4
-rw-r--r--scripts/plot_summary.man.in6
-rw-r--r--scripts/plot_summary.mdoc.in4
-rw-r--r--scripts/summary-opts4
-rw-r--r--scripts/summary.1summaryman6
-rw-r--r--scripts/summary.1summarymdoc4
-rw-r--r--scripts/summary.html4
-rw-r--r--scripts/summary.man.in6
-rw-r--r--scripts/summary.mdoc.in4
-rw-r--r--scripts/update-leap/invoke-update-leap.texi2
-rw-r--r--scripts/update-leap/update-leap-opts4
-rw-r--r--scripts/update-leap/update-leap.1update-leapman6
-rw-r--r--scripts/update-leap/update-leap.1update-leapmdoc4
-rw-r--r--scripts/update-leap/update-leap.html2
-rw-r--r--scripts/update-leap/update-leap.man.in6
-rw-r--r--scripts/update-leap/update-leap.mdoc.in4
-rwxr-xr-xsntp/configure20
-rw-r--r--sntp/crypto.c25
-rw-r--r--sntp/crypto.h20
-rw-r--r--sntp/include/copyright.def2
-rw-r--r--sntp/include/version.def2
-rw-r--r--sntp/include/version.texi6
-rw-r--r--sntp/invoke-sntp.texi4
-rw-r--r--sntp/libopts/configfile.c44
-rw-r--r--sntp/libopts/enum.c10
-rw-r--r--sntp/libopts/find.c2
-rw-r--r--sntp/libopts/init.c5
-rw-r--r--sntp/libopts/load.c2
-rw-r--r--sntp/libopts/makeshell.c6
-rw-r--r--sntp/libopts/nested.c4
-rw-r--r--sntp/libopts/parse-duration.c10
-rw-r--r--sntp/libopts/reset.c2
-rw-r--r--sntp/libopts/save.c4
-rw-r--r--sntp/libopts/tokenize.c2
-rw-r--r--sntp/m4/version.m42
-rw-r--r--sntp/main.c2
-rw-r--r--sntp/networking.c2
-rw-r--r--sntp/sntp-opts.c20
-rw-r--r--sntp/sntp-opts.h8
-rw-r--r--sntp/sntp.1sntpman8
-rw-r--r--sntp/sntp.1sntpmdoc6
-rw-r--r--sntp/sntp.html4
-rw-r--r--sntp/sntp.man.in8
-rw-r--r--sntp/sntp.mdoc.in6
-rw-r--r--sntp/tests/crypto.c68
-rw-r--r--sntp/tests/fileHandlingTest.c65
-rw-r--r--sntp/tests/fileHandlingTest.h.in21
-rw-r--r--sntp/tests/keyFile.c112
-rw-r--r--sntp/tests/packetHandling.c141
-rw-r--r--sntp/tests/packetProcessing.c214
-rw-r--r--sntp/tests/run-packetProcessing.c36
-rw-r--r--sntp/unity/unity_internals.h2
-rw-r--r--sntp/version.c2
-rw-r--r--tests/libntp/authkeys.c40
-rw-r--r--tests/libntp/decodenetnum.c56
-rw-r--r--tests/libntp/run-authkeys.c15
-rw-r--r--tests/libntp/run-decodenetnum.c8
-rw-r--r--tests/libntp/run-socktoa.c10
-rw-r--r--tests/libntp/socktoa.c40
-rw-r--r--tests/ntpd/t-ntp_signd.c4
-rw-r--r--util/invoke-ntp-keygen.texi4
-rw-r--r--util/ntp-keygen-opts.c20
-rw-r--r--util/ntp-keygen-opts.h8
-rw-r--r--util/ntp-keygen.1ntp-keygenman8
-rw-r--r--util/ntp-keygen.1ntp-keygenmdoc6
-rw-r--r--util/ntp-keygen.html4
-rw-r--r--util/ntp-keygen.man.in8
-rw-r--r--util/ntp-keygen.mdoc.in6
192 files changed, 6586 insertions, 3466 deletions
diff --git a/ChangeLog b/ChangeLog
index 304bd85ab7dc..cfe4aa1862ef 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,38 @@
---
+(4.2.8p6) 2016/01/20 Released by Harlan Stenn <stenn@ntp.org>
+
+* [Sec 2935] Deja Vu: Replay attack on authenticated broadcast mode. HStenn.
+* [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+* [Sec 2937] ntpq: nextvar() missing length check. perlinger@ntp.org
+* [Sec 2938] ntpq saveconfig command allows dangerous characters
+ in filenames. perlinger@ntp.org
+* [Sec 2939] reslist NULL pointer dereference. perlinger@ntp.org
+* [Sec 2940] Stack exhaustion in recursive traversal of restriction
+ list. perlinger@ntp.org
+* [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+* [Sec 2945] Zero Origin Timestamp Bypass. perlinger@ntp.org
+* [Sec 2948] Potential Infinite Loop in ntpq ( and ntpdc) perlinger@ntp.org
+* [Bug 2772] adj_systime overflows tv_usec. perlinger@ntp.org
+* [Bug 2814] msyslog deadlock when signaled. perlinger@ntp.org
+ - applied patch by shenpeng11@huawei.com with minor adjustments
+* [Bug 2882] Look at ntp_request.c:list_peers_sum(). perlinger@ntp.org
+* [Bug 2891] Deadlock in deferred DNS lookup framework. perlinger@ntp.org
+* [Bug 2892] Several test cases assume IPv6 capabilities even when
+ IPv6 is disabled in the build. perlinger@ntp.org
+ - Found this already fixed, but validation led to cleanup actions.
+* [Bug 2905] DNS lookups broken. perlinger@ntp.org
+ - added limits to stack consumption, fixed some return code handling
+* [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - changed stacked/nested handling of CTRL-C. perlinger@ntp.org
+ - make CTRL-C work for retrieval and printing od MRU list. perlinger@ntp.org
+* [Bug 2980] reduce number of warnings. perlinger@ntp.org
+ - integrated several patches from Havard Eidnes (he@uninett.no)
+* [Bug 2985] bogus calculation in authkeys.c perlinger@ntp.org
+ - implement 'auth_log2()' using integer bithack instead of float calculation
+* Make leapsec_query debug messages less verbose. Harlan Stenn.
+* Disable incomplete t-ntp_signd.c test. Harlan Stenn.
+
+---
(4.2.8p5) 2016/01/07 Released by Harlan Stenn <stenn@ntp.org>
* [Sec 2956] small-step/big-step. Close the panic gate earlier. HStenn.
@@ -47,6 +81,7 @@
lots of clients. perlinger@ntp.org
* [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
- changed stacked/nested handling of CTRL-C. perlinger@ntp.org
+ - make CTRL-C work for retrieval and printing od MRU list. perlinger@ntp.org
* Unity cleanup for FreeBSD-6.4. Harlan Stenn.
* Unity test cleanup. Harlan Stenn.
* Libevent autoconf pthread fixes for FreeBSD-10. Harlan Stenn.
@@ -55,9 +90,8 @@
* Quiet a warning from clang. Harlan Stenn.
* Update the NEWS file. Harlan Stenn.
* Update scripts/calc_tickadj/Makefile.am. Harlan Stenn.
+
---
-(4.2.8p4) 2015/10/21 Released by Harlan Stenn <stenn@ntp.org>
-(4.2.8p4-RC1) 2015/10/06 Released by Harlan Stenn <stenn@ntp.org>
* [Sec 2899] CVE-2014-9297 perlinger@ntp.org
* [Sec 2901] Drop invalid packet before checking KoD. Check for all KoD's.
diff --git a/CommitLog b/CommitLog
index 9caeaa2a6111..26afcc511b10 100644
--- a/CommitLog
+++ b/CommitLog
@@ -1,8 +1,633 @@
-ChangeSet@1.3623, 2016-01-07 23:33:11+00:00, stenn@deacon.udel.edu
+ChangeSet@1.3628, 2016-01-20 04:20:12-05:00, stenn@deacon.udel.edu
+ NTP_4_2_8P6
+ TAG: NTP_4_2_8P6
+
+ ChangeLog@1.1793 +1 -0
+ NTP_4_2_8P6
+
+ ntpd/invoke-ntp.conf.texi@1.196 +1 -1
+ NTP_4_2_8P6
+
+ ntpd/invoke-ntp.keys.texi@1.188 +1 -1
+ NTP_4_2_8P6
+
+ ntpd/invoke-ntpd.texi@1.504 +2 -2
+ NTP_4_2_8P6
+
+ ntpd/ntp.conf.5man@1.230 +3 -3
+ NTP_4_2_8P6
+
+ ntpd/ntp.conf.5mdoc@1.230 +2 -3
+ NTP_4_2_8P6
+
+ ntpd/ntp.conf.html@1.183 +60 -2
+ NTP_4_2_8P6
+
+ ntpd/ntp.conf.man.in@1.230 +3 -3
+ NTP_4_2_8P6
+
+ ntpd/ntp.conf.mdoc.in@1.230 +2 -3
+ NTP_4_2_8P6
+
+ ntpd/ntp.keys.5man@1.222 +2 -2
+ NTP_4_2_8P6
+
+ ntpd/ntp.keys.5mdoc@1.222 +3 -3
+ NTP_4_2_8P6
+
+ ntpd/ntp.keys.html@1.184 +21 -33
+ NTP_4_2_8P6
+
+ ntpd/ntp.keys.man.in@1.222 +2 -2
+ NTP_4_2_8P6
+
+ ntpd/ntp.keys.mdoc.in@1.222 +3 -3
+ NTP_4_2_8P6
+
+ ntpd/ntpd-opts.c@1.526 +10 -10
+ NTP_4_2_8P6
+
+ ntpd/ntpd-opts.h@1.525 +4 -4
+ NTP_4_2_8P6
+
+ ntpd/ntpd.1ntpdman@1.333 +4 -4
+ NTP_4_2_8P6
+
+ ntpd/ntpd.1ntpdmdoc@1.333 +3 -3
+ NTP_4_2_8P6
+
+ ntpd/ntpd.html@1.177 +2 -2
+ NTP_4_2_8P6
+
+ ntpd/ntpd.man.in@1.333 +4 -4
+ NTP_4_2_8P6
+
+ ntpd/ntpd.mdoc.in@1.333 +3 -3
+ NTP_4_2_8P6
+
+ ntpdc/invoke-ntpdc.texi@1.501 +2 -2
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc-opts.c@1.519 +10 -10
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc-opts.h@1.518 +4 -4
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc.1ntpdcman@1.332 +4 -4
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.332 +3 -3
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc.html@1.345 +2 -2
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc.man.in@1.332 +4 -4
+ NTP_4_2_8P6
+
+ ntpdc/ntpdc.mdoc.in@1.332 +3 -3
+ NTP_4_2_8P6
+
+ ntpq/invoke-ntpq.texi@1.508 +2 -2
+ NTP_4_2_8P6
+
+ ntpq/ntpq-opts.c@1.525 +10 -10
+ NTP_4_2_8P6
+
+ ntpq/ntpq-opts.h@1.523 +4 -4
+ NTP_4_2_8P6
+
+ ntpq/ntpq.1ntpqman@1.336 +4 -4
+ NTP_4_2_8P6
+
+ ntpq/ntpq.1ntpqmdoc@1.336 +3 -3
+ NTP_4_2_8P6
+
+ ntpq/ntpq.html@1.174 +2 -2
+ NTP_4_2_8P6
+
+ ntpq/ntpq.man.in@1.336 +4 -4
+ NTP_4_2_8P6
+
+ ntpq/ntpq.mdoc.in@1.336 +3 -3
+ NTP_4_2_8P6
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.503 +2 -2
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.521 +10 -10
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.520 +4 -4
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.332 +4 -4
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.332 +3 -3
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd.html@1.172 +1 -1
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd.man.in@1.332 +4 -4
+ NTP_4_2_8P6
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.332 +3 -3
+ NTP_4_2_8P6
+
+ packageinfo.sh@1.524 +2 -2
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.93 +3 -3
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.94 +2 -2
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/calc_tickadj.html@1.95 +1 -1
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.92 +3 -3
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.94 +2 -2
+ NTP_4_2_8P6
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.97 +1 -1
+ NTP_4_2_8P6
+
+ scripts/invoke-plot_summary.texi@1.114 +2 -2
+ NTP_4_2_8P6
+
+ scripts/invoke-summary.texi@1.114 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.324 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait-opts@1.60 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.321 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.322 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait.html@1.341 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait.man.in@1.321 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.322 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.112 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep-opts@1.62 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.100 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.100 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep.html@1.113 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep.man.in@1.100 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.101 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.113 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace-opts@1.62 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.100 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.101 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace.html@1.114 +2 -2
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace.man.in@1.100 +3 -3
+ NTP_4_2_8P6
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.102 +2 -2
+ NTP_4_2_8P6
+
+ scripts/plot_summary-opts@1.62 +2 -2
+ NTP_4_2_8P6
+
+ scripts/plot_summary.1plot_summaryman@1.112 +3 -3
+ NTP_4_2_8P6
+
+ scripts/plot_summary.1plot_summarymdoc@1.112 +2 -2
+ NTP_4_2_8P6
+
+ scripts/plot_summary.html@1.115 +2 -2
+ NTP_4_2_8P6
+
+ scripts/plot_summary.man.in@1.112 +3 -3
+ NTP_4_2_8P6
+
+ scripts/plot_summary.mdoc.in@1.112 +2 -2
+ NTP_4_2_8P6
+
+ scripts/summary-opts@1.62 +2 -2
+ NTP_4_2_8P6
+
+ scripts/summary.1summaryman@1.112 +3 -3
+ NTP_4_2_8P6
+
+ scripts/summary.1summarymdoc@1.112 +2 -2
+ NTP_4_2_8P6
+
+ scripts/summary.html@1.115 +2 -2
+ NTP_4_2_8P6
+
+ scripts/summary.man.in@1.112 +3 -3
+ NTP_4_2_8P6
+
+ scripts/summary.mdoc.in@1.112 +2 -2
+ NTP_4_2_8P6
+
+ scripts/update-leap/invoke-update-leap.texi@1.13 +1 -1
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap-opts@1.13 +2 -2
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap.1update-leapman@1.13 +3 -3
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.13 +2 -2
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap.html@1.13 +1 -1
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap.man.in@1.13 +3 -3
+ NTP_4_2_8P6
+
+ scripts/update-leap/update-leap.mdoc.in@1.13 +2 -2
+ NTP_4_2_8P6
+
+ sntp/invoke-sntp.texi@1.501 +2 -2
+ NTP_4_2_8P6
+
+ sntp/sntp-opts.c@1.520 +10 -10
+ NTP_4_2_8P6
+
+ sntp/sntp-opts.h@1.518 +4 -4
+ NTP_4_2_8P6
+
+ sntp/sntp.1sntpman@1.336 +4 -4
+ NTP_4_2_8P6
+
+ sntp/sntp.1sntpmdoc@1.336 +3 -3
+ NTP_4_2_8P6
+
+ sntp/sntp.html@1.516 +2 -2
+ NTP_4_2_8P6
+
+ sntp/sntp.man.in@1.336 +4 -4
+ NTP_4_2_8P6
+
+ sntp/sntp.mdoc.in@1.336 +3 -3
+ NTP_4_2_8P6
+
+ util/invoke-ntp-keygen.texi@1.504 +2 -2
+ NTP_4_2_8P6
+
+ util/ntp-keygen-opts.c@1.522 +10 -10
+ NTP_4_2_8P6
+
+ util/ntp-keygen-opts.h@1.520 +4 -4
+ NTP_4_2_8P6
+
+ util/ntp-keygen.1ntp-keygenman@1.332 +4 -4
+ NTP_4_2_8P6
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.332 +3 -3
+ NTP_4_2_8P6
+
+ util/ntp-keygen.html@1.178 +2 -2
+ NTP_4_2_8P6
+
+ util/ntp-keygen.man.in@1.332 +4 -4
+ NTP_4_2_8P6
+
+ util/ntp-keygen.mdoc.in@1.332 +3 -3
+ NTP_4_2_8P6
+
+ChangeSet@1.3627, 2016-01-20 04:14:51-05:00, stenn@deacon.udel.edu
+ solaris hack
+
+ libntp/work_thread.c@1.20 +2 -0
+ solaris hack
+
+ChangeSet@1.3626, 2016-01-20 01:50:09-05:00, stenn@deacon.udel.edu
+ 4.2.8p6
+
+ packageinfo.sh@1.523 +1 -1
+ 4.2.8p6
+
+ChangeSet@1.3625, 2016-01-20 00:34:15+00:00, stenn@psp-deb1.ntp.org
+ updates
+
+ NEWS@1.160 +24 -24
+ updates
+
+ChangeSet@1.3624, 2016-01-19 22:28:41+00:00, stenn@psp-deb1.ntp.org
+ typo
+
+ NEWS@1.159 +1 -1
+ typo
+
+ChangeSet@1.3623, 2016-01-18 11:55:56+00:00, stenn@psp-deb1.ntp.org
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ChangeLog@1.1792 +1 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ NEWS@1.158 +40 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ include/Makefile.am@1.54 +1 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ include/ntp_io.h@1.23 +2 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ include/ntp_keyacc.h@1.1 +13 -0
+ BitKeeper file /home/stenn/ntp-stable-2936/include/ntp_keyacc.h
+
+ include/ntp_keyacc.h@1.0 +0 -0
+
+ include/ntp_stdlib.h@1.81 +4 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ include/ntp_types.h@1.36 +1 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ libntp/Makefile.am@1.77 +1 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ libntp/authkeys.c@1.31 +60 -6
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ libntp/authreadkeys.c@1.25 +50 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ libntp/authusekey.c@1.11 +1 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ libntp/is_ip_address.c@1.1 +129 -0
+ BitKeeper file /home/stenn/ntp-stable-2936/libntp/is_ip_address.c
+
+ libntp/is_ip_address.c@1.0 +0 -0
+
+ ntpd/invoke-ntp.keys.texi@1.187 +11 -3
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.5man@1.221 +13 -5
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.5mdoc@1.221 +14 -6
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.def@1.11 +10 -2
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.html@1.183 +42 -22
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.man.in@1.221 +13 -5
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp.keys.mdoc.in@1.221 +14 -6
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp_crypto.c@1.186 +1 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp_io.c@1.412 +0 -72
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ ntpd/ntp_proto.c@1.373 +34 -0
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ tests/libntp/authkeys.c@1.15 +1 -1
+ [Sec 2936] Skeleton Key: Any trusted key system can serve time. HStenn.
+
+ChangeSet@1.3622, 2016-01-17 09:03:57+00:00, stenn@psp-deb1.ntp.org
+ Disable incomplete t-ntp_signd.c test. Harlan Stenn.
+
+ ChangeLog@1.1791 +1 -0
+ Disable incomplete t-ntp_signd.c test. Harlan Stenn.
+
+ tests/ntpd/t-ntp_signd.c@1.16 +4 -0
+ Disable incomplete t-ntp_signd.c test. Harlan Stenn.
+
+ChangeSet@1.3621, 2016-01-17 05:51:14+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS file for 2942
+
+ NEWS@1.157 +22 -0
+ Update NEWS file for 2942
+
+ChangeSet@1.3615.13.1, 2016-01-17 05:07:22+00:00, stenn@psp-deb1.ntp.org
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ChangeLog@1.1786.13.1 +4 -0
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ html/miscopt.html@1.85 +11 -3
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ include/ntp.h@1.213.1.1 +3 -0
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/invoke-ntp.conf.texi@1.195 +64 -3
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/keyword-gen-utd@1.27 +1 -1
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/keyword-gen.c@1.33 +3 -0
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp.conf.5man@1.229 +71 -7
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp.conf.5mdoc@1.229 +71 -7
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp.conf.def@1.21 +67 -4
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp.conf.man.in@1.229 +71 -7
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp.conf.mdoc.in@1.229 +71 -7
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_config.c@1.335.1.1 +12 -0
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_keyword.h@1.29 +505 -468
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_parser.c@1.101 +1762 -1513
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_parser.h@1.65 +257 -235
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_parser.y@1.91 +6 -0
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ ntpd/ntp_proto.c@1.368.2.1 +40 -4
+ [Sec 2942]: Off-path DoS attack on auth broadcast mode. HStenn.
+
+ChangeSet@1.3619, 2016-01-14 12:19:16+00:00, stenn@psp-at1.ntp.org
+ NEWS file updates
+
+ NEWS@1.156 +21 -0
+ NEWS file updates
+
+ChangeSet@1.3615.1.9, 2016-01-14 11:33:43+00:00, stenn@psp-at1.ntp.org
+ merge cleanup
+
+ ChangeLog@1.1786.1.9 +3 -0
+ merge cleanup
+
+ChangeSet@1.3615.1.5, 2016-01-14 10:44:13+00:00, stenn@psp-at1.ntp.org
+ merge cleanup
+
+ ChangeLog@1.1786.1.5 +0 -1
+ merge cleanup
+
+ChangeSet@1.3615.12.4, 2016-01-14 10:27:23+00:00, stenn@psp-at1.ntp.org
+ merge cleanup
+
+ ChangeLog@1.1786.12.4 +1 -1
+ merge cleanup
+
+ChangeSet@1.3615.12.2, 2016-01-14 09:49:52+00:00, stenn@psp-at1.ntp.org
+ merge cleanup
+
+ ChangeLog@1.1786.12.2 +2 -2
+ merge cleanup
+
+ChangeSet@1.3615.3.17, 2016-01-14 09:33:56+00:00, stenn@psp-at1.ntp.org
+ merge cleanup
+
+ ChangeLog@1.1786.3.14 +1 -1
+ merge cleanup
+
+ChangeSet@1.3615.3.14, 2016-01-14 07:36:57+00:00, stenn@psp-at1.ntp.org
+ NEWS update
+
+ NEWS@1.155 +98 -7
+ NEWS update
+
+ChangeSet@1.3615.3.12, 2016-01-13 08:07:30+00:00, stenn@psp-deb1.ntp.org
+ typo
+
+ ChangeLog@1.1786.3.10 +1 -1
+ typo
+
+ChangeSet@1.3615.3.10, 2016-01-13 06:08:29+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS file for bug 2938
+
+ NEWS@1.154 +29 -2
+ Update NEWS file for bug 2938
+
+ChangeSet@1.3615.3.8, 2016-01-13 04:23:46+00:00, stenn@psp-deb1.ntp.org
+ Update NEWS file for bug 2935
+
+ NEWS@1.153 +52 -0
+ Update NEWS file for bug 2935
+
+ChangeSet@1.3615.7.12, 2016-01-12 09:53:06+00:00, stenn@psp-at1.ntp.org
+ [Sec 2935] use L_SUB instead of L_ISGT. Juergen Perlinger
+
+ ntpd/ntp_proto.c@1.368.1.5 +4 -1
+ [Sec 2935] use L_SUB instead of L_ISGT. Juergen Perlinger
+
+ChangeSet@1.3615.7.11, 2016-01-11 03:02:53-08:00, harlan@max.pfcs.com
+ [Sec 2935] Deja Vu: Replay attack on authenticated broadcast mode.
+
+ ChangeLog@1.1786.9.1 +4 -0
+ [Sec 2935] Deja Vu: Replay attack on authenticated broadcast mode.
+
+ include/ntp.h@1.215 +1 -0
+ [Sec 2935] Deja Vu: Replay attack on authenticated broadcast mode.
+
+ ntpd/ntp_proto.c@1.368.1.4 +67 -0
+ [Sec 2935] Deja Vu: Replay attack on authenticated broadcast mode.
+
+ChangeSet@1.3615.7.10, 2016-01-11 02:44:25-08:00, harlan@max.pfcs.com
+ make leapsec_query messages less verbose.
+
+ ntpd/ntp_timer.c@1.93.1.1 +6 -4
+ make leapsec_query messages less verbose.
+
+ChangeSet@1.3615.9.1, 2016-01-11 10:26:12+01:00, jnperlin@hydra.localnet
+ [Bug 2985] bogus calculation in authkeys.c
+ - implement 'auth_log2()' using integer bithack instead of float calculation
+
+ ChangeLog@1.1786.7.5 +2 -0
+ [Bug 2985] bogus calculation in authkeys.c
+ - implement 'auth_log2()' using integer bithack instead of float calculation
+
+ libntp/authkeys.c@1.30 +33 -10
+ [Bug 2985] bogus calculation in authkeys.c
+ - implement 'auth_log2()' using integer bithack instead of float calculation
+
+ tests/libntp/authkeys.c@1.14 +38 -0
+ [Bug 2985] bogus calculation in authkeys.c
+ - test bithack implementation of 'auth_log2()'
+
+ tests/libntp/run-authkeys.c@1.12 +9 -6
+ [Bug 2985] bogus calculation in authkeys.c
+ - update auto-generated file
+
+ChangeSet@1.3615.7.9, 2016-01-09 09:52:44+00:00, stenn@psp-at1.ntp.org
+ Add timelastrec to the peer structure
+
+ include/ntp.h@1.214 +2 -1
+ Add timelastrec to the peer structure
+
+ChangeSet@1.3615.3.6, 2016-01-08 10:00:03+00:00, stenn@psp-at1.ntp.org
+ 4.2.8p5 merge cleanup
+
+ ChangeLog@1.1786.3.6 +1 -1
+ 4.2.8p5 merge cleanup
+
+ChangeSet@1.3615.7.8, 2016-01-08 00:26:09+00:00, stenn@deacon.udel.edu
+ Update copyright year
+
+ sntp/include/copyright.def@1.26 +1 -1
+ Update copyright year
+
+ChangeSet@1.3615.7.7, 2016-01-07 23:33:11+00:00, stenn@deacon.udel.edu
NTP_4_2_8P5
TAG: NTP_4_2_8P5
- ChangeLog@1.1791 +1 -0
+ ChangeLog@1.1786.7.4 +1 -0
NTP_4_2_8P5
ntpd/invoke-ntp.conf.texi@1.194 +1 -1
@@ -332,60 +957,349 @@ ChangeSet@1.3623, 2016-01-07 23:33:11+00:00, stenn@deacon.udel.edu
util/ntp-keygen.mdoc.in@1.331 +2 -2
NTP_4_2_8P5
-ChangeSet@1.3622, 2016-01-07 17:52:24-05:00, stenn@deacon.udel.edu
+ChangeSet@1.3615.7.6, 2016-01-07 17:52:24-05:00, stenn@deacon.udel.edu
ntp-4.2.8p5
packageinfo.sh@1.521 +1 -1
ntp-4.2.8p5
-ChangeSet@1.3621, 2016-01-07 22:20:05+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3615.7.5, 2016-01-07 22:20:05+00:00, stenn@psp-at1.ntp.org
cleanup
NEWS@1.152 +2 -2
cleanup
-ChangeSet@1.3620, 2016-01-07 09:33:11+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3615.7.4, 2016-01-07 09:33:11+00:00, stenn@psp-at1.ntp.org
typo in ntp_proto.c - leap smear. Reported by Martin Burnicki
- ntpd/ntp_proto.c@1.371 +1 -1
+ ntpd/ntp_proto.c@1.368.1.3 +1 -1
typo in ntp_proto.c - leap smear. Reported by Martin Burnicki
-ChangeSet@1.3619, 2016-01-07 06:33:08+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3615.7.3, 2016-01-07 06:33:08+00:00, stenn@psp-at1.ntp.org
Update scripts/calc_tickadj/Makefile.am. Harlan Stenn.
- ChangeLog@1.1790 +1 -0
+ ChangeLog@1.1786.7.3 +1 -0
Update scripts/calc_tickadj/Makefile.am. Harlan Stenn.
scripts/calc_tickadj/Makefile.am@1.11 +2 -0
Update scripts/calc_tickadj/Makefile.am. Harlan Stenn.
-ChangeSet@1.3616.1.1, 2016-01-05 10:57:45+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3615.3.2, 2016-01-05 12:34:56+00:00, stenn@psp-at1.ntp.org
+ ntp-4.2.8p6
+
+ ChangeLog@1.1786.3.2 +2 -0
+ ntp-4.2.8p6
+
+ChangeSet@1.3615.8.1, 2016-01-05 10:57:45+00:00, stenn@psp-at1.ntp.org
Bug 2952 fixes
- ChangeLog@1.1787.1.1 +1 -0
+ ChangeLog@1.1786.8.1 +1 -0
Bug 2952 fixes
- ntpd/ntp_proto.c@1.370 +165 -152
+ ntpd/ntp_proto.c@1.368.1.2 +165 -152
Bug 2952 fixes
-ChangeSet@1.3617, 2016-01-05 09:56:31+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3615.7.1, 2016-01-05 09:56:31+00:00, stenn@psp-at1.ntp.org
ntp-4.2.8p5 prep
- ChangeLog@1.1788 +2 -1
+ ChangeLog@1.1786.7.1 +2 -1
ntp-4.2.8p5 prep
NEWS@1.151 +104 -3
ntp-4.2.8p5 prep
-ChangeSet@1.3616, 2015-12-06 11:20:02+00:00, stenn@psp-deb1.ntp.org
+ChangeSet@1.3615.5.1, 2015-12-13 13:35:12+01:00, jnperlin@hydra.localnet
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ Found this already fixed, but validation lead to further cleanup:
+ - source code formatting
+ - inline variable definitions moved to start of block
+ - made some pure input data pointers 'const void*' instead of 'char*'; avoids casts and warnings
+
+ ChangeLog@1.1786.5.1 +3 -0
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+
+ sntp/crypto.c@1.19 +13 -12
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - sidekick: make pure input pointers 'const void*' instead of 'char*'
+ - sidekick: remove unnecessary casts
+
+ sntp/crypto.h@1.11 +11 -9
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - sidekick: make pure input pointers 'const void*' instead of 'char*'
+ - source formatting
+
+ sntp/main.c@1.99 +1 -1
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - no need to cast input to 'make_mac()' any more
+
+ sntp/networking.c@1.68 +1 -1
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - no need to cast input to 'auth_md5()' any more
+
+ sntp/tests/crypto.c@1.10 +41 -27
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - remove unnecessary casts
+ - source code formatting
+
+ sntp/tests/fileHandlingTest.c@1.4 +43 -20
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - create 'DestroyPath()' companion to 'CreatePath()' to avoid trouble with 'free()' on 'const char*'
+
+ sntp/tests/fileHandlingTest.h.in@1.15 +6 -15
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - create 'DestroyPath()' companion to 'CreatePath()' to avoid trouble with 'free()' on 'const char*'
+
+ sntp/tests/keyFile.c@1.13 +66 -46
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - use 'DestroyPath()' avoid trouble with 'free()' on 'const char*'
+ - printf() combined
+ - source code formatting
+ - move variable declarations to front
+
+ sntp/tests/packetHandling.c@1.6 +75 -64
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - move variable declarations to front
+ - source code formatting
+
+ sntp/tests/packetProcessing.c@1.9 +124 -90
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - move variable declarations to front
+ - source code formatting
+ - drop unnecessary casts
+
+ sntp/tests/run-packetProcessing.c@1.10 +18 -18
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+
+ sntp/unity/unity_internals.h@1.6 +1 -1
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - added missing 'const' in pointer casts
+
+ tests/libntp/decodenetnum.c@1.11 +33 -23
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - source code formatting + cleanup
+
+ tests/libntp/run-decodenetnum.c@1.11 +4 -4
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+
+ tests/libntp/run-socktoa.c@1.14 +5 -5
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+
+ tests/libntp/socktoa.c@1.12 +23 -17
+ [Bug 2892] Several test cases assume IPv6 capabilities even when IPv6 is disabled in the build
+ - source code formatting + cleanup
+
+ChangeSet@1.3615.4.1, 2015-12-11 18:24:16+01:00, jnperlin@hydra.localnet
+ [Bug 2882] Look at ntp_request.c:list_peers_sum()
+
+ ChangeLog@1.1786.4.1 +1 -0
+ [Bug 2882] Look at ntp_request.c:list_peers_sum()
+
+ ntpd/ntp_request.c@1.116 +57 -72
+ [Bug 2882] Look at ntp_request.c:list_peers_sum()
+ - 'list_peers()' and 'list_peers_sum()' skip IPv6 entires if client does not support them,
+ but continue processing until end of list now.
+
+ChangeSet@1.3615.1.3, 2015-12-09 18:23:31+01:00, jnperlin@hydra.localnet
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+
+ ChangeLog@1.1786.1.3 +1 -0
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+
+ include/ntp_worker.h@1.5 +31 -22
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+ - provide signal-safe result-ready detection
+
+ libntp/ntp_worker.c@1.7 +27 -0
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+ - support signal-safe result-ready detection
+ - provide function to harvest async results from mainloop
+
+ ntpd/ntp_io.c@1.409.1.1 +160 -133
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+ - do not process async-resolver results from signal handler
+ - set notification tags to harvest asyn-resolver results from mainloop
+ - avoid double select for synchronous IO
+ - avoid several syslog calls in signal-handler context
+ - refactor / conditionalize some functions that cannot be used in signal-driven IO
+
+ ntpd/ntpd.c@1.169 +4 -0
+ [Bug 2891] Deadlock in deferred DNS lookup framework.
+ - reap/harvest async resolver results from mainloop
+
+ChangeSet@1.3615.1.2, 2015-12-06 21:33:26+01:00, jnperlin@hydra.localnet
+ [Bug 2814] msyslog deadlock when signaled. perlinger@ntp.org
+ - applied patch by shenpeng11@huawei.com with minor adjustments
+
+ ChangeLog@1.1786.1.2 +2 -0
+ [Bug 2814] msyslog deadlock when signaled. perlinger@ntp.org
+ - applied patch by shenpeng11@huawei.com with minor adjustments
+
+ ntpd/ntpd.c@1.168 +26 -3
+ [Bug 2814] msyslog deadlock when signaled. perlinger@ntp.org
+ - applied patch by shenpeng11@huawei.com with minor adjustments
+
+ChangeSet@1.3615.2.1, 2015-12-06 20:19:32+01:00, jnperlin@hydra.localnet
+ [Bug 2772] adj_systime overflows tv_usec
+
+ ChangeLog@1.1786.2.1 +1 -0
+ [Bug 2772] adj_systime overflows tv_usec
+
+ libntp/systime.c@1.71 +12 -3
+ [Bug 2772] adj_systime overflows tv_usec
+ - add missing normalisation for nitpicking implementations of 'adjtime()'
+
+ChangeSet@1.3615.1.1, 2015-12-06 11:20:02+00:00, stenn@psp-deb1.ntp.org
Quiet a warning from clang. Harlan Stenn.
- ChangeLog@1.1787 +1 -0
+ ChangeLog@1.1786.1.1 +1 -0
Quiet a warning from clang. Harlan Stenn.
libntp/ntp_rfc2553.c@1.50 +3 -2
Quiet a warning from clang. Harlan Stenn.
+ChangeSet@1.3616, 2015-12-05 20:28:19+00:00, perlinger@psp-deb1.ntp.org
+ [Bug 2980] reduce number of warnings
+ - string formatting(arguments should be literals)
+ - applying constness where necessary
+ - removing bad consts that are superfluous
+ - avoid signed/unsigned clashes in conditionals (either by cast or type change)
+ - signed/unsigned and promotion conflicts
+ - add prototypes for function pointer tables
+ - force unsigned argument promotion in calls to 'ctype' functions (is{digit,cntrl,...})
+
+ ChangeLog@1.1787 +2 -0
+ [Bug 2980] reduce number of warnings
+
+ include/parse.h@1.14 +3 -3
+ [Bug 2980] reduce number of warnings
+ - make GPSWRAP and GPSWEEK unqualified literals to avoid signed/unsigned clashes
+
+ ntpd/ntp_config.c@1.336 +2 -0
+ [Bug 2980] reduce number of warnings
+ - add forward declaration of yyparse()
+
+ ntpd/ntp_io.c@1.410 +1 -1
+ [Bug 2980] reduce number of warnings
+ - fix a signedness comparison by adding a cast to size_t
+
+ ntpd/ntp_scanner.c@1.49 +1 -1
+ [Bug 2980] reduce number of warnings
+ - for type compatibility, make counter 'i' a size_t
+
+ ntpd/ntp_timer.c@1.94 +5 -6
+ [Bug 2980] reduce number of warnings
+ - fix a signed / unsigned compare
+
+ ntpd/refclock_chu.c@1.58 +1 -1
+ [Bug 2980] reduce number of warnings
+ - rewrite check to avoid warning about integer overflow
+
+ ntpd/refclock_gpsdjson.c@1.24 +13 -15
+ [Bug 2980] reduce number of warnings
+ - reshuffle to use a literal format string
+ - fix signed/unsigned clashes in compare
+
+ ntpd/refclock_jjy.c@1.30 +47 -44
+ Bug 2980 - reduce number of warnings
+ - make several pointers 'const char*'
+ - add prototypes for function pointer tables
+ - force unsigned argument promotion in calls to 'ctype' functions (is{digit,cntrl,...})
+
+ ntpd/refclock_shm.c@1.39 +1 -1
+ [Bug 2980] reduce number of warnings
+ - fix signed/unsigned clashes in compare
+
+ ntpq/ntpq-subs.c@1.114.1.1 +1 -1
+ [Bug 2980] reduce number of warnings
+ - avoid signed/unsigned clashe in compare
+
+ ntpq/ntpq.c@1.165.1.1 +47 -7
+ [Bug 2980] reduce number of warnings
+ - avoid juggling with formatting into dynamic buffers by a 'asprintf' like function
+
+ sntp/libopts/configfile.c@1.24 +22 -22
+ [Bug 2980] reduce number of warnings
+ - add some pointer constness to avoid casting it away
+
+ sntp/libopts/enum.c@1.14 +5 -5
+ [Bug 2980] reduce number of warnings
+ - avoid some unnecessary casts
+ - avoid shift/promote ambiguity by proper typing
+
+ sntp/libopts/find.c@1.13 +1 -1
+ [Bug 2980] reduce number of warnings
+ - Use VOIDP instead of a (char*) cast
+
+ sntp/libopts/init.c@1.9 +2 -3
+ [Bug 2980] reduce number of warnings
+ - use VOIDP() to replace a complicated double cast
+ - remove one useless cast
+
+ sntp/libopts/load.c@1.22 +1 -1
+ [Bug 2980] reduce number of warnings
+ - remove a useless cast
+
+ sntp/libopts/makeshell.c@1.21 +3 -3
+ [Bug 2980] reduce number of warnings
+ - fix integer promotion in calls to toupper/tolower
+
+ sntp/libopts/nested.c@1.17 +3 -1
+ [Bug 2980] reduce number of warnings
+ - avoid casting away constness by using a helper variable
+
+ sntp/libopts/parse-duration.c@1.15 +8 -2
+ [Bug 2980] reduce number of warnings
+ - avoid casting away constness by using a helper variable
+
+ sntp/libopts/reset.c@1.18 +1 -1
+ [Bug 2980] reduce number of warnings
+ - remove a useless cast
+
+ sntp/libopts/save.c@1.19 +2 -2
+ [Bug 2980] reduce number of warnings
+ - use VOIDP() instead of cast via (void**)
+
+ sntp/libopts/tokenize.c@1.14 +1 -1
+ [Bug 2980] reduce number of warnings
+ - add a required const qualification
+
+ChangeSet@1.3597.1.5, 2015-12-05 14:29:10+01:00, jnperlin@hydra.localnet
+ [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - make CTRL-C work for retrieval and printing od MRU list.
+
+ ChangeLog@1.1770.1.3 +1 -0
+ [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - make CTRL-C work for retrieval and printing od MRU list.
+
+ ntpq/ntpq-subs.c@1.115 +6 -0
+ [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - make CTRL-C work for retrieval and printing od MRU list:
+ 1) CTRL-C while collecting terminates the assembling of respose.
+ 2) CTRL-C while printing will terminate the print loop.
+ 3) both work independently of each other.
+
+ ntpq/ntpq.c@1.166 +16 -0
+ [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - when collecting fragments, CTRL-C will try to cleanly return the list of fragments so far.
+
+ChangeSet@1.3597.5.1, 2015-12-05 13:44:57+01:00, jnperlin@hydra.localnet
+ [Bug 2905] DNS lookups broken.
+ - added limits to stack consumption, fixed some return code handling
+
+ ChangeLog@1.1770.5.1 +2 -0
+ [Bug 2905] DNS lookups broken.
+ - added limits to stack consumption, fixed some return code handling
+
+ libntp/work_thread.c@1.19 +55 -17
+ [Bug 2905] DNS lookups broken.
+ - added limits to stack consumption
+ - fixed some return code handling
+ - harden queue handling
+
+ ntpd/ntpd.c@1.166.1.1 +21 -4
+ [Bug 2905] DNS lookups broken.
+ - added limits to stack consumption of wartmup thread
+
ChangeSet@1.3615, 2015-12-05 10:41:51+00:00, stenn@psp-at1.ntp.org
CID 1341677: Nits in sntp/tests/keyFile.c. HStenn.
@@ -1113,7 +2027,7 @@ ChangeSet@1.3584.1.1, 2015-11-13 22:54:35+01:00, jnperlin@hydra.localnet
[Bug 2962] truncation of size_t/ptrdiff_t on 64bit targets
- avoid 'unused' warnings
- ntpd/ntp_proto.c@1.369 +8 -6
+ ntpd/ntp_proto.c@1.368.1.1 +8 -6
[Bug 2962] truncation of size_t/ptrdiff_t on 64bit targets
- promote use of 'size_t' for values that express a size
- format string fixes
@@ -1164,7 +2078,7 @@ ChangeSet@1.3584.1.1, 2015-11-13 22:54:35+01:00, jnperlin@hydra.localnet
- promote use of 'size_t' for values that express a size
- avoid truncation of SOCKET handles
- ntpdc/ntpdc.c@1.105 +36 -34
+ ntpdc/ntpdc.c@1.104.1.1 +36 -34
[Bug 2962] truncation of size_t/ptrdiff_t on 64bit targets
- promote use of 'size_t' for values that express a size
- format string fixes
@@ -1827,6 +2741,31 @@ ChangeSet@1.3574, 2015-10-20 08:00:43+00:00, stenn@psp-deb1.ntp.org
NEWS@1.149 +16 -16
Update CVEs
+ChangeSet@1.3558.8.1, 2015-10-17 23:19:57+02:00, jnperlin@hydra.localnet
+ [Bug 2945] Zero Origin Timestamp Bypass
+
+ ChangeLog@1.1743.8.1 +2 -0
+ [Bug 2945] Zero Origin Timestamp Bypass
+
+ ntpd/ntp_proto.c@1.364.2.1 +9 -1
+ [Bug 2945] Zero Origin Timestamp Bypass
+ - in basic mode 'aorg' is cleared to indicate a response has been received. So a reply has to be dropped
+ when it either does not match the origin timestamp OR the origin time stamp is zero.
+
+ChangeSet@1.3558.7.1, 2015-10-17 21:15:39+02:00, jnperlin@hydra.localnet
+ [Bug 2948] Potential Infinite Loop in ntpq and ntpdc
+
+ ChangeLog@1.1743.7.1 +2 -0
+ [Bug 2948] Potential Infinite Loop in ntpq and ntpdc
+
+ ntpdc/ntpdc.c@1.105 +20 -1
+ [Bug 2948] Potential Infinite Loop in ntpq and ntpdc
+ - check timeout between request and valid response(s) instead of *any* incoming data
+
+ ntpq/ntpq.c@1.161.2.1 +22 -2
+ [Bug 2948] Potential Infinite Loop in ntpq and ntpdc
+ - check timeout between request and valid response(s) instead of *any* incoming data
+
ChangeSet@1.3573, 2015-10-17 06:28:49+00:00, stenn@psp-deb1.ntp.org
ntp-4.2.8p4-sec-RC2
@@ -2172,6 +3111,53 @@ ChangeSet@1.3571, 2015-10-17 01:39:22+00:00, stenn@psp-deb1.ntp.org
ChangeLog@1.1755 +4 -1
[Sec 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+ChangeSet@1.3558.6.2, 2015-10-13 23:31:28+02:00, jnperlin@hydra.localnet
+ [Bug 2938] ntpq saveconfig command allows dangerous characters in filenames.
+ - make sure the file does not exist (no overwrite allowed)
+ - ensure text mode where applicable (windows)
+
+ ntpd/ntp_control.c@1.203.1.2 +17 -3
+ [Bug 2938] ntpq saveconfig command allows dangerous characters in filenames.
+ - make sure the file does not exist (no overwrite allowed)
+ - ensure text mode where applicable (windows)
+
+ChangeSet@1.3558.6.1, 2015-10-12 08:18:56+02:00, jnperlin@hydra.localnet
+ [Bug 2938] ntpq saveconfig command allows dangerous characters in filenames
+
+ ChangeLog@1.1743.6.1 +3 -0
+ [Bug 2938] ntpq saveconfig command allows dangerous characters in filenames
+
+ ntpd/ntp_control.c@1.203.1.1 +161 -37
+ [Bug 2938] ntpq saveconfig command allows dangerous characters in filenames
+ - added function to check safe file names ([_A-Za-z0-9][-+._A-Za-z0-9]*)
+ - checked for truncation, too, not only overrun safey
+
+ChangeSet@1.3558.5.1, 2015-10-11 14:12:31+02:00, jnperlin@hydra.localnet
+ [Bug 2939] reslist NULL pointer dereference
+ [Bug 2940] Stack exhaustion in recursive traversal of restriction list
+ -- these two where fixed together --
+
+ ChangeLog@1.1743.5.1 +4 -0
+ [Bug 2939] reslist NULL pointer dereference
+ [Bug 2940] Stack exhaustion in recursive traversal of restriction list
+
+ ntpd/ntp_request.c@1.113.1.1 +127 -39
+ [Bug 2939] reslist NULL pointer dereference
+ [Bug 2940] Stack exhaustion in recursive traversal of restriction list
+ - use iteration and a scratch pad stack to do the list reversal; deep recusrsion can be dangerous in C
+ - properly terminate processing when 'more_pkt()' indicates packet full
+ - check the return value of 'more_pkt()' when used in iterations, or trash it explicitely
+ - fixed uint32_t vs. u_long clash that would cause security problems on big-endian 64bit machines
+
+ChangeSet@1.3558.4.1, 2015-10-11 09:32:40+02:00, jnperlin@hydra.localnet
+ [Bug 2937] (NTPQ) nextvar() missing length check
+
+ ChangeLog@1.1743.4.1 +2 -0
+ [Bug 2937] (NTPQ) nextvar() missing length check
+
+ ntpq/ntpq.c@1.161.1.1 +2 -0
+ [Bug 2937] (NTPQ) nextvar() missing length check
+
ChangeSet@1.3558.3.3, 2015-10-11 08:10:20+02:00, jnperlin@hydra.localnet
[Bug 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
diff --git a/NEWS b/NEWS
index 32c9288e63bb..278943c7b52b 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,258 @@
---
+NTP 4.2.8p6
+
+Focus: Security, Bug fixes, enhancements.
+
+Severity: MEDIUM
+
+In addition to bug fixes and enhancements, this release fixes the
+following X low- and Y medium-severity vulnerabilities:
+
+* Potential Infinite Loop in 'ntpq'
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2548 / CVE-2015-8158
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS2: (AV:N/AC:M/Au:N/C:N/I:N/A:P) Base Score: 4.3 - MEDIUM
+ CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N Base Score: 5.3 - MEDIUM
+ Summary: 'ntpq' processes incoming packets in a loop in 'getresponse()'.
+ The loop's only stopping conditions are receiving a complete and
+ correct response or hitting a small number of error conditions.
+ If the packet contains incorrect values that don't trigger one of
+ the error conditions, the loop continues to receive new packets.
+ Note well, this is an attack against an instance of 'ntpq', not
+ 'ntpd', and this attack requires the attacker to do one of the
+ following:
+ * Own a malicious NTP server that the client trusts
+ * Prevent a legitimate NTP server from sending packets to
+ the 'ntpq' client
+ * MITM the 'ntpq' communications between the 'ntpq' client
+ and the NTP server
+ Mitigation:
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ Credit: This weakness was discovered by Jonathan Gardner of Cisco ASIG.
+
+* 0rigin: Zero Origin Timestamp Bypass
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2945 / CVE-2015-8138
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS2: (AV:N/AC:L/Au:N/C:N/I:P/A:N) Base Score: 5.0 - MEDIUM
+ CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N Base Score: 5.3 - MEDIUM
+ (3.7 - LOW if you score AC:L)
+ Summary: To distinguish legitimate peer responses from forgeries, a
+ client attempts to verify a response packet by ensuring that the
+ origin timestamp in the packet matches the origin timestamp it
+ transmitted in its last request. A logic error exists that
+ allows packets with an origin timestamp of zero to bypass this
+ check whenever there is not an outstanding request to the server.
+ Mitigation:
+ Configure 'ntpd' to get time from multiple sources.
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page.
+ Monitor your 'ntpd= instances.
+ Credit: This weakness was discovered by Jonathan Gardner of Cisco ASIG.
+
+* Stack exhaustion in recursive traversal of restriction list
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016
+ References: Sec 2940 / CVE-2015-7978
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:N/AC:M/Au:N/C:N/I:N/A:P) Base Score: 4.3 - MEDIUM
+ Summary: An unauthenticated 'ntpdc reslist' command can cause a
+ segmentation fault in ntpd by exhausting the call stack.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ In ntp-4.2.8, mode 7 is disabled by default. Don't enable it.
+ If you must enable mode 7:
+ configure the use of a 'requestkey' to control who can
+ issue mode 7 requests.
+ configure 'restrict noquery' to further limit mode 7
+ requests to trusted sources.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Stephen Gray at Cisco ASIG.
+
+* Off-path Denial of Service (!DoS) attack on authenticated broadcast mode
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2942 / CVE-2015-7979
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:N/AC:M/Au:N/C:N/I:P/A:P) Base Score: 5.8
+ Summary: An off-path attacker can send broadcast packets with bad
+ authentication (wrong key, mismatched key, incorrect MAC, etc)
+ to broadcast clients. It is observed that the broadcast client
+ tears down the association with the broadcast server upon
+ receiving just one bad packet.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page.
+ Monitor your 'ntpd' instances.
+ If this sort of attack is an active problem for you, you have
+ deeper problems to investigate. In this case also consider
+ having smaller NTP broadcast domains.
+ Credit: This weakness was discovered by Aanchal Malhotra of Boston
+ University.
+
+* reslist NULL pointer dereference
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2939 / CVE-2015-7977
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:N/AC:M/Au:N/C:N/I:N/A:P) Base Score: 4.3 - MEDIUM
+ Summary: An unauthenticated 'ntpdc reslist' command can cause a
+ segmentation fault in ntpd by causing a NULL pointer dereference.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p6, or later, from NTP Project Download Page or
+ the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ mode 7 is disabled by default. Don't enable it.
+ If you must enable mode 7:
+ configure the use of a 'requestkey' to control who can
+ issue mode 7 requests.
+ configure 'restrict noquery' to further limit mode 7
+ requests to trusted sources.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Stephen Gray of Cisco ASIG.
+
+* 'ntpq saveconfig' command allows dangerous characters in filenames.
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2938 / CVE-2015-7976
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:N/AC:L/Au:S/C:N/I:P/A:N) Base Score: 4.0 - MEDIUM
+ Summary: The ntpq saveconfig command does not do adequate filtering
+ of special characters from the supplied filename.
+ Note well: The ability to use the saveconfig command is controlled
+ by the 'restrict nomodify' directive, and the recommended default
+ configuration is to disable this capability. If the ability to
+ execute a 'saveconfig' is required, it can easily (and should) be
+ limited and restricted to a known small number of IP addresses.
+ Mitigation:
+ Implement BCP-38.
+ use 'restrict default nomodify' in your 'ntp.conf' file.
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page.
+ If you are unable to upgrade:
+ build NTP with 'configure --disable-saveconfig' if you will
+ never need this capability, or
+ use 'restrict default nomodify' in your 'ntp.conf' file. Be
+ careful about what IPs have the ability to send 'modify'
+ requests to 'ntpd'.
+ Monitor your ntpd instances.
+ 'saveconfig' requests are logged to syslog - monitor your syslog files.
+ Credit: This weakness was discovered by Jonathan Gardner of Cisco ASIG.
+
+* nextvar() missing length check in ntpq
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2937 / CVE-2015-7975
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:L/AC:H/Au:N/C:N/I:N/A:P) Base Score: 1.2 - LOW
+ If you score A:C, this becomes 4.0.
+ CVSSv3: (CVSS:3.0/AV:L/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L) Base Score 2.9, LOW
+ Summary: ntpq may call nextvar() which executes a memcpy() into the
+ name buffer without a proper length check against its maximum
+ length of 256 bytes. Note well that we're taking about ntpq here.
+ The usual worst-case effect of this vulnerability is that the
+ specific instance of ntpq will crash and the person or process
+ that did this will have stopped themselves.
+ Mitigation:
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ If you have scripts that feed input to ntpq make sure there are
+ some sanity checks on the input received from the "outside".
+ This is potentially more dangerous if ntpq is run as root.
+ Credit: This weakness was discovered by Jonathan Gardner at Cisco ASIG.
+
+* Skeleton Key: Any trusted key system can serve time
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2936 / CVE-2015-7974
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:N/AC:H/Au:S/C:N/I:C/A:N) Base Score: 4.9
+ Summary: Symmetric key encryption uses a shared trusted key. The
+ reported title for this issue was "Missing key check allows
+ impersonation between authenticated peers" and the report claimed
+ "A key specified only for one server should only work to
+ authenticate that server, other trusted keys should be refused."
+ Except there has never been any correlation between this trusted
+ key and server v. clients machines and there has never been any
+ way to specify a key only for one server. We have treated this as
+ an enhancement request, and ntp-4.2.8p6 includes other checks and
+ tests to strengthen clients against attacks coming from broadcast
+ servers.
+ Mitigation:
+ Implement BCP-38.
+ If this scenario represents a real or a potential issue for you,
+ upgrade to 4.2.8p6, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page, and
+ use the new field in the ntp.keys file that specifies the list
+ of IPs that are allowed to serve time. Note that this alone
+ will not protect against time packets with forged source IP
+ addresses, however other changes in ntp-4.2.8p6 provide
+ significant mitigation against broadcast attacks. MITM attacks
+ are a different story.
+ If you are unable to upgrade:
+ Don't use broadcast mode if you cannot monitor your client
+ servers.
+ If you choose to use symmetric keys to authenticate time
+ packets in a hostile environment where ephemeral time
+ servers can be created, or if it is expected that malicious
+ time servers will participate in an NTP broadcast domain,
+ limit the number of participating systems that participate
+ in the shared-key group.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Matt Street of Cisco ASIG.
+
+* Deja Vu: Replay attack on authenticated broadcast mode
+ Date Resolved: Stable (4.2.8p6) 19 Jan 2016; Dev (4.3.90) 19 Jan 2016
+ References: Sec 2935 / CVE-2015-7973
+ Affects: All ntp-4 releases up to, but not including 4.2.8p6, and
+ 4.3.0 up to, but not including 4.3.90
+ CVSS: (AV:A/AC:M/Au:N/C:N/I:P/A:P) Base Score: 4.3 - MEDIUM
+ Summary: If an NTP network is configured for broadcast operations then
+ either a man-in-the-middle attacker or a malicious participant
+ that has the same trusted keys as the victim can replay time packets.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p6, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ Don't use broadcast mode if you cannot monitor your client servers.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Aanchal Malhotra of Boston
+ University.
+
+Other fixes:
+
+* [Bug 2772] adj_systime overflows tv_usec. perlinger@ntp.org
+* [Bug 2814] msyslog deadlock when signaled. perlinger@ntp.org
+ - applied patch by shenpeng11@huawei.com with minor adjustments
+* [Bug 2882] Look at ntp_request.c:list_peers_sum(). perlinger@ntp.org
+* [Bug 2891] Deadlock in deferred DNS lookup framework. perlinger@ntp.org
+* [Bug 2892] Several test cases assume IPv6 capabilities even when
+ IPv6 is disabled in the build. perlinger@ntp.org
+ - Found this already fixed, but validation led to cleanup actions.
+* [Bug 2905] DNS lookups broken. perlinger@ntp.org
+ - added limits to stack consumption, fixed some return code handling
+* [Bug 2971] ntpq bails on ^C: select fails: Interrupted system call
+ - changed stacked/nested handling of CTRL-C. perlinger@ntp.org
+ - make CTRL-C work for retrieval and printing od MRU list. perlinger@ntp.org
+* [Bug 2980] reduce number of warnings. perlinger@ntp.org
+ - integrated several patches from Havard Eidnes (he@uninett.no)
+* [Bug 2985] bogus calculation in authkeys.c perlinger@ntp.org
+ - implement 'auth_log2()' using integer bithack instead of float calculation
+* Make leapsec_query debug messages less verbose. Harlan Stenn.
+
+---
+
NTP 4.2.8p5
Focus: Security, Bug fixes, enhancements.
diff --git a/configure b/configure
index 758ffa926a52..75724ccfc55a 100755
--- a/configure
+++ b/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.8p5.
+# Generated by GNU Autoconf 2.69 for ntp 4.2.8p6.
#
# 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.8p5'
-PACKAGE_STRING='ntp 4.2.8p5'
+PACKAGE_VERSION='4.2.8p6'
+PACKAGE_STRING='ntp 4.2.8p6'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -1616,7 +1616,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.8p5 to adapt to many kinds of systems.
+\`configure' configures ntp 4.2.8p6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1686,7 +1686,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ntp 4.2.8p5:";;
+ short | recursive ) echo "Configuration of ntp 4.2.8p6:";;
esac
cat <<\_ACEOF
@@ -1919,7 +1919,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ntp configure 4.2.8p5
+ntp configure 4.2.8p6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2749,7 +2749,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.8p5, which was
+It was created by ntp $as_me 4.2.8p6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3750,7 +3750,7 @@ fi
# Define the identity of the package.
PACKAGE='ntp'
- VERSION='4.2.8p5'
+ VERSION='4.2.8p6'
cat >>confdefs.h <<_ACEOF
@@ -37840,7 +37840,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.8p5, which was
+This file was extended by ntp $as_me 4.2.8p6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -37907,7 +37907,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.8p5
+ntp config.status 4.2.8p6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/html/miscopt.html b/html/miscopt.html
index 261b08faca60..bc520f60a62e 100644
--- a/html/miscopt.html
+++ b/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-Nov-2015 11:06<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->16-Jan-2016 13:08<!-- #EndDate -->
UTC</p>
<br clear="left">
<h4>Related Links</h4>
@@ -29,8 +29,9 @@
<dd>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 the current drift value into a temporary file and then renaming this file to replace the old version.</dd>
<dt id="dscp"><tt>dscp <i>dscp</i></tt></dt>
<dd>This command specifies the Differentiated Services Code Point (DSCP) value that is used in sent NTP packets. The default value is 46 for Expedited Forwarding (EF).</dd>
- <dt id="enable"><tt>enable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</tt><br>
- <tt>disable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</tt></dt>
+ <dt id="enable"><tt>enable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats | unpeer_crypto_early | unpeer_crypto_nak_early | unpeer_digest_early]</tt></dt>
+
+ <dt><tt>disable [auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats | unpeer_crypto_early | unpeer_crypto_nak_early | unpeer_digest_early]</tt></dt>
<dd>Provides a way to enable or disable various system options. Flags not mentioned are unaffected. Note that most of these flags can be modified remotely using <a href="ntpq.html"><tt>ntpq</tt></a> utility program's <tt>:config</tt> and <tt>config-from-file</tt> commands.
<dl>
<dt><tt>auth</tt></dt>
@@ -50,6 +51,13 @@
<dd>Enables time and frequency discipline. In effect, this switch opens and closes the feedback loop, which is useful for testing. The default for this flag is enable.</dd>
<dt><tt>stats</tt></dt>
<dd>Enables the statistics facility. See the <a href="monopt.html">Monitoring Options</a> page for further information. The default for this flag is enabled. This flag is excluded from runtime configuration using <tt>ntpq</tt>.</dd>
+| unpeer_crypto_early | unpeer_crypto_nak_early | unpeer_digest_early
+ <dt><tt>unpeer_crypto_early</tt></dt>
+ <dd>Enables the early resetting of an association in case of a crypto failure. This is generally a feature, but it can be used in a DoS attack. If you are seeing these packets being used as a DoS attack against your server, you should disable this flag. The default for this flag is enabled. This flag is excluded from runtime configuration using <tt>ntpq</tt>.</dd>
+ <dt><tt>unpeer_crypto_nak_early</tt></dt>
+ <dd>Enables the early resetting of an association in case of a crypto_NAK message. This is generally a feature, but it can be used in a DoS attack. If you are seeing these packets being used as a DoS attack against your server, you should disable this flag. The default for this flag is enabled. This flag is excluded from runtime configuration using <tt>ntpq</tt>.</dd>
+ <dt><tt>unpeer_digest_early</tt></dt>
+ <dd>Enables the early resetting of an association in case of an autokey digest failur. This is generally a feature, but it can be used in a DoS attack. If you are seeing these packets being used as a DoS attack against your server, you should disable this flag. The default for this flag is enabled. This flag is excluded from runtime configuration using <tt>ntpq</tt>.</dd>
</dl>
</dd>
<dt id="includefile"><tt>includefile <i>includefile</i></tt></dt>
diff --git a/include/Makefile.am b/include/Makefile.am
index d8b4dd2b54cf..521ac146c777 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -36,6 +36,7 @@ noinst_HEADERS = \
ntp_if.h \
ntp_intres.h \
ntp_io.h \
+ ntp_keyacc.h \
ntp_libopts.h \
ntp_lineedit.h \
ntp_lists.h \
diff --git a/include/Makefile.in b/include/Makefile.in
index 6e45e93f59e0..ef92804d14fa 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -521,6 +521,7 @@ noinst_HEADERS = \
ntp_if.h \
ntp_intres.h \
ntp_io.h \
+ ntp_keyacc.h \
ntp_libopts.h \
ntp_lineedit.h \
ntp_lists.h \
diff --git a/include/ntp.h b/include/ntp.h
index 4ffc35f6febc..6a4e9aa6f386 100644
--- a/include/ntp.h
+++ b/include/ntp.h
@@ -350,6 +350,7 @@ struct peer {
l_fp dst; /* destination timestamp */
l_fp aorg; /* origin timestamp */
l_fp borg; /* alternate origin timestamp */
+ l_fp bxmt; /* most recent broadcast transmit timestamp */
double offset; /* peer clock offset */
double delay; /* peer roundtrip delay */
double jitter; /* peer jitter (squares) */
@@ -382,7 +383,8 @@ struct peer {
* Statistic counters
*/
u_long timereset; /* time stat counters were reset */
- u_long timereceived; /* last packet received time */
+ u_long timelastrec; /* last packet received time */
+ u_long timereceived; /* last (clean) packet received time */
u_long timereachable; /* last reachable/unreachable time */
u_long sent; /* packets sent */
@@ -708,6 +710,9 @@ struct pkt {
#define PROTO_ORPHAN 26
#define PROTO_ORPHWAIT 27
#define PROTO_MODE7 28
+#define PROTO_UECRYPTO 29
+#define PROTO_UECRYPTONAK 30
+#define PROTO_UEDIGEST 31
/*
* Configuration items for the loop filter
diff --git a/include/ntp_io.h b/include/ntp_io.h
index 5950f0035d6b..d34d60a80b98 100644
--- a/include/ntp_io.h
+++ b/include/ntp_io.h
@@ -40,6 +40,8 @@
#include "libntp.h" /* This needs Something above for GETDTABLESIZE */
+#include "ntp_keyacc.h"
+
/*
* Define FNDELAY and FASYNC using O_NONBLOCK and O_ASYNC if we need
* to (and can). This is here initially for QNX, but may help for
@@ -83,7 +85,6 @@ typedef enum {
extern int qos;
SOCKET move_fd(SOCKET fd);
isc_boolean_t get_broadcastclient_flag(void);
-extern int is_ip_address(const char *, u_short, sockaddr_u *);
extern void sau_from_netaddr(sockaddr_u *, const isc_netaddr_t *);
extern void add_nic_rule(nic_rule_match match_type,
const char *if_name, int prefixlen,
diff --git a/include/ntp_keyacc.h b/include/ntp_keyacc.h
new file mode 100644
index 000000000000..730c310ac0fe
--- /dev/null
+++ b/include/ntp_keyacc.h
@@ -0,0 +1,13 @@
+/*
+ * ntp_keyacc.h - key access stuff
+ */
+#ifndef NTP_KEYACC_H
+#define NTP_KEYACC_H
+
+typedef struct keyaccess KeyAccT;
+struct keyaccess {
+ KeyAccT * next;
+ sockaddr_u addr;
+};
+
+#endif /* NTP_KEYACC_H */
diff --git a/include/ntp_stdlib.h b/include/ntp_stdlib.h
index d735b41f4ba7..98ac69eb4697 100644
--- a/include/ntp_stdlib.h
+++ b/include/ntp_stdlib.h
@@ -16,6 +16,7 @@
#include "ntp_malloc.h"
#include "ntp_string.h"
#include "ntp_syslog.h"
+#include "ntp_keyacc.h"
#ifdef __GNUC__
#define NTP_PRINTF(fmt, args) __attribute__((__format__(__printf__, fmt, args)))
@@ -69,6 +70,7 @@ extern int authdecrypt (keyid_t, u_int32 *, size_t, size_t);
extern size_t authencrypt (keyid_t, u_int32 *, size_t);
extern int authhavekey (keyid_t);
extern int authistrusted (keyid_t);
+extern int authistrustedip (keyid_t, sockaddr_u *);
extern int authreadkeys (const char *);
extern void authtrust (keyid_t, u_long);
extern int authusekey (keyid_t, int, const u_char *);
@@ -97,7 +99,7 @@ extern int ymd2yd (int, int, int);
/* a_md5encrypt.c */
extern int MD5authdecrypt (int, const u_char *, u_int32 *, size_t, size_t);
extern size_t MD5authencrypt (int, const u_char *, u_int32 *, size_t);
-extern void MD5auth_setkey (keyid_t, int, const u_char *, size_t);
+extern void MD5auth_setkey (keyid_t, int, const u_char *, size_t, KeyAccT *c);
extern u_int32 addr2refid (sockaddr_u *);
/* emalloc.c */
@@ -141,6 +143,7 @@ extern int atouint (const char *, u_long *);
extern int hextoint (const char *, u_long *);
extern const char * humanlogtime (void);
extern const char * humantime (time_t);
+extern int is_ip_address (const char *, u_short, sockaddr_u *);
extern char * mfptoa (u_int32, u_int32, short);
extern char * mfptoms (u_int32, u_int32, short);
extern const char * modetoa (size_t);
diff --git a/include/ntp_types.h b/include/ntp_types.h
index a947f30575e5..7ff31254720d 100644
--- a/include/ntp_types.h
+++ b/include/ntp_types.h
@@ -218,6 +218,7 @@ typedef uint16_t associd_t; /* association ID */
#define ASSOCID_MAX USHRT_MAX
typedef u_int32 keyid_t; /* cryptographic key ID */
#define KEYID_T_MAX (0xffffffff)
+
typedef u_int32 tstamp_t; /* NTP seconds timestamp */
/*
diff --git a/include/ntp_worker.h b/include/ntp_worker.h
index 50616b3df7dd..7720b8c85370 100644
--- a/include/ntp_worker.h
+++ b/include/ntp_worker.h
@@ -60,33 +60,35 @@ typedef sema_type *sem_ref;
#if defined(WORK_FORK)
typedef struct blocking_child_tag {
- int reusable;
- int pid;
- int req_write_pipe; /* parent */
- int resp_read_pipe;
- void * resp_read_ctx;
- int req_read_pipe; /* child */
- int resp_write_pipe;
- int ispipe;
+ int reusable;
+ int pid;
+ int req_write_pipe; /* parent */
+ int resp_read_pipe;
+ void * resp_read_ctx;
+ int req_read_pipe; /* child */
+ int resp_write_pipe;
+ int ispipe;
+ volatile u_int resp_ready_seen; /* signal/scan */
+ volatile u_int resp_ready_done; /* consumer/mainloop */
} blocking_child;
#elif defined(WORK_THREAD)
typedef struct blocking_child_tag {
-/*
- * blocking workitems and blocking_responses are dynamically-sized
- * one-dimensional arrays of pointers to blocking worker requests and
- * responses.
- *
- * IMPORTANT: This structure is shared between threads, and all access
- * that is not atomic (especially queue operations) must hold the
- * 'accesslock' semaphore to avoid data races.
- *
- * The resource management (thread/semaphore creation/destruction)
- * functions and functions just testing a handle are safe because these
- * are only changed by the main thread when no worker is running on the
- * same data structure.
- */
+ /*
+ * blocking workitems and blocking_responses are
+ * dynamically-sized one-dimensional arrays of pointers to
+ * blocking worker requests and responses.
+ *
+ * IMPORTANT: This structure is shared between threads, and all
+ * access that is not atomic (especially queue operations) must
+ * hold the 'accesslock' semaphore to avoid data races.
+ *
+ * The resource management (thread/semaphore
+ * creation/destruction) functions and functions just testing a
+ * handle are safe because these are only changed by the main
+ * thread when no worker is running on the same data structure.
+ */
int reusable;
sem_ref accesslock; /* shared access lock */
thr_ref thread_ref; /* thread 'handle' */
@@ -117,6 +119,8 @@ typedef struct blocking_child_tag {
int resp_write_pipe; /* child */
int ispipe;
void * resp_read_ctx; /* child */
+ volatile u_int resp_ready_seen; /* signal/scan */
+ volatile u_int resp_ready_done; /* consumer/mainloop */
#else
sem_ref responses_pending; /* signalling */
#endif
@@ -126,6 +130,10 @@ typedef struct blocking_child_tag {
#endif /* WORK_THREAD */
+/* we need some global tag to indicate any blocking child may be ready: */
+extern volatile u_int blocking_child_ready_seen;/* signal/scan */
+extern volatile u_int blocking_child_ready_done;/* consumer/mainloop */
+
extern blocking_child ** blocking_children;
extern size_t blocking_children_alloc;
extern int worker_per_query; /* boolean */
@@ -139,6 +147,7 @@ extern int queue_blocking_response(blocking_child *,
blocking_pipe_header *, size_t,
const blocking_pipe_header *);
extern void process_blocking_resp(blocking_child *);
+extern void harvest_blocking_responses(void);
extern int send_blocking_req_internal(blocking_child *,
blocking_pipe_header *,
void *);
diff --git a/include/parse.h b/include/parse.h
index 9b1ffb227425..02dbb3021904 100644
--- a/include/parse.h
+++ b/include/parse.h
@@ -107,9 +107,9 @@ extern unsigned int splclock (void);
/*
* some constants useful for GPS time conversion
*/
-#define GPSORIGIN 2524953600UL /* NTP origin - GPS origin in seconds */
-#define GPSWRAP 990U /* assume week count less than this in the previous epoch */
-#define GPSWEEKS 1024U /* number of weeks until the GPS epch rolls over */
+#define GPSORIGIN 2524953600UL /* NTP origin - GPS origin in seconds */
+#define GPSWRAP 990 /* assume week count less than this in the previous epoch */
+#define GPSWEEKS 1024 /* number of weeks until the GPS epch rolls over */
/*
* state flags
diff --git a/libntp/Makefile.am b/libntp/Makefile.am
index 914badb5f64b..a3b50e1298ba 100644
--- a/libntp/Makefile.am
+++ b/libntp/Makefile.am
@@ -70,6 +70,7 @@ libntp_a_SRCS = \
humandate.c \
icom.c \
iosignal.c \
+ is_ip_address.c \
lib_strbuf.c \
machines.c \
mktime.c \
diff --git a/libntp/Makefile.in b/libntp/Makefile.in
index e9a90ed1c35f..1158691bef7f 100644
--- a/libntp/Makefile.in
+++ b/libntp/Makefile.in
@@ -150,12 +150,12 @@ 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 \
- 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 \
+ 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 \
@@ -207,21 +207,21 @@ am__objects_4 = a_md5encrypt.$(OBJEXT) adjtime.$(OBJEXT) \
dolfptoa.$(OBJEXT) emalloc.$(OBJEXT) findconfig.$(OBJEXT) \
getopt.$(OBJEXT) hextoint.$(OBJEXT) hextolfp.$(OBJEXT) \
humandate.$(OBJEXT) icom.$(OBJEXT) iosignal.$(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)
+ 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)
am_libntp_a_OBJECTS = systime.$(OBJEXT) $(am__objects_4)
libntp_a_OBJECTS = $(am_libntp_a_OBJECTS)
libntpsim_a_AR = $(AR) $(ARFLAGS)
@@ -232,12 +232,12 @@ 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 \
- 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 \
+ 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 \
@@ -660,6 +660,7 @@ libntp_a_SRCS = \
humandate.c \
icom.c \
iosignal.c \
+ is_ip_address.c \
lib_strbuf.c \
machines.c \
mktime.c \
@@ -806,6 +807,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inet_pton.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/interfaceiter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iosignal.Po@am__quote@
+@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)/log.Po@am__quote@
diff --git a/libntp/authkeys.c b/libntp/authkeys.c
index f7462a2463ae..36fdd8b7c118 100644
--- a/libntp/authkeys.c
+++ b/libntp/authkeys.c
@@ -15,6 +15,7 @@
#include "ntp_string.h"
#include "ntp_malloc.h"
#include "ntp_stdlib.h"
+#include "ntp_keyacc.h"
/*
* Structure to store keys in in the hash table.
@@ -25,6 +26,7 @@ struct savekey {
symkey * hlink; /* next in hash bucket */
DECL_DLIST_LINK(symkey, llink); /* for overall & free lists */
u_char * secret; /* shared secret */
+ KeyAccT * keyacclist; /* Private key access list */
u_long lifetime; /* remaining lifetime */
keyid_t keyid; /* key identifier */
u_short type; /* OpenSSL digest NID */
@@ -48,13 +50,13 @@ struct symkey_alloc_tag {
symkey_alloc * authallocs;
#endif /* DEBUG */
-static inline u_short auth_log2(double x);
-static void auth_resize_hashtable(void);
-static void allocsymkey(symkey **, keyid_t, u_short,
- u_short, u_long, u_short, u_char *);
-static void freesymkey(symkey *, symkey **);
+static u_short auth_log2(size_t);
+static void auth_resize_hashtable(void);
+static void allocsymkey(symkey **, keyid_t, u_short, u_short,
+ u_long, u_short, u_char *, KeyAccT *);
+static void freesymkey(symkey *, symkey **);
#ifdef DEBUG
-static void free_auth_mem(void);
+static void free_auth_mem(void);
#endif
symkey key_listhead; /* list of all in-use keys */;
@@ -97,6 +99,7 @@ u_char *cache_secret; /* secret */
u_short cache_secretsize; /* secret length */
int cache_type; /* OpenSSL digest NID */
u_short cache_flags; /* flags that wave */
+KeyAccT *cache_keyacclist; /* key access list */
/*
@@ -142,6 +145,7 @@ free_auth_mem(void)
key_hash = NULL;
cache_keyid = 0;
cache_flags = 0;
+ cache_keyacclist = NULL;
for (alloc = authallocs; alloc != NULL; alloc = next_alloc) {
next_alloc = alloc->link;
free(alloc->mem);
@@ -210,10 +214,33 @@ auth_prealloc_symkeys(
}
-static inline u_short
-auth_log2(double x)
+static u_short
+auth_log2(size_t x)
{
- return (u_short)(log10(x) / log10(2));
+ /*
+ ** bithack to calculate floor(log2(x))
+ **
+ ** This assumes
+ ** - (sizeof(size_t) is a power of two
+ ** - CHAR_BITS is a power of two
+ ** - returning zero for arguments <= 0 is OK.
+ **
+ ** Does only shifts, masks and sums in integer arithmetic in
+ ** log2(CHAR_BIT*sizeof(size_t)) steps. (that is, 5/6 steps for
+ ** 32bit/64bit size_t)
+ */
+ int s;
+ int r = 0;
+ size_t m = ~(size_t)0;
+
+ for (s = sizeof(size_t) / 2 * CHAR_BIT; s != 0; s >>= 1) {
+ m <<= s;
+ if (x & m)
+ r += s;
+ else
+ x <<= s;
+ }
+ return (u_short)r;
}
@@ -234,7 +261,7 @@ auth_resize_hashtable(void)
symkey * sk;
totalkeys = authnumkeys + authnumfreekeys;
- hashbits = auth_log2(totalkeys / 4.0) + 1;
+ hashbits = auth_log2(totalkeys / 4) + 1;
hashbits = max(4, hashbits);
hashbits = min(15, hashbits);
@@ -267,7 +294,8 @@ allocsymkey(
u_short type,
u_long lifetime,
u_short secretsize,
- u_char * secret
+ u_char * secret,
+ KeyAccT * ka
)
{
symkey * sk;
@@ -281,6 +309,7 @@ allocsymkey(
sk->type = type;
sk->secretsize = secretsize;
sk->secret = secret;
+ sk->keyacclist = ka;
sk->lifetime = lifetime;
LINK_SLIST(*bucket, sk, hlink);
LINK_TAIL_DLIST(key_listhead, sk, llink);
@@ -412,6 +441,7 @@ authhavekey(
cache_flags = sk->flags;
cache_secret = sk->secret;
cache_secretsize = sk->secretsize;
+ cache_keyacclist = sk->keyacclist;
return TRUE;
}
@@ -451,6 +481,7 @@ authtrust(
if (cache_keyid == id) {
cache_flags = 0;
cache_keyid = 0;
+ cache_keyacclist = NULL;
}
/*
@@ -480,7 +511,7 @@ authtrust(
} else {
lifetime = 0;
}
- allocsymkey(bucket, id, KEY_TRUSTED, 0, lifetime, 0, NULL);
+ allocsymkey(bucket, id, KEY_TRUSTED, 0, lifetime, 0, NULL, NULL);
}
@@ -511,6 +542,49 @@ authistrusted(
return TRUE;
}
+
+/*
+ * authistrustedip - determine if the IP is OK for the keyid
+ */
+ int
+ authistrustedip(
+ keyid_t keyno,
+ sockaddr_u * sau
+ )
+{
+ symkey * sk;
+ symkey ** bucket;
+ KeyAccT * kal;
+ KeyAccT * k;
+
+ if (keyno == cache_keyid)
+ kal = cache_keyacclist;
+ else {
+ authkeyuncached++;
+ bucket = &key_hash[KEYHASH(keyno)];
+ for (sk = *bucket; sk != NULL; sk = sk->hlink) {
+ if (keyno == sk->keyid)
+ break;
+ }
+ if (NULL == sk || !(KEY_TRUSTED & sk->flags)) {
+ INSIST(!"authistrustedip: keyid not found/trusted!");
+ return FALSE;
+ }
+ kal = sk->keyacclist;
+ }
+
+ if (NULL == kal)
+ return TRUE;
+
+ for (k = kal; k; k = k->next) {
+ if (SOCK_EQ(&k->addr, sau))
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+
/* Note: There are two locations below where 'strncpy()' is used. While
* this function is a hazard by itself, it's essential that it is used
* here. Bug 1243 involved that the secret was filled with NUL bytes
@@ -527,7 +601,8 @@ MD5auth_setkey(
keyid_t keyno,
int keytype,
const u_char *key,
- size_t len
+ size_t len,
+ KeyAccT *ka
)
{
symkey * sk;
@@ -553,6 +628,7 @@ MD5auth_setkey(
sk->type = (u_short)keytype;
secretsize = len;
sk->secretsize = (u_short)secretsize;
+ sk->keyacclist = ka;
#ifndef DISABLE_BUG1243_FIX
memcpy(sk->secret, key, secretsize);
#else
@@ -563,6 +639,7 @@ MD5auth_setkey(
if (cache_keyid == keyno) {
cache_flags = 0;
cache_keyid = 0;
+ cache_keyacclist = NULL;
}
return;
}
@@ -580,7 +657,7 @@ MD5auth_setkey(
strncpy((char *)secret, (const char *)key, secretsize);
#endif
allocsymkey(bucket, keyno, 0, (u_short)keytype, 0,
- (u_short)secretsize, secret);
+ (u_short)secretsize, secret, ka);
#ifdef DEBUG
if (debug >= 4) {
size_t j;
diff --git a/libntp/authreadkeys.c b/libntp/authreadkeys.c
index 95a357a8c665..1d4ee3059345 100644
--- a/libntp/authreadkeys.c
+++ b/libntp/authreadkeys.c
@@ -5,10 +5,12 @@
#include <stdio.h>
#include <ctype.h>
+#include "ntpd.h" /* Only for DPRINTF */
#include "ntp_fp.h"
#include "ntp.h"
#include "ntp_syslog.h"
#include "ntp_stdlib.h"
+#include "ntp_keyacc.h"
#ifdef OPENSSL
#include "openssl/objects.h"
@@ -85,6 +87,7 @@ static void log_maybe(u_int*, const char*, ...) NTP_PRINTF(2, 3);
typedef struct keydata KeyDataT;
struct keydata {
KeyDataT *next; /* queue/stack link */
+ KeyAccT *keyacclist; /* key access list */
keyid_t keyid; /* stored key ID */
u_short keytype; /* stored key type */
u_short seclen; /* length of secret */
@@ -228,6 +231,7 @@ authreadkeys(
len = strlen(token);
if (len <= 20) { /* Bug 2537 */
next = emalloc(sizeof(KeyDataT) + len);
+ next->keyacclist = NULL;
next->keyid = keyno;
next->keytype = keytype;
next->seclen = len;
@@ -257,11 +261,48 @@ authreadkeys(
}
len = jlim/2; /* hmmmm.... what about odd length?!? */
next = emalloc(sizeof(KeyDataT) + len);
+ next->keyacclist = NULL;
next->keyid = keyno;
next->keytype = keytype;
next->seclen = len;
memcpy(next->secbuf, keystr, len);
}
+
+ token = nexttok(&line);
+DPRINTF(0, ("authreadkeys: full access list <%s>\n", (token) ? token : "NULL"));
+ if (token != NULL) { /* A comma-separated IP access list */
+ char *tp = token;
+
+ while (tp) {
+ char *i;
+ KeyAccT ka;
+
+ i = strchr(tp, (int)',');
+ if (i)
+ *i = '\0';
+DPRINTF(0, ("authreadkeys: access list: <%s>\n", tp));
+
+ if (is_ip_address(tp, AF_UNSPEC, &ka.addr)) {
+ KeyAccT *kap;
+
+ kap = emalloc(sizeof(KeyAccT));
+ memcpy(kap, &ka, sizeof ka);
+ kap->next = next->keyacclist;
+ next->keyacclist = kap;
+ } else {
+ log_maybe(&nerr,
+ "authreadkeys: invalid IP address <%s> for key %d",
+ tp, keyno);
+ }
+
+ if (i) {
+ tp = i + 1;
+ } else {
+ tp = 0;
+ }
+ }
+ }
+
INSIST(NULL != next);
next->next = list;
list = next;
@@ -286,7 +327,7 @@ authreadkeys(
while (NULL != (next = list)) {
list = next->next;
MD5auth_setkey(next->keyid, next->keytype,
- next->secbuf, next->seclen);
+ next->secbuf, next->seclen, next->keyacclist);
/* purge secrets from memory before free()ing it */
memset(next, 0, sizeof(*next) + next->seclen);
free(next);
@@ -297,6 +338,14 @@ authreadkeys(
/* Mop up temporary storage before bailing out. */
while (NULL != (next = list)) {
list = next->next;
+
+ while (next->keyacclist) {
+ KeyAccT *kap = next->keyacclist;
+
+ next->keyacclist = kap->next;
+ free(kap);
+ }
+
/* purge secrets from memory before free()ing it */
memset(next, 0, sizeof(*next) + next->seclen);
free(next);
diff --git a/libntp/authusekey.c b/libntp/authusekey.c
index 0ccf522b238a..ff449d3df6fc 100644
--- a/libntp/authusekey.c
+++ b/libntp/authusekey.c
@@ -29,6 +29,6 @@ authusekey(
if (0 == len)
return 0;
- MD5auth_setkey(keyno, keytype, str, len);
+ MD5auth_setkey(keyno, keytype, str, len, NULL);
return 1;
}
diff --git a/libntp/is_ip_address.c b/libntp/is_ip_address.c
new file mode 100644
index 000000000000..1f2137645f71
--- /dev/null
+++ b/libntp/is_ip_address.c
@@ -0,0 +1,129 @@
+/*
+ * is_ip_address
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if 0
+#include <stdio.h>
+#include <signal.h>
+#ifdef HAVE_FNMATCH_H
+# include <fnmatch.h>
+# if !defined(FNM_CASEFOLD) && defined(FNM_IGNORECASE)
+# define FNM_CASEFOLD FNM_IGNORECASE
+# endif
+#endif
+#ifdef HAVE_SYS_PARAM_H
+# include <sys/param.h>
+#endif
+#ifdef HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+#ifdef HAVE_SYS_SOCKIO_H /* UXPV: SIOC* #defines (Frank Vance <fvance@waii.com>) */
+# include <sys/sockio.h>
+#endif
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
+#endif
+
+#include "ntp_assert.h"
+#include "ntp_stdlib.h"
+#include "safecast.h"
+
+#if 0
+#include "ntp_machine.h"
+#include "ntpd.h"
+#include "ntp_io.h"
+#include "iosignal.h"
+#include "ntp_lists.h"
+#include "ntp_refclock.h"
+#include "ntp_worker.h"
+#include "ntp_request.h"
+#include "timevalops.h"
+#include "timespecops.h"
+#include "ntpd-opts.h"
+#endif
+
+/* Don't include ISC's version of IPv6 variables and structures */
+#define ISC_IPV6_H 1
+#include <isc/mem.h>
+#include <isc/interfaceiter.h>
+#include <isc/netaddr.h>
+#include <isc/result.h>
+#include <isc/sockaddr.h>
+
+
+/*
+ * Code to tell if we have an IP address
+ * If we have then return the sockaddr structure
+ * and set the return value
+ * see the bind9/getaddresses.c for details
+ */
+int
+is_ip_address(
+ const char * host,
+ u_short af,
+ sockaddr_u * addr
+ )
+{
+ struct in_addr in4;
+ struct addrinfo hints;
+ struct addrinfo *result;
+ struct sockaddr_in6 *resaddr6;
+ char tmpbuf[128];
+ char *pch;
+
+ REQUIRE(host != NULL);
+ REQUIRE(addr != NULL);
+
+ ZERO_SOCK(addr);
+
+ /*
+ * Try IPv4, then IPv6. In order to handle the extended format
+ * for IPv6 scoped addresses (address%scope_ID), we'll use a local
+ * working buffer of 128 bytes. The length is an ad-hoc value, but
+ * should be enough for this purpose; the buffer can contain a string
+ * of at least 80 bytes for scope_ID in addition to any IPv6 numeric
+ * addresses (up to 46 bytes), the delimiter character and the
+ * terminating NULL character.
+ */
+ if (AF_UNSPEC == af || AF_INET == af)
+ if (inet_pton(AF_INET, host, &in4) == 1) {
+ AF(addr) = AF_INET;
+ SET_ADDR4N(addr, in4.s_addr);
+
+ return TRUE;
+ }
+
+ if (AF_UNSPEC == af || AF_INET6 == af)
+ if (sizeof(tmpbuf) > strlen(host)) {
+ if ('[' == host[0]) {
+ strlcpy(tmpbuf, &host[1], sizeof(tmpbuf));
+ pch = strchr(tmpbuf, ']');
+ if (pch != NULL)
+ *pch = '\0';
+ } else {
+ strlcpy(tmpbuf, host, sizeof(tmpbuf));
+ }
+ ZERO(hints);
+ hints.ai_family = AF_INET6;
+ hints.ai_flags |= AI_NUMERICHOST;
+ if (getaddrinfo(tmpbuf, NULL, &hints, &result) == 0) {
+ AF(addr) = AF_INET6;
+ resaddr6 = UA_PTR(struct sockaddr_in6, result->ai_addr);
+ SET_ADDR6N(addr, resaddr6->sin6_addr);
+ SET_SCOPE(addr, resaddr6->sin6_scope_id);
+
+ freeaddrinfo(result);
+ return TRUE;
+ }
+ }
+ /*
+ * If we got here it was not an IP address
+ */
+ return FALSE;
+}
diff --git a/libntp/ntp_worker.c b/libntp/ntp_worker.c
index f5642e10dc1e..087f06c95308 100644
--- a/libntp/ntp_worker.c
+++ b/libntp/ntp_worker.c
@@ -27,6 +27,8 @@ blocking_child ** blocking_children;
size_t blocking_children_alloc;
int worker_per_query; /* boolean */
int intres_req_pending;
+volatile u_int blocking_child_ready_seen;
+volatile u_int blocking_child_ready_done;
#ifndef HAVE_IO_COMPLETION_PORT
@@ -262,6 +264,31 @@ process_blocking_resp(
req_child_exit(c);
}
+void
+harvest_blocking_responses(void)
+{
+ int idx;
+ blocking_child* cp;
+ u_int scseen, scdone;
+
+ scseen = blocking_child_ready_seen;
+ scdone = blocking_child_ready_done;
+ if (scdone != scseen) {
+ blocking_child_ready_done = scseen;
+ for (idx = 0; idx < blocking_children_alloc; idx++) {
+ cp = blocking_children[idx];
+ if (NULL == cp)
+ continue;
+ scseen = cp->resp_ready_seen;
+ scdone = cp->resp_ready_done;
+ if (scdone != scseen) {
+ cp->resp_ready_done = scseen;
+ process_blocking_resp(cp);
+ }
+ }
+ }
+}
+
/*
* blocking_child_common runs as a forked child or a thread
diff --git a/libntp/systime.c b/libntp/systime.c
index c89d157cb2ad..29f1e86375e2 100644
--- a/libntp/systime.c
+++ b/libntp/systime.c
@@ -323,9 +323,18 @@ adj_systime(
else
quant = 1e-6;
ticks = (long)(dtemp / quant + .5);
- adjtv.tv_usec = (long)(ticks * quant * 1e6);
- dtemp -= adjtv.tv_usec / 1e6;
- sys_residual = dtemp;
+ adjtv.tv_usec = (long)(ticks * quant * 1.e6 + .5);
+ /* The rounding in the conversions could us push over the
+ * limits: make sure the result is properly normalised!
+ * note: sign comes later, all numbers non-negative here.
+ */
+ if (adjtv.tv_usec >= 1000000) {
+ adjtv.tv_sec += 1;
+ adjtv.tv_usec -= 1000000;
+ dtemp -= 1.;
+ }
+ /* set the new residual with leftover from correction */
+ sys_residual = dtemp - adjtv.tv_usec * 1.e-6;
/*
* Convert to signed seconds and microseconds for the Unix
diff --git a/libntp/work_thread.c b/libntp/work_thread.c
index 49e90c16c326..11e3267d4a8b 100644
--- a/libntp/work_thread.c
+++ b/libntp/work_thread.c
@@ -25,13 +25,38 @@
#define CHILD_EXIT_REQ ((blocking_pipe_header *)(intptr_t)-1)
#define CHILD_GONE_RESP CHILD_EXIT_REQ
+/* Queue size increments:
+ * The request queue grows a bit faster than the response queue -- the
+ * deamon can push requests and pull results faster on avarage than the
+ * worker can process requests and push results... If this really pays
+ * off is debatable.
+ */
#define WORKITEMS_ALLOC_INC 16
#define RESPONSES_ALLOC_INC 4
+/* Fiddle with min/max stack sizes. 64kB minimum seems to work, so we
+ * set the maximum to 256kB. If the minimum goes below the
+ * system-defined minimum stack size, we have to adjust accordingly.
+ */
#ifndef THREAD_MINSTACKSIZE
-#define THREAD_MINSTACKSIZE (64U * 1024)
+# define THREAD_MINSTACKSIZE (64U * 1024)
+#endif
+#ifndef __sun
+#if defined(PTHREAD_STACK_MIN) && THREAD_MINSTACKSIZE < PTHREAD_STACK_MIN
+# undef THREAD_MINSTACKSIZE
+# define THREAD_MINSTACKSIZE PTHREAD_STACK_MIN
+#endif
#endif
+#ifndef THREAD_MAXSTACKSIZE
+# define THREAD_MAXSTACKSIZE (256U * 1024)
+#endif
+#if THREAD_MAXSTACKSIZE < THREAD_MINSTACKSIZE
+# undef THREAD_MAXSTACKSIZE
+# define THREAD_MAXSTACKSIZE THREAD_MINSTACKSIZE
+#endif
+
+
#ifdef SYS_WINNT
# define thread_exit(c) _endthreadex(c)
@@ -148,15 +173,19 @@ ensure_workitems_empty_slot(
size_t new_alloc;
size_t slots_used;
+ size_t sidx;
slots_used = c->head_workitem - c->tail_workitem;
if (slots_used >= c->workitems_alloc) {
new_alloc = c->workitems_alloc + WORKITEMS_ALLOC_INC;
c->workitems = erealloc(c->workitems, new_alloc * each);
+ for (sidx = c->workitems_alloc; sidx < new_alloc; ++sidx)
+ c->workitems[sidx] = NULL;
c->tail_workitem = 0;
c->head_workitem = c->workitems_alloc;
c->workitems_alloc = new_alloc;
}
+ INSIST(NULL == c->workitems[c->head_workitem % c->workitems_alloc]);
return (0 == slots_used);
}
@@ -180,15 +209,19 @@ ensure_workresp_empty_slot(
size_t new_alloc;
size_t slots_used;
+ size_t sidx;
slots_used = c->head_response - c->tail_response;
if (slots_used >= c->responses_alloc) {
new_alloc = c->responses_alloc + RESPONSES_ALLOC_INC;
c->responses = erealloc(c->responses, new_alloc * each);
+ for (sidx = c->responses_alloc; sidx < new_alloc; ++sidx)
+ c->responses[sidx] = NULL;
c->tail_response = 0;
c->head_response = c->responses_alloc;
c->responses_alloc = new_alloc;
}
+ INSIST(NULL == c->responses[c->head_response % c->responses_alloc]);
return (0 == slots_used);
}
@@ -478,11 +511,11 @@ start_blocking_thread_internal(
# endif
pthread_attr_t thr_attr;
int rc;
- int saved_errno;
int pipe_ends[2]; /* read then write */
int is_pipe;
int flags;
- size_t stacksize;
+ size_t ostacksize;
+ size_t nstacksize;
sigset_t saved_sig_mask;
c->thread_ref = NULL;
@@ -522,21 +555,29 @@ start_blocking_thread_internal(
pthread_attr_setdetachstate(&thr_attr, PTHREAD_CREATE_DETACHED);
#if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE)
- rc = pthread_attr_getstacksize(&thr_attr, &stacksize);
- if (-1 == rc) {
+ rc = pthread_attr_getstacksize(&thr_attr, &ostacksize);
+ if (0 != rc) {
msyslog(LOG_ERR,
- "start_blocking_thread: pthread_attr_getstacksize %m");
- } else if (stacksize < THREAD_MINSTACKSIZE) {
- rc = pthread_attr_setstacksize(&thr_attr,
- THREAD_MINSTACKSIZE);
- if (-1 == rc)
+ "start_blocking_thread: pthread_attr_getstacksize() -> %s",
+ strerror(rc));
+ } else {
+ if (ostacksize < THREAD_MINSTACKSIZE)
+ nstacksize = THREAD_MINSTACKSIZE;
+ else if (ostacksize > THREAD_MAXSTACKSIZE)
+ nstacksize = THREAD_MAXSTACKSIZE;
+ else
+ nstacksize = ostacksize;
+ if (nstacksize != ostacksize)
+ rc = pthread_attr_setstacksize(&thr_attr, nstacksize);
+ if (0 != rc)
msyslog(LOG_ERR,
- "start_blocking_thread: pthread_attr_setstacksize(0x%lx -> 0x%lx) %m",
- (u_long)stacksize,
- (u_long)THREAD_MINSTACKSIZE);
+ "start_blocking_thread: pthread_attr_setstacksize(0x%lx -> 0x%lx) -> %s",
+ (u_long)ostacksize, (u_long)nstacksize,
+ strerror(rc));
}
#else
- UNUSED_ARG(stacksize);
+ UNUSED_ARG(nstacksize);
+ UNUSED_ARG(ostacksize);
#endif
#if defined(PTHREAD_SCOPE_SYSTEM) && defined(NEED_PTHREAD_SCOPE_SYSTEM)
pthread_attr_setscope(&thr_attr, PTHREAD_SCOPE_SYSTEM);
@@ -545,12 +586,11 @@ start_blocking_thread_internal(
block_thread_signals(&saved_sig_mask);
rc = pthread_create(&c->thr_table[0], &thr_attr,
&blocking_thread, c);
- saved_errno = errno;
pthread_sigmask(SIG_SETMASK, &saved_sig_mask, NULL);
pthread_attr_destroy(&thr_attr);
if (0 != rc) {
- errno = saved_errno;
- msyslog(LOG_ERR, "pthread_create() blocking child: %m");
+ msyslog(LOG_ERR, "start_blocking_thread: pthread_create() -> %s",
+ strerror(rc));
exit(1);
}
c->thread_ref = &c->thr_table[0];
diff --git a/ntpd/invoke-ntp.conf.texi b/ntpd/invoke-ntp.conf.texi
index 32b41e69e192..1d8a621629d4 100644
--- a/ntpd/invoke-ntp.conf.texi
+++ b/ntpd/invoke-ntp.conf.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.conf.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:30:49 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:17:59 AM by AutoGen 5.18.5
# From the definitions ntp.conf.def
# and the template file agtexi-file.tpl
@end ignore
@@ -2294,8 +2294,8 @@ otherwise, should be avoided.
@item @code{dscp} @kbd{value}
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
-@item @code{enable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats}]}
-@item @code{disable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats}]}
+@item @code{enable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats} | @code{unpeer_crypto_early} | @code{unpeer_crypto_nak_early} | @code{unpeer_digest_early}]}
+@item @code{disable} @code{[@code{auth} | @code{bclient} | @code{calibrate} | @code{kernel} | @code{mode7} | @code{monitor} | @code{ntp} | @code{stats} | @code{unpeer_crypto_early} | @code{unpeer_crypto_nak_early} | @code{unpeer_digest_early}]}
Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
@@ -2367,6 +2367,67 @@ See the
section for further information.
The default for this flag is
@code{disable}.
+@item @code{unpeer_crypto_early}
+By default, if
+@code{ntpd(1ntpdmdoc)}
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+@code{peerstats}
+file for evidence of any of these attacks.
+The
+default for this flag is
+@code{enable}.
+@item @code{unpeer_crypto_nak_early}
+By default, if
+@code{ntpd(1ntpdmdoc)}
+receives a crypto-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+@code{peerstats}
+file for evidence of any of these attacks.
+The
+default for this flag is
+@code{enable}.
+@item @code{unpeer_digest_early}
+By default, if
+@code{ntpd(1ntpdmdoc)}
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+@code{peerstats}
+file for evidence of any of these attacks.
+The
+default for this flag is
+@code{enable}.
@end table
@item @code{includefile} @kbd{includefile}
This command allows additional configuration commands
diff --git a/ntpd/invoke-ntp.keys.texi b/ntpd/invoke-ntp.keys.texi
index b755d97a47fe..915044e99f0a 100644
--- a/ntpd/invoke-ntp.keys.texi
+++ b/ntpd/invoke-ntp.keys.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.keys.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:30:52 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:18:02 AM by AutoGen 5.18.5
# From the definitions ntp.keys.def
# and the template file agtexi-file.tpl
@end ignore
@@ -37,7 +37,7 @@ as the configuration file.
Key entries use a fixed format of the form
@example
-@kbd{keyno} @kbd{type} @kbd{key}
+@kbd{keyno} @kbd{type} @kbd{key} @kbd{opt_IP_list}
@end example
where
@@ -47,7 +47,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
@kbd{key}
-is the key itself.
+is the key itself, and
+@kbd{opt_IP_list}
+is an optional comma-separated list of IPs
+that are allowed to serve time.
+If
+@kbd{opt_IP_list}
+is empty,
+any properly-authenticated server message will be
+accepted.
The
@kbd{key}
diff --git a/ntpd/invoke-ntpd.texi b/ntpd/invoke-ntpd.texi
index 66ce19dec1cb..50e8f653a9b7 100644
--- a/ntpd/invoke-ntpd.texi
+++ b/ntpd/invoke-ntpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpd.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:30:54 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:18:04 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.8p5
+ntpd - NTP daemon program - Ver. 4.2.8p6
Usage: ntpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ <server1> ... <serverN> ]
Flg Arg Option-Name Description
diff --git a/ntpd/keyword-gen-utd b/ntpd/keyword-gen-utd
index 467351b65e3a..99c72201e8b7 100644
--- a/ntpd/keyword-gen-utd
+++ b/ntpd/keyword-gen-utd
@@ -1 +1 @@
- * Generated 2015-06-25 03:57:00 UTC diff_ignore_line
+ * Generated 2016-01-16 08:33:03 UTC diff_ignore_line
diff --git a/ntpd/keyword-gen.c b/ntpd/keyword-gen.c
index 42e94973f81e..2e7f62129f6d 100644
--- a/ntpd/keyword-gen.c
+++ b/ntpd/keyword-gen.c
@@ -202,6 +202,9 @@ struct key_tok ntp_keywords[] = {
{ "ntp", T_Ntp, FOLLBY_TOKEN },
{ "mode7", T_Mode7, FOLLBY_TOKEN },
{ "stats", T_Stats, FOLLBY_TOKEN },
+{ "unpeer_crypto_early", T_UEcrypto, FOLLBY_TOKEN },
+{ "unpeer_crypto_nak_early", T_UEcryptonak, FOLLBY_TOKEN },
+{ "unpeer_digest_early", T_UEdigest, FOLLBY_TOKEN },
/* rlimit_option */
{ "memlock", T_Memlock, FOLLBY_TOKEN },
{ "stacksize", T_Stacksize, FOLLBY_TOKEN },
diff --git a/ntpd/ntp.conf.5man b/ntpd/ntp.conf.5man
index 6e6aa326bd9e..1e5e464e63c9 100644
--- a/ntpd/ntp.conf.5man
+++ b/ntpd/ntp.conf.5man
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp.conf 5man "07 Jan 2016" "4.2.8p5" "File Formats"
+.TH ntp.conf 5man "20 Jan 2016" "4.2.8p6" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-8qayqp/ag-Vraqpp)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gsaOxR/ag-XsaGwR)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:35 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:45 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2573,9 +2573,9 @@ otherwise, should be avoided.
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.TP 7
-.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
+.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[] | \f\*[B-Font]unpeer_crypto_early\f[] | \f\*[B-Font]unpeer_crypto_nak_early\f[] | \f\*[B-Font]unpeer_digest_early\f[]]
.TP 7
-.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
+.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[] | \f\*[B-Font]unpeer_crypto_early\f[] | \f\*[B-Font]unpeer_crypto_nak_early\f[] | \f\*[B-Font]unpeer_digest_early\f[]]
Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
@@ -2655,6 +2655,70 @@ See the
section for further information.
The default for this flag is
\f\*[B-Font]disable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_crypto_early\f[]
+By default, if
+\fCntpd\f[]\fR(1ntpdmdoc)\f[]
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_crypto_nak_early\f[]
+By default, if
+\fCntpd\f[]\fR(1ntpdmdoc)\f[]
+receives a crypto-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_digest_early\f[]
+By default, if
+\fCntpd\f[]\fR(1ntpdmdoc)\f[]
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
.RE
.TP 7
.NOP \f\*[B-Font]includefile\f[] \f\*[I-Font]includefile\f[]
@@ -3027,7 +3091,7 @@ RFC5905
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The syntax checking is not picky; some combinations of
diff --git a/ntpd/ntp.conf.5mdoc b/ntpd/ntp.conf.5mdoc
index 800e995e0f61..f2b418b31187 100644
--- a/ntpd/ntp.conf.5mdoc
+++ b/ntpd/ntp.conf.5mdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_CONF 5mdoc File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:57 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:07 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -2393,16 +2393,18 @@ a 6\-bit code. The default value is 46, signifying Expedited Forwarding.
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
.It Xo Ic disable
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
Provides a way to enable or disable various server options.
@@ -2476,6 +2478,67 @@ See the
section for further information.
The default for this flag is
.Ic disable .
+.It Cm unpeer_crypto_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_crypto_nak_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives a crypto\-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto\-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_digest_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
.El
.It Ic includefile Ar includefile
This command allows additional configuration commands
@@ -2834,7 +2897,7 @@ A snapshot of this documentation is available in HTML format in
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The syntax checking is not picky; some combinations of
diff --git a/ntpd/ntp.conf.def b/ntpd/ntp.conf.def
index 43835bc7632e..25d9fd09f408 100644
--- a/ntpd/ntp.conf.def
+++ b/ntpd/ntp.conf.def
@@ -2395,16 +2395,18 @@ a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
.It Xo Ic disable
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
Provides a way to enable or disable various server options.
@@ -2478,6 +2480,67 @@ See the
section for further information.
The default for this flag is
.Ic disable .
+.It Cm unpeer_crypto_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_crypto_nak_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives a crypto-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_digest_early
+By default, if
+.Xr ntpd 1ntpdmdoc
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
.El
.It Ic includefile Ar includefile
This command allows additional configuration commands
diff --git a/ntpd/ntp.conf.html b/ntpd/ntp.conf.html
index d10a88d4e5e9..c50f0e1eec62 100644
--- a/ntpd/ntp.conf.html
+++ b/ntpd/ntp.conf.html
@@ -33,7 +33,7 @@ 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.8p5 of <code>ntp.conf</code>.
+ <p>This document applies to version 4.2.8p6 of <code>ntp.conf</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -2288,7 +2288,7 @@ drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
<br><dt><code>dscp</code> <kbd>value</kbd><dd>This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
-<br><dt><code>enable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</code><br><dt><code>disable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats]</code><dd>Provides a way to enable or disable various server options.
+<br><dt><code>enable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats | unpeer_crypto_early | unpeer_crypto_nak_early | unpeer_digest_early]</code><br><dt><code>disable</code> <code>[auth | bclient | calibrate | kernel | mode7 | monitor | ntp | stats | unpeer_crypto_early | unpeer_crypto_nak_early | unpeer_digest_early]</code><dd>Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
can be controlled remotely using the
@@ -2351,6 +2351,64 @@ See the
section for further information.
The default for this flag is
<code>disable</code>.
+<br><dt><code>unpeer_crypto_early</code><dd>By default, if
+<code>ntpd(1ntpdmdoc)</code>
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+<code>peerstats</code>
+file for evidence of any of these attacks.
+The
+default for this flag is
+<code>enable</code>.
+<br><dt><code>unpeer_crypto_nak_early</code><dd>By default, if
+<code>ntpd(1ntpdmdoc)</code>
+receives a crypto-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+<code>peerstats</code>
+file for evidence of any of these attacks.
+The
+default for this flag is
+<code>enable</code>.
+<br><dt><code>unpeer_digest_early</code><dd>By default, if
+<code>ntpd(1ntpdmdoc)</code>
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+<code>peerstats</code>
+file for evidence of any of these attacks.
+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
to be included from a separate file.
diff --git a/ntpd/ntp.conf.man.in b/ntpd/ntp.conf.man.in
index f701b41fd2be..7a5b7502d842 100644
--- a/ntpd/ntp.conf.man.in
+++ b/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 "07 Jan 2016" "4.2.8p5" "File Formats"
+.TH ntp.conf 5 "20 Jan 2016" "4.2.8p6" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-8qayqp/ag-Vraqpp)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-gsaOxR/ag-XsaGwR)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:35 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:45 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2573,9 +2573,9 @@ otherwise, should be avoided.
This option specifies the Differentiated Services Control Point (DSCP) value,
a 6-bit code. The default value is 46, signifying Expedited Forwarding.
.TP 7
-.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
+.NOP \f\*[B-Font]enable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[] | \f\*[B-Font]unpeer_crypto_early\f[] | \f\*[B-Font]unpeer_crypto_nak_early\f[] | \f\*[B-Font]unpeer_digest_early\f[]]
.TP 7
-.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[]]
+.NOP \f\*[B-Font]disable\f[] [\f\*[B-Font]auth\f[] | \f\*[B-Font]bclient\f[] | \f\*[B-Font]calibrate\f[] | \f\*[B-Font]kernel\f[] | \f\*[B-Font]mode7\f[] | \f\*[B-Font]monitor\f[] | \f\*[B-Font]ntp\f[] | \f\*[B-Font]stats\f[] | \f\*[B-Font]unpeer_crypto_early\f[] | \f\*[B-Font]unpeer_crypto_nak_early\f[] | \f\*[B-Font]unpeer_digest_early\f[]]
Provides a way to enable or disable various server options.
Flags not mentioned are unaffected.
Note that all of these flags
@@ -2655,6 +2655,70 @@ See the
section for further information.
The default for this flag is
\f\*[B-Font]disable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_crypto_early\f[]
+By default, if
+\fCntpd\f[]\fR(@NTPD_MS@)\f[]
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_crypto_nak_early\f[]
+By default, if
+\fCntpd\f[]\fR(@NTPD_MS@)\f[]
+receives a crypto-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
+.TP 7
+.NOP \f\*[B-Font]unpeer_digest_early\f[]
+By default, if
+\fCntpd\f[]\fR(@NTPD_MS@)\f[]
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+\f\*[B-Font]peerstats\f[]
+file for evidence of any of these attacks.
+The
+default for this flag is
+\f\*[B-Font]enable\f[].
.RE
.TP 7
.NOP \f\*[B-Font]includefile\f[] \f\*[I-Font]includefile\f[]
@@ -3027,7 +3091,7 @@ RFC5905
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The syntax checking is not picky; some combinations of
diff --git a/ntpd/ntp.conf.mdoc.in b/ntpd/ntp.conf.mdoc.in
index 7ad4cc1b3a12..fe85d854883f 100644
--- a/ntpd/ntp.conf.mdoc.in
+++ b/ntpd/ntp.conf.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:57 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:07 AM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -2393,16 +2393,18 @@ a 6\-bit code. The default value is 46, signifying Expedited Forwarding.
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
.It Xo Ic disable
.Oo
.Cm auth | Cm bclient |
.Cm calibrate | Cm kernel |
-.Cm mode7 | monitor |
-.Cm ntp | Cm stats
+.Cm mode7 | Cm monitor |
+.Cm ntp | Cm stats |
+.Cm unpeer_crypto_early | Cm unpeer_crypto_nak_early | Cm unpeer_digest_early
.Oc
.Xc
Provides a way to enable or disable various server options.
@@ -2476,6 +2478,67 @@ See the
section for further information.
The default for this flag is
.Ic disable .
+.It Cm unpeer_crypto_early
+By default, if
+.Xr ntpd @NTPD_MS@
+receives an autokey packet that fails TEST9,
+a crypto failure,
+the association is immediately cleared.
+This is almost certainly a feature,
+but if, in spite of the current recommendation of not using autokey,
+you are
+.B still
+using autokey
+.B and
+you are seeing this sort of DoS attack
+disabling this flag will delay
+tearing down the association until the reachability counter
+becomes zero.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_crypto_nak_early
+By default, if
+.Xr ntpd @NTPD_MS@
+receives a crypto\-NAK packet that
+passes the duplicate packet and origin timestamp checks
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery if a server key has changed,
+a properly forged and appropriately delivered crypto\-NAK packet
+can be used in a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
+.It Cm unpeer_digest_early
+By default, if
+.Xr ntpd @NTPD_MS@
+receives what should be an authenticated packet
+that passes other packet sanity checks but
+contains an invalid digest
+the association is immediately cleared.
+While this is generally a feature
+as it allows for quick recovery,
+if this type of packet is carefully forged and sent
+during an appropriate window it can be used for a DoS attack.
+If you have active noticable problems with this type of DoS attack
+then you should consider
+disabling this option.
+You can check your
+.Cm peerstats
+file for evidence of any of these attacks.
+The
+default for this flag is
+.Ic enable .
.El
.It Ic includefile Ar includefile
This command allows additional configuration commands
@@ -2834,7 +2897,7 @@ A snapshot of this documentation is available in HTML format in
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The syntax checking is not picky; some combinations of
diff --git a/ntpd/ntp.keys.5man b/ntpd/ntp.keys.5man
index bb0028bd15bc..6d270b611bb5 100644
--- a/ntpd/ntp.keys.5man
+++ b/ntpd/ntp.keys.5man
@@ -1,8 +1,8 @@
-.TH ntp.keys 5man "07 Jan 2016" "4.2.8p5" "File Formats"
+.TH ntp.keys 5man "20 Jan 2016" "4.2.8p6" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:51 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
@@ -66,7 +66,7 @@ Key entries use a fixed format of the form
.ne 2
.in +4
-\f\*[I-Font]keyno\f[] \f\*[I-Font]type\f[] \f\*[I-Font]key\f[]
+\f\*[I-Font]keyno\f[] \f\*[I-Font]type\f[] \f\*[I-Font]key\f[] \f\*[I-Font]opt_IP_list\f[]
.in -4
.sp \n(Ppu
.ne 2
@@ -78,7 +78,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
\f\*[I-Font]key\f[]
-is the key itself.
+is the key itself, and
+\f\*[I-Font]opt_IP_list\f[]
+is an optional comma-separated list of IPs
+that are allowed to serve time.
+If
+\f\*[I-Font]opt_IP_list\f[]
+is empty,
+any properly-authenticated server message will be
+accepted.
.sp \n(Ppu
.ne 2
@@ -160,7 +168,7 @@ the default name of the configuration file
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpd/ntp.keys.5mdoc b/ntpd/ntp.keys.5mdoc
index 9524989cb1ad..6091e0959dfb 100644
--- a/ntpd/ntp.keys.5mdoc
+++ b/ntpd/ntp.keys.5mdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_KEYS 5mdoc File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:00 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:10 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
@@ -44,7 +44,7 @@ The key file uses the same comment conventions
as the configuration file.
Key entries use a fixed format of the form
.Pp
-.D1 Ar keyno type key
+.D1 Ar keyno type key opt_IP_list
.Pp
where
.Ar keyno
@@ -53,7 +53,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
.Ar key
-is the key itself.
+is the key itself, and
+.Ar opt_IP_list
+is an optional comma\-separated list of IPs
+that are allowed to serve time.
+If
+.Ar opt_IP_list
+is empty,
+any properly\-authenticated server message will be
+accepted.
.Pp
The
.Ar key
@@ -147,7 +155,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpd/ntp.keys.def b/ntpd/ntp.keys.def
index dcb3d55ead9a..efe774c2e541 100644
--- a/ntpd/ntp.keys.def
+++ b/ntpd/ntp.keys.def
@@ -43,7 +43,7 @@ The key file uses the same comment conventions
as the configuration file.
Key entries use a fixed format of the form
.Pp
-.D1 Ar keyno type key
+.D1 Ar keyno type key opt_IP_list
.Pp
where
.Ar keyno
@@ -52,7 +52,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
.Ar key
-is the key itself.
+is the key itself, and
+.Ar opt_IP_list
+is an optional comma-separated list of IPs
+that are allowed to serve time.
+If
+.Ar opt_IP_list
+is empty,
+any properly-authenticated server message will be
+accepted.
.Pp
The
.Ar key
diff --git a/ntpd/ntp.keys.html b/ntpd/ntp.keys.html
index 738f9e03e73f..409e7fcaf16a 100644
--- a/ntpd/ntp.keys.html
+++ b/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.8p5 of <code>ntp.keys</code>.
+ <p>This document applies to version 4.2.8p6 of <code>ntp.keys</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -93,7 +93,7 @@ may be arbitrarily set in the keys file.
as the configuration file.
Key entries use a fixed format of the form
-<pre class="example"> <kbd>keyno</kbd> <kbd>type</kbd> <kbd>key</kbd>
+<pre class="example"> <kbd>keyno</kbd> <kbd>type</kbd> <kbd>key</kbd> <kbd>opt_IP_list</kbd>
</pre>
<p>where
<kbd>keyno</kbd>
@@ -102,7 +102,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
<kbd>key</kbd>
-is the key itself.
+is the key itself, and
+<kbd>opt_IP_list</kbd>
+is an optional comma-separated list of IPs
+that are allowed to serve time.
+If
+<kbd>opt_IP_list</kbd>
+is empty,
+any properly-authenticated server message will be
+accepted.
<p>The
<kbd>key</kbd>
diff --git a/ntpd/ntp.keys.man.in b/ntpd/ntp.keys.man.in
index 78d5f091d325..2e97e270f98e 100644
--- a/ntpd/ntp.keys.man.in
+++ b/ntpd/ntp.keys.man.in
@@ -1,8 +1,8 @@
-.TH ntp.keys 5 "07 Jan 2016" "4.2.8p5" "File Formats"
+.TH ntp.keys 5 "20 Jan 2016" "4.2.8p6" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:51 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
@@ -66,7 +66,7 @@ Key entries use a fixed format of the form
.ne 2
.in +4
-\f\*[I-Font]keyno\f[] \f\*[I-Font]type\f[] \f\*[I-Font]key\f[]
+\f\*[I-Font]keyno\f[] \f\*[I-Font]type\f[] \f\*[I-Font]key\f[] \f\*[I-Font]opt_IP_list\f[]
.in -4
.sp \n(Ppu
.ne 2
@@ -78,7 +78,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
\f\*[I-Font]key\f[]
-is the key itself.
+is the key itself, and
+\f\*[I-Font]opt_IP_list\f[]
+is an optional comma-separated list of IPs
+that are allowed to serve time.
+If
+\f\*[I-Font]opt_IP_list\f[]
+is empty,
+any properly-authenticated server message will be
+accepted.
.sp \n(Ppu
.ne 2
@@ -160,7 +168,7 @@ the default name of the configuration file
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpd/ntp.keys.mdoc.in b/ntpd/ntp.keys.mdoc.in
index 40c821e517d7..3b4fa2ceb9df 100644
--- a/ntpd/ntp.keys.mdoc.in
+++ b/ntpd/ntp.keys.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:00 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:10 AM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
@@ -44,7 +44,7 @@ The key file uses the same comment conventions
as the configuration file.
Key entries use a fixed format of the form
.Pp
-.D1 Ar keyno type key
+.D1 Ar keyno type key opt_IP_list
.Pp
where
.Ar keyno
@@ -53,7 +53,15 @@ is a positive integer (between 1 and 65534),
is the message digest algorithm,
and
.Ar key
-is the key itself.
+is the key itself, and
+.Ar opt_IP_list
+is an optional comma\-separated list of IPs
+that are allowed to serve time.
+If
+.Ar opt_IP_list
+is empty,
+any properly\-authenticated server message will be
+accepted.
.Pp
The
.Ar key
@@ -147,7 +155,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpd/ntp_config.c b/ntpd/ntp_config.c
index 1c754bd1613d..cb3273746989 100644
--- a/ntpd/ntp_config.c
+++ b/ntpd/ntp_config.c
@@ -53,6 +53,8 @@
#include "ntp_parser.h"
#include "ntpd-opts.h"
+extern int yyparse(void);
+
/* Bug 2817 */
#if defined(HAVE_SYS_MMAN_H)
# include <sys/mman.h>
@@ -2981,6 +2983,18 @@ apply_enable_disable(
proto_config(PROTO_FILEGEN, enable, 0., NULL);
break;
+ case T_UEcrypto:
+ proto_config(PROTO_UECRYPTO, enable, 0., NULL);
+ break;
+
+ case T_UEcryptonak:
+ proto_config(PROTO_UECRYPTONAK, enable, 0., NULL);
+ break;
+
+ case T_UEdigest:
+ proto_config(PROTO_UEDIGEST, enable, 0., NULL);
+ break;
+
#ifdef BC_LIST_FRAMEWORK_NOT_YET_USED
case T_Bc_bugXXXX:
pentry = bc_list;
diff --git a/ntpd/ntp_control.c b/ntpd/ntp_control.c
index 2e174d0210ab..e5a567e789d6 100644
--- a/ntpd/ntp_control.c
+++ b/ntpd/ntp_control.c
@@ -75,6 +75,7 @@ static void ctl_putarray (const char *, double *, int);
static void ctl_putsys (int);
static void ctl_putpeer (int, struct peer *);
static void ctl_putfs (const char *, tstamp_t);
+static void ctl_printf (const char *, ...) NTP_PRINTF(1, 2);
#ifdef REFCLOCK
static void ctl_putclock (int, struct refclockstat *, int);
#endif /* REFCLOCK */
@@ -111,6 +112,8 @@ static void unset_trap (struct recvbuf *, int);
static struct ctl_trap *ctlfindtrap(sockaddr_u *,
struct interface *);
+int/*BOOL*/ is_safe_filename(const char * name);
+
static const struct ctl_proc control_codes[] = {
{ CTL_OP_UNSPEC, NOAUTH, control_unspec },
{ CTL_OP_READSTAT, NOAUTH, read_status },
@@ -873,10 +876,66 @@ ctl_error(
CTL_HEADER_LEN);
}
+int/*BOOL*/
+is_safe_filename(const char * name)
+{
+ /* We need a strict validation of filenames we should write: The
+ * daemon might run with special permissions and is remote
+ * controllable, so we better take care what we allow as file
+ * name!
+ *
+ * The first character must be digit or a letter from the ASCII
+ * base plane or a '_' ([_A-Za-z0-9]), the following characters
+ * must be from [-._+A-Za-z0-9].
+ *
+ * We do not trust the character classification much here: Since
+ * the NTP protocol makes no provisions for UTF-8 or local code
+ * pages, we strictly require the 7bit ASCII code page.
+ *
+ * The following table is a packed bit field of 128 two-bit
+ * groups. The LSB in each group tells us if a character is
+ * acceptable at the first position, the MSB if the character is
+ * accepted at any other position.
+ *
+ * This does not ensure that the file name is syntactically
+ * correct (multiple dots will not work with VMS...) but it will
+ * exclude potential globbing bombs and directory traversal. It
+ * also rules out drive selection. (For systems that have this
+ * notion, like Windows or VMS.)
+ */
+ static const uint32_t chclass[8] = {
+ 0x00000000, 0x00000000,
+ 0x28800000, 0x000FFFFF,
+ 0xFFFFFFFC, 0xC03FFFFF,
+ 0xFFFFFFFC, 0x003FFFFF
+ };
+
+ u_int widx, bidx, mask;
+ if (!*name)
+ return FALSE;
+
+ mask = 1u;
+ while (0 != (widx = (u_char)*name++)) {
+ bidx = (widx & 15) << 1;
+ widx = widx >> 4;
+ if (widx >= sizeof(chclass))
+ return FALSE;
+ if (0 == ((chclass[widx] >> bidx) & mask))
+ return FALSE;
+ mask |= 2u;
+ }
+ return TRUE;
+}
+
+
/*
* save_config - Implements ntpq -c "saveconfig <filename>"
* Writes current configuration including any runtime
* changes by ntpq's :config or config-from-file
+ *
+ * Note: There should be no buffer overflow or truncation in the
+ * processing of file names -- both cause security problems. This is bit
+ * painful to code but essential here.
*/
void
save_config(
@@ -904,24 +963,38 @@ save_config(
"\\/" /* separator and critical char for POSIX */
#endif
;
-
-
char reply[128];
#ifdef SAVECONFIG
+ static const char savedconfig_eq[] = "savedconfig=";
+
+ /* Build a safe open mode from the available mode flags. We want
+ * to create a new file and write it in text mode (when
+ * applicable -- only Windows does this...)
+ */
+ static const int openmode = O_CREAT | O_TRUNC | O_WRONLY
+# if defined(O_EXCL) /* posix, vms */
+ | O_EXCL
+# elif defined(_O_EXCL) /* windows is alway very special... */
+ | _O_EXCL
+# endif
+# if defined(_O_TEXT) /* windows, again */
+ | _O_TEXT
+#endif
+ ;
+
char filespec[128];
char filename[128];
char fullpath[512];
- const char savedconfig_eq[] = "savedconfig=";
char savedconfig[sizeof(savedconfig_eq) + sizeof(filename)];
time_t now;
int fd;
FILE *fptr;
+ int prc;
+ size_t reqlen;
#endif
if (RES_NOMODIFY & restrict_mask) {
- snprintf(reply, sizeof(reply),
- "saveconfig prohibited by restrict ... nomodify");
- ctl_putdata(reply, strlen(reply), 0);
+ ctl_printf("%s", "saveconfig prohibited by restrict ... nomodify");
ctl_flushpkt(0);
NLOG(NLOG_SYSINFO)
msyslog(LOG_NOTICE,
@@ -933,9 +1006,7 @@ save_config(
#ifdef SAVECONFIG
if (NULL == saveconfigdir) {
- snprintf(reply, sizeof(reply),
- "saveconfig prohibited, no saveconfigdir configured");
- ctl_putdata(reply, strlen(reply), 0);
+ ctl_printf("%s", "saveconfig prohibited, no saveconfigdir configured");
ctl_flushpkt(0);
NLOG(NLOG_SYSINFO)
msyslog(LOG_NOTICE,
@@ -944,21 +1015,79 @@ save_config(
return;
}
- if (0 == reqend - reqpt)
+ /* The length checking stuff gets serious. Do not assume a NUL
+ * byte can be found, but if so, use it to calculate the needed
+ * buffer size. If the available buffer is too short, bail out;
+ * likewise if there is no file spec. (The latter will not
+ * happen when using NTPQ, but there are other ways to craft a
+ * network packet!)
+ */
+ reqlen = (size_t)(reqend - reqpt);
+ if (0 != reqlen) {
+ char * nulpos = (char*)memchr(reqpt, 0, reqlen);
+ if (NULL != nulpos)
+ reqlen = (size_t)(nulpos - reqpt);
+ }
+ if (0 == reqlen)
return;
+ if (reqlen >= sizeof(filespec)) {
+ ctl_printf("saveconfig exceeded maximum raw name length (%u)",
+ (u_int)sizeof(filespec));
+ ctl_flushpkt(0);
+ msyslog(LOG_NOTICE,
+ "saveconfig exceeded maximum raw name length from %s",
+ stoa(&rbufp->recv_srcadr));
+ return;
+ }
- strlcpy(filespec, reqpt, sizeof(filespec));
- time(&now);
-
+ /* copy data directly as we exactly know the size */
+ memcpy(filespec, reqpt, reqlen);
+ filespec[reqlen] = '\0';
+
/*
* allow timestamping of the saved config filename with
* strftime() format such as:
* ntpq -c "saveconfig ntp-%Y%m%d-%H%M%S.conf"
* XXX: Nice feature, but not too safe.
+ * YYY: The check for permitted characters in file names should
+ * weed out the worst. Let's hope 'strftime()' does not
+ * develop pathological problems.
*/
+ time(&now);
if (0 == strftime(filename, sizeof(filename), filespec,
- localtime(&now)))
+ localtime(&now)))
+ {
+ /*
+ * If we arrive here, 'strftime()' balked; most likely
+ * the buffer was too short. (Or it encounterd an empty
+ * format, or just a format that expands to an empty
+ * string.) We try to use the original name, though this
+ * is very likely to fail later if there are format
+ * specs in the string. Note that truncation cannot
+ * happen here as long as both buffers have the same
+ * size!
+ */
strlcpy(filename, filespec, sizeof(filename));
+ }
+
+ /*
+ * Check the file name for sanity. This might/will rule out file
+ * names that would be legal but problematic, and it blocks
+ * directory traversal.
+ */
+ if (!is_safe_filename(filename)) {
+ ctl_printf("saveconfig rejects unsafe file name '%s'",
+ filename);
+ ctl_flushpkt(0);
+ msyslog(LOG_NOTICE,
+ "saveconfig rejects unsafe file name from %s",
+ stoa(&rbufp->recv_srcadr));
+ return;
+ }
+
+ /*
+ * XXX: This next test may not be needed with is_safe_filename()
+ */
/* block directory/drive traversal */
/* TALOS-CAN-0062: block directory traversal for VMS, too */
@@ -968,38 +1097,49 @@ save_config(
ctl_putdata(reply, strlen(reply), 0);
ctl_flushpkt(0);
msyslog(LOG_NOTICE,
- "saveconfig with path from %s rejected",
+ "saveconfig rejects unsafe file name from %s",
stoa(&rbufp->recv_srcadr));
return;
}
- snprintf(fullpath, sizeof(fullpath), "%s%s",
- saveconfigdir, filename);
+ /* concatenation of directory and path can cause another
+ * truncation...
+ */
+ prc = snprintf(fullpath, sizeof(fullpath), "%s%s",
+ saveconfigdir, filename);
+ if (prc < 0 || prc >= sizeof(fullpath)) {
+ ctl_printf("saveconfig exceeded maximum path length (%u)",
+ (u_int)sizeof(fullpath));
+ ctl_flushpkt(0);
+ msyslog(LOG_NOTICE,
+ "saveconfig exceeded maximum path length from %s",
+ stoa(&rbufp->recv_srcadr));
+ return;
+ }
- fd = open(fullpath, O_CREAT | O_TRUNC | O_WRONLY,
- S_IRUSR | S_IWUSR);
+ fd = open(fullpath, openmode, S_IRUSR | S_IWUSR);
if (-1 == fd)
fptr = NULL;
else
fptr = fdopen(fd, "w");
if (NULL == fptr || -1 == dump_all_config_trees(fptr, 1)) {
- snprintf(reply, sizeof(reply),
- "Unable to save configuration to file %s",
- filename);
+ ctl_printf("Unable to save configuration to file '%s': %m",
+ filename);
msyslog(LOG_ERR,
"saveconfig %s from %s failed", filename,
stoa(&rbufp->recv_srcadr));
} else {
- snprintf(reply, sizeof(reply),
- "Configuration saved to %s", filename);
+ ctl_printf("Configuration saved to '%s'", filename);
msyslog(LOG_NOTICE,
- "Configuration saved to %s (requested by %s)",
+ "Configuration saved to '%s' (requested by %s)",
fullpath, stoa(&rbufp->recv_srcadr));
/*
* save the output filename in system variable
* savedconfig, retrieved with:
* ntpq -c "rv 0 savedconfig"
+ * Note: the way 'savedconfig' is defined makes overflow
+ * checks unnecessary here.
*/
snprintf(savedconfig, sizeof(savedconfig), "%s%s",
savedconfig_eq, filename);
@@ -1009,11 +1149,9 @@ save_config(
if (NULL != fptr)
fclose(fptr);
#else /* !SAVECONFIG follows */
- snprintf(reply, sizeof(reply),
- "saveconfig unavailable, configured with --disable-saveconfig");
-#endif
-
- ctl_putdata(reply, strlen(reply), 0);
+ ctl_printf("%s",
+ "saveconfig unavailable, configured with --disable-saveconfig");
+#endif
ctl_flushpkt(0);
}
@@ -1757,6 +1895,29 @@ ctl_putarray(
ctl_putdata(buffer, (unsigned)(cp - buffer), 0);
}
+/*
+ * ctl_printf - put a formatted string into the data buffer
+ */
+static void
+ctl_printf(
+ const char * fmt,
+ ...
+ )
+{
+ static const char * ellipsis = "[...]";
+ va_list va;
+ char fmtbuf[128];
+ int rc;
+
+ va_start(va, fmt);
+ rc = vsnprintf(fmtbuf, sizeof(fmtbuf), fmt, va);
+ va_end(va);
+ if (rc < 0 || rc >= sizeof(fmtbuf))
+ strcpy(fmtbuf + sizeof(fmtbuf) - strlen(ellipsis) - 1,
+ ellipsis);
+ ctl_putdata(fmtbuf, strlen(fmtbuf), 0);
+}
+
/*
* ctl_putsys - output a system variable
diff --git a/ntpd/ntp_crypto.c b/ntpd/ntp_crypto.c
index 7dd39a7c93a8..86541bdc16c4 100644
--- a/ntpd/ntp_crypto.c
+++ b/ntpd/ntp_crypto.c
@@ -269,7 +269,7 @@ session_key(
memcpy(&keyid, dgst, 4);
keyid = ntohl(keyid);
if (lifetime != 0) {
- MD5auth_setkey(keyno, crypto_nid, dgst, len);
+ MD5auth_setkey(keyno, crypto_nid, dgst, len, NULL);
authtrust(keyno, lifetime);
}
DPRINTF(2, ("session_key: %s > %s %08x %08x hash %08x life %lu\n",
diff --git a/ntpd/ntp_io.c b/ntpd/ntp_io.c
index dd23459dff3a..ee52b1a5c389 100644
--- a/ntpd/ntp_io.c
+++ b/ntpd/ntp_io.c
@@ -62,6 +62,9 @@
# endif
#endif
+#if defined(HAVE_SIGNALED_IO) && defined(DEBUG_TIMING)
+# undef DEBUG_TIMING
+#endif
/*
* setsockopt does not always have the same arg declaration
@@ -280,9 +283,12 @@ static int addr_samesubnet (const sockaddr_u *, const sockaddr_u *,
const sockaddr_u *, const sockaddr_u *);
static int create_sockets (u_short);
static SOCKET open_socket (sockaddr_u *, int, int, endpt *);
-static char * fdbits (int, fd_set *);
static void set_reuseaddr (int);
static isc_boolean_t socket_broadcast_enable (struct interface *, SOCKET, sockaddr_u *);
+
+#if !defined(HAVE_IO_COMPLETION_PORT) && !defined(HAVE_SIGNALED_IO)
+static char * fdbits (int, const fd_set *);
+#endif
#ifdef OS_MISSES_SPECIFIC_ROUTE_UPDATES
static isc_boolean_t socket_broadcast_disable (struct interface *, sockaddr_u *);
#endif
@@ -337,12 +343,15 @@ static int cmp_addr_distance(const sockaddr_u *,
#if !defined(HAVE_IO_COMPLETION_PORT)
static inline int read_network_packet (SOCKET, struct interface *, l_fp);
static void ntpd_addremove_io_fd (int, int, int);
-static input_handler_t input_handler;
+static void input_handler_scan (const l_fp*, const fd_set*);
+static int/*BOOL*/ sanitize_fdset (int errc);
#ifdef REFCLOCK
static inline int read_refclock_packet (SOCKET, struct refclockio *, l_fp);
#endif
+#ifdef HAVE_SIGNALED_IO
+static void input_handler (l_fp*);
+#endif
#endif
-
#ifndef HAVE_IO_COMPLETION_PORT
@@ -455,11 +464,9 @@ init_io(void)
addremove_io_fd = &ntpd_addremove_io_fd;
#endif
-#ifdef SYS_WINNT
+#if defined(SYS_WINNT)
init_io_completion_port();
-#endif
-
-#if defined(HAVE_SIGNALED_IO)
+#elif defined(HAVE_SIGNALED_IO)
(void) set_signal(input_handler);
#endif
}
@@ -475,7 +482,8 @@ ntpd_addremove_io_fd(
UNUSED_ARG(is_pipe);
#ifdef HAVE_SIGNALED_IO
- init_socket_sig(fd);
+ if (!remove_it)
+ init_socket_sig(fd);
#endif /* not HAVE_SIGNALED_IO */
maintain_activefds(fd, remove_it);
@@ -717,78 +725,6 @@ addr_samesubnet(
/*
- * Code to tell if we have an IP address
- * If we have then return the sockaddr structure
- * and set the return value
- * see the bind9/getaddresses.c for details
- */
-int
-is_ip_address(
- const char * host,
- u_short af,
- sockaddr_u * addr
- )
-{
- struct in_addr in4;
- struct addrinfo hints;
- struct addrinfo *result;
- struct sockaddr_in6 *resaddr6;
- char tmpbuf[128];
- char *pch;
-
- REQUIRE(host != NULL);
- REQUIRE(addr != NULL);
-
- ZERO_SOCK(addr);
-
- /*
- * Try IPv4, then IPv6. In order to handle the extended format
- * for IPv6 scoped addresses (address%scope_ID), we'll use a local
- * working buffer of 128 bytes. The length is an ad-hoc value, but
- * should be enough for this purpose; the buffer can contain a string
- * of at least 80 bytes for scope_ID in addition to any IPv6 numeric
- * addresses (up to 46 bytes), the delimiter character and the
- * terminating NULL character.
- */
- if (AF_UNSPEC == af || AF_INET == af)
- if (inet_pton(AF_INET, host, &in4) == 1) {
- AF(addr) = AF_INET;
- SET_ADDR4N(addr, in4.s_addr);
-
- return TRUE;
- }
-
- if (AF_UNSPEC == af || AF_INET6 == af)
- if (sizeof(tmpbuf) > strlen(host)) {
- if ('[' == host[0]) {
- strlcpy(tmpbuf, &host[1], sizeof(tmpbuf));
- pch = strchr(tmpbuf, ']');
- if (pch != NULL)
- *pch = '\0';
- } else {
- strlcpy(tmpbuf, host, sizeof(tmpbuf));
- }
- ZERO(hints);
- hints.ai_family = AF_INET6;
- hints.ai_flags |= AI_NUMERICHOST;
- if (getaddrinfo(tmpbuf, NULL, &hints, &result) == 0) {
- AF(addr) = AF_INET6;
- resaddr6 = UA_PTR(struct sockaddr_in6, result->ai_addr);
- SET_ADDR6N(addr, resaddr6->sin6_addr);
- SET_SCOPE(addr, resaddr6->sin6_scope_id);
-
- freeaddrinfo(result);
- return TRUE;
- }
- }
- /*
- * If we got here it was not an IP address
- */
- return FALSE;
-}
-
-
-/*
* interface list enumerator - visitor pattern
*/
void
@@ -2354,6 +2290,7 @@ get_broadcastclient_flag(void)
{
return (broadcast_client_enabled);
}
+
/*
* Check to see if the address is a multicast address
*/
@@ -3204,15 +3141,15 @@ sendpkt(
}
-#if !defined(HAVE_IO_COMPLETION_PORT)
+#if !defined(HAVE_IO_COMPLETION_PORT) && !defined(HAVE_SIGNALED_IO)
/*
* fdbits - generate ascii representation of fd_set (FAU debug support)
* HFDF format - highest fd first.
*/
static char *
fdbits(
- int count,
- fd_set *set
+ int count,
+ const fd_set* set
)
{
static char buffer[256];
@@ -3228,7 +3165,7 @@ fdbits(
return buffer;
}
-
+#endif
#ifdef REFCLOCK
/*
@@ -3265,7 +3202,7 @@ read_refclock_packet(
/* TALOS-CAN-0064: avoid signed/unsigned clashes that can lead
* to buffer overrun and memory corruption
*/
- if (rp->datalen <= 0 || rp->datalen > sizeof(rb->recv_space))
+ if (rp->datalen <= 0 || (size_t)rp->datalen > sizeof(rb->recv_space))
read_count = sizeof(rb->recv_space);
else
read_count = (u_int)rp->datalen;
@@ -3582,6 +3519,7 @@ io_handler(void)
* and - lacking a hardware reference clock - I have
* yet to learn about anything else that is.
*/
+ ++handler_calls;
rdfdes = activefds;
# if !defined(VMS) && !defined(SYS_VXWORKS)
nfound = select(maxactivefd + 1, &rdfdes, NULL,
@@ -3590,20 +3528,29 @@ io_handler(void)
/* make select() wake up after one second */
{
struct timeval t1;
-
- t1.tv_sec = 1;
+ t1.tv_sec = 1;
t1.tv_usec = 0;
nfound = select(maxactivefd + 1,
&rdfdes, NULL, NULL,
&t1);
}
# endif /* VMS, VxWorks */
+ if (nfound < 0 && sanitize_fdset(errno)) {
+ struct timeval t1;
+ t1.tv_sec = 0;
+ t1.tv_usec = 0;
+ rdfdes = activefds;
+ nfound = select(maxactivefd + 1,
+ &rdfdes, NULL, NULL,
+ &t1);
+ }
+
if (nfound > 0) {
l_fp ts;
get_systime(&ts);
- input_handler(&ts);
+ input_handler_scan(&ts, &rdfdes);
} else if (nfound == -1 && errno != EINTR) {
msyslog(LOG_ERR, "select() error: %m");
}
@@ -3619,46 +3566,22 @@ io_handler(void)
# endif /* HAVE_SIGNALED_IO */
}
+#ifdef HAVE_SIGNALED_IO
/*
* input_handler - receive packets asynchronously
+ *
+ * ALWAYS IN SIGNAL HANDLER CONTEXT -- only async-safe functions allowed!
*/
-static void
+static RETSIGTYPE
input_handler(
l_fp * cts
)
{
- int buflen;
int n;
- u_int idx;
- int doing;
- SOCKET fd;
- blocking_child *c;
struct timeval tvzero;
- l_fp ts; /* Timestamp at BOselect() gob */
-#ifdef DEBUG_TIMING
- l_fp ts_e; /* Timestamp at EOselect() gob */
-#endif
fd_set fds;
- size_t select_count;
- endpt * ep;
-#ifdef REFCLOCK
- struct refclockio *rp;
- int saved_errno;
- const char * clk;
-#endif
-#ifdef HAS_ROUTING_SOCKET
- struct asyncio_reader * asyncio_reader;
- struct asyncio_reader * next_asyncio_reader;
-#endif
-
- handler_calls++;
- select_count = 0;
-
- /*
- * If we have something to do, freeze a timestamp.
- * See below for the other cases (nothing left to do or error)
- */
- ts = *cts;
+
+ ++handler_calls;
/*
* Do a poll to see who has data
@@ -3668,82 +3591,133 @@ input_handler(
tvzero.tv_sec = tvzero.tv_usec = 0;
n = select(maxactivefd + 1, &fds, NULL, NULL, &tvzero);
+ if (n < 0 && sanitize_fdset(errno)) {
+ fds = activefds;
+ tvzero.tv_sec = tvzero.tv_usec = 0;
+ n = select(maxactivefd + 1, &fds, NULL, NULL, &tvzero);
+ }
+ if (n > 0)
+ input_handler_scan(cts, &fds);
+}
+#endif /* HAVE_SIGNALED_IO */
+
+
+/*
+ * Try to sanitize the global FD set
+ *
+ * SIGNAL HANDLER CONTEXT if HAVE_SIGNALED_IO, ordinary userspace otherwise
+ */
+static int/*BOOL*/
+sanitize_fdset(
+ int errc
+ )
+{
+ int j, b, maxscan;
+# ifndef HAVE_SIGNALED_IO
/*
- * If there are no packets waiting just return
+ * extended FAU debugging output
*/
- if (n < 0) {
- int err = errno;
- int j, b, prior;
- /*
- * extended FAU debugging output
- */
- if (err != EINTR)
- msyslog(LOG_ERR,
- "select(%d, %s, 0L, 0L, &0.0) error: %m",
- maxactivefd + 1,
- fdbits(maxactivefd, &activefds));
- if (err != EBADF)
- goto ih_return;
- for (j = 0, prior = 0; j <= maxactivefd; j++) {
- if (FD_ISSET(j, &activefds)) {
- if (-1 != read(j, &b, 0)) {
- prior = j;
- continue;
- }
- msyslog(LOG_ERR,
- "Removing bad file descriptor %d from select set",
- j);
- FD_CLR(j, &activefds);
- if (j == maxactivefd)
- maxactivefd = prior;
+ if (errc != EINTR) {
+ msyslog(LOG_ERR,
+ "select(%d, %s, 0L, 0L, &0.0) error: %m",
+ maxactivefd + 1,
+ fdbits(maxactivefd, &activefds));
+ }
+# endif
+
+ if (errc != EBADF)
+ return FALSE;
+
+ /* if we have oviously bad FDs, try to sanitize the FD set. */
+ for (j = 0, maxscan = 0; j <= maxactivefd; j++) {
+ if (FD_ISSET(j, &activefds)) {
+ if (-1 != read(j, &b, 0)) {
+ maxscan = j;
+ continue;
}
+# ifndef HAVE_SIGNALED_IO
+ msyslog(LOG_ERR,
+ "Removing bad file descriptor %d from select set",
+ j);
+# endif
+ FD_CLR(j, &activefds);
}
- goto ih_return;
}
- else if (n == 0)
- goto ih_return;
+ if (maxactivefd != maxscan)
+ maxactivefd = maxscan;
+ return TRUE;
+}
+
+/*
+ * scan the known FDs (clocks, servers, ...) for presence in a 'fd_set'.
+ *
+ * SIGNAL HANDLER CONTEXT if HAVE_SIGNALED_IO, ordinary userspace otherwise
+ */
+static void
+input_handler_scan(
+ const l_fp * cts,
+ const fd_set * pfds
+ )
+{
+ int buflen;
+ u_int idx;
+ int doing;
+ SOCKET fd;
+ blocking_child *c;
+ l_fp ts; /* Timestamp at BOselect() gob */
+
+#if defined(DEBUG_TIMING)
+ l_fp ts_e; /* Timestamp at EOselect() gob */
+#endif
+ endpt * ep;
+#ifdef REFCLOCK
+ struct refclockio *rp;
+ int saved_errno;
+ const char * clk;
+#endif
+#ifdef HAS_ROUTING_SOCKET
+ struct asyncio_reader * asyncio_reader;
+ struct asyncio_reader * next_asyncio_reader;
+#endif
++handler_pkts;
+ ts = *cts;
#ifdef REFCLOCK
/*
* Check out the reference clocks first, if any
*/
-
- if (refio != NULL) {
- for (rp = refio; rp != NULL; rp = rp->next) {
- fd = rp->fd;
-
- if (!FD_ISSET(fd, &fds))
- continue;
- ++select_count;
- buflen = read_refclock_packet(fd, rp, ts);
- /*
- * The first read must succeed after select()
- * indicates readability, or we've reached
- * a permanent EOF. http://bugs.ntp.org/1732
- * reported ntpd munching CPU after a USB GPS
- * was unplugged because select was indicating
- * EOF but ntpd didn't remove the descriptor
- * from the activefds set.
- */
- if (buflen < 0 && EAGAIN != errno) {
- saved_errno = errno;
- clk = refnumtoa(&rp->srcclock->srcadr);
- errno = saved_errno;
- msyslog(LOG_ERR, "%s read: %m", clk);
- maintain_activefds(fd, TRUE);
- } else if (0 == buflen) {
- clk = refnumtoa(&rp->srcclock->srcadr);
- msyslog(LOG_ERR, "%s read EOF", clk);
- maintain_activefds(fd, TRUE);
- } else {
- /* drain any remaining refclock input */
- do {
- buflen = read_refclock_packet(fd, rp, ts);
- } while (buflen > 0);
- }
+
+ for (rp = refio; rp != NULL; rp = rp->next) {
+ fd = rp->fd;
+
+ if (!FD_ISSET(fd, pfds))
+ continue;
+ buflen = read_refclock_packet(fd, rp, ts);
+ /*
+ * The first read must succeed after select() indicates
+ * readability, or we've reached a permanent EOF.
+ * http://bugs.ntp.org/1732 reported ntpd munching CPU
+ * after a USB GPS was unplugged because select was
+ * indicating EOF but ntpd didn't remove the descriptor
+ * from the activefds set.
+ */
+ if (buflen < 0 && EAGAIN != errno) {
+ saved_errno = errno;
+ clk = refnumtoa(&rp->srcclock->srcadr);
+ errno = saved_errno;
+ msyslog(LOG_ERR, "%s read: %m", clk);
+ maintain_activefds(fd, TRUE);
+ } else if (0 == buflen) {
+ clk = refnumtoa(&rp->srcclock->srcadr);
+ msyslog(LOG_ERR, "%s read EOF", clk);
+ maintain_activefds(fd, TRUE);
+ } else {
+ /* drain any remaining refclock input */
+ do {
+ buflen = read_refclock_packet(fd, rp, ts);
+ } while (buflen > 0);
}
}
#endif /* REFCLOCK */
@@ -3762,9 +3736,8 @@ input_handler(
}
if (fd < 0)
continue;
- if (FD_ISSET(fd, &fds))
+ if (FD_ISSET(fd, pfds))
do {
- ++select_count;
buflen = read_network_packet(
fd, ep, ts);
} while (buflen > 0);
@@ -3781,10 +3754,8 @@ input_handler(
while (asyncio_reader != NULL) {
/* callback may unlink and free asyncio_reader */
next_asyncio_reader = asyncio_reader->link;
- if (FD_ISSET(asyncio_reader->fd, &fds)) {
- ++select_count;
+ if (FD_ISSET(asyncio_reader->fd, pfds))
(*asyncio_reader->receiver)(asyncio_reader);
- }
asyncio_reader = next_asyncio_reader;
}
#endif /* HAS_ROUTING_SOCKET */
@@ -3796,26 +3767,14 @@ input_handler(
c = blocking_children[idx];
if (NULL == c || -1 == c->resp_read_pipe)
continue;
- if (FD_ISSET(c->resp_read_pipe, &fds)) {
- select_count++;
- process_blocking_resp(c);
+ if (FD_ISSET(c->resp_read_pipe, pfds)) {
+ ++c->resp_ready_seen;
+ ++blocking_child_ready_seen;
}
}
- /*
- * Done everything from that select.
- * If nothing to do, just return.
- * If an error occurred, complain and return.
- */
- if (select_count == 0) { /* We really had nothing to do */
-#ifdef DEBUG
- if (debug)
- msyslog(LOG_DEBUG, "input_handler: select() returned 0");
-#endif /* DEBUG */
- goto ih_return;
- }
/* We've done our work */
-#ifdef DEBUG_TIMING
+#if defined(DEBUG_TIMING)
get_systime(&ts_e);
/*
* (ts_e - ts) is the amount of time we spent
@@ -3829,11 +3788,7 @@ input_handler(
"input_handler: Processed a gob of fd's in %s msec",
lfptoms(&ts_e, 6));
#endif /* DEBUG_TIMING */
- /* We're done... */
- ih_return:
- return;
}
-#endif /* !HAVE_IO_COMPLETION_PORT */
/*
diff --git a/ntpd/ntp_keyword.h b/ntpd/ntp_keyword.h
index 0a593f69dd21..c726c60da4e2 100644
--- a/ntpd/ntp_keyword.h
+++ b/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 2015-06-25 03:57:00 UTC diff_ignore_line
+ * Generated 2016-01-16 08:33:03 UTC diff_ignore_line
*
*/
#include "ntp_scanner.h"
@@ -10,7 +10,7 @@
#define LOWEST_KEYWORD_ID 258
-const char * const keyword_text[191] = {
+const char * const keyword_text[194] = {
/* 0 258 T_Abbrev */ "abbrev",
/* 1 259 T_Age */ "age",
/* 2 260 T_All */ "all",
@@ -182,31 +182,34 @@ const char * const keyword_text[191] = {
/* 168 426 T_Ttl */ "ttl",
/* 169 427 T_Type */ "type",
/* 170 428 T_U_int */ NULL,
- /* 171 429 T_Unconfig */ "unconfig",
- /* 172 430 T_Unpeer */ "unpeer",
- /* 173 431 T_Version */ "version",
- /* 174 432 T_WanderThreshold */ NULL,
- /* 175 433 T_Week */ "week",
- /* 176 434 T_Wildcard */ "wildcard",
- /* 177 435 T_Xleave */ "xleave",
- /* 178 436 T_Year */ "year",
- /* 179 437 T_Flag */ NULL,
- /* 180 438 T_EOC */ NULL,
- /* 181 439 T_Simulate */ "simulate",
- /* 182 440 T_Beep_Delay */ "beep_delay",
- /* 183 441 T_Sim_Duration */ "simulation_duration",
- /* 184 442 T_Server_Offset */ "server_offset",
- /* 185 443 T_Duration */ "duration",
- /* 186 444 T_Freq_Offset */ "freq_offset",
- /* 187 445 T_Wander */ "wander",
- /* 188 446 T_Jitter */ "jitter",
- /* 189 447 T_Prop_Delay */ "prop_delay",
- /* 190 448 T_Proc_Delay */ "proc_delay"
+ /* 171 429 T_UEcrypto */ "unpeer_crypto_early",
+ /* 172 430 T_UEcryptonak */ "unpeer_crypto_nak_early",
+ /* 173 431 T_UEdigest */ "unpeer_digest_early",
+ /* 174 432 T_Unconfig */ "unconfig",
+ /* 175 433 T_Unpeer */ "unpeer",
+ /* 176 434 T_Version */ "version",
+ /* 177 435 T_WanderThreshold */ NULL,
+ /* 178 436 T_Week */ "week",
+ /* 179 437 T_Wildcard */ "wildcard",
+ /* 180 438 T_Xleave */ "xleave",
+ /* 181 439 T_Year */ "year",
+ /* 182 440 T_Flag */ NULL,
+ /* 183 441 T_EOC */ NULL,
+ /* 184 442 T_Simulate */ "simulate",
+ /* 185 443 T_Beep_Delay */ "beep_delay",
+ /* 186 444 T_Sim_Duration */ "simulation_duration",
+ /* 187 445 T_Server_Offset */ "server_offset",
+ /* 188 446 T_Duration */ "duration",
+ /* 189 447 T_Freq_Offset */ "freq_offset",
+ /* 190 448 T_Wander */ "wander",
+ /* 191 449 T_Jitter */ "jitter",
+ /* 192 450 T_Prop_Delay */ "prop_delay",
+ /* 193 451 T_Proc_Delay */ "proc_delay"
};
-#define SCANNER_INIT_S 853
+#define SCANNER_INIT_S 887
-const scan_state sst[856] = {
+const scan_state sst[890] = {
/*SS_T( ch, f-by, match, other ), */
0, /* 0 */
S_ST( '-', 3, 323, 0 ), /* 1 */
@@ -252,7 +255,7 @@ const scan_state sst[856] = {
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, 440, 0 ), /* 44 beep_del */
+ S_ST( 'a', 3, 443, 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 */
@@ -352,7 +355,7 @@ const scan_state sst[856] = {
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, 443, 0 ), /* 144 durati */
+ S_ST( 'o', 3, 446, 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 */
@@ -378,7 +381,7 @@ const scan_state sst[856] = {
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, 444, 0 ), /* 170 freq_offs */
+ S_ST( 'e', 3, 447, 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 */
@@ -438,7 +441,7 @@ const scan_state sst[856] = {
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, 446, 0 ), /* 230 jitt */
+ S_ST( 'e', 3, 449, 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 */
@@ -447,7 +450,7 @@ const scan_state sst[856] = {
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, 449, 231 ), /* 239 */
+ S_ST( 'l', 3, 452, 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 */
@@ -495,7 +498,7 @@ const scan_state sst[856] = {
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, 432, 240 ), /* 287 l */
+ S_ST( 'i', 3, 435, 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 */
@@ -557,7 +560,7 @@ const scan_state sst[856] = {
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, 518, 0 ), /* 349 T_Mem */
+ S_ST( 'm', 0, 521, 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 */
@@ -583,23 +586,23 @@ const scan_state sst[856] = {
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, 614, 0 ), /* 375 T_Ntp */
+ S_ST( 'p', 0, 617, 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, 629, 0 ), /* 378 T_Orphan */
+ S_ST( 'n', 0, 632, 0 ), /* 378 T_Orphan */
S_ST( 't', 0, 0, 0 ), /* 379 T_Orphanwait */
S_ST( 'c', 0, 0, 0 ), /* 380 T_Panic */
- S_ST( 'r', 1, 638, 0 ), /* 381 T_Peer */
+ S_ST( 'r', 1, 641, 0 ), /* 381 T_Peer */
S_ST( 's', 0, 0, 0 ), /* 382 T_Peerstats */
S_ST( 'e', 2, 0, 0 ), /* 383 T_Phone */
- S_ST( 'd', 0, 646, 0 ), /* 384 T_Pid */
+ S_ST( 'd', 0, 649, 0 ), /* 384 T_Pid */
S_ST( 'e', 1, 0, 0 ), /* 385 T_Pidfile */
S_ST( 'l', 1, 0, 0 ), /* 386 T_Pool */
S_ST( 't', 0, 0, 0 ), /* 387 T_Port */
S_ST( 't', 0, 0, 0 ), /* 388 T_Preempt */
S_ST( 'r', 0, 0, 0 ), /* 389 T_Prefer */
S_ST( 's', 0, 0, 0 ), /* 390 T_Protostats */
- S_ST( 'w', 1, 0, 652 ), /* 391 T_Pw */
+ S_ST( 'w', 1, 0, 655 ), /* 391 T_Pw */
S_ST( 'e', 1, 0, 0 ), /* 392 T_Randfile */
S_ST( 's', 0, 0, 0 ), /* 393 T_Rawstats */
S_ST( 'd', 1, 0, 0 ), /* 394 T_Refid */
@@ -609,20 +612,20 @@ const scan_state sst[856] = {
S_ST( 'e', 0, 0, 0 ), /* 398 T_Revoke */
S_ST( 't', 0, 0, 0 ), /* 399 T_Rlimit */
S_ST( 'r', 1, 0, 0 ), /* 400 T_Saveconfigdir */
- S_ST( 'r', 1, 729, 0 ), /* 401 T_Server */
+ S_ST( 'r', 1, 732, 0 ), /* 401 T_Server */
S_ST( 'r', 1, 0, 0 ), /* 402 T_Setvar */
S_ST( 'e', 0, 0, 0 ), /* 403 T_Source */
S_ST( 'e', 0, 0, 0 ), /* 404 T_Stacksize */
S_ST( 's', 0, 0, 0 ), /* 405 T_Statistics */
- S_ST( 's', 0, 772, 767 ), /* 406 T_Stats */
+ S_ST( 's', 0, 775, 770 ), /* 406 T_Stats */
S_ST( 'r', 1, 0, 0 ), /* 407 T_Statsdir */
- S_ST( 'p', 0, 780, 0 ), /* 408 T_Step */
+ S_ST( 'p', 0, 783, 0 ), /* 408 T_Step */
S_ST( 'k', 0, 0, 0 ), /* 409 T_Stepback */
S_ST( 'd', 0, 0, 0 ), /* 410 T_Stepfwd */
S_ST( 't', 0, 0, 0 ), /* 411 T_Stepout */
S_ST( 'm', 0, 0, 0 ), /* 412 T_Stratum */
S_ST( 'e', 3, 332, 0 ), /* 413 limit */
- S_ST( 's', 0, 787, 0 ), /* 414 T_Sys */
+ S_ST( 's', 0, 790, 0 ), /* 414 T_Sys */
S_ST( 's', 0, 0, 0 ), /* 415 T_Sysstats */
S_ST( 'k', 0, 0, 0 ), /* 416 T_Tick */
S_ST( '1', 0, 0, 0 ), /* 417 T_Time1 */
@@ -637,432 +640,466 @@ const scan_state sst[856] = {
S_ST( 'l', 0, 0, 0 ), /* 426 T_Ttl */
S_ST( 'e', 0, 0, 0 ), /* 427 T_Type */
S_ST( 'n', 3, 333, 294 ), /* 428 li */
- S_ST( 'g', 1, 0, 0 ), /* 429 T_Unconfig */
- S_ST( 'r', 1, 0, 0 ), /* 430 T_Unpeer */
- S_ST( 'n', 0, 0, 0 ), /* 431 T_Version */
- S_ST( 's', 3, 437, 428 ), /* 432 li */
- S_ST( 'k', 0, 0, 0 ), /* 433 T_Week */
- S_ST( 'd', 0, 0, 0 ), /* 434 T_Wildcard */
- S_ST( 'e', 0, 0, 0 ), /* 435 T_Xleave */
- S_ST( 'r', 0, 0, 0 ), /* 436 T_Year */
- S_ST( 't', 3, 438, 0 ), /* 437 lis */
- S_ST( 'e', 3, 334, 0 ), /* 438 list */
- S_ST( 'e', 0, 0, 0 ), /* 439 T_Simulate */
- S_ST( 'y', 0, 0, 0 ), /* 440 T_Beep_Delay */
- S_ST( 'n', 0, 0, 0 ), /* 441 T_Sim_Duration */
- S_ST( 't', 0, 0, 0 ), /* 442 T_Server_Offset */
- S_ST( 'n', 0, 0, 0 ), /* 443 T_Duration */
- S_ST( 't', 0, 0, 0 ), /* 444 T_Freq_Offset */
- S_ST( 'r', 0, 0, 0 ), /* 445 T_Wander */
- S_ST( 'r', 0, 0, 0 ), /* 446 T_Jitter */
- S_ST( 'y', 0, 0, 0 ), /* 447 T_Prop_Delay */
- S_ST( 'y', 0, 0, 0 ), /* 448 T_Proc_Delay */
- S_ST( 'o', 3, 465, 287 ), /* 449 l */
- S_ST( 'g', 3, 456, 0 ), /* 450 lo */
- S_ST( 'c', 3, 452, 0 ), /* 451 log */
- S_ST( 'o', 3, 453, 0 ), /* 452 logc */
- S_ST( 'n', 3, 454, 0 ), /* 453 logco */
- S_ST( 'f', 3, 455, 0 ), /* 454 logcon */
- S_ST( 'i', 3, 335, 0 ), /* 455 logconf */
- S_ST( 'f', 3, 457, 451 ), /* 456 log */
- S_ST( 'i', 3, 458, 0 ), /* 457 logf */
- S_ST( 'l', 3, 336, 0 ), /* 458 logfi */
- S_ST( 'o', 3, 460, 450 ), /* 459 lo */
- S_ST( 'p', 3, 461, 0 ), /* 460 loo */
- S_ST( 's', 3, 462, 0 ), /* 461 loop */
- S_ST( 't', 3, 463, 0 ), /* 462 loops */
- S_ST( 'a', 3, 464, 0 ), /* 463 loopst */
- S_ST( 't', 3, 337, 0 ), /* 464 loopsta */
- S_ST( 'w', 3, 466, 459 ), /* 465 lo */
- S_ST( 'p', 3, 467, 0 ), /* 466 low */
- S_ST( 'r', 3, 468, 0 ), /* 467 lowp */
- S_ST( 'i', 3, 469, 0 ), /* 468 lowpr */
- S_ST( 'o', 3, 470, 0 ), /* 469 lowpri */
- S_ST( 't', 3, 471, 0 ), /* 470 lowprio */
- S_ST( 'r', 3, 472, 0 ), /* 471 lowpriot */
- S_ST( 'a', 3, 338, 0 ), /* 472 lowpriotr */
- S_ST( 'm', 3, 554, 239 ), /* 473 */
- S_ST( 'a', 3, 492, 0 ), /* 474 m */
- S_ST( 'n', 3, 476, 0 ), /* 475 ma */
- S_ST( 'y', 3, 477, 0 ), /* 476 man */
- S_ST( 'c', 3, 478, 0 ), /* 477 many */
- S_ST( 'a', 3, 479, 0 ), /* 478 manyc */
- S_ST( 's', 3, 480, 0 ), /* 479 manyca */
- S_ST( 't', 3, 486, 0 ), /* 480 manycas */
- S_ST( 'c', 3, 482, 0 ), /* 481 manycast */
- S_ST( 'l', 3, 483, 0 ), /* 482 manycastc */
- S_ST( 'i', 3, 484, 0 ), /* 483 manycastcl */
- S_ST( 'e', 3, 485, 0 ), /* 484 manycastcli */
- S_ST( 'n', 3, 339, 0 ), /* 485 manycastclie */
- S_ST( 's', 3, 487, 481 ), /* 486 manycast */
- S_ST( 'e', 3, 488, 0 ), /* 487 manycasts */
- S_ST( 'r', 3, 489, 0 ), /* 488 manycastse */
- S_ST( 'v', 3, 490, 0 ), /* 489 manycastser */
- S_ST( 'e', 3, 340, 0 ), /* 490 manycastserv */
- S_ST( 's', 3, 341, 475 ), /* 491 ma */
- S_ST( 'x', 3, 507, 491 ), /* 492 ma */
- S_ST( 'a', 3, 494, 0 ), /* 493 max */
- S_ST( 'g', 3, 342, 0 ), /* 494 maxa */
- S_ST( 'c', 3, 496, 493 ), /* 495 max */
- S_ST( 'l', 3, 497, 0 ), /* 496 maxc */
- S_ST( 'o', 3, 498, 0 ), /* 497 maxcl */
- S_ST( 'c', 3, 343, 0 ), /* 498 maxclo */
- S_ST( 'd', 3, 503, 495 ), /* 499 max */
- S_ST( 'e', 3, 501, 0 ), /* 500 maxd */
- S_ST( 'p', 3, 502, 0 ), /* 501 maxde */
- S_ST( 't', 3, 344, 0 ), /* 502 maxdep */
- S_ST( 'i', 3, 504, 500 ), /* 503 maxd */
- S_ST( 's', 3, 345, 0 ), /* 504 maxdi */
- S_ST( 'm', 3, 506, 499 ), /* 505 max */
- S_ST( 'e', 3, 346, 0 ), /* 506 maxm */
- S_ST( 'p', 3, 508, 505 ), /* 507 max */
- S_ST( 'o', 3, 509, 0 ), /* 508 maxp */
- S_ST( 'l', 3, 347, 0 ), /* 509 maxpo */
- S_ST( 'd', 3, 511, 474 ), /* 510 m */
- S_ST( 'n', 3, 512, 0 ), /* 511 md */
- S_ST( 's', 3, 513, 0 ), /* 512 mdn */
- S_ST( 't', 3, 514, 0 ), /* 513 mdns */
- S_ST( 'r', 3, 515, 0 ), /* 514 mdnst */
- S_ST( 'i', 3, 516, 0 ), /* 515 mdnstr */
- S_ST( 'e', 3, 348, 0 ), /* 516 mdnstri */
- S_ST( 'e', 3, 349, 510 ), /* 517 m */
- S_ST( 'l', 3, 519, 0 ), /* 518 mem */
- S_ST( 'o', 3, 520, 0 ), /* 519 meml */
- S_ST( 'c', 3, 350, 0 ), /* 520 memlo */
- S_ST( 'i', 3, 522, 517 ), /* 521 m */
- S_ST( 'n', 3, 539, 0 ), /* 522 mi */
- S_ST( 'c', 3, 524, 0 ), /* 523 min */
- S_ST( 'l', 3, 525, 0 ), /* 524 minc */
- S_ST( 'o', 3, 526, 0 ), /* 525 mincl */
- S_ST( 'c', 3, 351, 0 ), /* 526 minclo */
- S_ST( 'd', 3, 531, 523 ), /* 527 min */
- S_ST( 'e', 3, 529, 0 ), /* 528 mind */
- S_ST( 'p', 3, 530, 0 ), /* 529 minde */
- S_ST( 't', 3, 352, 0 ), /* 530 mindep */
- S_ST( 'i', 3, 532, 528 ), /* 531 mind */
- S_ST( 's', 3, 353, 0 ), /* 532 mindi */
- S_ST( 'i', 3, 534, 527 ), /* 533 min */
- S_ST( 'm', 3, 535, 0 ), /* 534 mini */
- S_ST( 'u', 3, 354, 0 ), /* 535 minim */
- S_ST( 'p', 3, 537, 533 ), /* 536 min */
- S_ST( 'o', 3, 538, 0 ), /* 537 minp */
- S_ST( 'l', 3, 355, 0 ), /* 538 minpo */
- S_ST( 's', 3, 540, 536 ), /* 539 min */
- S_ST( 'a', 3, 541, 0 ), /* 540 mins */
- S_ST( 'n', 3, 356, 0 ), /* 541 minsa */
- S_ST( 'o', 3, 544, 521 ), /* 542 m */
- S_ST( 'd', 3, 357, 0 ), /* 543 mo */
- S_ST( 'n', 3, 548, 543 ), /* 544 mo */
- S_ST( 'i', 3, 546, 0 ), /* 545 mon */
- S_ST( 't', 3, 547, 0 ), /* 546 moni */
- S_ST( 'o', 3, 359, 0 ), /* 547 monit */
- S_ST( 't', 3, 360, 545 ), /* 548 mon */
- S_ST( 'r', 3, 361, 542 ), /* 549 m */
- S_ST( 's', 3, 551, 549 ), /* 550 m */
- S_ST( 's', 3, 552, 0 ), /* 551 ms */
- S_ST( 'n', 3, 553, 0 ), /* 552 mss */
- S_ST( 't', 3, 329, 0 ), /* 553 mssn */
- S_ST( 'u', 3, 555, 550 ), /* 554 m */
- S_ST( 'l', 3, 556, 0 ), /* 555 mu */
- S_ST( 't', 3, 557, 0 ), /* 556 mul */
- S_ST( 'i', 3, 558, 0 ), /* 557 mult */
- S_ST( 'c', 3, 559, 0 ), /* 558 multi */
- S_ST( 'a', 3, 560, 0 ), /* 559 multic */
- S_ST( 's', 3, 561, 0 ), /* 560 multica */
- S_ST( 't', 3, 562, 0 ), /* 561 multicas */
- S_ST( 'c', 3, 563, 0 ), /* 562 multicast */
- S_ST( 'l', 3, 564, 0 ), /* 563 multicastc */
- S_ST( 'i', 3, 565, 0 ), /* 564 multicastcl */
- S_ST( 'e', 3, 566, 0 ), /* 565 multicastcli */
- S_ST( 'n', 3, 362, 0 ), /* 566 multicastclie */
- S_ST( 'n', 3, 610, 473 ), /* 567 */
- S_ST( 'i', 3, 363, 0 ), /* 568 n */
- S_ST( 'o', 3, 605, 568 ), /* 569 n */
- S_ST( 'l', 3, 571, 0 ), /* 570 no */
- S_ST( 'i', 3, 572, 0 ), /* 571 nol */
- S_ST( 'n', 3, 364, 0 ), /* 572 noli */
- S_ST( 'm', 3, 578, 570 ), /* 573 no */
- S_ST( 'o', 3, 575, 0 ), /* 574 nom */
- S_ST( 'd', 3, 576, 0 ), /* 575 nomo */
- S_ST( 'i', 3, 577, 0 ), /* 576 nomod */
- S_ST( 'f', 3, 365, 0 ), /* 577 nomodi */
- S_ST( 'r', 3, 579, 574 ), /* 578 nom */
- S_ST( 'u', 3, 580, 0 ), /* 579 nomr */
- S_ST( 'l', 3, 581, 0 ), /* 580 nomru */
- S_ST( 'i', 3, 582, 0 ), /* 581 nomrul */
- S_ST( 's', 3, 366, 0 ), /* 582 nomruli */
- S_ST( 'n', 3, 584, 573 ), /* 583 no */
- S_ST( 'v', 3, 585, 367 ), /* 584 non */
- S_ST( 'o', 3, 586, 0 ), /* 585 nonv */
- S_ST( 'l', 3, 587, 0 ), /* 586 nonvo */
- S_ST( 'a', 3, 588, 0 ), /* 587 nonvol */
- S_ST( 't', 3, 589, 0 ), /* 588 nonvola */
- S_ST( 'i', 3, 590, 0 ), /* 589 nonvolat */
- S_ST( 'l', 3, 368, 0 ), /* 590 nonvolati */
- S_ST( 'p', 3, 592, 583 ), /* 591 no */
- S_ST( 'e', 3, 593, 0 ), /* 592 nop */
- S_ST( 'e', 3, 369, 0 ), /* 593 nope */
- S_ST( 'q', 3, 595, 591 ), /* 594 no */
- S_ST( 'u', 3, 596, 0 ), /* 595 noq */
- S_ST( 'e', 3, 597, 0 ), /* 596 noqu */
- S_ST( 'r', 3, 370, 0 ), /* 597 noque */
- S_ST( 's', 3, 599, 594 ), /* 598 no */
- S_ST( 'e', 3, 603, 0 ), /* 599 nos */
- S_ST( 'l', 3, 601, 0 ), /* 600 nose */
- S_ST( 'e', 3, 602, 0 ), /* 601 nosel */
- S_ST( 'c', 3, 371, 0 ), /* 602 nosele */
- S_ST( 'r', 3, 604, 600 ), /* 603 nose */
- S_ST( 'v', 3, 372, 0 ), /* 604 noser */
- S_ST( 't', 3, 606, 598 ), /* 605 no */
- S_ST( 'r', 3, 608, 0 ), /* 606 not */
- S_ST( 'a', 3, 373, 0 ), /* 607 notr */
- S_ST( 'u', 3, 609, 607 ), /* 608 notr */
- S_ST( 's', 3, 374, 0 ), /* 609 notru */
- S_ST( 't', 3, 375, 569 ), /* 610 n */
- S_ST( 'p', 3, 612, 0 ), /* 611 ntp */
- S_ST( 'o', 3, 613, 0 ), /* 612 ntpp */
- S_ST( 'r', 3, 376, 0 ), /* 613 ntppo */
- S_ST( 's', 3, 615, 611 ), /* 614 ntp */
- S_ST( 'i', 3, 616, 0 ), /* 615 ntps */
- S_ST( 'g', 3, 617, 0 ), /* 616 ntpsi */
- S_ST( 'n', 3, 618, 0 ), /* 617 ntpsig */
- S_ST( 'd', 3, 619, 0 ), /* 618 ntpsign */
- S_ST( 's', 3, 620, 0 ), /* 619 ntpsignd */
- S_ST( 'o', 3, 621, 0 ), /* 620 ntpsignds */
- S_ST( 'c', 3, 622, 0 ), /* 621 ntpsigndso */
- S_ST( 'k', 3, 623, 0 ), /* 622 ntpsigndsoc */
- S_ST( 'e', 3, 377, 0 ), /* 623 ntpsigndsock */
- S_ST( 'o', 3, 625, 567 ), /* 624 */
- S_ST( 'r', 3, 626, 0 ), /* 625 o */
- S_ST( 'p', 3, 627, 0 ), /* 626 or */
- S_ST( 'h', 3, 628, 0 ), /* 627 orp */
- S_ST( 'a', 3, 378, 0 ), /* 628 orph */
- S_ST( 'w', 3, 630, 0 ), /* 629 orphan */
- S_ST( 'a', 3, 631, 0 ), /* 630 orphanw */
- S_ST( 'i', 3, 379, 0 ), /* 631 orphanwa */
- S_ST( 'p', 3, 391, 624 ), /* 632 */
- S_ST( 'a', 3, 634, 0 ), /* 633 p */
- S_ST( 'n', 3, 635, 0 ), /* 634 pa */
- S_ST( 'i', 3, 380, 0 ), /* 635 pan */
- S_ST( 'e', 3, 637, 633 ), /* 636 p */
- S_ST( 'e', 3, 381, 0 ), /* 637 pe */
- S_ST( 's', 3, 639, 0 ), /* 638 peer */
- S_ST( 't', 3, 640, 0 ), /* 639 peers */
- S_ST( 'a', 3, 641, 0 ), /* 640 peerst */
- S_ST( 't', 3, 382, 0 ), /* 641 peersta */
- S_ST( 'h', 3, 643, 636 ), /* 642 p */
- S_ST( 'o', 3, 644, 0 ), /* 643 ph */
- S_ST( 'n', 3, 383, 0 ), /* 644 pho */
- S_ST( 'i', 3, 384, 642 ), /* 645 p */
- S_ST( 'f', 3, 647, 0 ), /* 646 pid */
- S_ST( 'i', 3, 648, 0 ), /* 647 pidf */
- S_ST( 'l', 3, 385, 0 ), /* 648 pidfi */
- S_ST( 'o', 3, 651, 645 ), /* 649 p */
- S_ST( 'o', 3, 386, 0 ), /* 650 po */
- S_ST( 'r', 3, 387, 650 ), /* 651 po */
- S_ST( 'r', 3, 659, 649 ), /* 652 p */
- S_ST( 'e', 3, 657, 0 ), /* 653 pr */
- S_ST( 'e', 3, 655, 0 ), /* 654 pre */
- S_ST( 'm', 3, 656, 0 ), /* 655 pree */
- S_ST( 'p', 3, 388, 0 ), /* 656 preem */
- S_ST( 'f', 3, 658, 654 ), /* 657 pre */
- S_ST( 'e', 3, 389, 0 ), /* 658 pref */
- S_ST( 'o', 3, 672, 653 ), /* 659 pr */
- S_ST( 'c', 3, 661, 0 ), /* 660 pro */
- S_ST( '_', 3, 662, 0 ), /* 661 proc */
- S_ST( 'd', 3, 663, 0 ), /* 662 proc_ */
- S_ST( 'e', 3, 664, 0 ), /* 663 proc_d */
- S_ST( 'l', 3, 665, 0 ), /* 664 proc_de */
- S_ST( 'a', 3, 448, 0 ), /* 665 proc_del */
- S_ST( 'p', 3, 667, 660 ), /* 666 pro */
- S_ST( '_', 3, 668, 0 ), /* 667 prop */
- S_ST( 'd', 3, 669, 0 ), /* 668 prop_ */
- S_ST( 'e', 3, 670, 0 ), /* 669 prop_d */
- S_ST( 'l', 3, 671, 0 ), /* 670 prop_de */
- S_ST( 'a', 3, 447, 0 ), /* 671 prop_del */
- S_ST( 't', 3, 673, 666 ), /* 672 pro */
- S_ST( 'o', 3, 674, 0 ), /* 673 prot */
- S_ST( 's', 3, 675, 0 ), /* 674 proto */
- S_ST( 't', 3, 676, 0 ), /* 675 protos */
- S_ST( 'a', 3, 677, 0 ), /* 676 protost */
- S_ST( 't', 3, 390, 0 ), /* 677 protosta */
- S_ST( 'r', 3, 709, 632 ), /* 678 */
- S_ST( 'a', 3, 685, 0 ), /* 679 r */
- S_ST( 'n', 3, 681, 0 ), /* 680 ra */
- S_ST( 'd', 3, 682, 0 ), /* 681 ran */
- S_ST( 'f', 3, 683, 0 ), /* 682 rand */
- S_ST( 'i', 3, 684, 0 ), /* 683 randf */
- S_ST( 'l', 3, 392, 0 ), /* 684 randfi */
- S_ST( 'w', 3, 686, 680 ), /* 685 ra */
- S_ST( 's', 3, 687, 0 ), /* 686 raw */
- S_ST( 't', 3, 688, 0 ), /* 687 raws */
- S_ST( 'a', 3, 689, 0 ), /* 688 rawst */
- S_ST( 't', 3, 393, 0 ), /* 689 rawsta */
- S_ST( 'e', 3, 706, 679 ), /* 690 r */
- S_ST( 'f', 3, 692, 0 ), /* 691 re */
- S_ST( 'i', 3, 394, 0 ), /* 692 ref */
- S_ST( 'q', 3, 694, 691 ), /* 693 re */
- S_ST( 'u', 3, 695, 0 ), /* 694 req */
- S_ST( 'e', 3, 696, 0 ), /* 695 requ */
- S_ST( 's', 3, 697, 0 ), /* 696 reque */
- S_ST( 't', 3, 698, 0 ), /* 697 reques */
- S_ST( 'k', 3, 699, 0 ), /* 698 request */
- S_ST( 'e', 3, 395, 0 ), /* 699 requestk */
- S_ST( 's', 3, 702, 693 ), /* 700 re */
- S_ST( 'e', 3, 396, 0 ), /* 701 res */
- S_ST( 't', 3, 703, 701 ), /* 702 res */
- S_ST( 'r', 3, 704, 0 ), /* 703 rest */
- S_ST( 'i', 3, 705, 0 ), /* 704 restr */
- S_ST( 'c', 3, 397, 0 ), /* 705 restri */
- S_ST( 'v', 3, 707, 700 ), /* 706 re */
- S_ST( 'o', 3, 708, 0 ), /* 707 rev */
- S_ST( 'k', 3, 398, 0 ), /* 708 revo */
- S_ST( 'l', 3, 710, 690 ), /* 709 r */
- S_ST( 'i', 3, 711, 0 ), /* 710 rl */
- S_ST( 'm', 3, 712, 0 ), /* 711 rli */
- S_ST( 'i', 3, 399, 0 ), /* 712 rlim */
- S_ST( 's', 3, 786, 678 ), /* 713 */
- S_ST( 'a', 3, 715, 0 ), /* 714 s */
- S_ST( 'v', 3, 716, 0 ), /* 715 sa */
- S_ST( 'e', 3, 717, 0 ), /* 716 sav */
- S_ST( 'c', 3, 718, 0 ), /* 717 save */
- S_ST( 'o', 3, 719, 0 ), /* 718 savec */
- S_ST( 'n', 3, 720, 0 ), /* 719 saveco */
- S_ST( 'f', 3, 721, 0 ), /* 720 savecon */
- S_ST( 'i', 3, 722, 0 ), /* 721 saveconf */
- S_ST( 'g', 3, 723, 0 ), /* 722 saveconfi */
- S_ST( 'd', 3, 724, 0 ), /* 723 saveconfig */
- S_ST( 'i', 3, 400, 0 ), /* 724 saveconfigd */
- S_ST( 'e', 3, 735, 714 ), /* 725 s */
- S_ST( 'r', 3, 727, 0 ), /* 726 se */
- S_ST( 'v', 3, 728, 0 ), /* 727 ser */
- S_ST( 'e', 3, 401, 0 ), /* 728 serv */
- S_ST( '_', 3, 730, 0 ), /* 729 server */
- S_ST( 'o', 3, 731, 0 ), /* 730 server_ */
- S_ST( 'f', 3, 732, 0 ), /* 731 server_o */
- S_ST( 'f', 3, 733, 0 ), /* 732 server_of */
- S_ST( 's', 3, 734, 0 ), /* 733 server_off */
- S_ST( 'e', 3, 442, 0 ), /* 734 server_offs */
- S_ST( 't', 3, 736, 726 ), /* 735 se */
- S_ST( 'v', 3, 737, 0 ), /* 736 set */
- S_ST( 'a', 3, 402, 0 ), /* 737 setv */
- S_ST( 'i', 3, 739, 725 ), /* 738 s */
- S_ST( 'm', 3, 740, 0 ), /* 739 si */
- S_ST( 'u', 3, 741, 0 ), /* 740 sim */
- S_ST( 'l', 3, 742, 0 ), /* 741 simu */
- S_ST( 'a', 3, 743, 0 ), /* 742 simul */
- S_ST( 't', 3, 744, 0 ), /* 743 simula */
- S_ST( 'i', 3, 745, 439 ), /* 744 simulat */
- S_ST( 'o', 3, 746, 0 ), /* 745 simulati */
- S_ST( 'n', 3, 747, 0 ), /* 746 simulatio */
- S_ST( '_', 3, 748, 0 ), /* 747 simulation */
- S_ST( 'd', 3, 749, 0 ), /* 748 simulation_ */
- S_ST( 'u', 3, 750, 0 ), /* 749 simulation_d */
- S_ST( 'r', 3, 751, 0 ), /* 750 simulation_du */
- S_ST( 'a', 3, 752, 0 ), /* 751 simulation_dur */
- S_ST( 't', 3, 753, 0 ), /* 752 simulation_dura */
- S_ST( 'i', 3, 754, 0 ), /* 753 simulation_durat */
- S_ST( 'o', 3, 441, 0 ), /* 754 simulation_durati */
- S_ST( 'o', 3, 756, 738 ), /* 755 s */
- S_ST( 'u', 3, 757, 0 ), /* 756 so */
- S_ST( 'r', 3, 758, 0 ), /* 757 sou */
- S_ST( 'c', 3, 403, 0 ), /* 758 sour */
- S_ST( 't', 3, 782, 755 ), /* 759 s */
- S_ST( 'a', 3, 766, 0 ), /* 760 st */
- S_ST( 'c', 3, 762, 0 ), /* 761 sta */
- S_ST( 'k', 3, 763, 0 ), /* 762 stac */
- S_ST( 's', 3, 764, 0 ), /* 763 stack */
- S_ST( 'i', 3, 765, 0 ), /* 764 stacks */
- S_ST( 'z', 3, 404, 0 ), /* 765 stacksi */
- S_ST( 't', 3, 406, 761 ), /* 766 sta */
- S_ST( 'i', 3, 768, 0 ), /* 767 stat */
- S_ST( 's', 3, 769, 0 ), /* 768 stati */
- S_ST( 't', 3, 770, 0 ), /* 769 statis */
- S_ST( 'i', 3, 771, 0 ), /* 770 statist */
- S_ST( 'c', 3, 405, 0 ), /* 771 statisti */
- S_ST( 'd', 3, 773, 0 ), /* 772 stats */
- S_ST( 'i', 3, 407, 0 ), /* 773 statsd */
- S_ST( 'e', 3, 408, 760 ), /* 774 st */
- S_ST( 'b', 3, 776, 0 ), /* 775 step */
- S_ST( 'a', 3, 777, 0 ), /* 776 stepb */
- S_ST( 'c', 3, 409, 0 ), /* 777 stepba */
- S_ST( 'f', 3, 779, 775 ), /* 778 step */
- S_ST( 'w', 3, 410, 0 ), /* 779 stepf */
- S_ST( 'o', 3, 781, 778 ), /* 780 step */
- S_ST( 'u', 3, 411, 0 ), /* 781 stepo */
- S_ST( 'r', 3, 783, 774 ), /* 782 st */
- S_ST( 'a', 3, 784, 0 ), /* 783 str */
- S_ST( 't', 3, 785, 0 ), /* 784 stra */
- S_ST( 'u', 3, 412, 0 ), /* 785 strat */
- S_ST( 'y', 3, 414, 759 ), /* 786 s */
- S_ST( 's', 3, 788, 0 ), /* 787 sys */
- S_ST( 't', 3, 789, 0 ), /* 788 syss */
- S_ST( 'a', 3, 790, 0 ), /* 789 sysst */
- S_ST( 't', 3, 415, 0 ), /* 790 syssta */
- S_ST( 't', 3, 817, 713 ), /* 791 */
- S_ST( 'i', 3, 803, 0 ), /* 792 t */
- S_ST( 'c', 3, 416, 0 ), /* 793 ti */
- S_ST( 'm', 3, 796, 793 ), /* 794 ti */
- S_ST( 'e', 3, 419, 0 ), /* 795 tim */
- S_ST( 'i', 3, 797, 795 ), /* 796 tim */
- S_ST( 'n', 3, 798, 0 ), /* 797 timi */
- S_ST( 'g', 3, 799, 0 ), /* 798 timin */
- S_ST( 's', 3, 800, 0 ), /* 799 timing */
- S_ST( 't', 3, 801, 0 ), /* 800 timings */
- S_ST( 'a', 3, 802, 0 ), /* 801 timingst */
- S_ST( 't', 3, 420, 0 ), /* 802 timingsta */
- S_ST( 'n', 3, 804, 794 ), /* 803 ti */
- S_ST( 'k', 3, 805, 0 ), /* 804 tin */
- S_ST( 'e', 3, 421, 0 ), /* 805 tink */
- S_ST( 'o', 3, 422, 792 ), /* 806 t */
- S_ST( 'r', 3, 809, 806 ), /* 807 t */
- S_ST( 'a', 3, 423, 0 ), /* 808 tr */
- S_ST( 'u', 3, 810, 808 ), /* 809 tr */
- S_ST( 's', 3, 811, 424 ), /* 810 tru */
- S_ST( 't', 3, 812, 0 ), /* 811 trus */
- S_ST( 'e', 3, 813, 0 ), /* 812 trust */
- S_ST( 'd', 3, 814, 0 ), /* 813 truste */
- S_ST( 'k', 3, 815, 0 ), /* 814 trusted */
- S_ST( 'e', 3, 425, 0 ), /* 815 trustedk */
- S_ST( 't', 3, 426, 807 ), /* 816 t */
- S_ST( 'y', 3, 818, 816 ), /* 817 t */
- S_ST( 'p', 3, 427, 0 ), /* 818 ty */
- S_ST( 'u', 3, 820, 791 ), /* 819 */
- S_ST( 'n', 3, 826, 0 ), /* 820 u */
- S_ST( 'c', 3, 822, 0 ), /* 821 un */
- S_ST( 'o', 3, 823, 0 ), /* 822 unc */
- S_ST( 'n', 3, 824, 0 ), /* 823 unco */
- S_ST( 'f', 3, 825, 0 ), /* 824 uncon */
- S_ST( 'i', 3, 429, 0 ), /* 825 unconf */
- S_ST( 'p', 3, 827, 821 ), /* 826 un */
- S_ST( 'e', 3, 828, 0 ), /* 827 unp */
- S_ST( 'e', 3, 430, 0 ), /* 828 unpe */
- S_ST( 'v', 3, 830, 819 ), /* 829 */
- S_ST( 'e', 3, 831, 0 ), /* 830 v */
- S_ST( 'r', 3, 832, 0 ), /* 831 ve */
- S_ST( 's', 3, 833, 0 ), /* 832 ver */
- S_ST( 'i', 3, 834, 0 ), /* 833 vers */
- S_ST( 'o', 3, 431, 0 ), /* 834 versi */
- S_ST( 'w', 3, 842, 829 ), /* 835 */
- S_ST( 'a', 3, 837, 0 ), /* 836 w */
- S_ST( 'n', 3, 838, 0 ), /* 837 wa */
- S_ST( 'd', 3, 839, 0 ), /* 838 wan */
- S_ST( 'e', 3, 445, 0 ), /* 839 wand */
- S_ST( 'e', 3, 841, 836 ), /* 840 w */
- S_ST( 'e', 3, 433, 0 ), /* 841 we */
- S_ST( 'i', 3, 843, 840 ), /* 842 w */
- S_ST( 'l', 3, 844, 0 ), /* 843 wi */
- S_ST( 'd', 3, 845, 0 ), /* 844 wil */
- S_ST( 'c', 3, 846, 0 ), /* 845 wild */
- S_ST( 'a', 3, 847, 0 ), /* 846 wildc */
- S_ST( 'r', 3, 434, 0 ), /* 847 wildca */
- S_ST( 'x', 3, 849, 835 ), /* 848 */
- S_ST( 'l', 3, 850, 0 ), /* 849 x */
- S_ST( 'e', 3, 851, 0 ), /* 850 xl */
- S_ST( 'a', 3, 852, 0 ), /* 851 xle */
- S_ST( 'v', 3, 435, 0 ), /* 852 xlea */
- S_ST( 'y', 3, 854, 848 ), /* 853 [initial state] */
- S_ST( 'e', 3, 855, 0 ), /* 854 y */
- S_ST( 'a', 3, 436, 0 ) /* 855 ye */
+ S_ST( 'y', 0, 0, 0 ), /* 429 T_UEcrypto */
+ S_ST( 'y', 0, 0, 0 ), /* 430 T_UEcryptonak */
+ S_ST( 'y', 0, 0, 0 ), /* 431 T_UEdigest */
+ S_ST( 'g', 1, 0, 0 ), /* 432 T_Unconfig */
+ S_ST( 'r', 1, 832, 0 ), /* 433 T_Unpeer */
+ S_ST( 'n', 0, 0, 0 ), /* 434 T_Version */
+ S_ST( 's', 3, 440, 428 ), /* 435 li */
+ S_ST( 'k', 0, 0, 0 ), /* 436 T_Week */
+ S_ST( 'd', 0, 0, 0 ), /* 437 T_Wildcard */
+ S_ST( 'e', 0, 0, 0 ), /* 438 T_Xleave */
+ S_ST( 'r', 0, 0, 0 ), /* 439 T_Year */
+ S_ST( 't', 3, 441, 0 ), /* 440 lis */
+ S_ST( 'e', 3, 334, 0 ), /* 441 list */
+ S_ST( 'e', 0, 0, 0 ), /* 442 T_Simulate */
+ S_ST( 'y', 0, 0, 0 ), /* 443 T_Beep_Delay */
+ S_ST( 'n', 0, 0, 0 ), /* 444 T_Sim_Duration */
+ S_ST( 't', 0, 0, 0 ), /* 445 T_Server_Offset */
+ S_ST( 'n', 0, 0, 0 ), /* 446 T_Duration */
+ S_ST( 't', 0, 0, 0 ), /* 447 T_Freq_Offset */
+ S_ST( 'r', 0, 0, 0 ), /* 448 T_Wander */
+ S_ST( 'r', 0, 0, 0 ), /* 449 T_Jitter */
+ S_ST( 'y', 0, 0, 0 ), /* 450 T_Prop_Delay */
+ S_ST( 'y', 0, 0, 0 ), /* 451 T_Proc_Delay */
+ S_ST( 'o', 3, 468, 287 ), /* 452 l */
+ S_ST( 'g', 3, 459, 0 ), /* 453 lo */
+ S_ST( 'c', 3, 455, 0 ), /* 454 log */
+ S_ST( 'o', 3, 456, 0 ), /* 455 logc */
+ S_ST( 'n', 3, 457, 0 ), /* 456 logco */
+ S_ST( 'f', 3, 458, 0 ), /* 457 logcon */
+ S_ST( 'i', 3, 335, 0 ), /* 458 logconf */
+ S_ST( 'f', 3, 460, 454 ), /* 459 log */
+ S_ST( 'i', 3, 461, 0 ), /* 460 logf */
+ S_ST( 'l', 3, 336, 0 ), /* 461 logfi */
+ S_ST( 'o', 3, 463, 453 ), /* 462 lo */
+ S_ST( 'p', 3, 464, 0 ), /* 463 loo */
+ S_ST( 's', 3, 465, 0 ), /* 464 loop */
+ S_ST( 't', 3, 466, 0 ), /* 465 loops */
+ S_ST( 'a', 3, 467, 0 ), /* 466 loopst */
+ S_ST( 't', 3, 337, 0 ), /* 467 loopsta */
+ S_ST( 'w', 3, 469, 462 ), /* 468 lo */
+ S_ST( 'p', 3, 470, 0 ), /* 469 low */
+ S_ST( 'r', 3, 471, 0 ), /* 470 lowp */
+ S_ST( 'i', 3, 472, 0 ), /* 471 lowpr */
+ S_ST( 'o', 3, 473, 0 ), /* 472 lowpri */
+ S_ST( 't', 3, 474, 0 ), /* 473 lowprio */
+ S_ST( 'r', 3, 475, 0 ), /* 474 lowpriot */
+ S_ST( 'a', 3, 338, 0 ), /* 475 lowpriotr */
+ S_ST( 'm', 3, 557, 239 ), /* 476 */
+ S_ST( 'a', 3, 495, 0 ), /* 477 m */
+ S_ST( 'n', 3, 479, 0 ), /* 478 ma */
+ S_ST( 'y', 3, 480, 0 ), /* 479 man */
+ S_ST( 'c', 3, 481, 0 ), /* 480 many */
+ S_ST( 'a', 3, 482, 0 ), /* 481 manyc */
+ S_ST( 's', 3, 483, 0 ), /* 482 manyca */
+ S_ST( 't', 3, 489, 0 ), /* 483 manycas */
+ S_ST( 'c', 3, 485, 0 ), /* 484 manycast */
+ S_ST( 'l', 3, 486, 0 ), /* 485 manycastc */
+ S_ST( 'i', 3, 487, 0 ), /* 486 manycastcl */
+ S_ST( 'e', 3, 488, 0 ), /* 487 manycastcli */
+ S_ST( 'n', 3, 339, 0 ), /* 488 manycastclie */
+ S_ST( 's', 3, 490, 484 ), /* 489 manycast */
+ S_ST( 'e', 3, 491, 0 ), /* 490 manycasts */
+ S_ST( 'r', 3, 492, 0 ), /* 491 manycastse */
+ S_ST( 'v', 3, 493, 0 ), /* 492 manycastser */
+ S_ST( 'e', 3, 340, 0 ), /* 493 manycastserv */
+ S_ST( 's', 3, 341, 478 ), /* 494 ma */
+ S_ST( 'x', 3, 510, 494 ), /* 495 ma */
+ S_ST( 'a', 3, 497, 0 ), /* 496 max */
+ S_ST( 'g', 3, 342, 0 ), /* 497 maxa */
+ S_ST( 'c', 3, 499, 496 ), /* 498 max */
+ S_ST( 'l', 3, 500, 0 ), /* 499 maxc */
+ S_ST( 'o', 3, 501, 0 ), /* 500 maxcl */
+ S_ST( 'c', 3, 343, 0 ), /* 501 maxclo */
+ S_ST( 'd', 3, 506, 498 ), /* 502 max */
+ S_ST( 'e', 3, 504, 0 ), /* 503 maxd */
+ S_ST( 'p', 3, 505, 0 ), /* 504 maxde */
+ S_ST( 't', 3, 344, 0 ), /* 505 maxdep */
+ S_ST( 'i', 3, 507, 503 ), /* 506 maxd */
+ S_ST( 's', 3, 345, 0 ), /* 507 maxdi */
+ S_ST( 'm', 3, 509, 502 ), /* 508 max */
+ S_ST( 'e', 3, 346, 0 ), /* 509 maxm */
+ S_ST( 'p', 3, 511, 508 ), /* 510 max */
+ S_ST( 'o', 3, 512, 0 ), /* 511 maxp */
+ S_ST( 'l', 3, 347, 0 ), /* 512 maxpo */
+ S_ST( 'd', 3, 514, 477 ), /* 513 m */
+ S_ST( 'n', 3, 515, 0 ), /* 514 md */
+ S_ST( 's', 3, 516, 0 ), /* 515 mdn */
+ S_ST( 't', 3, 517, 0 ), /* 516 mdns */
+ S_ST( 'r', 3, 518, 0 ), /* 517 mdnst */
+ S_ST( 'i', 3, 519, 0 ), /* 518 mdnstr */
+ S_ST( 'e', 3, 348, 0 ), /* 519 mdnstri */
+ S_ST( 'e', 3, 349, 513 ), /* 520 m */
+ S_ST( 'l', 3, 522, 0 ), /* 521 mem */
+ S_ST( 'o', 3, 523, 0 ), /* 522 meml */
+ S_ST( 'c', 3, 350, 0 ), /* 523 memlo */
+ S_ST( 'i', 3, 525, 520 ), /* 524 m */
+ S_ST( 'n', 3, 542, 0 ), /* 525 mi */
+ S_ST( 'c', 3, 527, 0 ), /* 526 min */
+ S_ST( 'l', 3, 528, 0 ), /* 527 minc */
+ S_ST( 'o', 3, 529, 0 ), /* 528 mincl */
+ S_ST( 'c', 3, 351, 0 ), /* 529 minclo */
+ S_ST( 'd', 3, 534, 526 ), /* 530 min */
+ S_ST( 'e', 3, 532, 0 ), /* 531 mind */
+ S_ST( 'p', 3, 533, 0 ), /* 532 minde */
+ S_ST( 't', 3, 352, 0 ), /* 533 mindep */
+ S_ST( 'i', 3, 535, 531 ), /* 534 mind */
+ S_ST( 's', 3, 353, 0 ), /* 535 mindi */
+ S_ST( 'i', 3, 537, 530 ), /* 536 min */
+ S_ST( 'm', 3, 538, 0 ), /* 537 mini */
+ S_ST( 'u', 3, 354, 0 ), /* 538 minim */
+ S_ST( 'p', 3, 540, 536 ), /* 539 min */
+ S_ST( 'o', 3, 541, 0 ), /* 540 minp */
+ S_ST( 'l', 3, 355, 0 ), /* 541 minpo */
+ S_ST( 's', 3, 543, 539 ), /* 542 min */
+ S_ST( 'a', 3, 544, 0 ), /* 543 mins */
+ S_ST( 'n', 3, 356, 0 ), /* 544 minsa */
+ S_ST( 'o', 3, 547, 524 ), /* 545 m */
+ S_ST( 'd', 3, 357, 0 ), /* 546 mo */
+ S_ST( 'n', 3, 551, 546 ), /* 547 mo */
+ S_ST( 'i', 3, 549, 0 ), /* 548 mon */
+ S_ST( 't', 3, 550, 0 ), /* 549 moni */
+ S_ST( 'o', 3, 359, 0 ), /* 550 monit */
+ S_ST( 't', 3, 360, 548 ), /* 551 mon */
+ S_ST( 'r', 3, 361, 545 ), /* 552 m */
+ S_ST( 's', 3, 554, 552 ), /* 553 m */
+ S_ST( 's', 3, 555, 0 ), /* 554 ms */
+ S_ST( 'n', 3, 556, 0 ), /* 555 mss */
+ S_ST( 't', 3, 329, 0 ), /* 556 mssn */
+ S_ST( 'u', 3, 558, 553 ), /* 557 m */
+ S_ST( 'l', 3, 559, 0 ), /* 558 mu */
+ S_ST( 't', 3, 560, 0 ), /* 559 mul */
+ S_ST( 'i', 3, 561, 0 ), /* 560 mult */
+ S_ST( 'c', 3, 562, 0 ), /* 561 multi */
+ S_ST( 'a', 3, 563, 0 ), /* 562 multic */
+ S_ST( 's', 3, 564, 0 ), /* 563 multica */
+ S_ST( 't', 3, 565, 0 ), /* 564 multicas */
+ S_ST( 'c', 3, 566, 0 ), /* 565 multicast */
+ S_ST( 'l', 3, 567, 0 ), /* 566 multicastc */
+ S_ST( 'i', 3, 568, 0 ), /* 567 multicastcl */
+ S_ST( 'e', 3, 569, 0 ), /* 568 multicastcli */
+ S_ST( 'n', 3, 362, 0 ), /* 569 multicastclie */
+ S_ST( 'n', 3, 613, 476 ), /* 570 */
+ S_ST( 'i', 3, 363, 0 ), /* 571 n */
+ S_ST( 'o', 3, 608, 571 ), /* 572 n */
+ S_ST( 'l', 3, 574, 0 ), /* 573 no */
+ S_ST( 'i', 3, 575, 0 ), /* 574 nol */
+ S_ST( 'n', 3, 364, 0 ), /* 575 noli */
+ S_ST( 'm', 3, 581, 573 ), /* 576 no */
+ S_ST( 'o', 3, 578, 0 ), /* 577 nom */
+ S_ST( 'd', 3, 579, 0 ), /* 578 nomo */
+ S_ST( 'i', 3, 580, 0 ), /* 579 nomod */
+ S_ST( 'f', 3, 365, 0 ), /* 580 nomodi */
+ S_ST( 'r', 3, 582, 577 ), /* 581 nom */
+ S_ST( 'u', 3, 583, 0 ), /* 582 nomr */
+ S_ST( 'l', 3, 584, 0 ), /* 583 nomru */
+ S_ST( 'i', 3, 585, 0 ), /* 584 nomrul */
+ S_ST( 's', 3, 366, 0 ), /* 585 nomruli */
+ S_ST( 'n', 3, 587, 576 ), /* 586 no */
+ S_ST( 'v', 3, 588, 367 ), /* 587 non */
+ S_ST( 'o', 3, 589, 0 ), /* 588 nonv */
+ S_ST( 'l', 3, 590, 0 ), /* 589 nonvo */
+ S_ST( 'a', 3, 591, 0 ), /* 590 nonvol */
+ S_ST( 't', 3, 592, 0 ), /* 591 nonvola */
+ S_ST( 'i', 3, 593, 0 ), /* 592 nonvolat */
+ S_ST( 'l', 3, 368, 0 ), /* 593 nonvolati */
+ S_ST( 'p', 3, 595, 586 ), /* 594 no */
+ S_ST( 'e', 3, 596, 0 ), /* 595 nop */
+ S_ST( 'e', 3, 369, 0 ), /* 596 nope */
+ S_ST( 'q', 3, 598, 594 ), /* 597 no */
+ S_ST( 'u', 3, 599, 0 ), /* 598 noq */
+ S_ST( 'e', 3, 600, 0 ), /* 599 noqu */
+ S_ST( 'r', 3, 370, 0 ), /* 600 noque */
+ S_ST( 's', 3, 602, 597 ), /* 601 no */
+ S_ST( 'e', 3, 606, 0 ), /* 602 nos */
+ S_ST( 'l', 3, 604, 0 ), /* 603 nose */
+ S_ST( 'e', 3, 605, 0 ), /* 604 nosel */
+ S_ST( 'c', 3, 371, 0 ), /* 605 nosele */
+ S_ST( 'r', 3, 607, 603 ), /* 606 nose */
+ S_ST( 'v', 3, 372, 0 ), /* 607 noser */
+ S_ST( 't', 3, 609, 601 ), /* 608 no */
+ S_ST( 'r', 3, 611, 0 ), /* 609 not */
+ S_ST( 'a', 3, 373, 0 ), /* 610 notr */
+ S_ST( 'u', 3, 612, 610 ), /* 611 notr */
+ S_ST( 's', 3, 374, 0 ), /* 612 notru */
+ S_ST( 't', 3, 375, 572 ), /* 613 n */
+ S_ST( 'p', 3, 615, 0 ), /* 614 ntp */
+ S_ST( 'o', 3, 616, 0 ), /* 615 ntpp */
+ S_ST( 'r', 3, 376, 0 ), /* 616 ntppo */
+ S_ST( 's', 3, 618, 614 ), /* 617 ntp */
+ S_ST( 'i', 3, 619, 0 ), /* 618 ntps */
+ S_ST( 'g', 3, 620, 0 ), /* 619 ntpsi */
+ S_ST( 'n', 3, 621, 0 ), /* 620 ntpsig */
+ S_ST( 'd', 3, 622, 0 ), /* 621 ntpsign */
+ S_ST( 's', 3, 623, 0 ), /* 622 ntpsignd */
+ S_ST( 'o', 3, 624, 0 ), /* 623 ntpsignds */
+ S_ST( 'c', 3, 625, 0 ), /* 624 ntpsigndso */
+ S_ST( 'k', 3, 626, 0 ), /* 625 ntpsigndsoc */
+ S_ST( 'e', 3, 377, 0 ), /* 626 ntpsigndsock */
+ S_ST( 'o', 3, 628, 570 ), /* 627 */
+ S_ST( 'r', 3, 629, 0 ), /* 628 o */
+ S_ST( 'p', 3, 630, 0 ), /* 629 or */
+ S_ST( 'h', 3, 631, 0 ), /* 630 orp */
+ S_ST( 'a', 3, 378, 0 ), /* 631 orph */
+ S_ST( 'w', 3, 633, 0 ), /* 632 orphan */
+ S_ST( 'a', 3, 634, 0 ), /* 633 orphanw */
+ S_ST( 'i', 3, 379, 0 ), /* 634 orphanwa */
+ S_ST( 'p', 3, 391, 627 ), /* 635 */
+ S_ST( 'a', 3, 637, 0 ), /* 636 p */
+ S_ST( 'n', 3, 638, 0 ), /* 637 pa */
+ S_ST( 'i', 3, 380, 0 ), /* 638 pan */
+ S_ST( 'e', 3, 640, 636 ), /* 639 p */
+ S_ST( 'e', 3, 381, 0 ), /* 640 pe */
+ S_ST( 's', 3, 642, 0 ), /* 641 peer */
+ S_ST( 't', 3, 643, 0 ), /* 642 peers */
+ S_ST( 'a', 3, 644, 0 ), /* 643 peerst */
+ S_ST( 't', 3, 382, 0 ), /* 644 peersta */
+ S_ST( 'h', 3, 646, 639 ), /* 645 p */
+ S_ST( 'o', 3, 647, 0 ), /* 646 ph */
+ S_ST( 'n', 3, 383, 0 ), /* 647 pho */
+ S_ST( 'i', 3, 384, 645 ), /* 648 p */
+ S_ST( 'f', 3, 650, 0 ), /* 649 pid */
+ S_ST( 'i', 3, 651, 0 ), /* 650 pidf */
+ S_ST( 'l', 3, 385, 0 ), /* 651 pidfi */
+ S_ST( 'o', 3, 654, 648 ), /* 652 p */
+ S_ST( 'o', 3, 386, 0 ), /* 653 po */
+ S_ST( 'r', 3, 387, 653 ), /* 654 po */
+ S_ST( 'r', 3, 662, 652 ), /* 655 p */
+ S_ST( 'e', 3, 660, 0 ), /* 656 pr */
+ S_ST( 'e', 3, 658, 0 ), /* 657 pre */
+ S_ST( 'm', 3, 659, 0 ), /* 658 pree */
+ S_ST( 'p', 3, 388, 0 ), /* 659 preem */
+ S_ST( 'f', 3, 661, 657 ), /* 660 pre */
+ S_ST( 'e', 3, 389, 0 ), /* 661 pref */
+ S_ST( 'o', 3, 675, 656 ), /* 662 pr */
+ S_ST( 'c', 3, 664, 0 ), /* 663 pro */
+ S_ST( '_', 3, 665, 0 ), /* 664 proc */
+ S_ST( 'd', 3, 666, 0 ), /* 665 proc_ */
+ S_ST( 'e', 3, 667, 0 ), /* 666 proc_d */
+ S_ST( 'l', 3, 668, 0 ), /* 667 proc_de */
+ S_ST( 'a', 3, 451, 0 ), /* 668 proc_del */
+ S_ST( 'p', 3, 670, 663 ), /* 669 pro */
+ S_ST( '_', 3, 671, 0 ), /* 670 prop */
+ S_ST( 'd', 3, 672, 0 ), /* 671 prop_ */
+ S_ST( 'e', 3, 673, 0 ), /* 672 prop_d */
+ S_ST( 'l', 3, 674, 0 ), /* 673 prop_de */
+ S_ST( 'a', 3, 450, 0 ), /* 674 prop_del */
+ S_ST( 't', 3, 676, 669 ), /* 675 pro */
+ S_ST( 'o', 3, 677, 0 ), /* 676 prot */
+ S_ST( 's', 3, 678, 0 ), /* 677 proto */
+ S_ST( 't', 3, 679, 0 ), /* 678 protos */
+ S_ST( 'a', 3, 680, 0 ), /* 679 protost */
+ S_ST( 't', 3, 390, 0 ), /* 680 protosta */
+ S_ST( 'r', 3, 712, 635 ), /* 681 */
+ S_ST( 'a', 3, 688, 0 ), /* 682 r */
+ S_ST( 'n', 3, 684, 0 ), /* 683 ra */
+ S_ST( 'd', 3, 685, 0 ), /* 684 ran */
+ S_ST( 'f', 3, 686, 0 ), /* 685 rand */
+ S_ST( 'i', 3, 687, 0 ), /* 686 randf */
+ S_ST( 'l', 3, 392, 0 ), /* 687 randfi */
+ S_ST( 'w', 3, 689, 683 ), /* 688 ra */
+ S_ST( 's', 3, 690, 0 ), /* 689 raw */
+ S_ST( 't', 3, 691, 0 ), /* 690 raws */
+ S_ST( 'a', 3, 692, 0 ), /* 691 rawst */
+ S_ST( 't', 3, 393, 0 ), /* 692 rawsta */
+ S_ST( 'e', 3, 709, 682 ), /* 693 r */
+ S_ST( 'f', 3, 695, 0 ), /* 694 re */
+ S_ST( 'i', 3, 394, 0 ), /* 695 ref */
+ S_ST( 'q', 3, 697, 694 ), /* 696 re */
+ S_ST( 'u', 3, 698, 0 ), /* 697 req */
+ S_ST( 'e', 3, 699, 0 ), /* 698 requ */
+ S_ST( 's', 3, 700, 0 ), /* 699 reque */
+ S_ST( 't', 3, 701, 0 ), /* 700 reques */
+ S_ST( 'k', 3, 702, 0 ), /* 701 request */
+ S_ST( 'e', 3, 395, 0 ), /* 702 requestk */
+ S_ST( 's', 3, 705, 696 ), /* 703 re */
+ S_ST( 'e', 3, 396, 0 ), /* 704 res */
+ S_ST( 't', 3, 706, 704 ), /* 705 res */
+ S_ST( 'r', 3, 707, 0 ), /* 706 rest */
+ S_ST( 'i', 3, 708, 0 ), /* 707 restr */
+ S_ST( 'c', 3, 397, 0 ), /* 708 restri */
+ S_ST( 'v', 3, 710, 703 ), /* 709 re */
+ S_ST( 'o', 3, 711, 0 ), /* 710 rev */
+ S_ST( 'k', 3, 398, 0 ), /* 711 revo */
+ S_ST( 'l', 3, 713, 693 ), /* 712 r */
+ S_ST( 'i', 3, 714, 0 ), /* 713 rl */
+ S_ST( 'm', 3, 715, 0 ), /* 714 rli */
+ S_ST( 'i', 3, 399, 0 ), /* 715 rlim */
+ S_ST( 's', 3, 789, 681 ), /* 716 */
+ S_ST( 'a', 3, 718, 0 ), /* 717 s */
+ S_ST( 'v', 3, 719, 0 ), /* 718 sa */
+ S_ST( 'e', 3, 720, 0 ), /* 719 sav */
+ S_ST( 'c', 3, 721, 0 ), /* 720 save */
+ S_ST( 'o', 3, 722, 0 ), /* 721 savec */
+ S_ST( 'n', 3, 723, 0 ), /* 722 saveco */
+ S_ST( 'f', 3, 724, 0 ), /* 723 savecon */
+ S_ST( 'i', 3, 725, 0 ), /* 724 saveconf */
+ S_ST( 'g', 3, 726, 0 ), /* 725 saveconfi */
+ S_ST( 'd', 3, 727, 0 ), /* 726 saveconfig */
+ S_ST( 'i', 3, 400, 0 ), /* 727 saveconfigd */
+ S_ST( 'e', 3, 738, 717 ), /* 728 s */
+ S_ST( 'r', 3, 730, 0 ), /* 729 se */
+ S_ST( 'v', 3, 731, 0 ), /* 730 ser */
+ S_ST( 'e', 3, 401, 0 ), /* 731 serv */
+ S_ST( '_', 3, 733, 0 ), /* 732 server */
+ S_ST( 'o', 3, 734, 0 ), /* 733 server_ */
+ S_ST( 'f', 3, 735, 0 ), /* 734 server_o */
+ S_ST( 'f', 3, 736, 0 ), /* 735 server_of */
+ S_ST( 's', 3, 737, 0 ), /* 736 server_off */
+ S_ST( 'e', 3, 445, 0 ), /* 737 server_offs */
+ S_ST( 't', 3, 739, 729 ), /* 738 se */
+ S_ST( 'v', 3, 740, 0 ), /* 739 set */
+ S_ST( 'a', 3, 402, 0 ), /* 740 setv */
+ S_ST( 'i', 3, 742, 728 ), /* 741 s */
+ S_ST( 'm', 3, 743, 0 ), /* 742 si */
+ S_ST( 'u', 3, 744, 0 ), /* 743 sim */
+ S_ST( 'l', 3, 745, 0 ), /* 744 simu */
+ S_ST( 'a', 3, 746, 0 ), /* 745 simul */
+ S_ST( 't', 3, 747, 0 ), /* 746 simula */
+ S_ST( 'i', 3, 748, 442 ), /* 747 simulat */
+ S_ST( 'o', 3, 749, 0 ), /* 748 simulati */
+ S_ST( 'n', 3, 750, 0 ), /* 749 simulatio */
+ S_ST( '_', 3, 751, 0 ), /* 750 simulation */
+ S_ST( 'd', 3, 752, 0 ), /* 751 simulation_ */
+ S_ST( 'u', 3, 753, 0 ), /* 752 simulation_d */
+ S_ST( 'r', 3, 754, 0 ), /* 753 simulation_du */
+ S_ST( 'a', 3, 755, 0 ), /* 754 simulation_dur */
+ S_ST( 't', 3, 756, 0 ), /* 755 simulation_dura */
+ S_ST( 'i', 3, 757, 0 ), /* 756 simulation_durat */
+ S_ST( 'o', 3, 444, 0 ), /* 757 simulation_durati */
+ S_ST( 'o', 3, 759, 741 ), /* 758 s */
+ S_ST( 'u', 3, 760, 0 ), /* 759 so */
+ S_ST( 'r', 3, 761, 0 ), /* 760 sou */
+ S_ST( 'c', 3, 403, 0 ), /* 761 sour */
+ S_ST( 't', 3, 785, 758 ), /* 762 s */
+ S_ST( 'a', 3, 769, 0 ), /* 763 st */
+ S_ST( 'c', 3, 765, 0 ), /* 764 sta */
+ S_ST( 'k', 3, 766, 0 ), /* 765 stac */
+ S_ST( 's', 3, 767, 0 ), /* 766 stack */
+ S_ST( 'i', 3, 768, 0 ), /* 767 stacks */
+ S_ST( 'z', 3, 404, 0 ), /* 768 stacksi */
+ S_ST( 't', 3, 406, 764 ), /* 769 sta */
+ S_ST( 'i', 3, 771, 0 ), /* 770 stat */
+ S_ST( 's', 3, 772, 0 ), /* 771 stati */
+ S_ST( 't', 3, 773, 0 ), /* 772 statis */
+ S_ST( 'i', 3, 774, 0 ), /* 773 statist */
+ S_ST( 'c', 3, 405, 0 ), /* 774 statisti */
+ S_ST( 'd', 3, 776, 0 ), /* 775 stats */
+ S_ST( 'i', 3, 407, 0 ), /* 776 statsd */
+ S_ST( 'e', 3, 408, 763 ), /* 777 st */
+ S_ST( 'b', 3, 779, 0 ), /* 778 step */
+ S_ST( 'a', 3, 780, 0 ), /* 779 stepb */
+ S_ST( 'c', 3, 409, 0 ), /* 780 stepba */
+ S_ST( 'f', 3, 782, 778 ), /* 781 step */
+ S_ST( 'w', 3, 410, 0 ), /* 782 stepf */
+ S_ST( 'o', 3, 784, 781 ), /* 783 step */
+ S_ST( 'u', 3, 411, 0 ), /* 784 stepo */
+ S_ST( 'r', 3, 786, 777 ), /* 785 st */
+ S_ST( 'a', 3, 787, 0 ), /* 786 str */
+ S_ST( 't', 3, 788, 0 ), /* 787 stra */
+ S_ST( 'u', 3, 412, 0 ), /* 788 strat */
+ S_ST( 'y', 3, 414, 762 ), /* 789 s */
+ S_ST( 's', 3, 791, 0 ), /* 790 sys */
+ S_ST( 't', 3, 792, 0 ), /* 791 syss */
+ S_ST( 'a', 3, 793, 0 ), /* 792 sysst */
+ S_ST( 't', 3, 415, 0 ), /* 793 syssta */
+ S_ST( 't', 3, 820, 716 ), /* 794 */
+ S_ST( 'i', 3, 806, 0 ), /* 795 t */
+ S_ST( 'c', 3, 416, 0 ), /* 796 ti */
+ S_ST( 'm', 3, 799, 796 ), /* 797 ti */
+ S_ST( 'e', 3, 419, 0 ), /* 798 tim */
+ S_ST( 'i', 3, 800, 798 ), /* 799 tim */
+ S_ST( 'n', 3, 801, 0 ), /* 800 timi */
+ S_ST( 'g', 3, 802, 0 ), /* 801 timin */
+ S_ST( 's', 3, 803, 0 ), /* 802 timing */
+ S_ST( 't', 3, 804, 0 ), /* 803 timings */
+ S_ST( 'a', 3, 805, 0 ), /* 804 timingst */
+ S_ST( 't', 3, 420, 0 ), /* 805 timingsta */
+ S_ST( 'n', 3, 807, 797 ), /* 806 ti */
+ S_ST( 'k', 3, 808, 0 ), /* 807 tin */
+ S_ST( 'e', 3, 421, 0 ), /* 808 tink */
+ S_ST( 'o', 3, 422, 795 ), /* 809 t */
+ S_ST( 'r', 3, 812, 809 ), /* 810 t */
+ S_ST( 'a', 3, 423, 0 ), /* 811 tr */
+ S_ST( 'u', 3, 813, 811 ), /* 812 tr */
+ S_ST( 's', 3, 814, 424 ), /* 813 tru */
+ S_ST( 't', 3, 815, 0 ), /* 814 trus */
+ S_ST( 'e', 3, 816, 0 ), /* 815 trust */
+ S_ST( 'd', 3, 817, 0 ), /* 816 truste */
+ S_ST( 'k', 3, 818, 0 ), /* 817 trusted */
+ S_ST( 'e', 3, 425, 0 ), /* 818 trustedk */
+ S_ST( 't', 3, 426, 810 ), /* 819 t */
+ S_ST( 'y', 3, 821, 819 ), /* 820 t */
+ S_ST( 'p', 3, 427, 0 ), /* 821 ty */
+ S_ST( 'u', 3, 823, 794 ), /* 822 */
+ S_ST( 'n', 3, 829, 0 ), /* 823 u */
+ S_ST( 'c', 3, 825, 0 ), /* 824 un */
+ S_ST( 'o', 3, 826, 0 ), /* 825 unc */
+ S_ST( 'n', 3, 827, 0 ), /* 826 unco */
+ S_ST( 'f', 3, 828, 0 ), /* 827 uncon */
+ S_ST( 'i', 3, 432, 0 ), /* 828 unconf */
+ S_ST( 'p', 3, 830, 824 ), /* 829 un */
+ S_ST( 'e', 3, 831, 0 ), /* 830 unp */
+ S_ST( 'e', 3, 433, 0 ), /* 831 unpe */
+ S_ST( '_', 3, 852, 0 ), /* 832 unpeer */
+ S_ST( 'c', 3, 834, 0 ), /* 833 unpeer_ */
+ S_ST( 'r', 3, 835, 0 ), /* 834 unpeer_c */
+ S_ST( 'y', 3, 836, 0 ), /* 835 unpeer_cr */
+ S_ST( 'p', 3, 837, 0 ), /* 836 unpeer_cry */
+ S_ST( 't', 3, 838, 0 ), /* 837 unpeer_cryp */
+ S_ST( 'o', 3, 839, 0 ), /* 838 unpeer_crypt */
+ S_ST( '_', 3, 844, 0 ), /* 839 unpeer_crypto */
+ S_ST( 'e', 3, 841, 0 ), /* 840 unpeer_crypto_ */
+ S_ST( 'a', 3, 842, 0 ), /* 841 unpeer_crypto_e */
+ S_ST( 'r', 3, 843, 0 ), /* 842 unpeer_crypto_ea */
+ S_ST( 'l', 3, 429, 0 ), /* 843 unpeer_crypto_ear */
+ S_ST( 'n', 3, 845, 840 ), /* 844 unpeer_crypto_ */
+ S_ST( 'a', 3, 846, 0 ), /* 845 unpeer_crypto_n */
+ S_ST( 'k', 3, 847, 0 ), /* 846 unpeer_crypto_na */
+ S_ST( '_', 3, 848, 0 ), /* 847 unpeer_crypto_nak */
+ S_ST( 'e', 3, 849, 0 ), /* 848 unpeer_crypto_nak_ */
+ S_ST( 'a', 3, 850, 0 ), /* 849 unpeer_crypto_nak_e */
+ S_ST( 'r', 3, 851, 0 ), /* 850 unpeer_crypto_nak_ea */
+ S_ST( 'l', 3, 430, 0 ), /* 851 unpeer_crypto_nak_ear */
+ S_ST( 'd', 3, 853, 833 ), /* 852 unpeer_ */
+ S_ST( 'i', 3, 854, 0 ), /* 853 unpeer_d */
+ S_ST( 'g', 3, 855, 0 ), /* 854 unpeer_di */
+ S_ST( 'e', 3, 856, 0 ), /* 855 unpeer_dig */
+ S_ST( 's', 3, 857, 0 ), /* 856 unpeer_dige */
+ S_ST( 't', 3, 858, 0 ), /* 857 unpeer_diges */
+ S_ST( '_', 3, 859, 0 ), /* 858 unpeer_digest */
+ S_ST( 'e', 3, 860, 0 ), /* 859 unpeer_digest_ */
+ S_ST( 'a', 3, 861, 0 ), /* 860 unpeer_digest_e */
+ S_ST( 'r', 3, 862, 0 ), /* 861 unpeer_digest_ea */
+ S_ST( 'l', 3, 431, 0 ), /* 862 unpeer_digest_ear */
+ S_ST( 'v', 3, 864, 822 ), /* 863 */
+ S_ST( 'e', 3, 865, 0 ), /* 864 v */
+ S_ST( 'r', 3, 866, 0 ), /* 865 ve */
+ S_ST( 's', 3, 867, 0 ), /* 866 ver */
+ S_ST( 'i', 3, 868, 0 ), /* 867 vers */
+ S_ST( 'o', 3, 434, 0 ), /* 868 versi */
+ S_ST( 'w', 3, 876, 863 ), /* 869 */
+ S_ST( 'a', 3, 871, 0 ), /* 870 w */
+ S_ST( 'n', 3, 872, 0 ), /* 871 wa */
+ S_ST( 'd', 3, 873, 0 ), /* 872 wan */
+ S_ST( 'e', 3, 448, 0 ), /* 873 wand */
+ S_ST( 'e', 3, 875, 870 ), /* 874 w */
+ S_ST( 'e', 3, 436, 0 ), /* 875 we */
+ S_ST( 'i', 3, 877, 874 ), /* 876 w */
+ S_ST( 'l', 3, 878, 0 ), /* 877 wi */
+ S_ST( 'd', 3, 879, 0 ), /* 878 wil */
+ S_ST( 'c', 3, 880, 0 ), /* 879 wild */
+ S_ST( 'a', 3, 881, 0 ), /* 880 wildc */
+ S_ST( 'r', 3, 437, 0 ), /* 881 wildca */
+ S_ST( 'x', 3, 883, 869 ), /* 882 */
+ S_ST( 'l', 3, 884, 0 ), /* 883 x */
+ S_ST( 'e', 3, 885, 0 ), /* 884 xl */
+ S_ST( 'a', 3, 886, 0 ), /* 885 xle */
+ S_ST( 'v', 3, 438, 0 ), /* 886 xlea */
+ S_ST( 'y', 3, 888, 882 ), /* 887 [initial state] */
+ S_ST( 'e', 3, 889, 0 ), /* 888 y */
+ S_ST( 'a', 3, 439, 0 ) /* 889 ye */
};
diff --git a/ntpd/ntp_parser.c b/ntpd/ntp_parser.c
index cc179502c1e1..31596692e9bb 100644
--- a/ntpd/ntp_parser.c
+++ b/ntpd/ntp_parser.c
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 2.7.12-4996. */
/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,7 +26,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "2.7.12-4996"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -62,7 +62,8 @@
/* Copy the first part of user declarations. */
-#line 11 "../../ntpd/ntp_parser.y" /* yacc.c:339 */
+/* Line 371 of yacc.c */
+#line 11 "../../ntpd/ntp_parser.y"
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -96,13 +97,14 @@
# define ONLY_SIM(a) NULL
#endif
-#line 100 "../../ntpd/ntp_parser.c" /* yacc.c:339 */
+/* Line 371 of yacc.c */
+#line 102 "ntp_parser.c"
-# ifndef YY_NULLPTR
+# ifndef YY_NULL
# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULLPTR nullptr
+# define YY_NULL nullptr
# else
-# define YY_NULLPTR 0
+# define YY_NULL 0
# endif
# endif
@@ -116,9 +118,9 @@
/* In a future release of Bison, this section will be replaced
by #include "y.tab.h". */
-#ifndef YY_YY__NTPD_NTP_PARSER_H_INCLUDED
-# define YY_YY__NTPD_NTP_PARSER_H_INCLUDED
-/* Debug traces. */
+#ifndef YY_YY_NTP_PARSER_H_INCLUDED
+# define YY_YY_NTP_PARSER_H_INCLUDED
+/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -126,203 +128,207 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- enum yytokentype
- {
- T_Abbrev = 258,
- T_Age = 259,
- T_All = 260,
- T_Allan = 261,
- T_Allpeers = 262,
- T_Auth = 263,
- T_Autokey = 264,
- 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_Panic = 380,
- T_Peer = 381,
- T_Peerstats = 382,
- T_Phone = 383,
- T_Pid = 384,
- T_Pidfile = 385,
- T_Pool = 386,
- T_Port = 387,
- T_Preempt = 388,
- T_Prefer = 389,
- T_Protostats = 390,
- T_Pw = 391,
- T_Randfile = 392,
- T_Rawstats = 393,
- T_Refid = 394,
- T_Requestkey = 395,
- T_Reset = 396,
- T_Restrict = 397,
- T_Revoke = 398,
- T_Rlimit = 399,
- T_Saveconfigdir = 400,
- T_Server = 401,
- T_Setvar = 402,
- T_Source = 403,
- T_Stacksize = 404,
- T_Statistics = 405,
- T_Stats = 406,
- T_Statsdir = 407,
- T_Step = 408,
- T_Stepback = 409,
- T_Stepfwd = 410,
- T_Stepout = 411,
- T_Stratum = 412,
- T_String = 413,
- T_Sys = 414,
- T_Sysstats = 415,
- T_Tick = 416,
- T_Time1 = 417,
- T_Time2 = 418,
- T_Timer = 419,
- T_Timingstats = 420,
- T_Tinker = 421,
- T_Tos = 422,
- T_Trap = 423,
- T_True = 424,
- T_Trustedkey = 425,
- T_Ttl = 426,
- T_Type = 427,
- T_U_int = 428,
- T_Unconfig = 429,
- T_Unpeer = 430,
- T_Version = 431,
- T_WanderThreshold = 432,
- T_Week = 433,
- T_Wildcard = 434,
- T_Xleave = 435,
- T_Year = 436,
- T_Flag = 437,
- T_EOC = 438,
- T_Simulate = 439,
- T_Beep_Delay = 440,
- T_Sim_Duration = 441,
- T_Server_Offset = 442,
- T_Duration = 443,
- T_Freq_Offset = 444,
- T_Wander = 445,
- T_Jitter = 446,
- T_Prop_Delay = 447,
- T_Proc_Delay = 448
- };
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_Abbrev = 258,
+ T_Age = 259,
+ T_All = 260,
+ T_Allan = 261,
+ T_Allpeers = 262,
+ T_Auth = 263,
+ T_Autokey = 264,
+ 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_Panic = 380,
+ T_Peer = 381,
+ T_Peerstats = 382,
+ T_Phone = 383,
+ T_Pid = 384,
+ T_Pidfile = 385,
+ T_Pool = 386,
+ T_Port = 387,
+ T_Preempt = 388,
+ T_Prefer = 389,
+ T_Protostats = 390,
+ T_Pw = 391,
+ T_Randfile = 392,
+ T_Rawstats = 393,
+ T_Refid = 394,
+ T_Requestkey = 395,
+ T_Reset = 396,
+ T_Restrict = 397,
+ T_Revoke = 398,
+ T_Rlimit = 399,
+ T_Saveconfigdir = 400,
+ T_Server = 401,
+ T_Setvar = 402,
+ T_Source = 403,
+ T_Stacksize = 404,
+ T_Statistics = 405,
+ T_Stats = 406,
+ T_Statsdir = 407,
+ T_Step = 408,
+ T_Stepback = 409,
+ T_Stepfwd = 410,
+ T_Stepout = 411,
+ T_Stratum = 412,
+ T_String = 413,
+ T_Sys = 414,
+ T_Sysstats = 415,
+ T_Tick = 416,
+ T_Time1 = 417,
+ T_Time2 = 418,
+ T_Timer = 419,
+ T_Timingstats = 420,
+ T_Tinker = 421,
+ T_Tos = 422,
+ T_Trap = 423,
+ T_True = 424,
+ T_Trustedkey = 425,
+ T_Ttl = 426,
+ T_Type = 427,
+ T_U_int = 428,
+ T_UEcrypto = 429,
+ T_UEcryptonak = 430,
+ T_UEdigest = 431,
+ T_Unconfig = 432,
+ T_Unpeer = 433,
+ T_Version = 434,
+ T_WanderThreshold = 435,
+ T_Week = 436,
+ T_Wildcard = 437,
+ T_Xleave = 438,
+ T_Year = 439,
+ T_Flag = 440,
+ T_EOC = 441,
+ T_Simulate = 442,
+ T_Beep_Delay = 443,
+ T_Sim_Duration = 444,
+ T_Server_Offset = 445,
+ T_Duration = 446,
+ T_Freq_Offset = 447,
+ T_Wander = 448,
+ T_Jitter = 449,
+ T_Prop_Delay = 450,
+ T_Proc_Delay = 451
+ };
#endif
/* Tokens. */
#define T_Abbrev 258
@@ -496,33 +502,37 @@ extern int yydebug;
#define T_Ttl 426
#define T_Type 427
#define T_U_int 428
-#define T_Unconfig 429
-#define T_Unpeer 430
-#define T_Version 431
-#define T_WanderThreshold 432
-#define T_Week 433
-#define T_Wildcard 434
-#define T_Xleave 435
-#define T_Year 436
-#define T_Flag 437
-#define T_EOC 438
-#define T_Simulate 439
-#define T_Beep_Delay 440
-#define T_Sim_Duration 441
-#define T_Server_Offset 442
-#define T_Duration 443
-#define T_Freq_Offset 444
-#define T_Wander 445
-#define T_Jitter 446
-#define T_Prop_Delay 447
-#define T_Proc_Delay 448
-
-/* Value type. */
+#define T_UEcrypto 429
+#define T_UEcryptonak 430
+#define T_UEdigest 431
+#define T_Unconfig 432
+#define T_Unpeer 433
+#define T_Version 434
+#define T_WanderThreshold 435
+#define T_Week 436
+#define T_Wildcard 437
+#define T_Xleave 438
+#define T_Year 439
+#define T_Flag 440
+#define T_EOC 441
+#define T_Simulate 442
+#define T_Beep_Delay 443
+#define T_Sim_Duration 444
+#define T_Server_Offset 445
+#define T_Duration 446
+#define T_Freq_Offset 447
+#define T_Wander 448
+#define T_Jitter 449
+#define T_Prop_Delay 450
+#define T_Proc_Delay 451
+
+
+
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
+typedef union YYSTYPE
{
-#line 51 "../../ntpd/ntp_parser.y" /* yacc.c:355 */
+/* Line 387 of yacc.c */
+#line 51 "../../ntpd/ntp_parser.y"
char * String;
double Double;
@@ -541,22 +551,37 @@ union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-#line 545 "../../ntpd/ntp_parser.c" /* yacc.c:355 */
-};
+
+/* Line 387 of yacc.c */
+#line 557 "ntp_parser.c"
+} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-
extern YYSTYPE yylval;
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY__NTPD_NTP_PARSER_H_INCLUDED */
+#endif /* !YY_YY_NTP_PARSER_H_INCLUDED */
/* Copy the second part of user declarations. */
-#line 560 "../../ntpd/ntp_parser.c" /* yacc.c:358 */
+/* Line 390 of yacc.c */
+#line 585 "ntp_parser.c"
#ifdef short
# undef short
@@ -570,8 +595,11 @@ typedef unsigned char yytype_uint8;
#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
-#else
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
#endif
#ifdef YYTYPE_UINT16
@@ -591,7 +619,8 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
@@ -613,30 +642,11 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef YY_ATTRIBUTE
-# if (defined __GNUC__ \
- && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
- || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
-# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
-# else
-# define YY_ATTRIBUTE(Spec) /* empty */
-# endif
-#endif
-
-#ifndef YY_ATTRIBUTE_PURE
-# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
-#endif
-
-#ifndef YY_ATTRIBUTE_UNUSED
-# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
-#endif
-
-#if !defined _Noreturn \
- && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-# define _Noreturn __declspec (noreturn)
-# else
-# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later. */
+# if (! defined __GNUC__ || __GNUC__ < 2 \
+ || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
+# define __attribute__(Spec) /* empty */
# endif
#endif
@@ -647,26 +657,25 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
-/* Suppress an incorrect diagnostic about yylval being uninitialized. */
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
- _Pragma ("GCC diagnostic push") \
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
- _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
- _Pragma ("GCC diagnostic pop")
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(N) (N)
#else
-# define YY_INITIAL_VALUE(Value) Value
-#endif
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
+{
+ return yyi;
+}
#endif
-
#if ! defined yyoverflow || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -684,7 +693,8 @@ typedef short int yytype_int16;
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
@@ -696,8 +706,8 @@ typedef short int yytype_int16;
# endif
# ifdef YYSTACK_ALLOC
- /* Pacify GCC's 'empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
# ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
and a page size can be as small as 4096 bytes. So we cannot safely
@@ -713,7 +723,7 @@ typedef short int yytype_int16;
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
+ && (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
@@ -721,13 +731,15 @@ typedef short int yytype_int16;
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
@@ -737,7 +749,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
@@ -762,16 +774,16 @@ union yyalloc
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (0)
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
#endif
@@ -790,50 +802,48 @@ union yyalloc
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
- while (0)
+ while (YYID (0))
# endif
# endif
#endif /* !YYCOPY_NEEDED */
/* YYFINAL -- State number of the termination state. */
-#define YYFINAL 210
+#define YYFINAL 213
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 647
+#define YYLAST 624
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 199
+#define YYNTOKENS 202
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 105
/* YYNRULES -- Number of rules. */
-#define YYNRULES 313
-/* YYNSTATES -- Number of states. */
-#define YYNSTATES 419
+#define YYNRULES 316
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 422
-/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
- by yylex, with out-of-bounds checking. */
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 448
+#define YYMAXUTOK 451
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
- as returned by yylex, without out-of-bounds checking. */
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
static const yytype_uint8 yytranslate[] =
{
0, 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,
- 195, 196, 2, 2, 2, 2, 2, 2, 2, 2,
+ 198, 199, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 194, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 197, 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, 197, 2, 198, 2, 2, 2, 2,
+ 2, 2, 2, 200, 2, 201, 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,
@@ -865,45 +875,166 @@ static const yytype_uint8 yytranslate[] =
155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
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
+ 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
+ 195, 196
};
#if YYDEBUG
- /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint16 yyprhs[] =
+{
+ 0, 0, 3, 5, 9, 12, 15, 16, 18, 20,
+ 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,
+ 42, 46, 48, 50, 52, 54, 56, 58, 61, 63,
+ 65, 67, 68, 71, 73, 75, 77, 79, 81, 83,
+ 85, 87, 89, 91, 93, 95, 98, 101, 103, 105,
+ 107, 109, 111, 113, 116, 118, 121, 123, 125, 127,
+ 130, 133, 136, 139, 142, 145, 148, 151, 154, 157,
+ 160, 163, 164, 167, 170, 173, 175, 177, 179, 181,
+ 183, 186, 189, 191, 194, 197, 200, 202, 204, 206,
+ 208, 210, 212, 214, 216, 218, 220, 223, 226, 230,
+ 233, 235, 237, 239, 241, 243, 245, 247, 249, 251,
+ 252, 255, 258, 261, 263, 265, 267, 269, 271, 273,
+ 275, 277, 279, 281, 283, 285, 287, 290, 293, 297,
+ 303, 307, 312, 317, 321, 322, 325, 327, 329, 331,
+ 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
+ 353, 355, 358, 360, 363, 365, 367, 369, 372, 374,
+ 377, 379, 381, 383, 385, 387, 389, 391, 393, 397,
+ 400, 402, 405, 408, 411, 414, 417, 419, 421, 423,
+ 425, 427, 429, 432, 435, 437, 440, 442, 444, 446,
+ 449, 452, 455, 457, 459, 461, 463, 465, 467, 469,
+ 471, 473, 475, 477, 479, 481, 483, 486, 489, 491,
+ 494, 496, 498, 500, 502, 504, 506, 508, 510, 512,
+ 514, 516, 518, 521, 524, 527, 530, 534, 536, 539,
+ 542, 545, 548, 552, 555, 557, 559, 561, 563, 565,
+ 567, 569, 571, 573, 575, 577, 580, 581, 586, 588,
+ 589, 590, 593, 596, 599, 602, 604, 606, 610, 614,
+ 616, 618, 620, 622, 624, 626, 628, 630, 632, 635,
+ 638, 640, 642, 644, 646, 648, 650, 652, 654, 657,
+ 659, 662, 664, 666, 668, 674, 677, 679, 682, 684,
+ 686, 688, 690, 692, 694, 700, 702, 706, 709, 713,
+ 715, 717, 720, 722, 728, 733, 737, 740, 742, 749,
+ 753, 756, 760, 762, 764, 766, 768
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int16 yyrhs[] =
+{
+ 203, 0, -1, 204, -1, 204, 205, 186, -1, 205,
+ 186, -1, 1, 186, -1, -1, 206, -1, 219, -1,
+ 221, -1, 222, -1, 231, -1, 239, -1, 226, -1,
+ 248, -1, 253, -1, 257, -1, 262, -1, 266, -1,
+ 293, -1, 207, 208, 211, -1, 146, -1, 131, -1,
+ 126, -1, 14, -1, 84, -1, 209, -1, 210, 158,
+ -1, 158, -1, 66, -1, 68, -1, -1, 211, 212,
+ -1, 213, -1, 215, -1, 217, -1, 214, -1, 9,
+ -1, 17, -1, 53, -1, 116, -1, 133, -1, 134,
+ -1, 169, -1, 183, -1, 216, 61, -1, 216, 173,
+ -1, 70, -1, 100, -1, 92, -1, 171, -1, 102,
+ -1, 179, -1, 218, 158, -1, 54, -1, 220, 208,
+ -1, 177, -1, 178, -1, 15, -1, 85, 290, -1,
+ 107, 290, -1, 93, 61, -1, 10, 61, -1, 22,
+ 61, -1, 23, 223, -1, 71, 158, -1, 72, 158,
+ -1, 140, 61, -1, 143, 61, -1, 170, 286, -1,
+ 122, 158, -1, -1, 223, 224, -1, 225, 158, -1,
+ 143, 61, -1, 51, -1, 54, -1, 136, -1, 137,
+ -1, 28, -1, 167, 227, -1, 227, 228, -1, 228,
+ -1, 229, 61, -1, 230, 292, -1, 21, 291, -1,
+ 19, -1, 48, -1, 123, -1, 124, -1, 101, -1,
+ 13, -1, 98, -1, 90, -1, 96, -1, 88, -1,
+ 150, 232, -1, 152, 158, -1, 41, 233, 234, -1,
+ 232, 233, -1, 233, -1, 20, -1, 24, -1, 82,
+ -1, 127, -1, 138, -1, 160, -1, 165, -1, 135,
+ -1, -1, 234, 235, -1, 40, 158, -1, 172, 238,
+ -1, 236, -1, 237, -1, 78, -1, 109, -1, 37,
+ -1, 29, -1, 112, -1, 129, -1, 26, -1, 181,
+ -1, 105, -1, 184, -1, 4, -1, 30, 242, -1,
+ 106, 245, -1, 142, 208, 240, -1, 142, 209, 86,
+ 209, 240, -1, 142, 27, 240, -1, 142, 66, 27,
+ 240, -1, 142, 68, 27, 240, -1, 142, 148, 240,
+ -1, -1, 240, 241, -1, 47, -1, 55, -1, 73,
+ -1, 74, -1, 77, -1, 83, -1, 110, -1, 111,
+ -1, 114, -1, 115, -1, 117, -1, 118, -1, 119,
+ -1, 121, -1, 179, -1, 242, 243, -1, 243, -1,
+ 244, 61, -1, 11, -1, 99, -1, 104, -1, 245,
+ 246, -1, 246, -1, 247, 61, -1, 56, -1, 57,
+ -1, 58, -1, 59, -1, 87, -1, 89, -1, 91,
+ -1, 97, -1, 50, 208, 249, -1, 249, 250, -1,
+ 250, -1, 251, 292, -1, 252, 291, -1, 157, 61,
+ -1, 3, 158, -1, 139, 158, -1, 162, -1, 163,
+ -1, 43, -1, 44, -1, 45, -1, 46, -1, 144,
+ 254, -1, 254, 255, -1, 255, -1, 256, 61, -1,
+ 95, -1, 149, -1, 42, -1, 37, 258, -1, 29,
+ 258, -1, 258, 259, -1, 259, -1, 260, -1, 261,
+ -1, 8, -1, 12, -1, 18, -1, 69, -1, 104,
+ -1, 120, -1, 103, -1, 151, -1, 174, -1, 175,
+ -1, 176, -1, 166, 263, -1, 263, 264, -1, 264,
+ -1, 265, 292, -1, 6, -1, 31, -1, 49, -1,
+ 52, -1, 125, -1, 153, -1, 154, -1, 155, -1,
+ 156, -1, 161, -1, 278, -1, 282, -1, 267, 292,
+ -1, 268, 61, -1, 269, 158, -1, 270, 158, -1,
+ 60, 158, 205, -1, 38, -1, 33, 271, -1, 80,
+ 276, -1, 128, 289, -1, 147, 272, -1, 168, 209,
+ 274, -1, 171, 285, -1, 16, -1, 113, -1, 161,
+ -1, 35, -1, 76, -1, 54, -1, 75, -1, 81,
+ -1, 130, -1, 145, -1, 158, -1, 158, 32, -1,
+ -1, 158, 197, 158, 273, -1, 27, -1, -1, -1,
+ 274, 275, -1, 132, 61, -1, 62, 209, -1, 276,
+ 277, -1, 277, -1, 158, -1, 279, 281, 280, -1,
+ 279, 281, 158, -1, 62, -1, 108, -1, 5, -1,
+ 65, -1, 67, -1, 182, -1, 79, -1, 55, -1,
+ 34, -1, 141, 283, -1, 283, 284, -1, 284, -1,
+ 7, -1, 8, -1, 25, -1, 64, -1, 94, -1,
+ 159, -1, 164, -1, 285, 61, -1, 61, -1, 286,
+ 287, -1, 287, -1, 61, -1, 288, -1, 198, 61,
+ 36, 61, 199, -1, 289, 158, -1, 158, -1, 290,
+ 208, -1, 208, -1, 61, -1, 169, -1, 39, -1,
+ 61, -1, 32, -1, 294, 200, 295, 298, 201, -1,
+ 187, -1, 295, 296, 186, -1, 296, 186, -1, 297,
+ 197, 292, -1, 188, -1, 189, -1, 298, 299, -1,
+ 299, -1, 301, 200, 300, 302, 201, -1, 190, 197,
+ 292, 186, -1, 146, 197, 208, -1, 302, 303, -1,
+ 303, -1, 191, 197, 292, 200, 304, 201, -1, 304,
+ 305, 186, -1, 305, 186, -1, 306, 197, 292, -1,
+ 192, -1, 193, -1, 194, -1, 195, -1, 196, -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 366, 366, 370, 371, 372, 387, 388, 389, 390,
- 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
- 408, 418, 419, 420, 421, 422, 426, 427, 432, 437,
- 439, 445, 446, 454, 455, 456, 460, 465, 466, 467,
- 468, 469, 470, 471, 472, 476, 478, 483, 484, 485,
- 486, 487, 488, 492, 497, 506, 516, 517, 527, 529,
- 531, 533, 544, 551, 553, 558, 560, 562, 564, 566,
- 575, 581, 582, 590, 592, 604, 605, 606, 607, 608,
- 617, 622, 627, 635, 637, 639, 644, 645, 646, 647,
- 648, 649, 653, 654, 655, 656, 665, 667, 676, 686,
- 691, 699, 700, 701, 702, 703, 704, 705, 706, 711,
- 712, 720, 730, 739, 754, 759, 760, 764, 765, 769,
- 770, 771, 772, 773, 774, 775, 784, 788, 792, 800,
- 808, 816, 831, 846, 859, 860, 868, 869, 870, 871,
- 872, 873, 874, 875, 876, 877, 878, 879, 880, 881,
- 882, 886, 891, 899, 904, 905, 906, 910, 915, 923,
- 928, 929, 930, 931, 932, 933, 934, 935, 943, 953,
- 958, 966, 968, 970, 979, 981, 986, 987, 991, 992,
- 993, 994, 1002, 1007, 1012, 1020, 1025, 1026, 1027, 1036,
- 1038, 1043, 1048, 1056, 1058, 1075, 1076, 1077, 1078, 1079,
- 1080, 1084, 1085, 1093, 1098, 1103, 1111, 1116, 1117, 1118,
- 1119, 1120, 1121, 1122, 1123, 1124, 1125, 1134, 1135, 1136,
- 1143, 1150, 1157, 1173, 1192, 1194, 1196, 1198, 1200, 1202,
- 1209, 1214, 1215, 1216, 1220, 1224, 1233, 1234, 1238, 1239,
- 1240, 1244, 1255, 1269, 1281, 1286, 1288, 1293, 1294, 1302,
- 1304, 1312, 1317, 1325, 1350, 1357, 1367, 1368, 1372, 1373,
- 1374, 1375, 1379, 1380, 1381, 1385, 1390, 1395, 1403, 1404,
- 1405, 1406, 1407, 1408, 1409, 1419, 1424, 1432, 1437, 1445,
- 1447, 1451, 1456, 1461, 1469, 1474, 1482, 1491, 1492, 1496,
- 1497, 1506, 1524, 1528, 1533, 1541, 1546, 1547, 1551, 1556,
- 1564, 1569, 1574, 1579, 1584, 1592, 1597, 1602, 1610, 1615,
- 1616, 1617, 1618, 1619
+ 0, 369, 369, 373, 374, 375, 390, 391, 392, 393,
+ 394, 395, 396, 397, 398, 399, 400, 401, 402, 403,
+ 411, 421, 422, 423, 424, 425, 429, 430, 435, 440,
+ 442, 448, 449, 457, 458, 459, 463, 468, 469, 470,
+ 471, 472, 473, 474, 475, 479, 481, 486, 487, 488,
+ 489, 490, 491, 495, 500, 509, 519, 520, 530, 532,
+ 534, 536, 547, 554, 556, 561, 563, 565, 567, 569,
+ 578, 584, 585, 593, 595, 607, 608, 609, 610, 611,
+ 620, 625, 630, 638, 640, 642, 647, 648, 649, 650,
+ 651, 652, 656, 657, 658, 659, 668, 670, 679, 689,
+ 694, 702, 703, 704, 705, 706, 707, 708, 709, 714,
+ 715, 723, 733, 742, 757, 762, 763, 767, 768, 772,
+ 773, 774, 775, 776, 777, 778, 787, 791, 795, 803,
+ 811, 819, 834, 849, 862, 863, 871, 872, 873, 874,
+ 875, 876, 877, 878, 879, 880, 881, 882, 883, 884,
+ 885, 889, 894, 902, 907, 908, 909, 913, 918, 926,
+ 931, 932, 933, 934, 935, 936, 937, 938, 946, 956,
+ 961, 969, 971, 973, 982, 984, 989, 990, 994, 995,
+ 996, 997, 1005, 1010, 1015, 1023, 1028, 1029, 1030, 1039,
+ 1041, 1046, 1051, 1059, 1061, 1078, 1079, 1080, 1081, 1082,
+ 1083, 1087, 1088, 1089, 1090, 1091, 1099, 1104, 1109, 1117,
+ 1122, 1123, 1124, 1125, 1126, 1127, 1128, 1129, 1130, 1131,
+ 1140, 1141, 1142, 1149, 1156, 1163, 1179, 1198, 1200, 1202,
+ 1204, 1206, 1208, 1215, 1220, 1221, 1222, 1226, 1230, 1239,
+ 1240, 1244, 1245, 1246, 1250, 1261, 1275, 1287, 1292, 1294,
+ 1299, 1300, 1308, 1310, 1318, 1323, 1331, 1356, 1363, 1373,
+ 1374, 1378, 1379, 1380, 1381, 1385, 1386, 1387, 1391, 1396,
+ 1401, 1409, 1410, 1411, 1412, 1413, 1414, 1415, 1425, 1430,
+ 1438, 1443, 1451, 1453, 1457, 1462, 1467, 1475, 1480, 1488,
+ 1497, 1498, 1502, 1503, 1512, 1530, 1534, 1539, 1547, 1552,
+ 1553, 1557, 1562, 1570, 1575, 1580, 1585, 1590, 1598, 1603,
+ 1608, 1616, 1621, 1622, 1623, 1624, 1625
};
#endif
@@ -944,29 +1075,29 @@ static const char *const yytname[] =
"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_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_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",
@@ -981,13 +1112,13 @@ static const char *const yytname[] =
"sim_init_statement_list", "sim_init_statement", "sim_init_keyword",
"sim_server_list", "sim_server", "sim_server_offset", "sim_server_name",
"sim_act_list", "sim_act", "sim_act_stmt_list", "sim_act_stmt",
- "sim_act_keyword", YY_NULLPTR
+ "sim_act_keyword", YY_NULL
};
#endif
# ifdef YYPRINT
-/* YYTOKNUM[NUM] -- (External) token number corresponding to the
- (internal) symbol number NUM (which must be that of a token). */
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
@@ -1009,292 +1140,363 @@ 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, 61, 40, 41, 123, 125
+ 445, 446, 447, 448, 449, 450, 451, 61, 40, 41,
+ 123, 125
};
# endif
-#define YYPACT_NINF -185
-
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-185)))
-
-#define YYTABLE_NINF -7
-
-#define yytable_value_is_error(Yytable_value) \
- 0
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 202, 203, 204, 204, 204, 205, 205, 205, 205,
+ 205, 205, 205, 205, 205, 205, 205, 205, 205, 205,
+ 206, 207, 207, 207, 207, 207, 208, 208, 209, 210,
+ 210, 211, 211, 212, 212, 212, 213, 214, 214, 214,
+ 214, 214, 214, 214, 214, 215, 215, 216, 216, 216,
+ 216, 216, 216, 217, 218, 219, 220, 220, 221, 221,
+ 221, 221, 222, 222, 222, 222, 222, 222, 222, 222,
+ 222, 223, 223, 224, 224, 225, 225, 225, 225, 225,
+ 226, 227, 227, 228, 228, 228, 229, 229, 229, 229,
+ 229, 229, 230, 230, 230, 230, 231, 231, 231, 232,
+ 232, 233, 233, 233, 233, 233, 233, 233, 233, 234,
+ 234, 235, 235, 235, 235, 236, 236, 237, 237, 238,
+ 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
+ 239, 239, 239, 239, 240, 240, 241, 241, 241, 241,
+ 241, 241, 241, 241, 241, 241, 241, 241, 241, 241,
+ 241, 242, 242, 243, 244, 244, 244, 245, 245, 246,
+ 247, 247, 247, 247, 247, 247, 247, 247, 248, 249,
+ 249, 250, 250, 250, 250, 250, 251, 251, 252, 252,
+ 252, 252, 253, 254, 254, 255, 256, 256, 256, 257,
+ 257, 258, 258, 259, 259, 260, 260, 260, 260, 260,
+ 260, 261, 261, 261, 261, 261, 262, 263, 263, 264,
+ 265, 265, 265, 265, 265, 265, 265, 265, 265, 265,
+ 266, 266, 266, 266, 266, 266, 266, 266, 266, 266,
+ 266, 266, 266, 266, 267, 267, 267, 268, 268, 269,
+ 269, 270, 270, 270, 271, 271, 271, 272, 273, 273,
+ 274, 274, 275, 275, 276, 276, 277, 278, 278, 279,
+ 279, 280, 280, 280, 280, 281, 281, 281, 282, 283,
+ 283, 284, 284, 284, 284, 284, 284, 284, 285, 285,
+ 286, 286, 287, 287, 288, 289, 289, 290, 290, 291,
+ 291, 291, 292, 292, 293, 294, 295, 295, 296, 297,
+ 297, 298, 298, 299, 300, 301, 302, 302, 303, 304,
+ 304, 305, 306, 306, 306, 306, 306
+};
- /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-static const yytype_int16 yypact[] =
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
{
- 78, -169, -34, -185, -185, -185, -29, -185, 17, 43,
- -124, -185, 17, -185, -5, -27, -185, -121, -185, -112,
- -110, -185, -185, -100, -185, -185, -27, 0, 116, -27,
- -185, -185, -91, -185, -89, -185, -185, 11, 35, 30,
- 13, 31, -185, -185, -83, -5, -78, -185, 186, 523,
- -76, -56, 15, -185, -185, -185, 83, 244, -99, -185,
- -27, -185, -27, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -12, 24, -71, -69, -185, -11, -185,
- -185, -107, -185, -185, -185, 8, -185, -185, -185, -185,
- -185, -185, -185, -185, 17, -185, -185, -185, -185, -185,
- -185, 43, -185, 34, 59, -185, 17, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, 7,
- -185, -61, 407, -185, -185, -185, -100, -185, -185, -27,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, 116,
- -185, 44, -27, -185, -185, -52, -185, -185, -185, -185,
- -185, -185, -185, -185, 35, -185, -185, 85, 96, -185,
- -185, 39, -185, -185, -185, -185, 31, -185, 75, -46,
- -185, -5, -185, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, 186, -185, -12, -185, -185, -35,
- -185, -185, -185, -185, -185, -185, -185, -185, 523, -185,
- 82, -12, -185, -185, 91, -56, -185, -185, -185, 100,
- -185, -26, -185, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -2, -130, -185, -185, -185, -185,
- -185, 105, -185, 9, -185, -185, -185, -185, -7, 18,
- -185, -185, -185, -185, 25, 121, -185, -185, 7, -185,
- -12, -35, -185, -185, -185, -185, -185, -185, -185, -185,
- 391, -185, -185, 391, 391, -76, -185, -185, 29, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, -51,
- 153, -185, -185, -185, 464, -185, -185, -185, -185, -185,
- -185, -185, -185, -82, 14, 1, -185, -185, -185, -185,
- 38, -185, -185, 12, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, 391,
- 391, -185, 171, -76, 140, -185, 141, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, -55, -185, 53, 20,
- 33, -128, -185, 32, -185, -12, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, 391, -185, -185, -185, -185,
- 16, -185, -185, -185, -27, -185, -185, -185, 46, -185,
- -185, -185, 37, 48, -12, 40, -167, -185, 54, -12,
- -185, -185, -185, 45, 79, -185, -185, -185, -185, -185,
- 98, 57, 47, -185, 60, -185, -12, -185, -185
+ 0, 2, 1, 3, 2, 2, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 1, 1, 1, 1, 1, 1, 2, 1, 1,
+ 1, 0, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
+ 1, 1, 1, 2, 1, 2, 1, 1, 1, 2,
+ 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, 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,
+ 2, 2, 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
};
- /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE does not specify something else to do. Zero
- means the default is an error. */
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
static const yytype_uint16 yydefact[] =
{
- 0, 0, 0, 24, 58, 231, 0, 71, 0, 0,
- 243, 234, 0, 224, 0, 0, 236, 0, 256, 0,
- 0, 237, 235, 0, 238, 25, 0, 0, 0, 0,
- 257, 232, 0, 23, 0, 239, 22, 0, 0, 0,
- 0, 0, 240, 21, 0, 0, 0, 233, 0, 0,
- 0, 0, 0, 56, 57, 292, 0, 2, 0, 7,
+ 0, 0, 0, 24, 58, 234, 0, 71, 0, 0,
+ 246, 237, 0, 227, 0, 0, 239, 0, 259, 0,
+ 0, 240, 238, 0, 241, 25, 0, 0, 0, 0,
+ 260, 235, 0, 23, 0, 242, 22, 0, 0, 0,
+ 0, 0, 243, 21, 0, 0, 0, 236, 0, 0,
+ 0, 0, 0, 56, 57, 295, 0, 2, 0, 7,
0, 8, 0, 9, 10, 13, 11, 12, 14, 15,
- 16, 17, 18, 0, 0, 0, 0, 217, 0, 218,
+ 16, 17, 18, 0, 0, 0, 0, 220, 0, 221,
19, 0, 5, 62, 63, 64, 195, 196, 197, 198,
- 201, 199, 200, 202, 190, 192, 193, 194, 154, 155,
- 156, 126, 152, 0, 241, 225, 189, 101, 102, 103,
- 104, 108, 105, 106, 107, 109, 29, 30, 28, 0,
- 26, 0, 6, 65, 66, 253, 226, 252, 285, 59,
- 61, 160, 161, 162, 163, 164, 165, 166, 167, 127,
- 158, 0, 60, 70, 283, 227, 67, 268, 269, 270,
- 271, 272, 273, 274, 265, 267, 134, 29, 30, 134,
- 134, 26, 68, 188, 186, 187, 182, 184, 0, 0,
- 228, 96, 100, 97, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 203, 205, 0, 91, 86, 0,
- 87, 95, 93, 94, 92, 90, 88, 89, 80, 82,
- 0, 0, 247, 279, 0, 69, 278, 280, 276, 230,
- 1, 0, 4, 31, 55, 290, 289, 219, 220, 221,
- 222, 264, 263, 262, 0, 0, 79, 75, 76, 77,
- 78, 0, 72, 0, 191, 151, 153, 242, 98, 0,
- 178, 179, 180, 181, 0, 0, 176, 177, 168, 170,
- 0, 0, 27, 223, 251, 284, 157, 159, 282, 266,
- 130, 134, 134, 133, 128, 0, 183, 185, 0, 99,
- 204, 206, 288, 286, 287, 85, 81, 83, 84, 229,
- 0, 277, 275, 3, 20, 258, 259, 260, 255, 261,
- 254, 296, 297, 0, 0, 0, 74, 73, 118, 117,
- 0, 115, 116, 0, 110, 113, 114, 174, 175, 173,
- 169, 171, 172, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 135, 131,
- 132, 134, 246, 0, 0, 248, 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, 299, 0, 294, 0, 111, 125, 121, 123,
- 119, 120, 122, 124, 112, 129, 245, 244, 250, 249,
- 0, 45, 46, 53, 0, 293, 291, 298, 0, 295,
- 281, 302, 0, 0, 0, 0, 0, 304, 0, 0,
- 300, 303, 301, 0, 0, 309, 310, 311, 312, 313,
- 0, 0, 0, 305, 0, 307, 0, 306, 308
+ 201, 199, 200, 202, 203, 204, 205, 190, 192, 193,
+ 194, 154, 155, 156, 126, 152, 0, 244, 228, 189,
+ 101, 102, 103, 104, 108, 105, 106, 107, 109, 29,
+ 30, 28, 0, 26, 0, 6, 65, 66, 256, 229,
+ 255, 288, 59, 61, 160, 161, 162, 163, 164, 165,
+ 166, 167, 127, 158, 0, 60, 70, 286, 230, 67,
+ 271, 272, 273, 274, 275, 276, 277, 268, 270, 134,
+ 29, 30, 134, 134, 26, 68, 188, 186, 187, 182,
+ 184, 0, 0, 231, 96, 100, 97, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 206, 208, 0,
+ 91, 86, 0, 87, 95, 93, 94, 92, 90, 88,
+ 89, 80, 82, 0, 0, 250, 282, 0, 69, 281,
+ 283, 279, 233, 1, 0, 4, 31, 55, 293, 292,
+ 222, 223, 224, 225, 267, 266, 265, 0, 0, 79,
+ 75, 76, 77, 78, 0, 72, 0, 191, 151, 153,
+ 245, 98, 0, 178, 179, 180, 181, 0, 0, 176,
+ 177, 168, 170, 0, 0, 27, 226, 254, 287, 157,
+ 159, 285, 269, 130, 134, 134, 133, 128, 0, 183,
+ 185, 0, 99, 207, 209, 291, 289, 290, 85, 81,
+ 83, 84, 232, 0, 280, 278, 3, 20, 261, 262,
+ 263, 258, 264, 257, 299, 300, 0, 0, 0, 74,
+ 73, 118, 117, 0, 115, 116, 0, 110, 113, 114,
+ 174, 175, 173, 169, 171, 172, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 135, 131, 132, 134, 249, 0, 0, 251, 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, 302, 0, 297, 0, 111,
+ 125, 121, 123, 119, 120, 122, 124, 112, 129, 248,
+ 247, 253, 252, 0, 45, 46, 53, 0, 296, 294,
+ 301, 0, 298, 284, 305, 0, 0, 0, 0, 0,
+ 307, 0, 0, 303, 306, 304, 0, 0, 312, 313,
+ 314, 315, 316, 0, 0, 0, 308, 0, 310, 0,
+ 309, 311
};
- /* YYPGOTO[NTERM-NUM]. */
-static const yytype_int16 yypgoto[] =
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
{
- -185, -185, -185, -44, -185, -185, -15, -38, -185, -185,
- -185, -185, -185, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, -185, 28, -185, -185, -185,
- -185, -36, -185, -185, -185, -185, -185, -185, -152, -185,
- -185, 146, -185, -185, 111, -185, -185, -185, 3, -185,
- -185, -185, -185, 89, -185, -185, 245, -66, -185, -185,
- -185, -185, 72, -185, -185, -185, -185, -185, -185, -185,
- -185, -185, -185, -185, -185, 137, -185, -185, -185, -185,
- -185, -185, 110, -185, -185, 70, -185, -185, 236, 27,
- -184, -185, -185, -185, -17, -185, -185, -81, -185, -185,
- -185, -113, -185, -126, -185
+ -1, 56, 57, 58, 59, 60, 131, 123, 124, 287,
+ 355, 356, 357, 358, 359, 360, 361, 61, 62, 63,
+ 64, 85, 235, 236, 65, 201, 202, 203, 204, 66,
+ 174, 118, 241, 307, 308, 309, 377, 67, 263, 331,
+ 104, 105, 106, 142, 143, 144, 68, 251, 252, 253,
+ 254, 69, 169, 170, 171, 70, 97, 98, 99, 100,
+ 71, 187, 188, 189, 72, 73, 74, 75, 76, 108,
+ 173, 380, 282, 338, 129, 130, 77, 78, 293, 227,
+ 79, 157, 158, 212, 208, 209, 210, 148, 132, 278,
+ 220, 80, 81, 296, 297, 298, 364, 365, 396, 366,
+ 399, 400, 413, 414, 415
};
- /* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -188
+static const yytype_int16 yypact[] =
{
- -1, 56, 57, 58, 59, 60, 128, 120, 121, 284,
- 352, 353, 354, 355, 356, 357, 358, 61, 62, 63,
- 64, 85, 232, 233, 65, 198, 199, 200, 201, 66,
- 171, 115, 238, 304, 305, 306, 374, 67, 260, 328,
- 101, 102, 103, 139, 140, 141, 68, 248, 249, 250,
- 251, 69, 166, 167, 168, 70, 94, 95, 96, 97,
- 71, 184, 185, 186, 72, 73, 74, 75, 76, 105,
- 170, 377, 279, 335, 126, 127, 77, 78, 290, 224,
- 79, 154, 155, 209, 205, 206, 207, 145, 129, 275,
- 217, 80, 81, 293, 294, 295, 361, 362, 393, 363,
- 396, 397, 410, 411, 412
+ 5, -160, -28, -188, -188, -188, -24, -188, 60, 0,
+ -119, -188, 60, -188, 118, 7, -188, -117, -188, -110,
+ -108, -188, -188, -101, -188, -188, 7, -1, 345, 7,
+ -188, -188, -96, -188, -95, -188, -188, 21, -3, 73,
+ 33, 11, -188, -188, -94, 118, -61, -188, 43, 446,
+ -57, -58, 41, -188, -188, -188, 105, 179, -79, -188,
+ 7, -188, 7, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -188, -7, 48, -48, -39, -188, 24, -188,
+ -188, -86, -188, -188, -188, 42, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, 60, -188, -188,
+ -188, -188, -188, -188, 0, -188, 59, 89, -188, 60,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, 80, -188, 9, 338, -188, -188, -188, -101,
+ -188, -188, 7, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, 345, -188, 67, 7, -188, -188, 12, -188,
+ -188, -188, -188, -188, -188, -188, -188, -3, -188, -188,
+ 107, 116, -188, -188, 83, -188, -188, -188, -188, 11,
+ -188, 113, -20, -188, 118, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, 43, -188, -7,
+ -188, -188, -25, -188, -188, -188, -188, -188, -188, -188,
+ -188, 446, -188, 127, -7, -188, -188, 129, -58, -188,
+ -188, -188, 142, -188, 19, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, 4, -158, -188,
+ -188, -188, -188, -188, 145, -188, 49, -188, -188, -188,
+ -188, 233, 55, -188, -188, -188, -188, 64, 157, -188,
+ -188, 80, -188, -7, -25, -188, -188, -188, -188, -188,
+ -188, -188, -188, 445, -188, -188, 445, 445, -57, -188,
+ -188, 82, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -44, 202, -188, -188, -188, 324, -188, -188,
+ -188, -188, -188, -188, -188, -188, -30, 58, 50, -188,
+ -188, -188, -188, 88, -188, -188, 3, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, 445, 445, -188, 221, -57, 188, -188, 191,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -51,
+ -188, 99, 61, 75, -114, -188, 65, -188, -7, -188,
+ -188, -188, -188, -188, -188, -188, -188, -188, 445, -188,
+ -188, -188, -188, 68, -188, -188, -188, 7, -188, -188,
+ -188, 76, -188, -188, -188, 71, 78, -7, 74, -178,
+ -188, 90, -7, -188, -188, -188, 77, 32, -188, -188,
+ -188, -188, -188, 101, 93, 84, -188, 94, -188, -7,
+ -188, -188
};
- /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule whose
- number is the opposite. If YYTABLE_NINF, syntax error. */
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int16 yypgoto[] =
+{
+ -188, -188, -188, -41, -188, -188, -15, -38, -188, -188,
+ -188, -188, -188, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, -188, 81, -188, -188, -188,
+ -188, -37, -188, -188, -188, -188, -188, -188, -111, -188,
+ -188, 170, -188, -188, 133, -188, -188, -188, 37, -188,
+ -188, -188, -188, 115, -188, -188, 277, -53, -188, -188,
+ -188, -188, 103, -188, -188, -188, -188, -188, -188, -188,
+ -188, -188, -188, -188, -188, 162, -188, -188, -188, -188,
+ -188, -188, 143, -188, -188, 91, -188, -188, 274, 52,
+ -187, -188, -188, -188, 8, -188, -188, -56, -188, -188,
+ -188, -87, -188, -100, -188
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -7
static const yytype_int16 yytable[] =
{
- 119, 161, 271, 285, 272, 203, 381, 263, 264, 172,
- 239, 333, 202, 211, 82, 107, 367, 278, 359, 108,
- 215, 395, 298, 221, 160, 86, 273, 83, 234, 87,
- 299, 400, 84, 300, 104, 88, 226, 122, 368, 116,
- 234, 117, 147, 148, 222, 213, 123, 214, 124, 216,
- 240, 241, 242, 243, 98, 291, 292, 156, 125, 227,
- 149, 130, 228, 286, 359, 287, 311, 143, 223, 144,
- 386, 301, 146, 163, 162, 169, 208, 109, 253, 1,
- 173, 334, 118, 210, 212, 218, 89, 219, 2, 220,
- 225, 237, 3, 4, 5, 236, 157, 252, 158, 150,
- 6, 7, 302, 291, 292, 257, 258, 8, 9, 329,
- 330, 10, 261, 11, 255, 12, 13, 369, 382, 14,
- 90, 91, 110, 262, 370, 265, 164, 255, 15, 151,
- 111, 118, 16, 112, 274, 269, 267, 92, 17, 204,
- 18, 371, 99, 277, 229, 230, 244, 100, 268, 19,
- 20, 231, 280, 21, 22, 113, 288, 283, 23, 24,
- 114, 282, 25, 26, 245, 303, 296, 297, 93, 246,
- 247, 27, 131, 132, 133, 134, 307, 289, 159, 375,
- 165, 389, 309, 308, 28, 29, 30, 332, 118, 336,
- 372, 31, 174, 373, 152, 365, 366, 364, 376, 153,
- 32, 379, 380, 135, 33, 136, 34, 137, 35, 36,
- 398, 383, 390, 138, 384, 403, 385, 175, 37, 38,
- 39, 40, 41, 42, 43, 44, 276, 331, 45, 388,
- 46, 394, 418, 392, 399, 176, 395, 402, 177, 47,
- 415, 416, 404, 417, 48, 49, 50, 235, 51, 52,
- 256, 310, 53, 54, 2, 266, 270, 106, 3, 4,
- 5, -6, 55, 254, 259, 142, 6, 7, 405, 406,
- 407, 408, 409, 8, 9, 281, 360, 10, 312, 11,
- 387, 12, 13, 401, 414, 14, 0, 405, 406, 407,
- 408, 409, 0, 0, 15, 378, 413, 0, 16, 0,
- 0, 0, 0, 0, 17, 0, 18, 0, 0, 0,
- 0, 178, 0, 0, 0, 19, 20, 0, 0, 21,
- 22, 0, 0, 0, 23, 24, 0, 0, 25, 26,
- 0, 0, 0, 0, 0, 0, 0, 27, 0, 179,
- 180, 181, 182, 0, 0, 0, 0, 183, 0, 0,
- 28, 29, 30, 0, 0, 0, 0, 31, 0, 0,
- 0, 0, 0, 0, 0, 0, 32, 0, 0, 391,
- 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, 0, 0,
- 0, 0, 0, 0, 0, 47, 0, 0, 0, 0,
- 48, 49, 50, 0, 51, 52, 0, 2, 53, 54,
- 0, 3, 4, 5, 0, 0, 0, -6, 55, 6,
- 7, 0, 0, 0, 0, 0, 8, 9, 313, 0,
- 10, 0, 11, 0, 12, 13, 314, 0, 14, 0,
- 0, 0, 0, 0, 0, 0, 0, 15, 0, 0,
- 0, 16, 0, 0, 315, 316, 0, 17, 317, 18,
- 0, 0, 0, 337, 318, 0, 0, 0, 19, 20,
- 0, 338, 21, 22, 0, 0, 0, 23, 24, 0,
- 0, 25, 26, 0, 0, 0, 0, 0, 0, 0,
- 27, 319, 320, 0, 0, 321, 322, 0, 323, 324,
- 325, 0, 326, 28, 29, 30, 0, 339, 340, 0,
- 31, 0, 0, 0, 0, 0, 0, 0, 0, 32,
- 0, 0, 0, 33, 341, 34, 187, 35, 36, 0,
- 0, 0, 188, 0, 189, 0, 0, 37, 38, 39,
- 40, 41, 42, 43, 44, 0, 342, 45, 0, 46,
- 0, 0, 0, 0, 343, 0, 344, 327, 47, 0,
- 0, 190, 0, 48, 49, 50, 0, 51, 52, 0,
- 345, 53, 54, 0, 0, 0, 0, 0, 0, 0,
- 0, 55, 0, 0, 0, 0, 0, 346, 347, 0,
+ 122, 164, 274, 206, 150, 151, 1, 370, 175, 288,
+ 384, 101, 205, 398, 275, 2, 214, 281, 336, 3,
+ 4, 5, 152, 403, 163, 218, 82, 6, 7, 371,
+ 294, 295, 362, 83, 8, 9, 276, 84, 10, 107,
+ 11, 125, 12, 13, 237, 216, 14, 217, 126, 177,
+ 127, 266, 267, 166, 219, 15, 237, 128, 224, 16,
+ 133, 153, 146, 147, 172, 17, 314, 18, 86, 289,
+ 229, 290, 87, 119, 178, 120, 19, 20, 88, 225,
+ 21, 22, 149, 242, 256, 23, 24, 389, 337, 25,
+ 26, 154, 179, 230, 165, 180, 231, 176, 27, 102,
+ 159, 121, 211, 226, 103, 213, 167, 215, 372, 221,
+ 222, 28, 29, 30, 228, 373, 362, 258, 31, 223,
+ 239, 240, 385, 243, 244, 245, 246, 32, 260, 89,
+ 258, 33, 374, 34, 264, 35, 36, 272, 110, 160,
+ 207, 161, 111, 265, 277, 37, 38, 39, 40, 41,
+ 42, 43, 44, 332, 333, 45, 155, 46, 294, 295,
+ 168, 156, 291, 90, 91, 121, 47, 255, 181, 268,
+ 261, 48, 49, 50, 270, 51, 52, 271, 232, 233,
+ 92, 392, 53, 54, 375, 234, 292, 376, 280, 2,
+ 283, -6, 55, 3, 4, 5, 182, 183, 184, 185,
+ 112, 6, 7, 285, 186, 286, 299, 300, 8, 9,
+ 401, 93, 10, 310, 11, 406, 12, 13, 312, 247,
+ 14, 162, 311, 378, 408, 409, 410, 411, 412, 15,
+ 334, 121, 421, 16, 94, 95, 96, 248, 339, 17,
+ 335, 18, 249, 250, 367, 113, 369, 368, 379, 382,
+ 19, 20, 383, 114, 21, 22, 115, 386, 387, 23,
+ 24, 388, 301, 25, 26, 391, 395, 393, 397, 398,
+ 302, 402, 27, 303, 238, 259, 405, 407, 116, 418,
+ 420, 419, 279, 117, 269, 28, 29, 30, 313, 109,
+ 273, 257, 31, 408, 409, 410, 411, 412, 381, 284,
+ 262, 32, 416, 145, 363, 33, 315, 34, 390, 35,
+ 36, 304, 404, 417, 0, 0, 0, 0, 0, 37,
+ 38, 39, 40, 41, 42, 43, 44, 0, 0, 45,
+ 0, 46, 0, 340, 0, 0, 0, 0, 0, 0,
+ 47, 341, 305, 0, 0, 48, 49, 50, 2, 51,
+ 52, 0, 3, 4, 5, 0, 53, 54, 0, 0,
+ 6, 7, 0, 0, 0, -6, 55, 8, 9, 0,
+ 0, 10, 394, 11, 0, 12, 13, 342, 343, 14,
+ 0, 0, 0, 0, 0, 0, 0, 0, 15, 0,
+ 0, 0, 16, 0, 344, 0, 0, 0, 17, 0,
+ 18, 134, 135, 136, 137, 306, 0, 0, 0, 19,
+ 20, 0, 0, 21, 22, 0, 345, 0, 23, 24,
+ 0, 0, 25, 26, 346, 0, 347, 0, 0, 0,
+ 0, 27, 138, 0, 139, 0, 140, 0, 0, 0,
+ 348, 0, 141, 0, 28, 29, 30, 0, 0, 0,
+ 0, 31, 0, 0, 0, 0, 0, 349, 350, 190,
+ 32, 0, 0, 0, 33, 191, 34, 192, 35, 36,
+ 0, 0, 0, 0, 0, 0, 0, 0, 37, 38,
+ 39, 40, 41, 42, 43, 44, 0, 0, 45, 0,
+ 46, 0, 316, 351, 193, 352, 0, 0, 0, 47,
+ 317, 0, 0, 353, 48, 49, 50, 354, 51, 52,
+ 0, 0, 0, 0, 0, 53, 54, 0, 318, 319,
+ 0, 0, 320, 0, 0, 55, 0, 0, 321, 0,
+ 0, 0, 0, 0, 194, 0, 195, 0, 0, 0,
+ 0, 0, 196, 0, 197, 0, 0, 198, 0, 0,
+ 0, 0, 0, 0, 0, 322, 323, 0, 0, 324,
+ 325, 0, 326, 327, 328, 0, 329, 0, 0, 199,
+ 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, 191, 0, 192, 0, 0, 0, 0, 0, 193,
- 0, 194, 0, 0, 195, 0, 0, 0, 0, 0,
- 0, 0, 0, 348, 0, 349, 0, 0, 0, 0,
- 350, 0, 0, 0, 351, 0, 196, 197
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 330
};
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-188)))
+
+#define yytable_value_is_error(Yytable_value) \
+ YYID (0)
+
static const yytype_int16 yycheck[] =
{
- 15, 39, 186, 5, 39, 61, 61, 159, 160, 45,
- 3, 62, 50, 57, 183, 20, 4, 201, 146, 24,
- 32, 188, 29, 34, 39, 8, 61, 61, 94, 12,
- 37, 198, 61, 40, 158, 18, 28, 158, 26, 66,
- 106, 68, 7, 8, 55, 60, 158, 62, 158, 61,
- 43, 44, 45, 46, 11, 185, 186, 27, 158, 51,
- 25, 61, 54, 65, 146, 67, 250, 158, 79, 158,
- 198, 78, 61, 42, 61, 158, 61, 82, 122, 1,
- 158, 132, 158, 0, 183, 61, 69, 158, 10, 158,
- 197, 32, 14, 15, 16, 61, 66, 158, 68, 64,
- 22, 23, 109, 185, 186, 61, 158, 29, 30, 261,
- 262, 33, 27, 35, 129, 37, 38, 105, 173, 41,
- 103, 104, 127, 27, 112, 86, 95, 142, 50, 94,
- 135, 158, 54, 138, 169, 171, 61, 120, 60, 195,
- 62, 129, 99, 61, 136, 137, 139, 104, 194, 71,
- 72, 143, 61, 75, 76, 160, 158, 183, 80, 81,
- 165, 61, 84, 85, 157, 172, 61, 158, 151, 162,
- 163, 93, 56, 57, 58, 59, 158, 179, 148, 331,
- 149, 365, 61, 158, 106, 107, 108, 158, 158, 36,
- 178, 113, 6, 181, 159, 194, 158, 183, 27, 164,
- 122, 61, 61, 87, 126, 89, 128, 91, 130, 131,
- 394, 158, 196, 97, 194, 399, 183, 31, 140, 141,
- 142, 143, 144, 145, 146, 147, 198, 265, 150, 197,
- 152, 194, 416, 187, 194, 49, 188, 183, 52, 161,
- 183, 194, 197, 183, 166, 167, 168, 101, 170, 171,
- 139, 248, 174, 175, 10, 166, 184, 12, 14, 15,
- 16, 183, 184, 126, 154, 29, 22, 23, 189, 190,
- 191, 192, 193, 29, 30, 205, 293, 33, 251, 35,
- 361, 37, 38, 396, 410, 41, -1, 189, 190, 191,
- 192, 193, -1, -1, 50, 333, 198, -1, 54, -1,
- -1, -1, -1, -1, 60, -1, 62, -1, -1, -1,
- -1, 125, -1, -1, -1, 71, 72, -1, -1, 75,
- 76, -1, -1, -1, 80, 81, -1, -1, 84, 85,
- -1, -1, -1, -1, -1, -1, -1, 93, -1, 153,
- 154, 155, 156, -1, -1, -1, -1, 161, -1, -1,
- 106, 107, 108, -1, -1, -1, -1, 113, -1, -1,
- -1, -1, -1, -1, -1, -1, 122, -1, -1, 384,
- 126, -1, 128, -1, 130, 131, -1, -1, -1, -1,
- -1, -1, -1, -1, 140, 141, 142, 143, 144, 145,
- 146, 147, -1, -1, 150, -1, 152, -1, -1, -1,
- -1, -1, -1, -1, -1, 161, -1, -1, -1, -1,
- 166, 167, 168, -1, 170, 171, -1, 10, 174, 175,
- -1, 14, 15, 16, -1, -1, -1, 183, 184, 22,
- 23, -1, -1, -1, -1, -1, 29, 30, 47, -1,
- 33, -1, 35, -1, 37, 38, 55, -1, 41, -1,
- -1, -1, -1, -1, -1, -1, -1, 50, -1, -1,
- -1, 54, -1, -1, 73, 74, -1, 60, 77, 62,
- -1, -1, -1, 9, 83, -1, -1, -1, 71, 72,
- -1, 17, 75, 76, -1, -1, -1, 80, 81, -1,
- -1, 84, 85, -1, -1, -1, -1, -1, -1, -1,
- 93, 110, 111, -1, -1, 114, 115, -1, 117, 118,
- 119, -1, 121, 106, 107, 108, -1, 53, 54, -1,
- 113, -1, -1, -1, -1, -1, -1, -1, -1, 122,
- -1, -1, -1, 126, 70, 128, 13, 130, 131, -1,
- -1, -1, 19, -1, 21, -1, -1, 140, 141, 142,
- 143, 144, 145, 146, 147, -1, 92, 150, -1, 152,
- -1, -1, -1, -1, 100, -1, 102, 176, 161, -1,
- -1, 48, -1, 166, 167, 168, -1, 170, 171, -1,
- 116, 174, 175, -1, -1, -1, -1, -1, -1, -1,
- -1, 184, -1, -1, -1, -1, -1, 133, 134, -1,
+ 15, 39, 189, 61, 7, 8, 1, 4, 45, 5,
+ 61, 11, 50, 191, 39, 10, 57, 204, 62, 14,
+ 15, 16, 25, 201, 39, 32, 186, 22, 23, 26,
+ 188, 189, 146, 61, 29, 30, 61, 61, 33, 158,
+ 35, 158, 37, 38, 97, 60, 41, 62, 158, 6,
+ 158, 162, 163, 42, 61, 50, 109, 158, 34, 54,
+ 61, 64, 158, 158, 158, 60, 253, 62, 8, 65,
+ 28, 67, 12, 66, 31, 68, 71, 72, 18, 55,
+ 75, 76, 61, 3, 125, 80, 81, 201, 132, 84,
+ 85, 94, 49, 51, 61, 52, 54, 158, 93, 99,
+ 27, 158, 61, 79, 104, 0, 95, 186, 105, 61,
+ 158, 106, 107, 108, 200, 112, 146, 132, 113, 158,
+ 61, 32, 173, 43, 44, 45, 46, 122, 61, 69,
+ 145, 126, 129, 128, 27, 130, 131, 174, 20, 66,
+ 198, 68, 24, 27, 169, 140, 141, 142, 143, 144,
+ 145, 146, 147, 264, 265, 150, 159, 152, 188, 189,
+ 149, 164, 158, 103, 104, 158, 161, 158, 125, 86,
+ 158, 166, 167, 168, 61, 170, 171, 197, 136, 137,
+ 120, 368, 177, 178, 181, 143, 182, 184, 61, 10,
+ 61, 186, 187, 14, 15, 16, 153, 154, 155, 156,
+ 82, 22, 23, 61, 161, 186, 61, 158, 29, 30,
+ 397, 151, 33, 158, 35, 402, 37, 38, 61, 139,
+ 41, 148, 158, 334, 192, 193, 194, 195, 196, 50,
+ 268, 158, 419, 54, 174, 175, 176, 157, 36, 60,
+ 158, 62, 162, 163, 186, 127, 158, 197, 27, 61,
+ 71, 72, 61, 135, 75, 76, 138, 158, 197, 80,
+ 81, 186, 29, 84, 85, 200, 190, 199, 197, 191,
+ 37, 197, 93, 40, 104, 142, 186, 200, 160, 186,
+ 186, 197, 201, 165, 169, 106, 107, 108, 251, 12,
+ 187, 129, 113, 192, 193, 194, 195, 196, 336, 208,
+ 157, 122, 201, 29, 296, 126, 254, 128, 364, 130,
+ 131, 78, 399, 413, -1, -1, -1, -1, -1, 140,
+ 141, 142, 143, 144, 145, 146, 147, -1, -1, 150,
+ -1, 152, -1, 9, -1, -1, -1, -1, -1, -1,
+ 161, 17, 109, -1, -1, 166, 167, 168, 10, 170,
+ 171, -1, 14, 15, 16, -1, 177, 178, -1, -1,
+ 22, 23, -1, -1, -1, 186, 187, 29, 30, -1,
+ -1, 33, 387, 35, -1, 37, 38, 53, 54, 41,
+ -1, -1, -1, -1, -1, -1, -1, -1, 50, -1,
+ -1, -1, 54, -1, 70, -1, -1, -1, 60, -1,
+ 62, 56, 57, 58, 59, 172, -1, -1, -1, 71,
+ 72, -1, -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, -1, -1,
+ 116, -1, 97, -1, 106, 107, 108, -1, -1, -1,
+ -1, 113, -1, -1, -1, -1, -1, 133, 134, 13,
+ 122, -1, -1, -1, 126, 19, 128, 21, 130, 131,
+ -1, -1, -1, -1, -1, -1, -1, -1, 140, 141,
+ 142, 143, 144, 145, 146, 147, -1, -1, 150, -1,
+ 152, -1, 47, 169, 48, 171, -1, -1, -1, 161,
+ 55, -1, -1, 179, 166, 167, 168, 183, 170, 171,
+ -1, -1, -1, -1, -1, 177, 178, -1, 73, 74,
+ -1, -1, 77, -1, -1, 187, -1, -1, 83, -1,
+ -1, -1, -1, -1, 88, -1, 90, -1, -1, -1,
+ -1, -1, 96, -1, 98, -1, -1, 101, -1, -1,
+ -1, -1, -1, -1, -1, 110, 111, -1, -1, 114,
+ 115, -1, 117, 118, 119, -1, 121, -1, -1, 123,
+ 124, -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, 88, -1, 90, -1, -1, -1, -1, -1, 96,
- -1, 98, -1, -1, 101, -1, -1, -1, -1, -1,
- -1, -1, -1, 169, -1, 171, -1, -1, -1, -1,
- 176, -1, -1, -1, 180, -1, 123, 124
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 179
};
- /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
+/* 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,
@@ -1302,129 +1504,70 @@ static const yytype_uint16 yystos[] =
72, 75, 76, 80, 81, 84, 85, 93, 106, 107,
108, 113, 122, 126, 128, 130, 131, 140, 141, 142,
143, 144, 145, 146, 147, 150, 152, 161, 166, 167,
- 168, 170, 171, 174, 175, 184, 200, 201, 202, 203,
- 204, 216, 217, 218, 219, 223, 228, 236, 245, 250,
- 254, 259, 263, 264, 265, 266, 267, 275, 276, 279,
- 290, 291, 183, 61, 61, 220, 8, 12, 18, 69,
- 103, 104, 120, 151, 255, 256, 257, 258, 11, 99,
- 104, 239, 240, 241, 158, 268, 255, 20, 24, 82,
- 127, 135, 138, 160, 165, 230, 66, 68, 158, 205,
- 206, 207, 158, 158, 158, 158, 273, 274, 205, 287,
- 61, 56, 57, 58, 59, 87, 89, 91, 97, 242,
- 243, 244, 287, 158, 158, 286, 61, 7, 8, 25,
- 64, 94, 159, 164, 280, 281, 27, 66, 68, 148,
- 205, 206, 61, 42, 95, 149, 251, 252, 253, 158,
- 269, 229, 230, 158, 6, 31, 49, 52, 125, 153,
- 154, 155, 156, 161, 260, 261, 262, 13, 19, 21,
- 48, 88, 90, 96, 98, 101, 123, 124, 224, 225,
- 226, 227, 206, 61, 195, 283, 284, 285, 61, 282,
- 0, 202, 183, 205, 205, 32, 61, 289, 61, 158,
- 158, 34, 55, 79, 278, 197, 28, 51, 54, 136,
- 137, 143, 221, 222, 256, 240, 61, 32, 231, 3,
- 43, 44, 45, 46, 139, 157, 162, 163, 246, 247,
- 248, 249, 158, 202, 274, 205, 243, 61, 158, 281,
- 237, 27, 27, 237, 237, 86, 252, 61, 194, 230,
- 261, 289, 39, 61, 169, 288, 225, 61, 289, 271,
- 61, 284, 61, 183, 208, 5, 65, 67, 158, 179,
- 277, 185, 186, 292, 293, 294, 61, 158, 29, 37,
- 40, 78, 109, 172, 232, 233, 234, 158, 158, 61,
- 247, 289, 288, 47, 55, 73, 74, 77, 83, 110,
- 111, 114, 115, 117, 118, 119, 121, 176, 238, 237,
- 237, 206, 158, 62, 132, 272, 36, 9, 17, 53,
- 54, 70, 92, 100, 102, 116, 133, 134, 169, 171,
- 176, 180, 209, 210, 211, 212, 213, 214, 215, 146,
- 293, 295, 296, 298, 183, 194, 158, 4, 26, 105,
- 112, 129, 178, 181, 235, 237, 27, 270, 206, 61,
- 61, 61, 173, 158, 194, 183, 198, 296, 197, 289,
- 196, 205, 187, 297, 194, 188, 299, 300, 289, 194,
- 198, 300, 183, 289, 197, 189, 190, 191, 192, 193,
- 301, 302, 303, 198, 302, 183, 194, 183, 289
-};
-
- /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint16 yyr1[] =
-{
- 0, 199, 200, 201, 201, 201, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
- 203, 204, 204, 204, 204, 204, 205, 205, 206, 207,
- 207, 208, 208, 209, 209, 209, 210, 211, 211, 211,
- 211, 211, 211, 211, 211, 212, 212, 213, 213, 213,
- 213, 213, 213, 214, 215, 216, 217, 217, 218, 218,
- 218, 218, 219, 219, 219, 219, 219, 219, 219, 219,
- 219, 220, 220, 221, 221, 222, 222, 222, 222, 222,
- 223, 224, 224, 225, 225, 225, 226, 226, 226, 226,
- 226, 226, 227, 227, 227, 227, 228, 228, 228, 229,
- 229, 230, 230, 230, 230, 230, 230, 230, 230, 231,
- 231, 232, 232, 232, 232, 233, 233, 234, 234, 235,
- 235, 235, 235, 235, 235, 235, 236, 236, 236, 236,
- 236, 236, 236, 236, 237, 237, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 239, 239, 240, 241, 241, 241, 242, 242, 243,
- 244, 244, 244, 244, 244, 244, 244, 244, 245, 246,
- 246, 247, 247, 247, 247, 247, 248, 248, 249, 249,
- 249, 249, 250, 251, 251, 252, 253, 253, 253, 254,
- 254, 255, 255, 256, 256, 257, 257, 257, 257, 257,
- 257, 258, 258, 259, 260, 260, 261, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
- 263, 264, 264, 264, 265, 265, 266, 266, 267, 267,
- 267, 268, 268, 268, 269, 270, 270, 271, 271, 272,
- 272, 273, 273, 274, 275, 275, 276, 276, 277, 277,
- 277, 277, 278, 278, 278, 279, 280, 280, 281, 281,
- 281, 281, 281, 281, 281, 282, 282, 283, 283, 284,
- 284, 285, 286, 286, 287, 287, 288, 288, 288, 289,
- 289, 290, 291, 292, 292, 293, 294, 294, 295, 295,
- 296, 297, 298, 299, 299, 300, 301, 301, 302, 303,
- 303, 303, 303, 303
-};
-
- /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 1, 3, 2, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 2, 1, 1,
- 1, 0, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
- 1, 1, 1, 2, 1, 2, 1, 1, 1, 2,
- 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, 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,
- 2, 2, 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
+ 168, 170, 171, 177, 178, 187, 203, 204, 205, 206,
+ 207, 219, 220, 221, 222, 226, 231, 239, 248, 253,
+ 257, 262, 266, 267, 268, 269, 270, 278, 279, 282,
+ 293, 294, 186, 61, 61, 223, 8, 12, 18, 69,
+ 103, 104, 120, 151, 174, 175, 176, 258, 259, 260,
+ 261, 11, 99, 104, 242, 243, 244, 158, 271, 258,
+ 20, 24, 82, 127, 135, 138, 160, 165, 233, 66,
+ 68, 158, 208, 209, 210, 158, 158, 158, 158, 276,
+ 277, 208, 290, 61, 56, 57, 58, 59, 87, 89,
+ 91, 97, 245, 246, 247, 290, 158, 158, 289, 61,
+ 7, 8, 25, 64, 94, 159, 164, 283, 284, 27,
+ 66, 68, 148, 208, 209, 61, 42, 95, 149, 254,
+ 255, 256, 158, 272, 232, 233, 158, 6, 31, 49,
+ 52, 125, 153, 154, 155, 156, 161, 263, 264, 265,
+ 13, 19, 21, 48, 88, 90, 96, 98, 101, 123,
+ 124, 227, 228, 229, 230, 209, 61, 198, 286, 287,
+ 288, 61, 285, 0, 205, 186, 208, 208, 32, 61,
+ 292, 61, 158, 158, 34, 55, 79, 281, 200, 28,
+ 51, 54, 136, 137, 143, 224, 225, 259, 243, 61,
+ 32, 234, 3, 43, 44, 45, 46, 139, 157, 162,
+ 163, 249, 250, 251, 252, 158, 205, 277, 208, 246,
+ 61, 158, 284, 240, 27, 27, 240, 240, 86, 255,
+ 61, 197, 233, 264, 292, 39, 61, 169, 291, 228,
+ 61, 292, 274, 61, 287, 61, 186, 211, 5, 65,
+ 67, 158, 182, 280, 188, 189, 295, 296, 297, 61,
+ 158, 29, 37, 40, 78, 109, 172, 235, 236, 237,
+ 158, 158, 61, 250, 292, 291, 47, 55, 73, 74,
+ 77, 83, 110, 111, 114, 115, 117, 118, 119, 121,
+ 179, 241, 240, 240, 209, 158, 62, 132, 275, 36,
+ 9, 17, 53, 54, 70, 92, 100, 102, 116, 133,
+ 134, 169, 171, 179, 183, 212, 213, 214, 215, 216,
+ 217, 218, 146, 296, 298, 299, 301, 186, 197, 158,
+ 4, 26, 105, 112, 129, 181, 184, 238, 240, 27,
+ 273, 209, 61, 61, 61, 173, 158, 197, 186, 201,
+ 299, 200, 292, 199, 208, 190, 300, 197, 191, 302,
+ 303, 292, 197, 201, 303, 186, 292, 200, 192, 193,
+ 194, 195, 196, 304, 305, 306, 201, 305, 186, 197,
+ 186, 292
};
-
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
#define YYRECOVERING() (!!yyerrstatus)
@@ -1441,15 +1584,27 @@ do \
else \
{ \
yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (0)
+ YYERROR; \
+ } \
+while (YYID (0))
/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
+#define YYTERROR 1
+#define YYERRCODE 256
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
+#endif
/* Enable debugging if requested. */
#if YYDEBUG
@@ -1459,36 +1614,40 @@ while (0)
# define YYFPRINTF fprintf
# endif
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (0)
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (0)
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT. |
-`----------------------------------------*/
-
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
{
FILE *yyo = yyoutput;
YYUSE (yyo);
@@ -1497,6 +1656,8 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
# ifdef YYPRINT
if (yytype < YYNTOKENS)
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
# endif
YYUSE (yytype);
}
@@ -1506,11 +1667,22 @@ yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvalue
| Print this symbol on YYOUTPUT. |
`--------------------------------*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
{
- YYFPRINTF (yyoutput, "%s %s (",
- yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
yy_symbol_value_print (yyoutput, yytype, yyvaluep);
YYFPRINTF (yyoutput, ")");
@@ -1521,8 +1693,16 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
| TOP (included). |
`------------------------------------------------------------------*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
+#endif
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -1533,42 +1713,49 @@ yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
YYFPRINTF (stderr, "\n");
}
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (0)
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
/*------------------------------------------------.
| Report that the YYRULE is going to be reduced. |
`------------------------------------------------*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
-yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
+#endif
{
- unsigned long int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
+ unsigned long int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
+ yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr,
- yystos[yyssp[yyi + 1 - yynrhs]],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
YYFPRINTF (stderr, "\n");
}
}
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyssp, yyvsp, Rule); \
-} while (0)
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
/* Nonzero means print parse trace. It is left uninitialized so that
multiple parsers can coexist. */
@@ -1582,7 +1769,7 @@ int yydebug;
/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
+#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
@@ -1605,8 +1792,15 @@ int yydebug;
# define yystrlen strlen
# else
/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static YYSIZE_T
yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
{
YYSIZE_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
@@ -1622,8 +1816,16 @@ yystrlen (const char *yystr)
# else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static char *
yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
{
char *yyd = yydest;
const char *yys = yysrc;
@@ -1653,27 +1855,27 @@ yytnamerr (char *yyres, const char *yystr)
char const *yyp = yystr;
for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
do_not_strip_quotes: ;
}
@@ -1696,11 +1898,11 @@ static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
yytype_int16 *yyssp, int yytoken)
{
- YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
- const char *yyformat = YY_NULLPTR;
+ const char *yyformat = YY_NULL;
/* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
/* Number of reported tokens (one for the "unexpected", one per
@@ -1708,6 +1910,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
int yycount = 0;
/* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
is an error action. In that case, don't check for expected
@@ -1757,7 +1963,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
}
yyarg[yycount++] = yytname[yyx];
{
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
if (! (yysize <= yysize1
&& yysize1 <= YYSTACK_ALLOC_MAXIMUM))
return 2;
@@ -1824,17 +2030,26 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
{
YYUSE (yyvaluep);
+
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
- YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
- YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -1843,8 +2058,18 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
/* The lookahead symbol. */
int yychar;
+
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
+#endif
+
/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval;
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+
/* Number of syntax errors so far. */
int yynerrs;
@@ -1853,16 +2078,35 @@ int yynerrs;
| yyparse. |
`----------*/
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
int
yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
{
int yystate;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
/* The stacks and their tools:
- 'yyss': related to states.
- 'yyvs': related to semantic values.
+ `yyss': related to states.
+ `yyvs': related to semantic values.
Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
@@ -1930,23 +2174,23 @@ yyparse (void)
#ifdef yyoverflow
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
}
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
@@ -1954,22 +2198,22 @@ yyparse (void)
# else
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
+ goto yyexhaustedlab;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
+ yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
}
# endif
#endif /* no yyoverflow */
@@ -1978,10 +2222,10 @@ yyparse (void)
yyvsp = yyvs + yysize - 1;
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ (unsigned long int) yystacksize));
if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
+ YYABORT;
}
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -2010,7 +2254,7 @@ yybackup:
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = yylex ();
+ yychar = YYLEX;
}
if (yychar <= YYEOF)
@@ -2075,7 +2319,7 @@ yyreduce:
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
- '$$ = $1'.
+ `$$ = $1'.
Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison
@@ -2089,7 +2333,8 @@ yyreduce:
switch (yyn)
{
case 5:
-#line 373 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 376 "../../ntpd/ntp_parser.y"
{
/* I will need to incorporate much more fine grained
* error messages. The following should suffice for
@@ -2102,433 +2347,433 @@ yyreduce:
ip_ctx->errpos.nline,
ip_ctx->errpos.ncol);
}
-#line 2106 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 20:
-#line 409 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 412 "../../ntpd/ntp_parser.y"
{
peer_node *my_node;
- my_node = create_peer_node((yyvsp[-2].Integer), (yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
+ my_node = create_peer_node((yyvsp[(1) - (3)].Integer), (yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
APPEND_G_FIFO(cfgt.peers, my_node);
}
-#line 2117 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 27:
-#line 428 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Address_node) = create_address_node((yyvsp[0].String), (yyvsp[-1].Integer)); }
-#line 2123 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 431 "../../ntpd/ntp_parser.y"
+ { (yyval.Address_node) = create_address_node((yyvsp[(2) - (2)].String), (yyvsp[(1) - (2)].Integer)); }
break;
case 28:
-#line 433 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Address_node) = create_address_node((yyvsp[0].String), AF_UNSPEC); }
-#line 2129 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 436 "../../ntpd/ntp_parser.y"
+ { (yyval.Address_node) = create_address_node((yyvsp[(1) - (1)].String), AF_UNSPEC); }
break;
case 29:
-#line 438 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 441 "../../ntpd/ntp_parser.y"
{ (yyval.Integer) = AF_INET; }
-#line 2135 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 30:
-#line 440 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 443 "../../ntpd/ntp_parser.y"
{ (yyval.Integer) = AF_INET6; }
-#line 2141 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 31:
-#line 445 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 448 "../../ntpd/ntp_parser.y"
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2147 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 32:
-#line 447 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 450 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2156 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 36:
-#line 461 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2162 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 464 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
break;
case 45:
-#line 477 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2168 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 480 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 46:
-#line 479 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_uval((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2174 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 482 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_uval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 53:
-#line 493 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2180 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 496 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
break;
case 55:
-#line 507 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 510 "../../ntpd/ntp_parser.y"
{
unpeer_node *my_node;
- my_node = create_unpeer_node((yyvsp[0].Address_node));
+ my_node = create_unpeer_node((yyvsp[(2) - (2)].Address_node));
if (my_node)
APPEND_G_FIFO(cfgt.unpeers, my_node);
}
-#line 2192 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 58:
-#line 528 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 531 "../../ntpd/ntp_parser.y"
{ cfgt.broadcastclient = 1; }
-#line 2198 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 59:
-#line 530 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[0].Address_fifo)); }
-#line 2204 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 533 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[(2) - (2)].Address_fifo)); }
break;
case 60:
-#line 532 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[0].Address_fifo)); }
-#line 2210 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 535 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[(2) - (2)].Address_fifo)); }
break;
case 61:
-#line 534 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.mdnstries = (yyvsp[0].Integer); }
-#line 2216 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 537 "../../ntpd/ntp_parser.y"
+ { cfgt.mdnstries = (yyvsp[(2) - (2)].Integer); }
break;
case 62:
-#line 545 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 548 "../../ntpd/ntp_parser.y"
{
attr_val *atrv;
- atrv = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
+ atrv = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
APPEND_G_FIFO(cfgt.vars, atrv);
}
-#line 2227 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 63:
-#line 552 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.control_key = (yyvsp[0].Integer); }
-#line 2233 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 555 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.control_key = (yyvsp[(2) - (2)].Integer); }
break;
case 64:
-#line 554 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 557 "../../ntpd/ntp_parser.y"
{
cfgt.auth.cryptosw++;
- CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[0].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[(2) - (2)].Attr_val_fifo));
}
-#line 2242 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 65:
-#line 559 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.keys = (yyvsp[0].String); }
-#line 2248 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 562 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.keys = (yyvsp[(2) - (2)].String); }
break;
case 66:
-#line 561 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.keysdir = (yyvsp[0].String); }
-#line 2254 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 564 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.keysdir = (yyvsp[(2) - (2)].String); }
break;
case 67:
-#line 563 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.request_key = (yyvsp[0].Integer); }
-#line 2260 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 566 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.request_key = (yyvsp[(2) - (2)].Integer); }
break;
case 68:
-#line 565 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.revoke = (yyvsp[0].Integer); }
-#line 2266 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 568 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.revoke = (yyvsp[(2) - (2)].Integer); }
break;
case 69:
-#line 567 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 570 "../../ntpd/ntp_parser.y"
{
- cfgt.auth.trusted_key_list = (yyvsp[0].Attr_val_fifo);
+ cfgt.auth.trusted_key_list = (yyvsp[(2) - (2)].Attr_val_fifo);
// if (!cfgt.auth.trusted_key_list)
// cfgt.auth.trusted_key_list = $2;
// else
// LINK_SLIST(cfgt.auth.trusted_key_list, $2, link);
}
-#line 2279 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 70:
-#line 576 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { cfgt.auth.ntp_signd_socket = (yyvsp[0].String); }
-#line 2285 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 579 "../../ntpd/ntp_parser.y"
+ { cfgt.auth.ntp_signd_socket = (yyvsp[(2) - (2)].String); }
break;
case 71:
-#line 581 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 584 "../../ntpd/ntp_parser.y"
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2291 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 72:
-#line 583 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 586 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2300 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 73:
-#line 591 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2306 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 594 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
break;
case 74:
-#line 593 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 596 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val) = NULL;
- cfgt.auth.revoke = (yyvsp[0].Integer);
+ cfgt.auth.revoke = (yyvsp[(2) - (2)].Integer);
msyslog(LOG_WARNING,
"'crypto revoke %d' is deprecated, "
"please use 'revoke %d' instead.",
cfgt.auth.revoke, cfgt.auth.revoke);
}
-#line 2319 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 80:
-#line 618 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[0].Attr_val_fifo)); }
-#line 2325 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 621 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
case 81:
-#line 623 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 626 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2334 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 82:
-#line 628 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 631 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2343 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 83:
-#line 636 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2349 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 639 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (double)(yyvsp[(2) - (2)].Integer)); }
break;
case 84:
-#line 638 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2355 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 641 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
break;
case 85:
-#line 640 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
-#line 2361 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 643 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (double)(yyvsp[(2) - (2)].Integer)); }
break;
case 96:
-#line 666 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[0].Int_fifo)); }
-#line 2367 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 669 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[(2) - (2)].Int_fifo)); }
break;
case 97:
-#line 668 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 671 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
- cfgt.stats_dir = (yyvsp[0].String);
+ cfgt.stats_dir = (yyvsp[(2) - (2)].String);
} else {
- YYFREE((yyvsp[0].String));
+ YYFREE((yyvsp[(2) - (2)].String));
yyerror("statsdir remote configuration ignored");
}
}
-#line 2380 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 98:
-#line 677 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 680 "../../ntpd/ntp_parser.y"
{
filegen_node *fgn;
- fgn = create_filegen_node((yyvsp[-1].Integer), (yyvsp[0].Attr_val_fifo));
+ fgn = create_filegen_node((yyvsp[(2) - (3)].Integer), (yyvsp[(3) - (3)].Attr_val_fifo));
APPEND_G_FIFO(cfgt.filegen_opts, fgn);
}
-#line 2391 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 99:
-#line 687 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 690 "../../ntpd/ntp_parser.y"
{
- (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
+ (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
}
-#line 2400 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 100:
-#line 692 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 695 "../../ntpd/ntp_parser.y"
{
(yyval.Int_fifo) = NULL;
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
}
-#line 2409 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 109:
-#line 711 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 714 "../../ntpd/ntp_parser.y"
{ (yyval.Attr_val_fifo) = NULL; }
-#line 2415 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 110:
-#line 713 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 716 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2424 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 111:
-#line 721 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 724 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
+ (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
} else {
(yyval.Attr_val) = NULL;
- YYFREE((yyvsp[0].String));
+ YYFREE((yyvsp[(2) - (2)].String));
yyerror("filegen file remote config ignored");
}
}
-#line 2438 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 112:
-#line 731 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 734 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
+ (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
} else {
(yyval.Attr_val) = NULL;
yyerror("filegen type remote config ignored");
}
}
-#line 2451 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 113:
-#line 740 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 743 "../../ntpd/ntp_parser.y"
{
const char *err;
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
+ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer));
} else {
(yyval.Attr_val) = NULL;
- if (T_Link == (yyvsp[0].Integer))
+ if (T_Link == (yyvsp[(1) - (1)].Integer))
err = "filegen link remote config ignored";
else
err = "filegen nolink remote config ignored";
yyerror(err);
}
}
-#line 2470 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 114:
-#line 755 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2476 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 758 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
break;
case 126:
-#line 785 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 788 "../../ntpd/ntp_parser.y"
{
- CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[0].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
}
-#line 2484 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 127:
-#line 789 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 792 "../../ntpd/ntp_parser.y"
{
- CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[0].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
}
-#line 2492 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 128:
-#line 793 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 796 "../../ntpd/ntp_parser.y"
{
restrict_node *rn;
- rn = create_restrict_node((yyvsp[-1].Address_node), NULL, (yyvsp[0].Int_fifo),
+ rn = create_restrict_node((yyvsp[(2) - (3)].Address_node), NULL, (yyvsp[(3) - (3)].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2504 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 129:
-#line 801 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 804 "../../ntpd/ntp_parser.y"
{
restrict_node *rn;
- rn = create_restrict_node((yyvsp[-3].Address_node), (yyvsp[-1].Address_node), (yyvsp[0].Int_fifo),
+ rn = create_restrict_node((yyvsp[(2) - (5)].Address_node), (yyvsp[(4) - (5)].Address_node), (yyvsp[(5) - (5)].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2516 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 130:
-#line 809 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 812 "../../ntpd/ntp_parser.y"
{
restrict_node *rn;
- rn = create_restrict_node(NULL, NULL, (yyvsp[0].Int_fifo),
+ rn = create_restrict_node(NULL, NULL, (yyvsp[(3) - (3)].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2528 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 131:
-#line 817 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 820 "../../ntpd/ntp_parser.y"
{
restrict_node *rn;
@@ -2539,15 +2784,15 @@ yyreduce:
create_address_node(
estrdup("0.0.0.0"),
AF_INET),
- (yyvsp[0].Int_fifo),
+ (yyvsp[(4) - (4)].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2547 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 132:
-#line 832 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 835 "../../ntpd/ntp_parser.y"
{
restrict_node *rn;
@@ -2558,327 +2803,327 @@ yyreduce:
create_address_node(
estrdup("::"),
AF_INET6),
- (yyvsp[0].Int_fifo),
+ (yyvsp[(4) - (4)].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2566 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 133:
-#line 847 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 850 "../../ntpd/ntp_parser.y"
{
restrict_node * rn;
- APPEND_G_FIFO((yyvsp[0].Int_fifo), create_int_node((yyvsp[-1].Integer)));
+ APPEND_G_FIFO((yyvsp[(3) - (3)].Int_fifo), create_int_node((yyvsp[(2) - (3)].Integer)));
rn = create_restrict_node(
- NULL, NULL, (yyvsp[0].Int_fifo), lex_current()->curpos.nline);
+ NULL, NULL, (yyvsp[(3) - (3)].Int_fifo), lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
-#line 2579 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 134:
-#line 859 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 862 "../../ntpd/ntp_parser.y"
{ (yyval.Int_fifo) = NULL; }
-#line 2585 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 135:
-#line 861 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 864 "../../ntpd/ntp_parser.y"
{
- (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
+ (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
}
-#line 2594 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 151:
-#line 887 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 890 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2603 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 152:
-#line 892 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 895 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2612 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 153:
-#line 900 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2618 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 903 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 157:
-#line 911 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 914 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2627 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 158:
-#line 916 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 919 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2636 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 159:
-#line 924 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2642 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 927 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 168:
-#line 944 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 947 "../../ntpd/ntp_parser.y"
{
addr_opts_node *aon;
- aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
+ aon = create_addr_opts_node((yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
APPEND_G_FIFO(cfgt.fudge, aon);
}
-#line 2653 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 169:
-#line 954 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 957 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2662 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 170:
-#line 959 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 962 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2671 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 171:
-#line 967 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2677 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 970 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
break;
case 172:
-#line 969 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2683 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 972 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 173:
-#line 971 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 974 "../../ntpd/ntp_parser.y"
{
- if ((yyvsp[0].Integer) >= 0 && (yyvsp[0].Integer) <= 16) {
- (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
+ if ((yyvsp[(2) - (2)].Integer) >= 0 && (yyvsp[(2) - (2)].Integer) <= 16) {
+ (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
} else {
(yyval.Attr_val) = NULL;
yyerror("fudge factor: stratum value not in [0..16], ignored");
}
}
-#line 2696 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 174:
-#line 980 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2702 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 983 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
break;
case 175:
-#line 982 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
-#line 2708 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 985 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
break;
case 182:
-#line 1003 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[0].Attr_val_fifo)); }
-#line 2714 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1006 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
case 183:
-#line 1008 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1011 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2723 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 184:
-#line 1013 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1016 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2732 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 185:
-#line 1021 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 2738 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1024 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
case 189:
-#line 1037 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2744 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1040 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
case 190:
-#line 1039 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[0].Attr_val_fifo)); }
-#line 2750 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1042 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
case 191:
-#line 1044 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1047 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2759 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 192:
-#line 1049 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1052 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2768 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 193:
-#line 1057 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
-#line 2774 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1060 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
break;
case 194:
-#line 1059 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 1062 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
+ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer));
} else {
char err_str[128];
(yyval.Attr_val) = NULL;
snprintf(err_str, sizeof(err_str),
"enable/disable %s remote configuration ignored",
- keyword((yyvsp[0].Integer)));
+ keyword((yyvsp[(1) - (1)].Integer)));
yyerror(err_str);
}
}
-#line 2792 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 203:
-#line 1094 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[0].Attr_val_fifo)); }
-#line 2798 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 206:
+/* Line 1787 of yacc.c */
+#line 1100 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
- case 204:
-#line 1099 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 207:
+/* Line 1787 of yacc.c */
+#line 1105 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 2807 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 205:
-#line 1104 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 208:
+/* Line 1787 of yacc.c */
+#line 1110 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 2816 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 206:
-#line 1112 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
-#line 2822 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 209:
+/* Line 1787 of yacc.c */
+#line 1118 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
break;
- case 219:
-#line 1137 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 222:
+/* Line 1787 of yacc.c */
+#line 1143 "../../ntpd/ntp_parser.y"
{
attr_val *av;
- av = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double));
+ av = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2833 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 220:
-#line 1144 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 223:
+/* Line 1787 of yacc.c */
+#line 1150 "../../ntpd/ntp_parser.y"
{
attr_val *av;
- av = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
+ av = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2844 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 221:
-#line 1151 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 224:
+/* Line 1787 of yacc.c */
+#line 1157 "../../ntpd/ntp_parser.y"
{
attr_val *av;
- av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
+ av = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
APPEND_G_FIFO(cfgt.vars, av);
}
-#line 2855 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 222:
-#line 1158 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 225:
+/* Line 1787 of yacc.c */
+#line 1164 "../../ntpd/ntp_parser.y"
{
char error_text[64];
attr_val *av;
if (lex_from_file()) {
- av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
+ av = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
APPEND_G_FIFO(cfgt.vars, av);
} else {
- YYFREE((yyvsp[0].String));
+ YYFREE((yyvsp[(2) - (2)].String));
snprintf(error_text, sizeof(error_text),
"%s remote config ignored",
- keyword((yyvsp[-1].Integer)));
+ keyword((yyvsp[(1) - (2)].Integer)));
yyerror(error_text);
}
}
-#line 2875 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 223:
-#line 1174 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 226:
+/* Line 1787 of yacc.c */
+#line 1180 "../../ntpd/ntp_parser.y"
{
if (!lex_from_file()) {
- YYFREE((yyvsp[-1].String)); /* avoid leak */
+ YYFREE((yyvsp[(2) - (3)].String)); /* avoid leak */
yyerror("remote includefile ignored");
break;
}
@@ -2886,108 +3131,108 @@ yyreduce:
fprintf(stderr, "getconfig: Maximum include file level exceeded.\n");
msyslog(LOG_ERR, "getconfig: Maximum include file level exceeded.");
} else {
- const char * path = FindConfig((yyvsp[-1].String)); /* might return $2! */
+ const char * path = FindConfig((yyvsp[(2) - (3)].String)); /* might return $2! */
if (!lex_push_file(path, "r")) {
fprintf(stderr, "getconfig: Couldn't open <%s>\n", path);
msyslog(LOG_ERR, "getconfig: Couldn't open <%s>", path);
}
}
- YYFREE((yyvsp[-1].String)); /* avoid leak */
+ YYFREE((yyvsp[(2) - (3)].String)); /* avoid leak */
}
-#line 2898 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 224:
-#line 1193 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 227:
+/* Line 1787 of yacc.c */
+#line 1199 "../../ntpd/ntp_parser.y"
{ lex_flush_stack(); }
-#line 2904 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 225:
-#line 1195 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 228:
+/* Line 1787 of yacc.c */
+#line 1201 "../../ntpd/ntp_parser.y"
{ /* see drift_parm below for actions */ }
-#line 2910 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 226:
-#line 1197 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[0].Attr_val_fifo)); }
-#line 2916 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 229:
+/* Line 1787 of yacc.c */
+#line 1203 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
- case 227:
-#line 1199 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[0].String_fifo)); }
-#line 2922 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 230:
+/* Line 1787 of yacc.c */
+#line 1205 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[(2) - (2)].String_fifo)); }
break;
- case 228:
-#line 1201 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { APPEND_G_FIFO(cfgt.setvar, (yyvsp[0].Set_var)); }
-#line 2928 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 231:
+/* Line 1787 of yacc.c */
+#line 1207 "../../ntpd/ntp_parser.y"
+ { APPEND_G_FIFO(cfgt.setvar, (yyvsp[(2) - (2)].Set_var)); }
break;
- case 229:
-#line 1203 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 232:
+/* Line 1787 of yacc.c */
+#line 1209 "../../ntpd/ntp_parser.y"
{
addr_opts_node *aon;
- aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
+ aon = create_addr_opts_node((yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
APPEND_G_FIFO(cfgt.trap, aon);
}
-#line 2939 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 230:
-#line 1210 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[0].Attr_val_fifo)); }
-#line 2945 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 233:
+/* Line 1787 of yacc.c */
+#line 1216 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[(2) - (2)].Attr_val_fifo)); }
break;
- case 235:
-#line 1225 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 238:
+/* Line 1787 of yacc.c */
+#line 1231 "../../ntpd/ntp_parser.y"
{
#ifndef LEAP_SMEAR
yyerror("Built without LEAP_SMEAR support.");
#endif
}
-#line 2955 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 241:
-#line 1245 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 244:
+/* Line 1787 of yacc.c */
+#line 1251 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
attr_val *av;
- av = create_attr_sval(T_Driftfile, (yyvsp[0].String));
+ av = create_attr_sval(T_Driftfile, (yyvsp[(1) - (1)].String));
APPEND_G_FIFO(cfgt.vars, av);
} else {
- YYFREE((yyvsp[0].String));
+ YYFREE((yyvsp[(1) - (1)].String));
yyerror("driftfile remote configuration ignored");
}
}
-#line 2970 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 242:
-#line 1256 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 245:
+/* Line 1787 of yacc.c */
+#line 1262 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
attr_val *av;
- av = create_attr_sval(T_Driftfile, (yyvsp[-1].String));
+ av = create_attr_sval(T_Driftfile, (yyvsp[(1) - (2)].String));
APPEND_G_FIFO(cfgt.vars, av);
- av = create_attr_dval(T_WanderThreshold, (yyvsp[0].Double));
+ av = create_attr_dval(T_WanderThreshold, (yyvsp[(2) - (2)].Double));
APPEND_G_FIFO(cfgt.vars, av);
} else {
- YYFREE((yyvsp[-1].String));
+ YYFREE((yyvsp[(1) - (2)].String));
yyerror("driftfile remote configuration ignored");
}
}
-#line 2987 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 243:
-#line 1269 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 246:
+/* Line 1787 of yacc.c */
+#line 1275 "../../ntpd/ntp_parser.y"
{
if (lex_from_file()) {
attr_val *av;
@@ -2997,386 +3242,386 @@ yyreduce:
yyerror("driftfile remote configuration ignored");
}
}
-#line 3001 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 244:
-#line 1282 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Set_var) = create_setvar_node((yyvsp[-3].String), (yyvsp[-1].String), (yyvsp[0].Integer)); }
-#line 3007 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 247:
+/* Line 1787 of yacc.c */
+#line 1288 "../../ntpd/ntp_parser.y"
+ { (yyval.Set_var) = create_setvar_node((yyvsp[(1) - (4)].String), (yyvsp[(3) - (4)].String), (yyvsp[(4) - (4)].Integer)); }
break;
- case 246:
-#line 1288 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 249:
+/* Line 1787 of yacc.c */
+#line 1294 "../../ntpd/ntp_parser.y"
{ (yyval.Integer) = 0; }
-#line 3013 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 247:
-#line 1293 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 250:
+/* Line 1787 of yacc.c */
+#line 1299 "../../ntpd/ntp_parser.y"
{ (yyval.Attr_val_fifo) = NULL; }
-#line 3019 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 248:
-#line 1295 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 251:
+/* Line 1787 of yacc.c */
+#line 1301 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 3028 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 249:
-#line 1303 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
-#line 3034 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 252:
+/* Line 1787 of yacc.c */
+#line 1309 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
break;
- case 250:
-#line 1305 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 253:
+/* Line 1787 of yacc.c */
+#line 1311 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), estrdup((yyvsp[0].Address_node)->address));
- destroy_address_node((yyvsp[0].Address_node));
+ (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), estrdup((yyvsp[(2) - (2)].Address_node)->address));
+ destroy_address_node((yyvsp[(2) - (2)].Address_node));
}
-#line 3043 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 251:
-#line 1313 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 254:
+/* Line 1787 of yacc.c */
+#line 1319 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 3052 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 252:
-#line 1318 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 255:
+/* Line 1787 of yacc.c */
+#line 1324 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 3061 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 253:
-#line 1326 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 256:
+/* Line 1787 of yacc.c */
+#line 1332 "../../ntpd/ntp_parser.y"
{
char prefix;
char * type;
- switch ((yyvsp[0].String)[0]) {
+ switch ((yyvsp[(1) - (1)].String)[0]) {
case '+':
case '-':
case '=':
- prefix = (yyvsp[0].String)[0];
- type = (yyvsp[0].String) + 1;
+ prefix = (yyvsp[(1) - (1)].String)[0];
+ type = (yyvsp[(1) - (1)].String) + 1;
break;
default:
prefix = '=';
- type = (yyvsp[0].String);
+ type = (yyvsp[(1) - (1)].String);
}
(yyval.Attr_val) = create_attr_sval(prefix, estrdup(type));
- YYFREE((yyvsp[0].String));
+ YYFREE((yyvsp[(1) - (1)].String));
}
-#line 3087 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 254:
-#line 1351 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 257:
+/* Line 1787 of yacc.c */
+#line 1357 "../../ntpd/ntp_parser.y"
{
nic_rule_node *nrn;
- nrn = create_nic_rule_node((yyvsp[0].Integer), NULL, (yyvsp[-1].Integer));
+ nrn = create_nic_rule_node((yyvsp[(3) - (3)].Integer), NULL, (yyvsp[(2) - (3)].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
-#line 3098 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 255:
-#line 1358 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 258:
+/* Line 1787 of yacc.c */
+#line 1364 "../../ntpd/ntp_parser.y"
{
nic_rule_node *nrn;
- nrn = create_nic_rule_node(0, (yyvsp[0].String), (yyvsp[-1].Integer));
+ nrn = create_nic_rule_node(0, (yyvsp[(3) - (3)].String), (yyvsp[(2) - (3)].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
-#line 3109 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 265:
-#line 1386 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[0].Int_fifo)); }
-#line 3115 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 268:
+/* Line 1787 of yacc.c */
+#line 1392 "../../ntpd/ntp_parser.y"
+ { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[(2) - (2)].Int_fifo)); }
break;
- case 266:
-#line 1391 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 269:
+/* Line 1787 of yacc.c */
+#line 1397 "../../ntpd/ntp_parser.y"
{
- (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
+ (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
}
-#line 3124 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 267:
-#line 1396 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 270:
+/* Line 1787 of yacc.c */
+#line 1402 "../../ntpd/ntp_parser.y"
{
(yyval.Int_fifo) = NULL;
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
}
-#line 3133 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 275:
-#line 1420 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 278:
+/* Line 1787 of yacc.c */
+#line 1426 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
}
-#line 3142 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 276:
-#line 1425 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 279:
+/* Line 1787 of yacc.c */
+#line 1431 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
}
-#line 3151 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 277:
-#line 1433 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 280:
+/* Line 1787 of yacc.c */
+#line 1439 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
}
-#line 3160 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 278:
-#line 1438 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 281:
+/* Line 1787 of yacc.c */
+#line 1444 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
}
-#line 3169 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 279:
-#line 1446 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[0].Integer)); }
-#line 3175 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 282:
+/* Line 1787 of yacc.c */
+#line 1452 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[(1) - (1)].Integer)); }
break;
- case 281:
-#line 1452 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[-3].Integer), (yyvsp[-1].Integer)); }
-#line 3181 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 284:
+/* Line 1787 of yacc.c */
+#line 1458 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[(2) - (5)].Integer), (yyvsp[(4) - (5)].Integer)); }
break;
- case 282:
-#line 1457 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 285:
+/* Line 1787 of yacc.c */
+#line 1463 "../../ntpd/ntp_parser.y"
{
- (yyval.String_fifo) = (yyvsp[-1].String_fifo);
- APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
+ (yyval.String_fifo) = (yyvsp[(1) - (2)].String_fifo);
+ APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(2) - (2)].String)));
}
-#line 3190 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 283:
-#line 1462 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 286:
+/* Line 1787 of yacc.c */
+#line 1468 "../../ntpd/ntp_parser.y"
{
(yyval.String_fifo) = NULL;
- APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
+ APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(1) - (1)].String)));
}
-#line 3199 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 284:
-#line 1470 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 287:
+/* Line 1787 of yacc.c */
+#line 1476 "../../ntpd/ntp_parser.y"
{
- (yyval.Address_fifo) = (yyvsp[-1].Address_fifo);
- APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
+ (yyval.Address_fifo) = (yyvsp[(1) - (2)].Address_fifo);
+ APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(2) - (2)].Address_node));
}
-#line 3208 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 285:
-#line 1475 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 288:
+/* Line 1787 of yacc.c */
+#line 1481 "../../ntpd/ntp_parser.y"
{
(yyval.Address_fifo) = NULL;
- APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
+ APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(1) - (1)].Address_node));
}
-#line 3217 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 286:
-#line 1483 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 289:
+/* Line 1787 of yacc.c */
+#line 1489 "../../ntpd/ntp_parser.y"
{
- if ((yyvsp[0].Integer) != 0 && (yyvsp[0].Integer) != 1) {
+ if ((yyvsp[(1) - (1)].Integer) != 0 && (yyvsp[(1) - (1)].Integer) != 1) {
yyerror("Integer value is not boolean (0 or 1). Assuming 1");
(yyval.Integer) = 1;
} else {
- (yyval.Integer) = (yyvsp[0].Integer);
+ (yyval.Integer) = (yyvsp[(1) - (1)].Integer);
}
}
-#line 3230 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 287:
-#line 1491 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 290:
+/* Line 1787 of yacc.c */
+#line 1497 "../../ntpd/ntp_parser.y"
{ (yyval.Integer) = 1; }
-#line 3236 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 288:
-#line 1492 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 291:
+/* Line 1787 of yacc.c */
+#line 1498 "../../ntpd/ntp_parser.y"
{ (yyval.Integer) = 0; }
-#line 3242 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 289:
-#line 1496 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Double) = (double)(yyvsp[0].Integer); }
-#line 3248 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 292:
+/* Line 1787 of yacc.c */
+#line 1502 "../../ntpd/ntp_parser.y"
+ { (yyval.Double) = (double)(yyvsp[(1) - (1)].Integer); }
break;
- case 291:
-#line 1507 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 294:
+/* Line 1787 of yacc.c */
+#line 1513 "../../ntpd/ntp_parser.y"
{
sim_node *sn;
- sn = create_sim_node((yyvsp[-2].Attr_val_fifo), (yyvsp[-1].Sim_server_fifo));
+ sn = create_sim_node((yyvsp[(3) - (5)].Attr_val_fifo), (yyvsp[(4) - (5)].Sim_server_fifo));
APPEND_G_FIFO(cfgt.sim_details, sn);
/* Revert from ; to \n for end-of-command */
old_config_style = 1;
}
-#line 3262 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 292:
-#line 1524 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 295:
+/* Line 1787 of yacc.c */
+#line 1530 "../../ntpd/ntp_parser.y"
{ old_config_style = 0; }
-#line 3268 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 293:
-#line 1529 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 296:
+/* Line 1787 of yacc.c */
+#line 1535 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val));
}
-#line 3277 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 294:
-#line 1534 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 297:
+/* Line 1787 of yacc.c */
+#line 1540 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val));
}
-#line 3286 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 295:
-#line 1542 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3292 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 298:
+/* Line 1787 of yacc.c */
+#line 1548 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); }
break;
- case 298:
-#line 1552 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 301:
+/* Line 1787 of yacc.c */
+#line 1558 "../../ntpd/ntp_parser.y"
{
- (yyval.Sim_server_fifo) = (yyvsp[-1].Sim_server_fifo);
- APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
+ (yyval.Sim_server_fifo) = (yyvsp[(1) - (2)].Sim_server_fifo);
+ APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(2) - (2)].Sim_server));
}
-#line 3301 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 299:
-#line 1557 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 302:
+/* Line 1787 of yacc.c */
+#line 1563 "../../ntpd/ntp_parser.y"
{
(yyval.Sim_server_fifo) = NULL;
- APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
+ APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(1) - (1)].Sim_server));
}
-#line 3310 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 300:
-#line 1565 "../../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 3316 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 303:
+/* Line 1787 of yacc.c */
+#line 1571 "../../ntpd/ntp_parser.y"
+ { (yyval.Sim_server) = ONLY_SIM(create_sim_server((yyvsp[(1) - (5)].Address_node), (yyvsp[(3) - (5)].Double), (yyvsp[(4) - (5)].Sim_script_fifo))); }
break;
- case 301:
-#line 1570 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Double) = (yyvsp[-1].Double); }
-#line 3322 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 304:
+/* Line 1787 of yacc.c */
+#line 1576 "../../ntpd/ntp_parser.y"
+ { (yyval.Double) = (yyvsp[(3) - (4)].Double); }
break;
- case 302:
-#line 1575 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Address_node) = (yyvsp[0].Address_node); }
-#line 3328 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 305:
+/* Line 1787 of yacc.c */
+#line 1581 "../../ntpd/ntp_parser.y"
+ { (yyval.Address_node) = (yyvsp[(3) - (3)].Address_node); }
break;
- case 303:
-#line 1580 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 306:
+/* Line 1787 of yacc.c */
+#line 1586 "../../ntpd/ntp_parser.y"
{
- (yyval.Sim_script_fifo) = (yyvsp[-1].Sim_script_fifo);
- APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
+ (yyval.Sim_script_fifo) = (yyvsp[(1) - (2)].Sim_script_fifo);
+ APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(2) - (2)].Sim_script));
}
-#line 3337 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 304:
-#line 1585 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 307:
+/* Line 1787 of yacc.c */
+#line 1591 "../../ntpd/ntp_parser.y"
{
(yyval.Sim_script_fifo) = NULL;
- APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
+ APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(1) - (1)].Sim_script));
}
-#line 3346 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 305:
-#line 1593 "../../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 3352 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 308:
+/* Line 1787 of yacc.c */
+#line 1599 "../../ntpd/ntp_parser.y"
+ { (yyval.Sim_script) = ONLY_SIM(create_sim_script_info((yyvsp[(3) - (6)].Double), (yyvsp[(5) - (6)].Attr_val_fifo))); }
break;
- case 306:
-#line 1598 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 309:
+/* Line 1787 of yacc.c */
+#line 1604 "../../ntpd/ntp_parser.y"
{
- (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val));
}
-#line 3361 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 307:
-#line 1603 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ case 310:
+/* Line 1787 of yacc.c */
+#line 1609 "../../ntpd/ntp_parser.y"
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val));
}
-#line 3370 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
- case 308:
-#line 1611 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
- { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
-#line 3376 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+ case 311:
+/* Line 1787 of yacc.c */
+#line 1617 "../../ntpd/ntp_parser.y"
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); }
break;
-#line 3380 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
+/* Line 1787 of yacc.c */
+#line 3625 "ntp_parser.c"
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -3398,7 +3643,7 @@ yyreduce:
*++yyvsp = yyval;
- /* Now 'shift' the result of the reduction. Determine what state
+ /* Now `shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
@@ -3413,9 +3658,9 @@ yyreduce:
goto yynewstate;
-/*--------------------------------------.
-| yyerrlab -- here on detecting error. |
-`--------------------------------------*/
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
@@ -3466,20 +3711,20 @@ yyerrlab:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
- error, discard it. */
+ error, discard it. */
if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
}
/* Else will try to reuse lookahead token after shifting the error
@@ -3498,7 +3743,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- /* Do not reclaim the symbols of the rule whose action triggered
+ /* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
@@ -3511,29 +3756,29 @@ yyerrorlab:
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
/* Pop the current state because it cannot handle the error token. */
if (yyssp == yyss)
- YYABORT;
+ YYABORT;
yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
+ yystos[yystate], yyvsp);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -3584,14 +3829,14 @@ yyreturn:
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval);
}
- /* Do not reclaim the symbols of the rule whose action triggered
+ /* Do not reclaim the symbols of the rule which action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
+ yystos[*yyssp], yyvsp);
YYPOPSTACK (1);
}
#ifndef yyoverflow
@@ -3602,9 +3847,13 @@ yyreturn:
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
- return yyresult;
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
}
-#line 1622 "../../ntpd/ntp_parser.y" /* yacc.c:1906 */
+
+
+/* Line 2050 of yacc.c */
+#line 1628 "../../ntpd/ntp_parser.y"
void
diff --git a/ntpd/ntp_parser.h b/ntpd/ntp_parser.h
index 1ec7f8cc69af..ae729b5f83b7 100644
--- a/ntpd/ntp_parser.h
+++ b/ntpd/ntp_parser.h
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 3.0.2. */
+/* A Bison parser, made by GNU Bison 2.7.12-4996. */
/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_YY__NTPD_NTP_PARSER_H_INCLUDED
-# define YY_YY__NTPD_NTP_PARSER_H_INCLUDED
-/* Debug traces. */
+#ifndef YY_YY_NTP_PARSER_H_INCLUDED
+# define YY_YY_NTP_PARSER_H_INCLUDED
+/* Enabling traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -40,203 +40,207 @@
extern int yydebug;
#endif
-/* Token type. */
+/* Tokens. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- enum yytokentype
- {
- T_Abbrev = 258,
- T_Age = 259,
- T_All = 260,
- T_Allan = 261,
- T_Allpeers = 262,
- T_Auth = 263,
- T_Autokey = 264,
- 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_Panic = 380,
- T_Peer = 381,
- T_Peerstats = 382,
- T_Phone = 383,
- T_Pid = 384,
- T_Pidfile = 385,
- T_Pool = 386,
- T_Port = 387,
- T_Preempt = 388,
- T_Prefer = 389,
- T_Protostats = 390,
- T_Pw = 391,
- T_Randfile = 392,
- T_Rawstats = 393,
- T_Refid = 394,
- T_Requestkey = 395,
- T_Reset = 396,
- T_Restrict = 397,
- T_Revoke = 398,
- T_Rlimit = 399,
- T_Saveconfigdir = 400,
- T_Server = 401,
- T_Setvar = 402,
- T_Source = 403,
- T_Stacksize = 404,
- T_Statistics = 405,
- T_Stats = 406,
- T_Statsdir = 407,
- T_Step = 408,
- T_Stepback = 409,
- T_Stepfwd = 410,
- T_Stepout = 411,
- T_Stratum = 412,
- T_String = 413,
- T_Sys = 414,
- T_Sysstats = 415,
- T_Tick = 416,
- T_Time1 = 417,
- T_Time2 = 418,
- T_Timer = 419,
- T_Timingstats = 420,
- T_Tinker = 421,
- T_Tos = 422,
- T_Trap = 423,
- T_True = 424,
- T_Trustedkey = 425,
- T_Ttl = 426,
- T_Type = 427,
- T_U_int = 428,
- T_Unconfig = 429,
- T_Unpeer = 430,
- T_Version = 431,
- T_WanderThreshold = 432,
- T_Week = 433,
- T_Wildcard = 434,
- T_Xleave = 435,
- T_Year = 436,
- T_Flag = 437,
- T_EOC = 438,
- T_Simulate = 439,
- T_Beep_Delay = 440,
- T_Sim_Duration = 441,
- T_Server_Offset = 442,
- T_Duration = 443,
- T_Freq_Offset = 444,
- T_Wander = 445,
- T_Jitter = 446,
- T_Prop_Delay = 447,
- T_Proc_Delay = 448
- };
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ T_Abbrev = 258,
+ T_Age = 259,
+ T_All = 260,
+ T_Allan = 261,
+ T_Allpeers = 262,
+ T_Auth = 263,
+ T_Autokey = 264,
+ 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_Panic = 380,
+ T_Peer = 381,
+ T_Peerstats = 382,
+ T_Phone = 383,
+ T_Pid = 384,
+ T_Pidfile = 385,
+ T_Pool = 386,
+ T_Port = 387,
+ T_Preempt = 388,
+ T_Prefer = 389,
+ T_Protostats = 390,
+ T_Pw = 391,
+ T_Randfile = 392,
+ T_Rawstats = 393,
+ T_Refid = 394,
+ T_Requestkey = 395,
+ T_Reset = 396,
+ T_Restrict = 397,
+ T_Revoke = 398,
+ T_Rlimit = 399,
+ T_Saveconfigdir = 400,
+ T_Server = 401,
+ T_Setvar = 402,
+ T_Source = 403,
+ T_Stacksize = 404,
+ T_Statistics = 405,
+ T_Stats = 406,
+ T_Statsdir = 407,
+ T_Step = 408,
+ T_Stepback = 409,
+ T_Stepfwd = 410,
+ T_Stepout = 411,
+ T_Stratum = 412,
+ T_String = 413,
+ T_Sys = 414,
+ T_Sysstats = 415,
+ T_Tick = 416,
+ T_Time1 = 417,
+ T_Time2 = 418,
+ T_Timer = 419,
+ T_Timingstats = 420,
+ T_Tinker = 421,
+ T_Tos = 422,
+ T_Trap = 423,
+ T_True = 424,
+ T_Trustedkey = 425,
+ T_Ttl = 426,
+ T_Type = 427,
+ T_U_int = 428,
+ T_UEcrypto = 429,
+ T_UEcryptonak = 430,
+ T_UEdigest = 431,
+ T_Unconfig = 432,
+ T_Unpeer = 433,
+ T_Version = 434,
+ T_WanderThreshold = 435,
+ T_Week = 436,
+ T_Wildcard = 437,
+ T_Xleave = 438,
+ T_Year = 439,
+ T_Flag = 440,
+ T_EOC = 441,
+ T_Simulate = 442,
+ T_Beep_Delay = 443,
+ T_Sim_Duration = 444,
+ T_Server_Offset = 445,
+ T_Duration = 446,
+ T_Freq_Offset = 447,
+ T_Wander = 448,
+ T_Jitter = 449,
+ T_Prop_Delay = 450,
+ T_Proc_Delay = 451
+ };
#endif
/* Tokens. */
#define T_Abbrev 258
@@ -410,33 +414,37 @@ extern int yydebug;
#define T_Ttl 426
#define T_Type 427
#define T_U_int 428
-#define T_Unconfig 429
-#define T_Unpeer 430
-#define T_Version 431
-#define T_WanderThreshold 432
-#define T_Week 433
-#define T_Wildcard 434
-#define T_Xleave 435
-#define T_Year 436
-#define T_Flag 437
-#define T_EOC 438
-#define T_Simulate 439
-#define T_Beep_Delay 440
-#define T_Sim_Duration 441
-#define T_Server_Offset 442
-#define T_Duration 443
-#define T_Freq_Offset 444
-#define T_Wander 445
-#define T_Jitter 446
-#define T_Prop_Delay 447
-#define T_Proc_Delay 448
+#define T_UEcrypto 429
+#define T_UEcryptonak 430
+#define T_UEdigest 431
+#define T_Unconfig 432
+#define T_Unpeer 433
+#define T_Version 434
+#define T_WanderThreshold 435
+#define T_Week 436
+#define T_Wildcard 437
+#define T_Xleave 438
+#define T_Year 439
+#define T_Flag 440
+#define T_EOC 441
+#define T_Simulate 442
+#define T_Beep_Delay 443
+#define T_Sim_Duration 444
+#define T_Server_Offset 445
+#define T_Duration 446
+#define T_Freq_Offset 447
+#define T_Wander 448
+#define T_Jitter 449
+#define T_Prop_Delay 450
+#define T_Proc_Delay 451
+
+
-/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
+typedef union YYSTYPE
{
-#line 51 "../../ntpd/ntp_parser.y" /* yacc.c:1909 */
+/* Line 2053 of yacc.c */
+#line 51 "../../ntpd/ntp_parser.y"
char * String;
double Double;
@@ -455,15 +463,29 @@ union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-#line 459 "../../ntpd/ntp_parser.h" /* yacc.c:1909 */
-};
+
+/* Line 2053 of yacc.c */
+#line 469 "ntp_parser.h"
+} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
-
extern YYSTYPE yylval;
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY__NTPD_NTP_PARSER_H_INCLUDED */
+#endif /* !YY_YY_NTP_PARSER_H_INCLUDED */
diff --git a/ntpd/ntp_parser.y b/ntpd/ntp_parser.y
index a4267e1a8d09..92b438a4916e 100644
--- a/ntpd/ntp_parser.y
+++ b/ntpd/ntp_parser.y
@@ -239,6 +239,9 @@
%token <Integer> T_Ttl
%token <Integer> T_Type
%token <Integer> T_U_int /* Not a token */
+%token <Integer> T_UEcrypto
+%token <Integer> T_UEcryptonak
+%token <Integer> T_UEdigest
%token <Integer> T_Unconfig
%token <Integer> T_Unpeer
%token <Integer> T_Version
@@ -1083,6 +1086,9 @@ system_option_flag_keyword
system_option_local_flag_keyword
: T_Mode7
| T_Stats
+ | T_UEcrypto
+ | T_UEcryptonak
+ | T_UEdigest
;
/* Tinker Commands
diff --git a/ntpd/ntp_proto.c b/ntpd/ntp_proto.c
index f7704722a9ba..ad454099f8b9 100644
--- a/ntpd/ntp_proto.c
+++ b/ntpd/ntp_proto.c
@@ -153,6 +153,19 @@ u_long sys_declined; /* declined */
u_long sys_limitrejected; /* rate exceeded */
u_long sys_kodsent; /* KoD sent */
+/*
+ * Mechanism knobs: how soon do we unpeer()?
+ *
+ * The default way is "on-receipt". If this was a packet from a
+ * well-behaved source, on-receipt will offer the fastest recovery.
+ * If this was from a DoS attack, the default way makes it easier
+ * for a bad-guy to DoS us. So look and see what bites you harder
+ * and choose according to your environment.
+ */
+int unpeer_crypto_early = 1; /* bad crypto (TEST9) */
+int unpeer_crypto_nak_early = 1; /* crypto_NAK (TEST5) */
+int unpeer_digest_early = 1; /* bad digest (TEST5) */
+
static int kiss_code_check(u_char hisleap, u_char hisstratum, u_char hismode, u_int32 refid);
static double root_distance (struct peer *);
static void clock_combine (peer_select *, int, int);
@@ -1157,6 +1170,7 @@ receive(
} else {
peer->delay = sys_bdelay;
+ peer->bxmt = p_xmt;
}
break;
}
@@ -1177,6 +1191,7 @@ receive(
sys_restricted++;
return; /* ignore duplicate */
}
+ peer->bxmt = p_xmt;
#ifdef AUTOKEY
if (skeyid > NTP_MAXKEY)
crypto_recv(peer, rbufp);
@@ -1286,6 +1301,73 @@ receive(
return;
}
#endif /* AUTOKEY */
+
+ if (MODE_BROADCAST == hismode) {
+ u_char poll;
+ int bail = 0;
+ l_fp tdiff;
+
+ DPRINTF(2, ("receive: PROCPKT/BROADCAST: prev pkt %ld seconds ago, ppoll: %d, %d secs\n",
+ (current_time - peer->timelastrec),
+ peer->ppoll, (1 << peer->ppoll)
+ ));
+ /* Things we can check:
+ *
+ * Did the poll interval change?
+ * Is the poll interval in the packet in-range?
+ * Did this packet arrive too soon?
+ * Is the timestamp in this packet monotonic
+ * with respect to the previous packet?
+ */
+
+ /* This is noteworthy, not error-worthy */
+ if (pkt->ppoll != peer->ppoll) {
+ msyslog(LOG_INFO, "receive: broadcast poll from %s changed from %ud to %ud",
+ stoa(&rbufp->recv_srcadr),
+ peer->ppoll, pkt->ppoll);
+ }
+
+ poll = min(peer->maxpoll,
+ max(peer->minpoll, pkt->ppoll));
+
+ /* This is error-worthy */
+ if (pkt->ppoll != poll) {
+ msyslog(LOG_INFO, "receive: broadcast poll of %ud from %s is out-of-range (%d to %d)!",
+ pkt->ppoll, stoa(&rbufp->recv_srcadr),
+ peer->minpoll, peer->maxpoll);
+ ++bail;
+ }
+
+ if ( (current_time - peer->timelastrec)
+ < (1 << pkt->ppoll)) {
+ msyslog(LOG_INFO, "receive: broadcast packet from %s arrived after %ld, not %d seconds!",
+ stoa(&rbufp->recv_srcadr),
+ (current_time - peer->timelastrec),
+ (1 << pkt->ppoll)
+ );
+ ++bail;
+ }
+
+ tdiff = p_xmt;
+ L_SUB(&tdiff, &peer->bxmt);
+ if (tdiff.l_i < 0) {
+ 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,
+ p_xmt.l_ui, p_xmt.l_uf
+ );
+ ++bail;
+ }
+
+ peer->bxmt = p_xmt;
+
+ if (bail) {
+ peer->timelastrec = current_time;
+ sys_declined++;
+ return;
+ }
+ }
+
break;
/*
@@ -1362,7 +1444,12 @@ receive(
/*
* Basic mode checks:
*
- * If there is no origin timestamp, it's an initial packet.
+ * If there is no origin timestamp, it's either an initial packet
+ * or we've already received a response to our query. Of course,
+ * should 'aorg' be all-zero because this really was the original
+ * transmit timestamp, we'll drop the reply. There is a window of
+ * one nanosecond once every 136 years' time where this is possible.
+ * We currently ignore this situation.
*
* Otherwise, check for bogus packet in basic mode.
* If it is bogus, switch to interleaved mode and resynchronize,
@@ -1375,7 +1462,8 @@ receive(
} else if (peer->flip == 0) {
if (0 < hisstratum && L_ISZERO(&p_org)) {
L_CLR(&peer->aorg);
- } else if (!L_ISEQU(&p_org, &peer->aorg)) {
+ } else if ( L_ISZERO(&peer->aorg)
+ || !L_ISEQU(&p_org, &peer->aorg)) {
peer->bogusorg++;
peer->flash |= TEST2; /* bogus */
msyslog(LOG_INFO,
@@ -1424,7 +1512,9 @@ receive(
peer->flash |= TEST5; /* bad auth */
peer->badauth++;
if (peer->flags & FLAG_PREEMPT) {
- unpeer(peer);
+ if (unpeer_crypto_nak_early) {
+ unpeer(peer);
+ }
return;
}
#ifdef AUTOKEY
@@ -1450,7 +1540,9 @@ receive(
&& (hismode == MODE_ACTIVE || hismode == MODE_PASSIVE))
fast_xmit(rbufp, MODE_ACTIVE, 0, restrict_mask);
if (peer->flags & FLAG_PREEMPT) {
- unpeer(peer);
+ if (unpeer_digest_early) {
+ unpeer(peer);
+ }
return;
}
#ifdef AUTOKEY
@@ -1505,12 +1597,47 @@ receive(
return; /* Drop any other kiss code packets */
}
+ /*
+ * If:
+ * - this is a *cast (uni-, broad-, or m-) server packet
+ * - and it's authenticated
+ * then see if the sender's IP is trusted for this keyid.
+ * If it is, great - nothing special to do here.
+ * Otherwise, we should report and bail.
+ */
+
+ switch (hismode) {
+ case MODE_SERVER: /* server mode */
+ case MODE_BROADCAST: /* broadcast mode */
+ case MODE_ACTIVE: /* symmetric active mode */
+ if ( is_authentic == AUTH_OK
+ && !authistrustedip(skeyid, &peer->srcadr)) {
+ report_event(PEVNT_AUTH, peer, "authIP");
+ peer->badauth++;
+ return;
+ }
+ break;
+
+ case MODE_UNSPEC: /* unspecified (old version) */
+ case MODE_PASSIVE: /* symmetric passive mode */
+ case MODE_CLIENT: /* client mode */
+#if 0 /* At this point, MODE_CONTROL is overloaded by MODE_BCLIENT */
+ case MODE_CONTROL: /* control mode */
+#endif
+ case MODE_PRIVATE: /* private mode */
+ case MODE_BCLIENT: /* broadcast client mode */
+ break;
+ default:
+ break;
+ }
+
/*
* That was hard and I am sweaty, but the packet is squeaky
* clean. Get on with real work.
*/
peer->timereceived = current_time;
+ peer->timelastrec = current_time;
if (is_authentic == AUTH_OK)
peer->flags |= FLAG_AUTHENTIC;
else
@@ -1560,8 +1687,11 @@ receive(
"crypto error");
peer_clear(peer, "CRYP");
peer->flash |= TEST9; /* bad crypt */
- if (peer->flags & FLAG_PREEMPT)
- unpeer(peer);
+ if (peer->flags & FLAG_PREEMPT) {
+ if (unpeer_crypto_early) {
+ unpeer(peer);
+ }
+ }
}
return;
}
@@ -4358,6 +4488,22 @@ proto_config(
io_multicast_del(svalue);
break;
+ /*
+ * Unpeer Early policy choices
+ */
+
+ case PROTO_UECRYPTO: /* Crypto */
+ unpeer_crypto_early = value;
+ break;
+
+ case PROTO_UECRYPTONAK: /* Crypto_NAK */
+ unpeer_crypto_nak_early = value;
+ break;
+
+ case PROTO_UEDIGEST: /* Digest */
+ unpeer_digest_early = value;
+ break;
+
default:
msyslog(LOG_NOTICE,
"proto: unsupported option %d", item);
diff --git a/ntpd/ntp_request.c b/ntpd/ntp_request.c
index fa78ce1e4941..ba968e2c8e8a 100644
--- a/ntpd/ntp_request.c
+++ b/ntpd/ntp_request.c
@@ -81,8 +81,8 @@ static void do_unconf (sockaddr_u *, endpt *, struct req_pkt *);
static void set_sys_flag (sockaddr_u *, endpt *, struct req_pkt *);
static void clr_sys_flag (sockaddr_u *, endpt *, struct req_pkt *);
static void setclr_flags (sockaddr_u *, endpt *, struct req_pkt *, u_long);
-static void list_restrict4 (restrict_u *, struct info_restrict **);
-static void list_restrict6 (restrict_u *, struct info_restrict **);
+static void list_restrict4 (const restrict_u *, struct info_restrict **);
+static void list_restrict6 (const restrict_u *, struct info_restrict **);
static void list_restrict (sockaddr_u *, endpt *, struct req_pkt *);
static void do_resaddflags (sockaddr_u *, endpt *, struct req_pkt *);
static void do_ressubflags (sockaddr_u *, endpt *, struct req_pkt *);
@@ -667,43 +667,35 @@ list_peers(
struct req_pkt *inpkt
)
{
- struct info_peer_list *ip;
- struct peer *pp;
- int skip = 0;
+ struct info_peer_list * ip;
+ const struct peer * pp;
ip = (struct info_peer_list *)prepare_pkt(srcadr, inter, inpkt,
v6sizeof(struct info_peer_list));
for (pp = peer_list; pp != NULL && ip != NULL; pp = pp->p_link) {
if (IS_IPV6(&pp->srcadr)) {
- if (client_v6_capable) {
- ip->addr6 = SOCK_ADDR6(&pp->srcadr);
- ip->v6_flag = 1;
- skip = 0;
- } else {
- skip = 1;
- break;
- }
+ if (!client_v6_capable)
+ continue;
+ ip->addr6 = SOCK_ADDR6(&pp->srcadr);
+ ip->v6_flag = 1;
} else {
ip->addr = NSRCADR(&pp->srcadr);
if (client_v6_capable)
ip->v6_flag = 0;
- skip = 0;
}
- if (!skip) {
- ip->port = NSRCPORT(&pp->srcadr);
- ip->hmode = pp->hmode;
- ip->flags = 0;
- if (pp->flags & FLAG_CONFIG)
- ip->flags |= INFO_FLAG_CONFIG;
- if (pp == sys_peer)
- ip->flags |= INFO_FLAG_SYSPEER;
- if (pp->status == CTL_PST_SEL_SYNCCAND)
- ip->flags |= INFO_FLAG_SEL_CANDIDATE;
- if (pp->status >= CTL_PST_SEL_SYSPEER)
- ip->flags |= INFO_FLAG_SHORTLIST;
- ip = (struct info_peer_list *)more_pkt();
- }
+ ip->port = NSRCPORT(&pp->srcadr);
+ ip->hmode = pp->hmode;
+ ip->flags = 0;
+ if (pp->flags & FLAG_CONFIG)
+ ip->flags |= INFO_FLAG_CONFIG;
+ if (pp == sys_peer)
+ ip->flags |= INFO_FLAG_SYSPEER;
+ if (pp->status == CTL_PST_SEL_SYNCCAND)
+ ip->flags |= INFO_FLAG_SEL_CANDIDATE;
+ if (pp->status >= CTL_PST_SEL_SYSPEER)
+ ip->flags |= INFO_FLAG_SHORTLIST;
+ ip = (struct info_peer_list *)more_pkt();
} /* for pp */
flush_pkt();
@@ -720,10 +712,9 @@ list_peers_sum(
struct req_pkt *inpkt
)
{
- register struct info_peer_summary *ips;
- register struct peer *pp;
- l_fp ltmp;
- register int skip;
+ struct info_peer_summary * ips;
+ const struct peer * pp;
+ l_fp ltmp;
DPRINTF(3, ("wants peer list summary\n"));
@@ -736,18 +727,14 @@ list_peers_sum(
* want only v4.
*/
if (IS_IPV6(&pp->srcadr)) {
- if (client_v6_capable) {
- ips->srcadr6 = SOCK_ADDR6(&pp->srcadr);
- ips->v6_flag = 1;
- if (pp->dstadr)
- ips->dstadr6 = SOCK_ADDR6(&pp->dstadr->sin);
- else
- ZERO(ips->dstadr6);
- skip = 0;
- } else {
- skip = 1;
- break;
- }
+ if (!client_v6_capable)
+ continue;
+ ips->srcadr6 = SOCK_ADDR6(&pp->srcadr);
+ ips->v6_flag = 1;
+ if (pp->dstadr)
+ ips->dstadr6 = SOCK_ADDR6(&pp->dstadr->sin);
+ else
+ ZERO(ips->dstadr6);
} else {
ips->srcadr = NSRCADR(&pp->srcadr);
if (client_v6_capable)
@@ -765,39 +752,37 @@ list_peers_sum(
ips->dstadr = NSRCADR(&pp->dstadr->bcast);
}
}
- } else
+ } else {
ips->dstadr = 0;
-
- skip = 0;
+ }
}
- if (!skip) {
- ips->srcport = NSRCPORT(&pp->srcadr);
- ips->stratum = pp->stratum;
- ips->hpoll = pp->hpoll;
- ips->ppoll = pp->ppoll;
- ips->reach = pp->reach;
- ips->flags = 0;
- if (pp == sys_peer)
- ips->flags |= INFO_FLAG_SYSPEER;
- if (pp->flags & FLAG_CONFIG)
- ips->flags |= INFO_FLAG_CONFIG;
- if (pp->flags & FLAG_REFCLOCK)
- ips->flags |= INFO_FLAG_REFCLOCK;
- if (pp->flags & FLAG_PREFER)
- ips->flags |= INFO_FLAG_PREFER;
- if (pp->flags & FLAG_BURST)
- ips->flags |= INFO_FLAG_BURST;
- if (pp->status == CTL_PST_SEL_SYNCCAND)
- ips->flags |= INFO_FLAG_SEL_CANDIDATE;
- if (pp->status >= CTL_PST_SEL_SYSPEER)
- ips->flags |= INFO_FLAG_SHORTLIST;
- ips->hmode = pp->hmode;
- ips->delay = HTONS_FP(DTOFP(pp->delay));
- DTOLFP(pp->offset, &ltmp);
- HTONL_FP(&ltmp, &ips->offset);
- ips->dispersion = HTONS_FP(DTOUFP(SQRT(pp->disp)));
- }
+ ips->srcport = NSRCPORT(&pp->srcadr);
+ ips->stratum = pp->stratum;
+ ips->hpoll = pp->hpoll;
+ ips->ppoll = pp->ppoll;
+ ips->reach = pp->reach;
+ ips->flags = 0;
+ if (pp == sys_peer)
+ ips->flags |= INFO_FLAG_SYSPEER;
+ if (pp->flags & FLAG_CONFIG)
+ ips->flags |= INFO_FLAG_CONFIG;
+ if (pp->flags & FLAG_REFCLOCK)
+ ips->flags |= INFO_FLAG_REFCLOCK;
+ if (pp->flags & FLAG_PREFER)
+ ips->flags |= INFO_FLAG_PREFER;
+ if (pp->flags & FLAG_BURST)
+ ips->flags |= INFO_FLAG_BURST;
+ if (pp->status == CTL_PST_SEL_SYNCCAND)
+ ips->flags |= INFO_FLAG_SEL_CANDIDATE;
+ if (pp->status >= CTL_PST_SEL_SYSPEER)
+ ips->flags |= INFO_FLAG_SHORTLIST;
+ ips->hmode = pp->hmode;
+ ips->delay = HTONS_FP(DTOFP(pp->delay));
+ DTOLFP(pp->offset, &ltmp);
+ HTONL_FP(&ltmp, &ips->offset);
+ ips->dispersion = HTONS_FP(DTOUFP(SQRT(pp->disp)));
+
ips = (struct info_peer_summary *)more_pkt();
} /* for pp */
@@ -1197,7 +1182,7 @@ mem_stats(
ms->hashcount[i] = (u_char)
max((u_int)peer_hash_count[i], UCHAR_MAX);
- more_pkt();
+ (void) more_pkt();
flush_pkt();
}
@@ -1285,7 +1270,7 @@ loop_info(
li->compliance = htonl((u_int32)(tc_counter));
li->watchdog_timer = htonl((u_int32)(current_time - sys_epoch));
- more_pkt();
+ (void) more_pkt();
flush_pkt();
}
@@ -1571,56 +1556,143 @@ setclr_flags(
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
+/* There have been some issues with the restrict list processing,
+ * ranging from problems with deep recursion (resulting in stack
+ * overflows) and overfull reply buffers.
+ *
+ * To avoid this trouble the list reversal is done iteratively using a
+ * scratch pad.
+ */
+typedef struct RestrictStack RestrictStackT;
+struct RestrictStack {
+ RestrictStackT *link;
+ size_t fcnt;
+ const restrict_u *pres[63];
+};
+
+static size_t
+getStackSheetSize(
+ RestrictStackT *sp
+ )
+{
+ if (sp)
+ return sizeof(sp->pres)/sizeof(sp->pres[0]);
+ return 0u;
+}
+
+static int/*BOOL*/
+pushRestriction(
+ RestrictStackT **spp,
+ const restrict_u *ptr
+ )
+{
+ RestrictStackT *sp;
+
+ if (NULL == (sp = *spp) || 0 == sp->fcnt) {
+ /* need another sheet in the scratch pad */
+ sp = emalloc(sizeof(*sp));
+ sp->link = *spp;
+ sp->fcnt = getStackSheetSize(sp);
+ *spp = sp;
+ }
+ sp->pres[--sp->fcnt] = ptr;
+ return TRUE;
+}
+
+static int/*BOOL*/
+popRestriction(
+ RestrictStackT **spp,
+ const restrict_u **opp
+ )
+{
+ RestrictStackT *sp;
+
+ if (NULL == (sp = *spp) || sp->fcnt >= getStackSheetSize(sp))
+ return FALSE;
+
+ *opp = sp->pres[sp->fcnt++];
+ if (sp->fcnt >= getStackSheetSize(sp)) {
+ /* discard sheet from scratch pad */
+ *spp = sp->link;
+ free(sp);
+ }
+ return TRUE;
+}
+
+static void
+flushRestrictionStack(
+ RestrictStackT **spp
+ )
+{
+ RestrictStackT *sp;
+
+ while (NULL != (sp = *spp)) {
+ *spp = sp->link;
+ free(sp);
+ }
+}
+
/*
- * list_restrict4 - recursive helper for list_restrict dumps IPv4
+ * list_restrict4 - iterative helper for list_restrict dumps IPv4
* restriction list in reverse order.
*/
static void
list_restrict4(
- restrict_u * res,
+ const restrict_u * res,
struct info_restrict ** ppir
)
{
+ RestrictStackT * rpad;
struct info_restrict * pir;
- if (res->link != NULL)
- list_restrict4(res->link, ppir);
-
pir = *ppir;
- pir->addr = htonl(res->u.v4.addr);
- if (client_v6_capable)
- pir->v6_flag = 0;
- pir->mask = htonl(res->u.v4.mask);
- pir->count = htonl(res->count);
- pir->flags = htons(res->flags);
- pir->mflags = htons(res->mflags);
- *ppir = (struct info_restrict *)more_pkt();
+ for (rpad = NULL; res; res = res->link)
+ if (!pushRestriction(&rpad, res))
+ break;
+
+ while (pir && popRestriction(&rpad, &res)) {
+ pir->addr = htonl(res->u.v4.addr);
+ if (client_v6_capable)
+ pir->v6_flag = 0;
+ pir->mask = htonl(res->u.v4.mask);
+ pir->count = htonl(res->count);
+ pir->flags = htons(res->flags);
+ pir->mflags = htons(res->mflags);
+ pir = (struct info_restrict *)more_pkt();
+ }
+ flushRestrictionStack(&rpad);
+ *ppir = pir;
}
-
/*
- * list_restrict6 - recursive helper for list_restrict dumps IPv6
+ * list_restrict6 - iterative helper for list_restrict dumps IPv6
* restriction list in reverse order.
*/
static void
list_restrict6(
- restrict_u * res,
+ const restrict_u * res,
struct info_restrict ** ppir
)
{
+ RestrictStackT * rpad;
struct info_restrict * pir;
- if (res->link != NULL)
- list_restrict6(res->link, ppir);
-
pir = *ppir;
- pir->addr6 = res->u.v6.addr;
- pir->mask6 = res->u.v6.mask;
- pir->v6_flag = 1;
- pir->count = htonl(res->count);
- pir->flags = htons(res->flags);
- pir->mflags = htons(res->mflags);
- *ppir = (struct info_restrict *)more_pkt();
+ for (rpad = NULL; res; res = res->link)
+ if (!pushRestriction(&rpad, res))
+ break;
+
+ while (pir && popRestriction(&rpad, &res)) {
+ pir->addr6 = res->u.v6.addr;
+ pir->mask6 = res->u.v6.mask;
+ pir->v6_flag = 1;
+ pir->count = htonl(res->count);
+ pir->flags = htons(res->flags);
+ pir->mflags = htons(res->mflags);
+ pir = (struct info_restrict *)more_pkt();
+ }
+ flushRestrictionStack(&rpad);
+ *ppir = pir;
}
@@ -1644,8 +1716,7 @@ list_restrict(
/*
* The restriction lists are kept sorted in the reverse order
* than they were originally. To preserve the output semantics,
- * dump each list in reverse order. A recursive helper function
- * achieves that.
+ * dump each list in reverse order. The workers take care of that.
*/
list_restrict4(restrictlist4, &ir);
if (client_v6_capable)
@@ -2010,7 +2081,7 @@ do_trustkey(
register int items;
items = INFO_NITEMS(inpkt->err_nitems);
- kp = (uint32_t*)&inpkt->u;
+ kp = (uint32_t *)&inpkt->u;
while (items-- > 0) {
authtrust(*kp, trust);
kp++;
@@ -2089,7 +2160,7 @@ req_get_traps(
it = (struct info_trap *)prepare_pkt(srcadr, inter, inpkt,
v6sizeof(struct info_trap));
- for (i = 0, tr = ctl_traps; i < COUNTOF(ctl_traps); i++, tr++) {
+ for (i = 0, tr = ctl_traps; it && i < COUNTOF(ctl_traps); i++, tr++) {
if (tr->tr_flags & TRAP_INUSE) {
if (IS_IPV4(&tr->tr_addr)) {
if (tr->tr_localaddr == any_interface)
@@ -2405,7 +2476,7 @@ get_clock_info(
ic = (struct info_clock *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_clock));
- while (items-- > 0) {
+ while (items-- > 0 && ic) {
NSRCADR(&addr) = *clkaddr++;
if (!ISREFCLOCKADR(&addr) || NULL ==
findexistingpeer(&addr, NULL, NULL, -1, 0)) {
@@ -2544,7 +2615,7 @@ get_clkbug_info(
ic = (struct info_clkbug *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_clkbug));
- while (items-- > 0) {
+ while (items-- > 0 && ic) {
NSRCADR(&addr) = *clkaddr++;
if (!ISREFCLOCKADR(&addr) || NULL ==
findexistingpeer(&addr, NULL, NULL, -1, 0)) {
@@ -2592,13 +2663,15 @@ fill_info_if_stats(void *data, interface_info_t *interface_info)
struct info_if_stats **ifsp = (struct info_if_stats **)data;
struct info_if_stats *ifs = *ifsp;
endpt *ep = interface_info->ep;
+
+ if (NULL == ifs)
+ return;
ZERO(*ifs);
if (IS_IPV6(&ep->sin)) {
- if (!client_v6_capable) {
+ if (!client_v6_capable)
return;
- }
ifs->v6_flag = 1;
ifs->unaddr.addr6 = SOCK_ADDR6(&ep->sin);
ifs->unbcast.addr6 = SOCK_ADDR6(&ep->bcast);
diff --git a/ntpd/ntp_scanner.c b/ntpd/ntp_scanner.c
index 49adf6bfb767..631c218b1567 100644
--- a/ntpd/ntp_scanner.c
+++ b/ntpd/ntp_scanner.c
@@ -669,7 +669,7 @@ int
yylex(void)
{
static follby followedby = FOLLBY_TOKEN;
- int i;
+ size_t i;
int instring;
int yylval_was_set;
int converted;
diff --git a/ntpd/ntp_timer.c b/ntpd/ntp_timer.c
index 03084a353622..78c81b620b18 100644
--- a/ntpd/ntp_timer.c
+++ b/ntpd/ntp_timer.c
@@ -549,14 +549,16 @@ check_leapsec(
#ifdef LEAP_SMEAR
leap_smear.enabled = leap_smear_intv != 0;
#endif
- if (reset) {
+ if (reset) {
lsprox = LSPROX_NOWARN;
leapsec_reset_frame();
memset(&lsdata, 0, sizeof(lsdata));
} else {
- int fired = leapsec_query(&lsdata, now, tpiv);
+ int fired;
- DPRINTF(1, ("*** leapsec_query: fired %i, now %u (0x%08X), tai_diff %i, ddist %u\n",
+ fired = leapsec_query(&lsdata, now, tpiv);
+
+ DPRINTF(3, ("*** leapsec_query: fired %i, now %u (0x%08X), tai_diff %i, ddist %u\n",
fired, now, now, lsdata.tai_diff, lsdata.ddist));
#ifdef LEAP_SMEAR
@@ -572,8 +574,7 @@ check_leapsec(
DPRINTF(1, ("*** leapsec_query: setting leap_smear interval %li, begin %.0f, end %.0f\n",
leap_smear.interval, leap_smear.intv_start, leap_smear.intv_end));
}
- }
- else {
+ } else {
if (leap_smear.interval)
DPRINTF(1, ("*** leapsec_query: clearing leap_smear interval\n"));
leap_smear.interval = 0;
@@ -655,10 +656,10 @@ check_leapsec(
sys_tai = lsdata.tai_offs;
} else {
#ifdef AUTOKEY
- update_autokey = (sys_tai != lsdata.tai_offs);
+ update_autokey = (sys_tai != (u_int)lsdata.tai_offs);
#endif
- lsprox = lsdata.proximity;
- sys_tai = lsdata.tai_offs;
+ lsprox = lsdata.proximity;
+ sys_tai = lsdata.tai_offs;
}
}
diff --git a/ntpd/ntpd-opts.c b/ntpd/ntpd-opts.c
index 660884b94b7b..f435a31af661 100644
--- a/ntpd/ntpd-opts.c
+++ b/ntpd/ntpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.c)
*
- * It has been AutoGen-ed January 7, 2016 at 11:28:29 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:15:45 AM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpd program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -75,8 +75,8 @@ extern FILE * option_usage_fp;
* static const strings for ntpd options
*/
static char const ntpd_opt_strs[3129] =
-/* 0 */ "ntpd 4.2.8p5\n"
- "Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
+/* 0 */ "ntpd 4.2.8p6\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"
"can be seen at:\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.8p5\n"
+/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p6\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.8p5";
+/* 3116 */ "ntpd 4.2.8p6";
/**
* ipv4 option description with
@@ -1529,8 +1529,8 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdOptions.pzCopyright */
- puts(_("ntpd 4.2.8p5\n\
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
+ puts(_("ntpd 4.2.8p6\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\
can be seen at:\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.8p5\n\
+ puts(_("ntpd - NTP daemon program - Ver. 4.2.8p6\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.8p5"));
+ puts(_("ntpd 4.2.8p6"));
/* referenced via ntpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/ntpd/ntpd-opts.h b/ntpd/ntpd-opts.h
index 571fd342568e..9427cac75a51 100644
--- a/ntpd/ntpd-opts.h
+++ b/ntpd/ntpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.h)
*
- * It has been AutoGen-ed January 7, 2016 at 11:28:28 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:15:43 AM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpd program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -106,9 +106,9 @@ typedef enum {
/** count of all options for ntpd */
#define OPTION_CT 38
/** ntpd version */
-#define NTPD_VERSION "4.2.8p5"
+#define NTPD_VERSION "4.2.8p6"
/** Full ntpd version text */
-#define NTPD_FULL_VERSION "ntpd 4.2.8p5"
+#define NTPD_FULL_VERSION "ntpd 4.2.8p6"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/ntpd/ntpd.1ntpdman b/ntpd/ntpd.1ntpdman
index 42d0caf54cbe..322d0bc441d9 100644
--- a/ntpd/ntpd.1ntpdman
+++ b/ntpd/ntpd.1ntpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd 1ntpdman "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpd 1ntpdman "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-KDaWJq/ag-WDaOIq)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9JaiRS/ag-jKaaQS)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:44 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:54 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -979,7 +979,7 @@ RFC5908
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The
diff --git a/ntpd/ntpd.1ntpdmdoc b/ntpd/ntpd.1ntpdmdoc
index dc06f58a952c..301d983596f3 100644
--- a/ntpd/ntpd.1ntpdmdoc
+++ b/ntpd/ntpd.1ntpdmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPD 1ntpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:12 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -886,7 +886,7 @@ A snapshot of this documentation is available in HTML format in
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The
diff --git a/ntpd/ntpd.c b/ntpd/ntpd.c
index 7630aee43bda..2c7f02ec5d6f 100644
--- a/ntpd/ntpd.c
+++ b/ntpd/ntpd.c
@@ -209,6 +209,11 @@ extern int syscall (int, ...);
#if !defined(SIM) && defined(SIGDIE1)
+static volatile int signalled = 0;
+static volatile int signo = 0;
+
+/* In an ideal world, 'finish_safe()' would declared as noreturn... */
+static void finish_safe (int);
static RETSIGTYPE finish (int);
#endif
@@ -298,11 +303,28 @@ my_pthread_warmup_worker(
static void
my_pthread_warmup(void)
{
- pthread_t thread;
- int rc;
+ pthread_t thread;
+ pthread_attr_t thr_attr;
+ int rc;
+
+ pthread_attr_init(&thr_attr);
+#if defined(HAVE_PTHREAD_ATTR_GETSTACKSIZE) && \
+ defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && \
+ defined(PTHREAD_STACK_MIN)
+ rc = pthread_attr_setstacksize(&thr_attr, PTHREAD_STACK_MIN);
+ if (0 != rc)
+ msyslog(LOG_ERR,
+ "my_pthread_warmup: pthread_attr_setstacksize() -> %s",
+ strerror(rc));
+#endif
rc = pthread_create(
- &thread, NULL, my_pthread_warmup_worker, NULL);
- if (0 == rc) {
+ &thread, &thr_attr, my_pthread_warmup_worker, NULL);
+ pthread_attr_destroy(&thr_attr);
+ if (0 != rc) {
+ msyslog(LOG_ERR,
+ "my_pthread_warmup: pthread_create() -> %s",
+ strerror(rc));
+ } else {
pthread_cancel(thread);
pthread_join(thread, NULL);
}
@@ -1204,6 +1226,10 @@ int scmp_sc[] = {
# ifdef HAVE_IO_COMPLETION_PORT
for (;;) {
+#if !defined(SIM) && defined(SIGDIE1)
+ if (signalled)
+ finish_safe(signo);
+#endif
GetReceivedBuffers();
# else /* normal I/O */
@@ -1211,11 +1237,19 @@ int scmp_sc[] = {
was_alarmed = FALSE;
for (;;) {
+#if !defined(SIM) && defined(SIGDIE1)
+ if (signalled)
+ finish_safe(signo);
+#endif
if (alarm_flag) { /* alarmed? */
was_alarmed = TRUE;
alarm_flag = FALSE;
}
+ /* collect async name/addr results */
+ if (!was_alarmed)
+ harvest_blocking_responses();
+
if (!was_alarmed && !has_full_recv_buffer()) {
/*
* Nothing to do. Wait for something.
@@ -1330,9 +1364,9 @@ int scmp_sc[] = {
/*
* finish - exit gracefully
*/
-static RETSIGTYPE
-finish(
- int sig
+static void
+finish_safe(
+ int sig
)
{
const char *sig_desc;
@@ -1353,6 +1387,16 @@ finish(
peer_cleanup();
exit(0);
}
+
+static RETSIGTYPE
+finish(
+ int sig
+ )
+{
+ signalled = 1;
+ signo = sig;
+}
+
#endif /* !SIM && SIGDIE1 */
diff --git a/ntpd/ntpd.html b/ntpd/ntpd.html
index ae3e17ce7a33..bdf58a1beee3 100644
--- a/ntpd/ntpd.html
+++ b/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.8p5 of <code>ntpd</code>.
+ <p>This document applies to version 4.2.8p6 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.8p4
+<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p5
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/ntpd/ntpd.man.in b/ntpd/ntpd.man.in
index 222f0b331000..4abcc57a623b 100644
--- a/ntpd/ntpd.man.in
+++ b/ntpd/ntpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd @NTPD_MS@ "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpd @NTPD_MS@ "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-KDaWJq/ag-WDaOIq)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9JaiRS/ag-jKaaQS)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:30:44 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:17:54 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -979,7 +979,7 @@ RFC5908
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The
diff --git a/ntpd/ntpd.mdoc.in b/ntpd/ntpd.mdoc.in
index e5be1ee03f2f..fcd5fc1d0d0b 100644
--- a/ntpd/ntpd.mdoc.in
+++ b/ntpd/ntpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPD @NTPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:12 AM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -886,7 +886,7 @@ A snapshot of this documentation is available in HTML format in
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The
diff --git a/ntpd/refclock_chu.c b/ntpd/refclock_chu.c
index 1f02a1c1f4a7..d745c816768d 100644
--- a/ntpd/refclock_chu.c
+++ b/ntpd/refclock_chu.c
@@ -1264,7 +1264,7 @@ chu_a(
offset = up->charstamp;
else if (k > 0)
i = 1;
- for (; i < nchar && i < k + 10; i++) {
+ for (; i < nchar && (i - 10) < k; i++) {
up->tstamp[up->ntstamp] = up->cstamp[i];
L_SUB(&up->tstamp[up->ntstamp], &offset);
L_ADD(&offset, &up->charstamp);
diff --git a/ntpd/refclock_gpsdjson.c b/ntpd/refclock_gpsdjson.c
index c2bf09a805e8..24a15e7f62aa 100644
--- a/ntpd/refclock_gpsdjson.c
+++ b/ntpd/refclock_gpsdjson.c
@@ -377,17 +377,6 @@ static int16_t clamped_precision(int rawprec);
* local / static stuff
*/
-/* The logon string is actually the ?WATCH command of GPSD, using JSON
- * data and selecting the GPS device name we created from our unit
- * number. We have an old a newer version that request PPS (and TOFF)
- * transmission.
- * Note: These are actually format strings!
- */
-static const char * const s_req_watch[2] = {
- "?WATCH={\"device\":\"%s\",\"enable\":true,\"json\":true};\r\n",
- "?WATCH={\"device\":\"%s\",\"enable\":true,\"json\":true,\"pps\":true};\r\n"
-};
-
static const char * const s_req_version =
"?VERSION;\r\n";
@@ -1147,7 +1136,7 @@ json_token_skip(
const json_ctx * ctx,
tok_ref tid)
{
- if (tid >= 0 && tid < ctx->ntok) {
+ if (tid >= 0 && (u_int)tid < ctx->ntok) {
int len = ctx->tok[tid].size;
/* For arrays and objects, the size is the number of
* ITEMS in the compound. Thats the number of objects in
@@ -1172,7 +1161,10 @@ json_token_skip(
++tid;
break;
}
- if (tid > ctx->ntok) /* Impossible? Paranoia rulez. */
+ /* The next condition should never be true, but paranoia
+ * prevails...
+ */
+ if (tid < 0 || (u_int)tid > ctx->ntok)
tid = ctx->ntok;
}
return tid;
@@ -1200,7 +1192,7 @@ json_object_lookup(
tid = json_token_skip(ctx, tid); /* skip val */
} else if (strcmp(key, ctx->buf + ctx->tok[tid].start)) {
tid = json_token_skip(ctx, tid+1); /* skip key+val */
- } else if (what < 0 || what == ctx->tok[tid+1].type) {
+ } else if (what < 0 || (u_int)what == ctx->tok[tid+1].type) {
return tid + 1;
} else {
break;
@@ -1513,8 +1505,14 @@ process_version(
if (up->fl_watch)
return;
+ /* The logon string is actually the ?WATCH command of GPSD,
+ * using JSON data and selecting the GPS device name we created
+ * from our unit number. We have an old a newer version that
+ * request PPS (and TOFF) transmission.
+ */
snprintf(up->buffer, sizeof(up->buffer),
- s_req_watch[up->pf_toff != 0], up->device);
+ "?WATCH={\"device\":\"%s\",\"enable\":true,\"json\":true%s};\r\n",
+ up->device, (up->pf_toff ? ",\"pps\":true" : ""));
buf = up->buffer;
len = strlen(buf);
log_data(peer, "send", buf, len);
diff --git a/ntpd/refclock_jjy.c b/ntpd/refclock_jjy.c
index fef829ca071b..fc51fd9ee4b5 100644
--- a/ntpd/refclock_jjy.c
+++ b/ntpd/refclock_jjy.c
@@ -149,8 +149,8 @@
*/
struct jjyRawDataBreak {
- char *pString ;
- int iLength ;
+ const char * pString ;
+ int iLength ;
} ;
#define MAX_TIMESTAMP 6
@@ -627,7 +627,7 @@ jjy_receive ( struct recvbuf *rbufp )
#ifdef DEBUG
printf( "\nrefclock_jjy.c : %s : Len=%d ", sFunctionName, pp->lencode ) ;
for ( i = 0 ; i < pp->lencode ; i ++ ) {
- if ( iscntrl( pp->a_lastcode[i] & 0x7F ) ) {
+ if ( iscntrl( (u_char)(pp->a_lastcode[i] & 0x7F) ) ) {
printf( "<x%02X>", pp->a_lastcode[i] & 0xFF ) ;
} else {
printf( "%c", pp->a_lastcode[i] ) ;
@@ -702,7 +702,7 @@ jjy_receive ( struct recvbuf *rbufp )
up->iLineBufLen ++ ;
/* Copy printable characters */
- if ( ! iscntrl( up->sRawBuf[i] ) ) {
+ if ( ! iscntrl( (u_char)up->sRawBuf[i] ) ) {
up->sTextBuf[up->iTextBufLen] = up->sRawBuf[i] ;
up->iTextBufLen ++ ;
}
@@ -1154,12 +1154,13 @@ jjy_receive_tristate_jjy01 ( struct recvbuf *rbufp )
struct refclockproc *pp ;
struct peer *peer;
- char *pBuf, sLog [ 100 ] ;
- int iLen ;
- int rc ;
+ char * pBuf ;
+ char sLog [ 100 ] ;
+ int iLen ;
+ int rc ;
- const char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
/* Initialize pointers */
@@ -1359,8 +1360,8 @@ jjy_poll_tristate_jjy01 ( int unit, struct peer *peer )
struct refclockproc *pp ;
struct jjyunit *up ;
- const char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
pp = peer->procptr;
up = pp->unitptr ;
@@ -2010,12 +2011,13 @@ jjy_receive_tristate_gpsclock01 ( struct recvbuf *rbufp )
struct refclockproc *pp ;
struct peer *peer;
- char *pBuf, sLog [ 100 ] ;
- int iLen ;
- int rc ;
+ char * pBuf ;
+ char sLog [ 100 ] ;
+ int iLen ;
+ int rc ;
- const char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
/* Initialize pointers */
@@ -2239,8 +2241,8 @@ jjy_poll_tristate_gpsclock01 ( int unit, struct peer *peer )
struct refclockproc *pp ;
struct jjyunit *up ;
- const char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
pp = peer->procptr ;
up = pp->unitptr ;
@@ -2576,7 +2578,7 @@ static int teljjy_bye_ignore ( struct peer *peer, struct refclockproc *, struct
static int teljjy_bye_disc ( struct peer *peer, struct refclockproc *, struct jjyunit * ) ;
static int teljjy_bye_modem ( struct peer *peer, struct refclockproc *, struct jjyunit * ) ;
-static int ( *pTeljjyHandler [ ] [ 5 ] ) ( ) =
+static int ( *pTeljjyHandler [ ] [ 5 ] ) ( struct peer *, struct refclockproc *, struct jjyunit *) =
{ /*STATE_IDLE STATE_DAILOUT STATE_LOGIN STATE_CONNECT STATE_BYE */
/* NULL */ { teljjy_idle_ignore , teljjy_dial_ignore, teljjy_login_ignore, teljjy_conn_ignore, teljjy_bye_ignore },
/* START */ { teljjy_idle_dialout, teljjy_dial_ignore, teljjy_login_ignore, teljjy_conn_ignore, teljjy_bye_ignore },
@@ -2715,12 +2717,12 @@ jjy_start_telephone ( int unit, struct peer *peer, struct jjyunit *up )
iNumberOfDigitsOfPhoneNumber = iCommaCount = iCommaPosition = iFirstThreeDigitsCount = 0 ;
for ( i = 0 ; i < strlen( sys_phone[0] ) ; i ++ ) {
- if ( isdigit( *(sys_phone[0]+i) ) ) {
+ if ( isdigit( (u_char)sys_phone[0][i] ) ) {
if ( iFirstThreeDigitsCount < sizeof(sFirstThreeDigits)-1 ) {
- sFirstThreeDigits[iFirstThreeDigitsCount++] = *(sys_phone[0]+i) ;
+ sFirstThreeDigits[iFirstThreeDigitsCount++] = sys_phone[0][i] ;
}
iNumberOfDigitsOfPhoneNumber ++ ;
- } else if ( *(sys_phone[0]+i) == ',' ) {
+ } else if ( sys_phone[0][i] == ',' ) {
iCommaCount ++ ;
if ( iCommaCount > 1 ) {
msyslog( LOG_ERR, "refclock_jjy.c : jjy_start_telephone : phone in the ntpd.conf should be zero or one comma." ) ;
@@ -2729,7 +2731,7 @@ jjy_start_telephone ( int unit, struct peer *peer, struct jjyunit *up )
}
iFirstThreeDigitsCount = 0 ;
iCommaPosition = i ;
- } else if ( *(sys_phone[0]+i) != '-' ) {
+ } else if ( sys_phone[0][i] != '-' ) {
msyslog( LOG_ERR, "refclock_jjy.c : jjy_start_telephone : phone in the ntpd.conf should be a number or a hyphen." ) ;
up->bInitError = TRUE ;
return 1 ;
@@ -3213,8 +3215,8 @@ static int
teljjy_login_login ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
DEBUG_TELJJY_PRINTF( "teljjy_login_login" ) ;
@@ -3290,8 +3292,8 @@ static int
teljjy_conn_send ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- const char *pCmd ;
- int i, iLen, iNextClockState ;
+ const char * pCmd ;
+ int i, iLen, iNextClockState ;
DEBUG_TELJJY_PRINTF( "teljjy_conn_send" ) ;
@@ -3527,7 +3529,7 @@ static int
teljjy_conn_silent ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- const char *pCmd ;
+ const char * pCmd ;
DEBUG_TELJJY_PRINTF( "teljjy_conn_silent" ) ;
@@ -3665,7 +3667,7 @@ static int modem_esc_data ( struct peer *, struct refclockproc *, struct jjyu
static int modem_esc_silent ( struct peer *, struct refclockproc *, struct jjyunit * ) ;
static int modem_esc_disc ( struct peer *, struct refclockproc *, struct jjyunit * ) ;
-static int ( *pModemHandler [ ] [ 5 ] ) ( ) =
+static int ( *pModemHandler [ ] [ 5 ] ) ( struct peer *, struct refclockproc *, struct jjyunit * ) =
{ /*STATE_DISCONNECT STATE_INITIALIZE STATE_DAILING STATE_CONNECT STATE_ESCAPE */
/* NULL */ { modem_disc_ignore, modem_init_ignore, modem_dial_ignore , modem_conn_ignore, modem_esc_ignore },
/* INITIALIZE */ { modem_disc_init , modem_init_start , modem_dial_ignore , modem_conn_ignore, modem_esc_ignore },
@@ -3993,10 +3995,11 @@ static int
modem_init_resp00 ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- char *pCmd, cBuf [ 46 ] ;
- int iCmdLen ;
- int iErrorCorrection, iSpeakerSwitch, iSpeakerVolume ;
- int iNextModemState = STAY_MODEM_STATE ;
+ const char * pCmd ;
+ char cBuf [ 46 ] ;
+ int iCmdLen ;
+ int iErrorCorrection, iSpeakerSwitch, iSpeakerVolume ;
+ int iNextModemState = STAY_MODEM_STATE ;
DEBUG_MODEM_PRINTF( "modem_init_resp00" ) ;
@@ -4031,7 +4034,7 @@ modem_init_resp00 ( struct peer *peer, struct refclockproc *pp, struct jjyunit *
}
pCmd = cBuf ;
- snprintf( pCmd, sizeof(cBuf), "ATM%dL%d\r\n", iSpeakerSwitch, iSpeakerVolume ) ;
+ snprintf( cBuf, sizeof(cBuf), "ATM%dL%d\r\n", iSpeakerSwitch, iSpeakerVolume ) ;
break ;
case 3 :
@@ -4060,7 +4063,7 @@ modem_init_resp00 ( struct peer *peer, struct refclockproc *pp, struct jjyunit *
}
pCmd = cBuf ;
- snprintf( pCmd, sizeof(cBuf), "AT\\N%d\r\n", iErrorCorrection ) ;
+ snprintf( cBuf, sizeof(cBuf), "AT\\N%d\r\n", iErrorCorrection ) ;
break ;
case 7 :
@@ -4251,8 +4254,8 @@ static int
modem_esc_escape ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
DEBUG_MODEM_PRINTF( "modem_esc_escape" ) ;
@@ -4317,8 +4320,8 @@ static int
modem_esc_disc ( struct peer *peer, struct refclockproc *pp, struct jjyunit *up )
{
- char *pCmd ;
- int iCmdLen ;
+ const char * pCmd ;
+ int iCmdLen ;
DEBUG_MODEM_PRINTF( "modem_esc_disc" ) ;
@@ -4349,9 +4352,9 @@ static void
jjy_write_clockstats ( struct peer *peer, int iMark, const char *pData )
{
- char sLog [ 100 ] ;
- char *pMark ;
- int iMarkLen, iDataLen ;
+ char sLog [ 100 ] ;
+ const char * pMark ;
+ int iMarkLen, iDataLen ;
switch ( iMark ) {
case JJY_CLOCKSTATS_MARK_JJY :
diff --git a/ntpd/refclock_shm.c b/ntpd/refclock_shm.c
index f3e7f519ddc8..f031a395cb99 100644
--- a/ntpd/refclock_shm.c
+++ b/ntpd/refclock_shm.c
@@ -600,7 +600,7 @@ shm_timer(
cd.year, cd.month, cd.monthday,
cd.hour, cd.minute, cd.second,
(long)shm_stat.tvt.tv_nsec);
- pp->lencode = (c < sizeof(pp->a_lastcode)) ? c : 0;
+ pp->lencode = (c > 0 && (size_t)c < sizeof(pp->a_lastcode)) ? c : 0;
/* check 1: age control of local time stamp */
tt = shm_stat.tvc.tv_sec - shm_stat.tvr.tv_sec;
diff --git a/ntpdc/invoke-ntpdc.texi b/ntpdc/invoke-ntpdc.texi
index f8283de0a966..a2f440acbc2f 100644
--- a/ntpdc/invoke-ntpdc.texi
+++ b/ntpdc/invoke-ntpdc.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpdc.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:31:26 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:18:37 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.8p5
+ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p6
Usage: ntpdc [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/ntpdc/ntpdc-opts.c b/ntpdc/ntpdc-opts.c
index da89ee2fbcd7..568a97ab6902 100644
--- a/ntpdc/ntpdc-opts.c
+++ b/ntpdc/ntpdc-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.c)
*
- * It has been AutoGen-ed January 7, 2016 at 11:31:12 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:18:22 AM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpdc program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -69,8 +69,8 @@ extern FILE * option_usage_fp;
* static const strings for ntpdc options
*/
static char const ntpdc_opt_strs[1911] =
-/* 0 */ "ntpdc 4.2.8p5\n"
- "Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
+/* 0 */ "ntpdc 4.2.8p6\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"
"can be seen at:\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.8p5\n"
+/* 1716 */ "ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p6\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.8p5";
+/* 1897 */ "ntpdc 4.2.8p6";
/**
* ipv4 option description with
@@ -796,8 +796,8 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdcOptions.pzCopyright */
- puts(_("ntpdc 4.2.8p5\n\
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
+ puts(_("ntpdc 4.2.8p6\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\
can be seen at:\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.8p5\n\
+ puts(_("ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p6\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpdcOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpdcOptions.pzFullVersion */
- puts(_("ntpdc 4.2.8p5"));
+ puts(_("ntpdc 4.2.8p6"));
/* referenced via ntpdcOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/ntpdc/ntpdc-opts.h b/ntpdc/ntpdc-opts.h
index d3326a7593b1..a022a7237ecf 100644
--- a/ntpdc/ntpdc-opts.h
+++ b/ntpdc/ntpdc-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.h)
*
- * It has been AutoGen-ed January 7, 2016 at 11:31:11 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:18:21 AM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpdc program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -83,9 +83,9 @@ typedef enum {
/** count of all options for ntpdc */
#define OPTION_CT 15
/** ntpdc version */
-#define NTPDC_VERSION "4.2.8p5"
+#define NTPDC_VERSION "4.2.8p6"
/** Full ntpdc version text */
-#define NTPDC_FULL_VERSION "ntpdc 4.2.8p5"
+#define NTPDC_FULL_VERSION "ntpdc 4.2.8p6"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/ntpdc/ntpdc.1ntpdcman b/ntpdc/ntpdc.1ntpdcman
index 3e788969be90..e764a1150e95 100644
--- a/ntpdc/ntpdc.1ntpdcman
+++ b/ntpdc/ntpdc.1ntpdcman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc 1ntpdcman "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpdc 1ntpdcman "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-EXaGzs/ag-QXayys)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-n4aaHU/ag-A4a4FU)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:22 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:33 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -848,7 +848,7 @@ RFC1305
.SH AUTHORS
The formatting directives in this document came from FreeBSD.
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The
diff --git a/ntpdc/ntpdc.1ntpdcmdoc b/ntpdc/ntpdc.1ntpdcmdoc
index df53d8929930..b3e58950765f 100644
--- a/ntpdc/ntpdc.1ntpdcmdoc
+++ b/ntpdc/ntpdc.1ntpdcmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPDC 1ntpdcmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:29 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:39 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -787,7 +787,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh AUTHORS
The formatting directives in this document came from FreeBSD.
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The
diff --git a/ntpdc/ntpdc.c b/ntpdc/ntpdc.c
index bef9ca365cb3..8a79d0b50e19 100644
--- a/ntpdc/ntpdc.c
+++ b/ntpdc/ntpdc.c
@@ -605,7 +605,11 @@ getresponse(
int seq;
fd_set fds;
ssize_t n;
- size_t pad;
+ int pad;
+ /* absolute timeout checks. Not 'time_t' by intention! */
+ uint32_t tobase; /* base value for timeout */
+ uint32_t tospan; /* timeout span (max delay) */
+ uint32_t todiff; /* current delay */
/*
* This is pretty tricky. We may get between 1 and many packets
@@ -622,12 +626,14 @@ getresponse(
lastseq = 999; /* too big to be a sequence number */
ZERO(haveseq);
FD_ZERO(&fds);
+ tobase = (uint32_t)time(NULL);
again:
if (firstpkt)
tvo = tvout;
else
tvo = tvsout;
+ tospan = (uint32_t)tvo.tv_sec + (tvo.tv_usec != 0);
FD_SET(sockfd, &fds);
n = select(sockfd+1, &fds, NULL, NULL, &tvo);
@@ -635,6 +641,17 @@ getresponse(
warning("select fails");
return -1;
}
+
+ /*
+ * Check if this is already too late. Trash the data and fake a
+ * timeout if this is so.
+ */
+ todiff = (((uint32_t)time(NULL)) - tobase) & 0x7FFFFFFFu;
+ if ((n > 0) && (todiff > tospan)) {
+ n = recv(sockfd, (char *)&rpkt, sizeof(rpkt), 0);
+ n = 0; /* faked timeout return from 'select()'*/
+ }
+
if (n == 0) {
/*
* Timed out. Return what we have
@@ -780,8 +797,10 @@ getresponse(
}
/*
- * So far, so good. Copy this data into the output array.
+ * So far, so good. Copy this data into the output array. Bump
+ * the timeout base, in case we expect more data.
*/
+ tobase = (uint32_t)time(NULL);
if ((datap + datasize + (pad * items)) > (pktdata + pktdatasize)) {
size_t offset = datap - pktdata;
growpktdata();
diff --git a/ntpdc/ntpdc.html b/ntpdc/ntpdc.html
index 107af9b22b88..ce73039e1e91 100644
--- a/ntpdc/ntpdc.html
+++ b/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.8p5 of <code>ntpdc</code>.
+ <p>This document applies to version 4.2.8p6 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.8p5
+<pre class="example">ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p6
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/ntpdc/ntpdc.man.in b/ntpdc/ntpdc.man.in
index 666243822952..d7e25faf886d 100644
--- a/ntpdc/ntpdc.man.in
+++ b/ntpdc/ntpdc.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc @NTPDC_MS@ "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpdc @NTPDC_MS@ "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-EXaGzs/ag-QXayys)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-n4aaHU/ag-A4a4FU)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:22 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:33 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -848,7 +848,7 @@ RFC1305
.SH AUTHORS
The formatting directives in this document came from FreeBSD.
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH BUGS
The
diff --git a/ntpdc/ntpdc.mdoc.in b/ntpdc/ntpdc.mdoc.in
index 2e2fd3124d0a..4dd9e1560123 100644
--- a/ntpdc/ntpdc.mdoc.in
+++ b/ntpdc/ntpdc.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPDC @NTPDC_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:29 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:18:39 AM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -787,7 +787,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh AUTHORS
The formatting directives in this document came from FreeBSD.
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh BUGS
The
diff --git a/ntpq/invoke-ntpq.texi b/ntpq/invoke-ntpq.texi
index b01127c0191b..bcd1df4ecf31 100644
--- a/ntpq/invoke-ntpq.texi
+++ b/ntpq/invoke-ntpq.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpq.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:32:00 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:19:10 AM by AutoGen 5.18.5
# From the definitions ntpq-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -847,7 +847,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpq - standard NTP query program - Ver. 4.2.8p5
+ntpq - standard NTP query program - Ver. 4.2.8p6
Usage: ntpq [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/ntpq/ntpq-opts.c b/ntpq/ntpq-opts.c
index 69f4881526a4..42131a339009 100644
--- a/ntpq/ntpq-opts.c
+++ b/ntpq/ntpq-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.c)
*
- * It has been AutoGen-ed January 7, 2016 at 11:31:32 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:18:42 AM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpq program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -69,8 +69,8 @@ extern FILE * option_usage_fp;
* static const strings for ntpq options
*/
static char const ntpq_opt_strs[1925] =
-/* 0 */ "ntpq 4.2.8p5\n"
- "Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
+/* 0 */ "ntpq 4.2.8p6\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"
"can be seen at:\n"
@@ -129,13 +129,13 @@ static char const ntpq_opt_strs[1925] =
/* 1723 */ "no-load-opts\0"
/* 1736 */ "no\0"
/* 1739 */ "NTPQ\0"
-/* 1744 */ "ntpq - standard NTP query program - Ver. 4.2.8p5\n"
+/* 1744 */ "ntpq - standard NTP query program - Ver. 4.2.8p6\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n\0"
/* 1863 */ "$HOME\0"
/* 1869 */ ".\0"
/* 1871 */ ".ntprc\0"
/* 1878 */ "http://bugs.ntp.org, bugs@ntp.org\0"
-/* 1912 */ "ntpq 4.2.8p5";
+/* 1912 */ "ntpq 4.2.8p6";
/**
* ipv4 option description with
@@ -786,8 +786,8 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpqOptions.pzCopyright */
- puts(_("ntpq 4.2.8p5\n\
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
+ puts(_("ntpq 4.2.8p6\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\
can be seen at:\n"));
@@ -852,11 +852,11 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpqOptions.pzUsageTitle */
- puts(_("ntpq - standard NTP query program - Ver. 4.2.8p5\n\
+ puts(_("ntpq - standard NTP query program - Ver. 4.2.8p6\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpqOptions.pzFullVersion */
- puts(_("ntpq 4.2.8p5"));
+ puts(_("ntpq 4.2.8p6"));
/* referenced via ntpqOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/ntpq/ntpq-opts.h b/ntpq/ntpq-opts.h
index 758817fb7a5b..af7a4c2c6e82 100644
--- a/ntpq/ntpq-opts.h
+++ b/ntpq/ntpq-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.h)
*
- * It has been AutoGen-ed January 7, 2016 at 11:31:32 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:18:42 AM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpq program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -83,9 +83,9 @@ typedef enum {
/** count of all options for ntpq */
#define OPTION_CT 15
/** ntpq version */
-#define NTPQ_VERSION "4.2.8p5"
+#define NTPQ_VERSION "4.2.8p6"
/** Full ntpq version text */
-#define NTPQ_FULL_VERSION "ntpq 4.2.8p5"
+#define NTPQ_FULL_VERSION "ntpq 4.2.8p6"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/ntpq/ntpq-subs.c b/ntpq/ntpq-subs.c
index 438c7ca58a65..8e7047776cf8 100644
--- a/ntpq/ntpq-subs.c
+++ b/ntpq/ntpq-subs.c
@@ -2861,7 +2861,7 @@ collect_mru_list(
ri, sptoa(&recent->addr), ri,
recent->last.l_ui, recent->last.l_uf);
chars = strlen(buf);
- if (REQ_ROOM <= chars)
+ if ((size_t)REQ_ROOM <= chars)
break;
memcpy(req, buf, chars + 1);
req += chars;
@@ -3173,6 +3173,7 @@ mrulist(
qsort(sorted, mru_count, sizeof(sorted[0]),
mru_qcmp_table[order]);
+ mrulist_interrupted = FALSE;
printf( "lstint avgint rstr r m v count rport remote address\n"
"==============================================================================\n");
/* '=' x 78 */
@@ -3199,6 +3200,11 @@ mrulist(
nntohost(&recent->addr));
if (showhostnames)
fflush(fp);
+ if (mrulist_interrupted) {
+ fputs("\n --interrupted--\n", fp);
+ fflush(fp);
+ break;
+ }
}
fflush(fp);
if (debug) {
diff --git a/ntpq/ntpq.1ntpqman b/ntpq/ntpq.1ntpqman
index 1c260763656c..b96d1068b010 100644
--- a/ntpq/ntpq.1ntpqman
+++ b/ntpq/ntpq.1ntpqman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq 1ntpqman "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpq 1ntpqman "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4VaaKt/ag-eWa4It)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Z7aWRV/ag-_7aOQV)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:55 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:06 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -1412,7 +1412,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpq/ntpq.1ntpqmdoc b/ntpq/ntpq.1ntpqmdoc
index bf8d10116ded..d4da8d761d1f 100644
--- a/ntpq/ntpq.1ntpqmdoc
+++ b/ntpq/ntpq.1ntpqmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPQ 1ntpqmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:12 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -955,7 +955,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpq/ntpq.c b/ntpq/ntpq.c
index 5b3c9cb807b7..1dcaeb794822 100644
--- a/ntpq/ntpq.c
+++ b/ntpq/ntpq.c
@@ -218,7 +218,7 @@ static void outputarr (FILE *, char *, int, l_fp *);
static int assoccmp (const void *, const void *);
static void on_ctrlc (void);
u_short varfmt (const char *);
-
+static int my_easprintf (char**, const char *, ...) NTP_PRINTF(2, 3);
void ntpq_custom_opt_handler (tOptions *, tOptDesc *);
#ifdef OPENSSL
@@ -472,7 +472,7 @@ ntpqmain(
{
char *list;
- char *msg, *fmt;
+ char *msg;
list = list_digest_names();
for (icmd = 0; icmd < sizeof(builtins)/sizeof(builtins[0]); icmd++) {
@@ -486,13 +486,15 @@ ntpqmain(
#ifdef OPENSSL
builtins[icmd].desc[0] = "digest-name";
- fmt = "set key type to use for authenticated requests, one of:%s";
+ my_easprintf(&msg,
+ "set key type to use for authenticated requests, one of:%s",
+ list);
#else
builtins[icmd].desc[0] = "md5";
- fmt = "set key type to use for authenticated requests (%s)";
+ my_easprintf(&msg,
+ "set key type to use for authenticated requests (%s)",
+ list);
#endif
- msg = emalloc(strlen(fmt) + strlen(list) - strlen("%s") +1);
- sprintf(msg, fmt, list);
builtins[icmd].comment = msg;
free(list);
}
@@ -844,6 +846,10 @@ getresponse(
fd_set fds;
int n;
int errcode;
+ /* absolute timeout checks. Not 'time_t' by intention! */
+ uint32_t tobase; /* base value for timeout */
+ uint32_t tospan; /* timeout span (max delay) */
+ uint32_t todiff; /* current delay */
/*
* This is pretty tricky. We may get between 1 and MAXFRAG packets
@@ -860,6 +866,8 @@ getresponse(
numfrags = 0;
seenlastfrag = 0;
+ tobase = (uint32_t)time(NULL);
+
FD_ZERO(&fds);
/*
@@ -872,13 +880,40 @@ getresponse(
tvo = tvout;
else
tvo = tvsout;
+ tospan = (uint32_t)tvo.tv_sec + (tvo.tv_usec != 0);
FD_SET(sockfd, &fds);
n = select(sockfd+1, &fds, NULL, NULL, &tvo);
if (n == -1) {
+#if !defined(SYS_WINNT) && defined(EINTR)
+ /* Windows does not know about EINTR (until very
+ * recently) and the handling of console events
+ * is *very* different from POSIX/UNIX signal
+ * handling anyway.
+ *
+ * Under non-windows targets we map EINTR as
+ * 'last packet was received' and try to exit
+ * the receive sequence.
+ */
+ if (errno == EINTR) {
+ seenlastfrag = 1;
+ goto maybe_final;
+ }
+#endif
warning("select fails");
return -1;
}
+
+ /*
+ * Check if this is already too late. Trash the data and
+ * fake a timeout if this is so.
+ */
+ todiff = (((uint32_t)time(NULL)) - tobase) & 0x7FFFFFFFu;
+ if ((n > 0) && (todiff > tospan)) {
+ n = recv(sockfd, (char *)&rpkt, sizeof(rpkt), 0);
+ n = 0; /* faked timeout return from 'select()'*/
+ }
+
if (n == 0) {
/*
* Timed out. Return what we have
@@ -1141,14 +1176,17 @@ getresponse(
}
/*
- * Copy the data into the data buffer.
+ * Copy the data into the data buffer, and bump the
+ * timout base in case we need more.
*/
memcpy((char *)pktdata + offset, &rpkt.u, count);
-
+ tobase = (uint32_t)time(NULL);
+
/*
* If we've seen the last fragment, look for holes in the sequence.
* If there aren't any, we're done.
*/
+ maybe_final:
if (seenlastfrag && offsets[0] == 0) {
for (f = 1; f < numfrags; f++)
if (offsets[f-1] + counts[f-1] !=
@@ -2954,6 +2992,8 @@ nextvar(
len = srclen;
while (len > 0 && isspace((unsigned char)cp[len - 1]))
len--;
+ if (len >= sizeof(name))
+ return 0;
if (len > 0)
memcpy(name, cp, len);
name[len] = '\0';
@@ -3615,3 +3655,41 @@ on_ctrlc(void)
if ((*ctrlc_stack[--size])())
break;
}
+
+static int
+my_easprintf(
+ char ** ppinto,
+ const char * fmt ,
+ ...
+ )
+{
+ va_list va;
+ int prc;
+ size_t len = 128;
+ char * buf = emalloc(len);
+
+ again:
+ /* Note: we expect the memory allocation to fail long before the
+ * increment in buffer size actually overflows.
+ */
+ buf = (buf) ? erealloc(buf, len) : emalloc(len);
+
+ va_start(va, fmt);
+ prc = vsnprintf(buf, len, fmt, va);
+ va_end(va);
+
+ if (prc < 0) {
+ /* might be very old vsnprintf. Or actually MSVC... */
+ len += len >> 1;
+ goto again;
+ }
+ if ((size_t)prc >= len) {
+ /* at least we have the proper size now... */
+ len = (size_t)prc + 1;
+ goto again;
+ }
+ if ((size_t)prc < (len - 32))
+ buf = erealloc(buf, (size_t)prc + 1);
+ *ppinto = buf;
+ return prc;
+}
diff --git a/ntpq/ntpq.html b/ntpq/ntpq.html
index 16f2597050f4..96df83deba41 100644
--- a/ntpq/ntpq.html
+++ b/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.8p5 of <code>ntpq</code>.
+ <p>This document applies to version 4.2.8p6 of <code>ntpq</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpq-Description">ntpq Description</a>
@@ -769,7 +769,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.8p4
+<pre class="example">ntpq - standard NTP query program - Ver. 4.2.8p5
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/ntpq/ntpq.man.in b/ntpq/ntpq.man.in
index 17ccb1c7a9f9..abe26085e190 100644
--- a/ntpq/ntpq.man.in
+++ b/ntpq/ntpq.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq @NTPQ_MS@ "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpq @NTPQ_MS@ "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4VaaKt/ag-eWa4It)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Z7aWRV/ag-_7aOQV)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:31:55 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:06 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -1412,7 +1412,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.SH "AUTHORS"
The University of Delaware and Network Time Foundation
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpq/ntpq.mdoc.in b/ntpq/ntpq.mdoc.in
index 9214a6669305..d71c508ae1e8 100644
--- a/ntpq/ntpq.mdoc.in
+++ b/ntpq/ntpq.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPQ @NTPQ_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:12 AM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -955,7 +955,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh "AUTHORS"
The University of Delaware and Network Time Foundation
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpsnmpd/invoke-ntpsnmpd.texi b/ntpsnmpd/invoke-ntpsnmpd.texi
index 1185316e2b17..fcbc23e25edd 100644
--- a/ntpsnmpd/invoke-ntpsnmpd.texi
+++ b/ntpsnmpd/invoke-ntpsnmpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsnmpd.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:32:15 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:19:26 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.8p5
+ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p6
Usage: ntpsnmpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
Flg Arg Option-Name Description
-n no nofork Do not fork
diff --git a/ntpsnmpd/ntpsnmpd-opts.c b/ntpsnmpd/ntpsnmpd-opts.c
index cb48b16e54f2..772f364032e2 100644
--- a/ntpsnmpd/ntpsnmpd-opts.c
+++ b/ntpsnmpd/ntpsnmpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.c)
*
- * It has been AutoGen-ed January 7, 2016 at 11:32:05 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:19:15 AM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpsnmpd program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -61,8 +61,8 @@ extern FILE * option_usage_fp;
* static const strings for ntpsnmpd options
*/
static char const ntpsnmpd_opt_strs[1610] =
-/* 0 */ "ntpsnmpd 4.2.8p5\n"
- "Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
+/* 0 */ "ntpsnmpd 4.2.8p6\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"
"can be seen at:\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.8p5\n"
+/* 1439 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p6\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.8p5";
+/* 1593 */ "ntpsnmpd 4.2.8p6";
/**
* nofork option description:
@@ -554,8 +554,8 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpsnmpdOptions.pzCopyright */
- puts(_("ntpsnmpd 4.2.8p5\n\
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
+ puts(_("ntpsnmpd 4.2.8p6\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\
can be seen at:\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.8p5\n\
+ puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p6\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
/* referenced via ntpsnmpdOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpsnmpdOptions.pzFullVersion */
- puts(_("ntpsnmpd 4.2.8p5"));
+ puts(_("ntpsnmpd 4.2.8p6"));
/* referenced via ntpsnmpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/ntpsnmpd/ntpsnmpd-opts.h b/ntpsnmpd/ntpsnmpd-opts.h
index 8146eb9f8a13..de27f4b7706f 100644
--- a/ntpsnmpd/ntpsnmpd-opts.h
+++ b/ntpsnmpd/ntpsnmpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.h)
*
- * It has been AutoGen-ed January 7, 2016 at 11:32:04 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:19:14 AM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The ntpsnmpd program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -76,9 +76,9 @@ typedef enum {
/** count of all options for ntpsnmpd */
#define OPTION_CT 8
/** ntpsnmpd version */
-#define NTPSNMPD_VERSION "4.2.8p5"
+#define NTPSNMPD_VERSION "4.2.8p6"
/** Full ntpsnmpd version text */
-#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p5"
+#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p6"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/ntpsnmpd/ntpsnmpd.1ntpsnmpdman b/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
index e7fc2ebfcae2..d36ca07c7744 100644
--- a/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
+++ b/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd 1ntpsnmpdman "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpsnmpd 1ntpsnmpdman "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-dZaaSu/ag-qZa4Qu)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-FaaWZW/ag-SaaOYW)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:12 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:22 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -138,7 +138,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.NOP "Heiko Gerstung"
.br
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc b/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
index ba8d82aa129e..6b513dc1d174 100644
--- a/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
+++ b/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPSNMPD 1ntpsnmpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:28 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -110,7 +110,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh AUTHORS
.An "Heiko Gerstung"
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpsnmpd/ntpsnmpd.html b/ntpsnmpd/ntpsnmpd.html
index 94df0561c0fb..9bd75b9bdec8 100644
--- a/ntpsnmpd/ntpsnmpd.html
+++ b/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.8p5 of <code>ntpsnmpd</code>.
+ <p>This document applies to version 4.2.8p6 of <code>ntpsnmpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpsnmpd-Description">ntpsnmpd Description</a>: Description
diff --git a/ntpsnmpd/ntpsnmpd.man.in b/ntpsnmpd/ntpsnmpd.man.in
index b5fe93d2152b..3dbade2f12b2 100644
--- a/ntpsnmpd/ntpsnmpd.man.in
+++ b/ntpsnmpd/ntpsnmpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd @NTPSNMPD_MS@ "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH ntpsnmpd @NTPSNMPD_MS@ "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-dZaaSu/ag-qZa4Qu)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-FaaWZW/ag-SaaOYW)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:12 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:22 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -138,7 +138,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.NOP "Heiko Gerstung"
.br
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/ntpsnmpd/ntpsnmpd.mdoc.in b/ntpsnmpd/ntpsnmpd.mdoc.in
index 9349c2fba71e..11ab18441be7 100644
--- a/ntpsnmpd/ntpsnmpd.mdoc.in
+++ b/ntpsnmpd/ntpsnmpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPSNMPD @NTPSNMPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:32:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:19:28 AM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -110,7 +110,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.Sh AUTHORS
.An "Heiko Gerstung"
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/packageinfo.sh b/packageinfo.sh
index 9b941982fbd9..1835576acb5c 100644
--- a/packageinfo.sh
+++ b/packageinfo.sh
@@ -83,7 +83,7 @@ CLTAG=NTP_4_2_0
# - Numeric values increment
# - empty 'increments' to 1
# - NEW 'increments' to empty
-point=5
+point=6
### betapoint is normally modified by script.
# ntp-stable Beta number (betapoint)
diff --git a/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman b/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
index cfeca4d08db4..8ec5024b9117 100644
--- a/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-nyaOMf/ag-AyaWLf)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-lWayEG/ag-yWaGDG)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:26 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:44 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/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc b/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
index 8aed38f14429..aef4ada02c99 100644
--- a/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
+++ b/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:28 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:46 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/scripts/calc_tickadj/calc_tickadj.html b/scripts/calc_tickadj/calc_tickadj.html
index 484e1120241a..4869e662a34e 100644
--- a/scripts/calc_tickadj/calc_tickadj.html
+++ b/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.8p5 of <code>calc_tickadj</code>.
+This document applies to version 4.2.8p6 of <code>calc_tickadj</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/scripts/calc_tickadj/calc_tickadj.man.in b/scripts/calc_tickadj/calc_tickadj.man.in
index cfeca4d08db4..8ec5024b9117 100644
--- a/scripts/calc_tickadj/calc_tickadj.man.in
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-nyaOMf/ag-AyaWLf)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-lWayEG/ag-yWaGDG)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:26 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:44 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/scripts/calc_tickadj/calc_tickadj.mdoc.in b/scripts/calc_tickadj/calc_tickadj.mdoc.in
index 8aed38f14429..aef4ada02c99 100644
--- a/scripts/calc_tickadj/calc_tickadj.mdoc.in
+++ b/scripts/calc_tickadj/calc_tickadj.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:28 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:46 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/scripts/calc_tickadj/invoke-calc_tickadj.texi b/scripts/calc_tickadj/invoke-calc_tickadj.texi
index c78d53d18e9a..418562f1b049 100644
--- a/scripts/calc_tickadj/invoke-calc_tickadj.texi
+++ b/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 January 7, 2016 at 11:26:30 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:09:47 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/scripts/invoke-plot_summary.texi b/scripts/invoke-plot_summary.texi
index 93cc07adef81..96b571471812 100644
--- a/scripts/invoke-plot_summary.texi
+++ b/scripts/invoke-plot_summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-plot_summary.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:27:16 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:34 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.8p5
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p6
USAGE: plot_summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Where the summary files are
diff --git a/scripts/invoke-summary.texi b/scripts/invoke-summary.texi
index 521a7ff48730..9a05d513f104 100644
--- a/scripts/invoke-summary.texi
+++ b/scripts/invoke-summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-summary.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:27:22 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:40 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.8p5
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p6
USAGE: summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Directory containing stat files
diff --git a/scripts/ntp-wait/invoke-ntp-wait.texi b/scripts/ntp-wait/invoke-ntp-wait.texi
index f2de3603c3a6..d2e964c6a843 100644
--- a/scripts/ntp-wait/invoke-ntp-wait.texi
+++ b/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 January 7, 2016 at 11:26:39 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:09:57 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.8p5
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p6
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/scripts/ntp-wait/ntp-wait-opts b/scripts/ntp-wait/ntp-wait-opts
index 24db0a308272..1c6a81558636 100644
--- a/scripts/ntp-wait/ntp-wait-opts
+++ b/scripts/ntp-wait/ntp-wait-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntp-wait-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:26:33 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:09:51 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.8p5
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p6
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/scripts/ntp-wait/ntp-wait.1ntp-waitman b/scripts/ntp-wait/ntp-wait.1ntp-waitman
index b49cd9486ce9..44b0d00ed0ae 100644
--- a/scripts/ntp-wait/ntp-wait.1ntp-waitman
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntp-wait 1ntp-waitman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-7OaOah/ag-iPaW_g)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4fay4H/ag-fgaG3H)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:35 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:53 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/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc b/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
index 293bb0e19e40..b052fcc3c59b 100644
--- a/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
+++ b/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_WAIT 1ntp-waitmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:59 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/scripts/ntp-wait/ntp-wait.html b/scripts/ntp-wait/ntp-wait.html
index e8f08d4ea4df..53accf6d0827 100644
--- a/scripts/ntp-wait/ntp-wait.html
+++ b/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.8p5 of <code>ntp-wait</code>.
+ <p>This document applies to version 4.2.8p6 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.8p5
+<pre class="example">ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p6
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/scripts/ntp-wait/ntp-wait.man.in b/scripts/ntp-wait/ntp-wait.man.in
index f7326deb3ed8..693cea7f1e75 100644
--- a/scripts/ntp-wait/ntp-wait.man.in
+++ b/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@ "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntp-wait @NTP_WAIT_MS@ "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-7OaOah/ag-iPaW_g)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-4fay4H/ag-fgaG3H)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:35 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:53 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/scripts/ntp-wait/ntp-wait.mdoc.in b/scripts/ntp-wait/ntp-wait.mdoc.in
index d3562ba63e26..faa73612d494 100644
--- a/scripts/ntp-wait/ntp-wait.mdoc.in
+++ b/scripts/ntp-wait/ntp-wait.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTP_WAIT @NTP_WAIT_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:09:59 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/scripts/ntpsweep/invoke-ntpsweep.texi b/scripts/ntpsweep/invoke-ntpsweep.texi
index 0556da8f8589..5e9063736787 100644
--- a/scripts/ntpsweep/invoke-ntpsweep.texi
+++ b/scripts/ntpsweep/invoke-ntpsweep.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsweep.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:26:45 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:03 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.8p5
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p6
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/scripts/ntpsweep/ntpsweep-opts b/scripts/ntpsweep/ntpsweep-opts
index 2629d291ccc2..7cd1e3d17407 100644
--- a/scripts/ntpsweep/ntpsweep-opts
+++ b/scripts/ntpsweep/ntpsweep-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntpsweep-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:26:43 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:01 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.8p5
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p6
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/scripts/ntpsweep/ntpsweep.1ntpsweepman b/scripts/ntpsweep/ntpsweep.1ntpsweepman
index 0f61f643999c..0419a172907f 100644
--- a/scripts/ntpsweep/ntpsweep.1ntpsweepman
+++ b/scripts/ntpsweep/ntpsweep.1ntpsweepman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntpsweep 1ntpsweepman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-eHaGCi/ag-rHaOBi)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3aaGuJ/ag-ebaOtJ)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:47 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:05 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc b/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
index 6d0c357d156f..8b1af984638d 100644
--- a/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
+++ b/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:50 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:09 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/ntpsweep/ntpsweep.html b/scripts/ntpsweep/ntpsweep.html
index aba6b5f97e22..b5dac39c338d 100644
--- a/scripts/ntpsweep/ntpsweep.html
+++ b/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.8p5 of <code>ntpsweep</code>.
+ <p>This document applies to version 4.2.8p6 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.8p5
+<pre class="example">ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p6
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/scripts/ntpsweep/ntpsweep.man.in b/scripts/ntpsweep/ntpsweep.man.in
index 0f61f643999c..0419a172907f 100644
--- a/scripts/ntpsweep/ntpsweep.man.in
+++ b/scripts/ntpsweep/ntpsweep.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntpsweep 1ntpsweepman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-eHaGCi/ag-rHaOBi)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3aaGuJ/ag-ebaOtJ)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:47 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:05 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/ntpsweep/ntpsweep.mdoc.in b/scripts/ntpsweep/ntpsweep.mdoc.in
index 6d0c357d156f..8b1af984638d 100644
--- a/scripts/ntpsweep/ntpsweep.mdoc.in
+++ b/scripts/ntpsweep/ntpsweep.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:50 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:09 AM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/ntptrace/invoke-ntptrace.texi b/scripts/ntptrace/invoke-ntptrace.texi
index 29f48f47f57f..0545b4a45bb7 100644
--- a/scripts/ntptrace/invoke-ntptrace.texi
+++ b/scripts/ntptrace/invoke-ntptrace.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntptrace.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:26:58 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:16 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.8p5
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p6
USAGE: ntptrace [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/scripts/ntptrace/ntptrace-opts b/scripts/ntptrace/ntptrace-opts
index d1cecf80e25f..974441410558 100644
--- a/scripts/ntptrace/ntptrace-opts
+++ b/scripts/ntptrace/ntptrace-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntptrace-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:26:52 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:10 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.8p5
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p6
USAGE: ntptrace [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/scripts/ntptrace/ntptrace.1ntptraceman b/scripts/ntptrace/ntptrace.1ntptraceman
index 33854e686941..870d184b2cf3 100644
--- a/scripts/ntptrace/ntptrace.1ntptraceman
+++ b/scripts/ntptrace/ntptrace.1ntptraceman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntptrace 1ntptraceman "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntptrace 1ntptraceman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-tqaWUj/ag-Gqa4Tj)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-s0aOMK/ag-G0aWLK)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:54 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:13 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/ntptrace/ntptrace.1ntptracemdoc b/scripts/ntptrace/ntptrace.1ntptracemdoc
index eea1d6209ddd..0a8a83abeb0b 100644
--- a/scripts/ntptrace/ntptrace.1ntptracemdoc
+++ b/scripts/ntptrace/ntptrace.1ntptracemdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPTRACE 1ntptracemdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:00 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:18 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/ntptrace/ntptrace.html b/scripts/ntptrace/ntptrace.html
index fb96e71362c6..2da34249d97b 100644
--- a/scripts/ntptrace/ntptrace.html
+++ b/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.8p5 of <code>ntptrace</code>.
+This document applies to version 4.2.8p6 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.8p5
+<pre class="example">ntptrace - Trace peers of an NTP server - Ver. 4.2.8p6
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/scripts/ntptrace/ntptrace.man.in b/scripts/ntptrace/ntptrace.man.in
index 04c8c9120913..d602938476b5 100644
--- a/scripts/ntptrace/ntptrace.man.in
+++ b/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@ "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH ntptrace @NTPTRACE_MS@ "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-tqaWUj/ag-Gqa4Tj)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-s0aOMK/ag-G0aWLK)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:26:54 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:13 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/ntptrace/ntptrace.mdoc.in b/scripts/ntptrace/ntptrace.mdoc.in
index 6e8b389dcb54..b7be9469c419 100644
--- a/scripts/ntptrace/ntptrace.mdoc.in
+++ b/scripts/ntptrace/ntptrace.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt NTPTRACE @NTPTRACE_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:00 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:18 AM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/plot_summary-opts b/scripts/plot_summary-opts
index 28ea5837a58d..03c0dbb8bb65 100644
--- a/scripts/plot_summary-opts
+++ b/scripts/plot_summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (plot_summary-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:27:12 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:30 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.8p5
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p6
USAGE: plot_summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Where the summary files are
diff --git a/scripts/plot_summary.1plot_summaryman b/scripts/plot_summary.1plot_summaryman
index 9094f8e337f7..1aec5a7ea3fe 100644
--- a/scripts/plot_summary.1plot_summaryman
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH plot_summary 1plot_summaryman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-xiaqKm/ag-KiayJm)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-CNaiCN/ag-PNaqBN)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:36 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/scripts/plot_summary.1plot_summarymdoc b/scripts/plot_summary.1plot_summarymdoc
index 99c5d8cbbaa7..e8164345f365 100644
--- a/scripts/plot_summary.1plot_summarymdoc
+++ b/scripts/plot_summary.1plot_summarymdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:20 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:38 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/scripts/plot_summary.html b/scripts/plot_summary.html
index 3cb2ed498bc5..6d8e5a44b8a1 100644
--- a/scripts/plot_summary.html
+++ b/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.8p5 of <code>plot_summary</code>.
+This document applies to version 4.2.8p6 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.8p5
+<pre class="example">plot_summary - plot statistics generated by summary script - Ver. 4.2.8p6
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/scripts/plot_summary.man.in b/scripts/plot_summary.man.in
index 9094f8e337f7..1aec5a7ea3fe 100644
--- a/scripts/plot_summary.man.in
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH plot_summary 1plot_summaryman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-xiaqKm/ag-KiayJm)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-CNaiCN/ag-PNaqBN)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:36 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/scripts/plot_summary.mdoc.in b/scripts/plot_summary.mdoc.in
index 99c5d8cbbaa7..e8164345f365 100644
--- a/scripts/plot_summary.mdoc.in
+++ b/scripts/plot_summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:20 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:38 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/scripts/summary-opts b/scripts/summary-opts
index 47661ee1bce6..2fa6a7d0ee02 100644
--- a/scripts/summary-opts
+++ b/scripts/summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (summary-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:27:14 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:32 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.8p5
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p6
USAGE: summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Directory containing stat files
diff --git a/scripts/summary.1summaryman b/scripts/summary.1summaryman
index 0573b1184911..fd5d8d232569 100644
--- a/scripts/summary.1summaryman
+++ b/scripts/summary.1summaryman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH summary 1summaryman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-.Ca4Xm/ag-lDaaXm)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-z8aWPN/ag-M8a4ON)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:24 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:42 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/summary.1summarymdoc b/scripts/summary.1summarymdoc
index 5e28a57d7101..f6fd0c1f130a 100644
--- a/scripts/summary.1summarymdoc
+++ b/scripts/summary.1summarymdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:25 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:44 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/summary.html b/scripts/summary.html
index 566531e7c8c3..d9c57e98754b 100644
--- a/scripts/summary.html
+++ b/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.8p5 of <code>summary</code>.
+This document applies to version 4.2.8p6 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.8p5
+<pre class="example">summary - compute various stastics from NTP stat files - Ver. 4.2.8p6
USAGE: summary [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
--directory=str Directory containing stat files
diff --git a/scripts/summary.man.in b/scripts/summary.man.in
index 0573b1184911..fd5d8d232569 100644
--- a/scripts/summary.man.in
+++ b/scripts/summary.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH summary 1summaryman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-.Ca4Xm/ag-lDaaXm)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-z8aWPN/ag-M8a4ON)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:24 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:42 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/scripts/summary.mdoc.in b/scripts/summary.mdoc.in
index 5e28a57d7101..f6fd0c1f130a 100644
--- a/scripts/summary.mdoc.in
+++ b/scripts/summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:25 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:44 AM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/scripts/update-leap/invoke-update-leap.texi b/scripts/update-leap/invoke-update-leap.texi
index 42319790db9a..a3aa6b47b30f 100644
--- a/scripts/update-leap/invoke-update-leap.texi
+++ b/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 January 7, 2016 at 11:27:05 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:24 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/scripts/update-leap/update-leap-opts b/scripts/update-leap/update-leap-opts
index 506a74614a5d..8b9827e33b41 100644
--- a/scripts/update-leap/update-leap-opts
+++ b/scripts/update-leap/update-leap-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (update-leap-opts)
#
-# It has been AutoGen-ed January 7, 2016 at 11:27:11 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:10:30 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.8p5
+update-leap - leap-seconds file manager/updater - Ver. 4.2.8p6
USAGE: update-leap [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-s, --source-url=str The URL of the master copy of the leapseconds file
diff --git a/scripts/update-leap/update-leap.1update-leapman b/scripts/update-leap/update-leap.1update-leapman
index 4fdf46737d16..891a2abc8086 100644
--- a/scripts/update-leap/update-leap.1update-leapman
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH update-leap 1update-leapman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9hayKk/ag-kiaGJk)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-iOaqCL/ag-uOayBL)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:20 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/scripts/update-leap/update-leap.1update-leapmdoc b/scripts/update-leap/update-leap.1update-leapmdoc
index 8827df736272..12125863158c 100644
--- a/scripts/update-leap/update-leap.1update-leapmdoc
+++ b/scripts/update-leap/update-leap.1update-leapmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:10 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:28 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/scripts/update-leap/update-leap.html b/scripts/update-leap/update-leap.html
index a7d2a70feabd..6013b1ebb0ad 100644
--- a/scripts/update-leap/update-leap.html
+++ b/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.8p5 of <code>update-leap</code>.
+ <p>This document applies to version 4.2.8p6 of <code>update-leap</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/scripts/update-leap/update-leap.man.in b/scripts/update-leap/update-leap.man.in
index 4fdf46737d16..891a2abc8086 100644
--- a/scripts/update-leap/update-leap.man.in
+++ b/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 "07 Jan 2016" "ntp (4.2.8p5)" "User Commands"
+.TH update-leap 1update-leapman "20 Jan 2016" "ntp (4.2.8p6)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9hayKk/ag-kiaGJk)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-iOaqCL/ag-uOayBL)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:02 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:20 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/scripts/update-leap/update-leap.mdoc.in b/scripts/update-leap/update-leap.mdoc.in
index 8827df736272..12125863158c 100644
--- a/scripts/update-leap/update-leap.mdoc.in
+++ b/scripts/update-leap/update-leap.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:27:10 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:10:28 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/sntp/configure b/sntp/configure
index ce397ef14fef..b4ce6def9062 100755
--- a/sntp/configure
+++ b/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.8p5.
+# Generated by GNU Autoconf 2.69 for sntp 4.2.8p6.
#
# 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.8p5'
-PACKAGE_STRING='sntp 4.2.8p5'
+PACKAGE_VERSION='4.2.8p6'
+PACKAGE_STRING='sntp 4.2.8p6'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -1491,7 +1491,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.8p5 to adapt to many kinds of systems.
+\`configure' configures sntp 4.2.8p6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1561,7 +1561,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sntp 4.2.8p5:";;
+ short | recursive ) echo "Configuration of sntp 4.2.8p6:";;
esac
cat <<\_ACEOF
@@ -1706,7 +1706,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sntp configure 4.2.8p5
+sntp configure 4.2.8p6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2536,7 +2536,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.8p5, which was
+It was created by sntp $as_me 4.2.8p6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3533,7 +3533,7 @@ fi
# Define the identity of the package.
PACKAGE='sntp'
- VERSION='4.2.8p5'
+ VERSION='4.2.8p6'
cat >>confdefs.h <<_ACEOF
@@ -31110,7 +31110,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.8p5, which was
+This file was extended by sntp $as_me 4.2.8p6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31177,7 +31177,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.8p5
+sntp config.status 4.2.8p6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/sntp/crypto.c b/sntp/crypto.c
index b178f8c2e157..234e137444e7 100644
--- a/sntp/crypto.c
+++ b/sntp/crypto.c
@@ -7,11 +7,11 @@ size_t key_cnt = 0;
int
make_mac(
- char *pkt_data,
+ const void *pkt_data,
int pkt_size,
int mac_size,
- struct key *cmp_key,
- char * digest
+ const struct key *cmp_key,
+ void * digest
)
{
u_int len = mac_size;
@@ -26,39 +26,40 @@ make_mac(
INIT_SSL();
key_type = keytype_from_text(cmp_key->type, NULL);
EVP_DigestInit(&ctx, EVP_get_digestbynid(key_type));
- EVP_DigestUpdate(&ctx, (u_char *)cmp_key->key_seq, (u_int)cmp_key->key_len);
- EVP_DigestUpdate(&ctx, (u_char *)pkt_data, (u_int)pkt_size);
- EVP_DigestFinal(&ctx, (u_char *)digest, &len);
+ 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);
return (int)len;
}
-/* Generates a md5 digest of the key specified in keyid concatinated with the
+/* Generates a md5 digest of the key specified in keyid concatenated with the
* ntp packet (exluding the MAC) and compares this digest to the digest in
* the packet's MAC. If they're equal this function returns 1 (packet is
* authentic) or else 0 (not authentic).
*/
int
auth_md5(
- char *pkt_data,
+ const void *pkt_data,
int pkt_size,
int mac_size,
- struct key *cmp_key
+ const struct key *cmp_key
)
{
int hash_len;
int authentic;
char digest[20];
-
+ const u_char *pkt_ptr;
if (mac_size > (int)sizeof(digest))
return 0;
- hash_len = make_mac(pkt_data, pkt_size, sizeof(digest), cmp_key,
+ pkt_ptr = pkt_data;
+ hash_len = make_mac(pkt_ptr, pkt_size, sizeof(digest), cmp_key,
digest);
if (!hash_len)
authentic = FALSE;
else
- authentic = !memcmp(digest, pkt_data + pkt_size + 4,
+ authentic = !memcmp(digest, pkt_ptr + pkt_size + 4,
hash_len);
return authentic;
}
diff --git a/sntp/crypto.h b/sntp/crypto.h
index 39e0e6b66c25..19cdbc45e51e 100644
--- a/sntp/crypto.h
+++ b/sntp/crypto.h
@@ -17,16 +17,18 @@
/* #include "sntp-opts.h" */
struct key {
- struct key *next;
- int key_id;
- int key_len;
- char type[10];
- char key_seq[64];
+ struct key * next;
+ int key_id;
+ int key_len;
+ char type[10];
+ char key_seq[64];
};
-int auth_init(const char *keyfile, struct key **keys);
-void get_key(int key_id, struct key **d_key);
-int make_mac(char *pkt_data, int pkt_size, int mac_size, struct key *cmp_key, char *digest);
-int auth_md5(char *pkt_data, int pkt_size, int mac_size, struct key *cmp_key);
+extern int auth_init(const char *keyfile, struct key **keys);
+extern void get_key(int key_id, struct key **d_key);
+extern int make_mac(const void *pkt_data, int pkt_size, int mac_size,
+ const struct key *cmp_key, void *digest);
+extern int auth_md5(const void *pkt_data, int pkt_size, int mac_size,
+ const struct key *cmp_key);
#endif
diff --git a/sntp/include/copyright.def b/sntp/include/copyright.def
index 1cc7ad270886..4fb44618cc51 100644
--- a/sntp/include/copyright.def
+++ b/sntp/include/copyright.def
@@ -1,7 +1,7 @@
/* -*- Mode: Text -*- */
copyright = {
- date = "1992-2015";
+ date = "1992-2016";
owner = "The University of Delaware and Network Time Foundation";
eaddr = "http://bugs.ntp.org, bugs@ntp.org";
type = ntp;
diff --git a/sntp/include/version.def b/sntp/include/version.def
index ddc02d4f326b..5a081745d220 100644
--- a/sntp/include/version.def
+++ b/sntp/include/version.def
@@ -1 +1 @@
-version = '4.2.8p5';
+version = '4.2.8p6';
diff --git a/sntp/include/version.texi b/sntp/include/version.texi
index 28b93576df88..fa9aeb37c61d 100644
--- a/sntp/include/version.texi
+++ b/sntp/include/version.texi
@@ -1,3 +1,3 @@
-@set UPDATED 07 January 2016
-@set EDITION 4.2.8p5
-@set VERSION 4.2.8p5
+@set UPDATED 20 January 2016
+@set EDITION 4.2.8p6
+@set VERSION 4.2.8p6
diff --git a/sntp/invoke-sntp.texi b/sntp/invoke-sntp.texi
index 6ca3b06cacec..695c9eb0c8bc 100644
--- a/sntp/invoke-sntp.texi
+++ b/sntp/invoke-sntp.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-sntp.texi)
#
-# It has been AutoGen-ed January 7, 2016 at 11:23:24 PM by AutoGen 5.18.5
+# It has been AutoGen-ed January 20, 2016 at 04:06:42 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.8p5
+sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p6
Usage: sntp [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ hostname-or-IP ...]
Flg Arg Option-Name Description
diff --git a/sntp/libopts/configfile.c b/sntp/libopts/configfile.c
index 03156ca6d889..8244371e56be 100644
--- a/sntp/libopts/configfile.c
+++ b/sntp/libopts/configfile.c
@@ -182,9 +182,9 @@ optionFindValue(const tOptDesc * odesc, char const * name, char const * val)
}
else do {
- tArgList * argl = odesc->optCookie;
- int argct = argl->useCt;
- void ** poptv = (void **)(argl->apzArgs);
+ tArgList * argl = odesc->optCookie;
+ int argct = argl->useCt;
+ const void ** poptv = VOIDP(argl->apzArgs);
if (argct == 0) {
errno = ENOENT;
@@ -192,7 +192,7 @@ optionFindValue(const tOptDesc * odesc, char const * name, char const * val)
}
if (name == NULL) {
- res = (tOptionValue *)*poptv;
+ res = (const tOptionValue *)*poptv;
break;
}
@@ -249,7 +249,7 @@ optionFindNextValue(const tOptDesc * odesc, const tOptionValue * pPrevVal,
char const * pzName, char const * pzVal)
{
bool old_found = false;
- tOptionValue * res = NULL;
+ const tOptionValue * res = NULL;
(void)pzName;
(void)pzVal;
@@ -264,12 +264,12 @@ optionFindNextValue(const tOptDesc * odesc, const tOptionValue * pPrevVal,
}
else do {
- tArgList * argl = odesc->optCookie;
- int ct = argl->useCt;
- void ** poptv = (void **)argl->apzArgs;
+ tArgList * argl = odesc->optCookie;
+ int ct = argl->useCt;
+ const void ** poptv = VOIDP(argl->apzArgs);
while (--ct >= 0) {
- tOptionValue * pOV = *(poptv++);
+ const tOptionValue * pOV = *(poptv++);
if (old_found) {
res = pOV;
break;
@@ -315,8 +315,8 @@ optionFindNextValue(const tOptDesc * odesc, const tOptionValue * pPrevVal,
tOptionValue const *
optionGetValue(tOptionValue const * oov, char const * vname)
{
- tArgList * arg_list;
- tOptionValue * res = NULL;
+ tArgList * arg_list;
+ const tOptionValue * res = NULL;
if ((oov == NULL) || (oov->valType != OPARG_TYPE_HIERARCHY)) {
errno = EINVAL;
@@ -325,14 +325,14 @@ optionGetValue(tOptionValue const * oov, char const * vname)
arg_list = oov->v.nestVal;
if (arg_list->useCt > 0) {
- int ct = arg_list->useCt;
- void ** ovlist = (void **)(arg_list->apzArgs);
+ int ct = arg_list->useCt;
+ const void ** ovlist = VOIDP(arg_list->apzArgs);
if (vname == NULL) {
- res = (tOptionValue *)*ovlist;
+ res = (const tOptionValue *)*ovlist;
} else do {
- tOptionValue * opt_val = *(ovlist++);
+ const tOptionValue * opt_val = *(ovlist++);
if (strcmp(opt_val->pzName, vname) == 0) {
res = opt_val;
break;
@@ -374,9 +374,9 @@ optionGetValue(tOptionValue const * oov, char const * vname)
tOptionValue const *
optionNextValue(tOptionValue const * ov_list,tOptionValue const * oov )
{
- tArgList * arg_list;
- tOptionValue * res = NULL;
- int err = EINVAL;
+ tArgList * arg_list;
+ const tOptionValue * res = NULL;
+ int err = EINVAL;
if ((ov_list == NULL) || (ov_list->valType != OPARG_TYPE_HIERARCHY)) {
errno = EINVAL;
@@ -384,18 +384,18 @@ optionNextValue(tOptionValue const * ov_list,tOptionValue const * oov )
}
arg_list = ov_list->v.nestVal;
{
- int ct = arg_list->useCt;
- void ** o_list = (void **)(arg_list->apzArgs);
+ int ct = arg_list->useCt;
+ const void ** o_list = VOIDP(arg_list->apzArgs);
while (ct-- > 0) {
- tOptionValue * nov = *(o_list++);
+ const tOptionValue * nov = *(o_list++);
if (nov == oov) {
if (ct == 0) {
err = ENOENT;
} else {
err = 0;
- res = (tOptionValue *)*o_list;
+ res = (const tOptionValue *)*o_list;
}
break;
}
diff --git a/sntp/libopts/enum.c b/sntp/libopts/enum.c
index 3345558bec72..e9bba83644cb 100644
--- a/sntp/libopts/enum.c
+++ b/sntp/libopts/enum.c
@@ -189,12 +189,12 @@ find_name(char const * name, tOptions * pOpts, tOptDesc * pOD,
* The result gets stashed in a char * pointer.
*/
uintptr_t res = name_ct;
- size_t len = strlen((char *)name);
+ size_t len = strlen(name);
uintptr_t idx;
if (IS_DEC_DIGIT_CHAR(*name)) {
- char * pz = VOIDP(name);
- unsigned long val = strtoul(pz, &pz, 0);
+ char * pz;
+ unsigned long val = strtoul(name, &pz, 0);
if ((*pz == NUL) && (val < name_ct))
return (uintptr_t)val;
pz_enum_err_fmt = znum_too_large;
@@ -215,7 +215,7 @@ find_name(char const * name, tOptions * pOpts, tOptDesc * pOD,
* Multiple partial matches means we have an ambiguous match.
*/
for (idx = 0; idx < name_ct; idx++) {
- if (strncmp((char *)paz_names[idx], (char *)name, len) == 0) {
+ if (strncmp(paz_names[idx], name, len) == 0) {
if (paz_names[idx][len] == NUL)
return idx; /* full match */
@@ -500,7 +500,7 @@ find_member_bit(tOptions * opts, tOptDesc * od, char const * pz, int len,
if (shift_ct >= nm_ct)
return 0UL;
- return 1UL << shift_ct;
+ return (uintptr_t)1U << shift_ct;
}
}
diff --git a/sntp/libopts/find.c b/sntp/libopts/find.c
index 90591cc9243d..97a24df47216 100644
--- a/sntp/libopts/find.c
+++ b/sntp/libopts/find.c
@@ -80,7 +80,7 @@ parse_opt(char const ** nm_pp, char ** arg_pp, char * buf, size_t bufsz)
buf[res] = NUL;
*nm_pp = buf;
- *arg_pp = (char *)p;
+ *arg_pp = VOIDP(p);
return res;
default:
diff --git a/sntp/libopts/init.c b/sntp/libopts/init.c
index e02e1e1b9bc7..81d4eee32d0c 100644
--- a/sntp/libopts/init.c
+++ b/sntp/libopts/init.c
@@ -97,15 +97,14 @@ validate_struct(tOptions * opts, char const * pname)
*/
if (opts->pzProgName == NULL) {
char const * pz = strrchr(pname, DIRCH);
- char const ** pp =
- (char const **)(void **)&(opts->pzProgName);
+ char const ** pp = VOIDP(&(opts->pzProgName));
if (pz != NULL)
*pp = pz+1;
else
*pp = pname;
- pz = pathfind(getenv("PATH"), (char *)pname, "rx");
+ pz = pathfind(getenv("PATH"), pname, "rx");
if (pz != NULL)
pname = VOIDP(pz);
diff --git a/sntp/libopts/load.c b/sntp/libopts/load.c
index b5230afd382a..ccda5b4e870d 100644
--- a/sntp/libopts/load.c
+++ b/sntp/libopts/load.c
@@ -225,7 +225,7 @@ add_prog_path(char * buf, int b_sz, char const * fname, char const * prg_path)
if (strchr(prg_path, DIRCH) != NULL)
path = prg_path;
else {
- path = pathfind(getenv("PATH"), (char *)prg_path, "rx");
+ path = pathfind(getenv("PATH"), prg_path, "rx");
if (path == NULL)
return false;
diff --git a/sntp/libopts/makeshell.c b/sntp/libopts/makeshell.c
index a61df422c857..fbe8e171de0d 100644
--- a/sntp/libopts/makeshell.c
+++ b/sntp/libopts/makeshell.c
@@ -401,7 +401,7 @@ emit_usage(tOptions * opts)
/* Copy the program name into the time/name buffer */
for (;;) {
- if ((*pzPN++ = (char)tolower(*pz++)) == NUL)
+ if ((*pzPN++ = (char)tolower((unsigned char)*pz++)) == NUL)
break;
}
@@ -671,8 +671,8 @@ emit_match_expr(char const * name, tOptDesc * cod, tOptions * opts)
continue;
match_ct = 0;
- while ( toupper(od->pz_DisableName[match_ct])
- == toupper(name[match_ct]))
+ while ( toupper((unsigned char)od->pz_DisableName[match_ct])
+ == toupper((unsigned char)name[match_ct]))
match_ct++;
if (match_ct > min_match_ct)
min_match_ct = match_ct;
diff --git a/sntp/libopts/nested.c b/sntp/libopts/nested.c
index f4fb22620932..aaf089f543d8 100644
--- a/sntp/libopts/nested.c
+++ b/sntp/libopts/nested.c
@@ -859,6 +859,7 @@ LOCAL int
get_special_char(char const ** ppz, int * ct)
{
char const * pz = *ppz;
+ char * rz;
if (*ct < 3)
return '&';
@@ -872,7 +873,8 @@ get_special_char(char const ** ppz, int * ct)
base = 16;
pz++;
}
- retch = (int)strtoul(pz, (char **)&pz, base);
+ retch = (int)strtoul(pz, &rz, base);
+ pz = rz;
if (*pz != ';')
return '&';
base = (int)(++pz - *ppz);
diff --git a/sntp/libopts/parse-duration.c b/sntp/libopts/parse-duration.c
index e072b7d567f5..11e3d828d897 100644
--- a/sntp/libopts/parse-duration.c
+++ b/sntp/libopts/parse-duration.c
@@ -60,14 +60,20 @@ typedef enum {
static unsigned long
str_const_to_ul (cch_t * str, cch_t ** ppz, int base)
{
- return strtoul (str, (char **)ppz, base);
+ char * pz;
+ int rv = strtoul (str, &pz, base);
+ *ppz = pz;
+ return rv;
}
/* Wrapper around strtol that does not require a cast. */
static long
str_const_to_l (cch_t * str, cch_t ** ppz, int base)
{
- return strtol (str, (char **)ppz, base);
+ char * pz;
+ int rv = strtol (str, &pz, base);
+ *ppz = pz;
+ return rv;
}
/* Returns BASE + VAL * SCALE, interpreting BASE = BAD_TIME
diff --git a/sntp/libopts/reset.c b/sntp/libopts/reset.c
index 6ca2c05229db..97ecb52e2425 100644
--- a/sntp/libopts/reset.c
+++ b/sntp/libopts/reset.c
@@ -113,7 +113,7 @@ optionResetOpt(tOptions * pOpts, tOptDesc * pOD)
assert(0 == 1);
}
} else {
- succ = opt_find_long(pOpts, (char *)pzArg, &opt_state);
+ succ = opt_find_long(pOpts, pzArg, &opt_state);
if (! SUCCESSFUL(succ)) {
fprintf(stderr, zIllOptStr, pOpts->pzProgPath, pzArg);
pOpts->pUsageProc(pOpts, EXIT_FAILURE);
diff --git a/sntp/libopts/save.c b/sntp/libopts/save.c
index f462ced8c65d..cdab05f628ec 100644
--- a/sntp/libopts/save.c
+++ b/sntp/libopts/save.c
@@ -453,7 +453,7 @@ prt_val_list(FILE * fp, char const * name, tArgList * al)
if (al == NULL)
return;
opt_ct = al->useCt;
- opt_list = (void **)al->apzArgs;
+ opt_list = VOIDP(al->apzArgs);
if (opt_ct <= 0) {
fprintf(fp, OPEN_CLOSE_FMT, name);
@@ -488,7 +488,7 @@ prt_nested(FILE * fp, tOptDesc * p)
return;
opt_ct = al->useCt;
- opt_list = (void **)al->apzArgs;
+ opt_list = VOIDP(al->apzArgs);
if (opt_ct <= 0)
return;
diff --git a/sntp/libopts/tokenize.c b/sntp/libopts/tokenize.c
index cbff7fba47df..25550eaafeea 100644
--- a/sntp/libopts/tokenize.c
+++ b/sntp/libopts/tokenize.c
@@ -57,7 +57,7 @@ copy_cooked(ch_t ** ppDest, char const ** ppSrc)
case NUL: *ppSrc = NULL; return;
case '"': goto done;
case '\\':
- pSrc += ao_string_cook_escape_char((char *)pSrc, (char *)&ch, 0x7F);
+ pSrc += ao_string_cook_escape_char((const char *)pSrc, (char *)&ch, 0x7F);
if (ch == 0x7F)
break;
/* FALLTHROUGH */
diff --git a/sntp/m4/version.m4 b/sntp/m4/version.m4
index b8f98b5979ee..236cc1889632 100644
--- a/sntp/m4/version.m4
+++ b/sntp/m4/version.m4
@@ -1 +1 @@
-m4_define([VERSION_NUMBER],[4.2.8p5])
+m4_define([VERSION_NUMBER],[4.2.8p6])
diff --git a/sntp/main.c b/sntp/main.c
index 870db93502b9..78ed7c270ce3 100644
--- a/sntp/main.c
+++ b/sntp/main.c
@@ -1135,7 +1135,7 @@ generate_pkt (
if (pkt_key != NULL) {
x_pkt->exten[0] = htonl(key_id);
mac_size = 20; /* max room for MAC */
- mac_size = make_mac((char *)x_pkt, pkt_len, mac_size,
+ mac_size = make_mac(x_pkt, pkt_len, mac_size,
pkt_key, (char *)&x_pkt->exten[1]);
if (mac_size > 0)
pkt_len += mac_size + 4;
diff --git a/sntp/networking.c b/sntp/networking.c
index 6a176c57f4f4..21cf09a86b31 100644
--- a/sntp/networking.c
+++ b/sntp/networking.c
@@ -184,7 +184,7 @@ process_pkt (
** keyfile and compare those md5sums.
*/
mac_size = exten_len << 2;
- if (!auth_md5((char *)rpkt, pkt_len - mac_size,
+ if (!auth_md5(rpkt, pkt_len - mac_size,
mac_size - 4, pkt_key)) {
is_authentic = FALSE;
break;
diff --git a/sntp/sntp-opts.c b/sntp/sntp-opts.c
index 69fb786686fa..d11f0b2169d9 100644
--- a/sntp/sntp-opts.c
+++ b/sntp/sntp-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.c)
*
- * It has been AutoGen-ed January 7, 2016 at 11:22:49 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:06:07 AM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The sntp program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -70,8 +70,8 @@ extern FILE * option_usage_fp;
* static const strings for sntp options
*/
static char const sntp_opt_strs[2549] =
-/* 0 */ "sntp 4.2.8p5\n"
- "Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
+/* 0 */ "sntp 4.2.8p6\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"
"can be seen at:\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.8p5\n"
+/* 2326 */ "sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p6\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.8p5";
+/* 2536 */ "sntp 4.2.8p6";
/**
* ipv4 option description with
@@ -1173,8 +1173,8 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via sntpOptions.pzCopyright */
- puts(_("sntp 4.2.8p5\n\
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
+ puts(_("sntp 4.2.8p6\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\
can be seen at:\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.8p5\n\
+ puts(_("sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p6\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.8p5"));
+ puts(_("sntp 4.2.8p6"));
/* referenced via sntpOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/sntp/sntp-opts.h b/sntp/sntp-opts.h
index 78951abd1c7b..ab741c7f02d6 100644
--- a/sntp/sntp-opts.h
+++ b/sntp/sntp-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.h)
*
- * It has been AutoGen-ed January 7, 2016 at 11:22:48 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed January 20, 2016 at 04:06:06 AM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -18,7 +18,7 @@
* The sntp program is copyrighted and licensed
* under the following terms:
*
- * Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.
+ * Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation, all rights reserved.
* This is free software. It is licensed for use, modification and
* redistribution under the terms of the NTP License, copies of which
* can be seen at:
@@ -91,9 +91,9 @@ typedef enum {
/** count of all options for sntp */
#define OPTION_CT 23
/** sntp version */
-#define SNTP_VERSION "4.2.8p5"
+#define SNTP_VERSION "4.2.8p6"
/** Full sntp version text */
-#define SNTP_FULL_VERSION "sntp 4.2.8p5"
+#define SNTP_FULL_VERSION "sntp 4.2.8p6"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/sntp/sntp.1sntpman b/sntp/sntp.1sntpman
index 792fc528a1e2..0a83bd31e248 100644
--- a/sntp/sntp.1sntpman
+++ b/sntp/sntp.1sntpman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp 1sntpman "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH sntp 1sntpman "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-e.aO3S/ag-r.aG2S)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-vxaitn/ag-Ixaasn)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:23:20 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:06:38 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -348,7 +348,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.NOP "Dave Hart"
.br
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/sntp/sntp.1sntpmdoc b/sntp/sntp.1sntpmdoc
index 8005e9a83e64..86b72ad0c04d 100644
--- a/sntp/sntp.1sntpmdoc
+++ b/sntp/sntp.1sntpmdoc
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt SNTP 1sntpmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:23:27 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:06:45 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -303,7 +303,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.An "Harlan Stenn"
.An "Dave Hart"
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/sntp/sntp.html b/sntp/sntp.html
index 6aa66fb529cb..61efd50ebd81 100644
--- a/sntp/sntp.html
+++ b/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.8p5 of <code>sntp</code>.
+ <p>This document applies to version 4.2.8p6 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.8p5
+<pre class="example">sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p6
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/sntp/sntp.man.in b/sntp/sntp.man.in
index 1d5e571ca10b..c223eb51378a 100644
--- a/sntp/sntp.man.in
+++ b/sntp/sntp.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp @SNTP_MS@ "07 Jan 2016" "4.2.8p5" "User Commands"
+.TH sntp @SNTP_MS@ "20 Jan 2016" "4.2.8p6" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-e.aO3S/ag-r.aG2S)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-vxaitn/ag-Ixaasn)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:23:20 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:06:38 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -348,7 +348,7 @@ it to autogen-users@lists.sourceforge.net. Thank you.
.NOP "Dave Hart"
.br
.SH "COPYRIGHT"
-Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.SH "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/sntp/sntp.mdoc.in b/sntp/sntp.mdoc.in
index 5168a9948914..2e15332ce9c2 100644
--- a/sntp/sntp.mdoc.in
+++ b/sntp/sntp.mdoc.in
@@ -1,9 +1,9 @@
-.Dd January 7 2016
+.Dd January 20 2016
.Dt SNTP @SNTP_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed January 7, 2016 at 11:23:27 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed January 20, 2016 at 04:06:45 AM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -303,7 +303,7 @@ it to autogen\-users@lists.sourceforge.net. Thank you.
.An "Harlan Stenn"
.An "Dave Hart"
.Sh "COPYRIGHT"
-Copyright (C) 1992\-2015 The University of Delaware and Network Time Foundation all rights reserved.
+Copyright (C) 1992\-2016 The University of Delaware and Network Time Foundation all rights reserved.
This program is released under the terms of the NTP license, <http://ntp.org/license>.
.Sh "BUGS"
Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org
diff --git a/sntp/tests/crypto.c b/sntp/tests/crypto.c
index 82d285976d4c..fb2dc62981f3 100644
--- a/sntp/tests/crypto.c
+++ b/sntp/tests/crypto.c
@@ -18,8 +18,8 @@ void test_PacketSizeNotMultipleOfFourBytes(void);
void
-test_MakeMd5Mac(void) {
-
+test_MakeMd5Mac(void)
+{
const char* PKT_DATA = "abcdefgh0123";
const int PKT_LEN = strlen(PKT_DATA);
const char* EXPECTED_DIGEST =
@@ -34,15 +34,17 @@ test_MakeMd5Mac(void) {
memcpy(&md5.type, "MD5", 4);
TEST_ASSERT_EQUAL(MD5_LENGTH,
- make_mac((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5, actual));
+ make_mac(PKT_DATA, PKT_LEN, MD5_LENGTH, &md5, actual));
TEST_ASSERT_TRUE(memcmp(EXPECTED_DIGEST, actual, MD5_LENGTH) == 0);
}
void
-test_MakeSHA1Mac(void) {
+test_MakeSHA1Mac(void)
+{
#ifdef OPENSSL
+
const char* PKT_DATA = "abcdefgh0123";
const int PKT_LEN = strlen(PKT_DATA);
const char* EXPECTED_DIGEST =
@@ -58,22 +60,26 @@ test_MakeSHA1Mac(void) {
memcpy(&sha1.type, "SHA1", 5);
TEST_ASSERT_EQUAL(SHA1_LENGTH,
- make_mac((char*)PKT_DATA, PKT_LEN, SHA1_LENGTH, &sha1, actual));
+ make_mac(PKT_DATA, PKT_LEN, SHA1_LENGTH, &sha1, actual));
TEST_ASSERT_EQUAL_MEMORY(EXPECTED_DIGEST, actual, SHA1_LENGTH);
+
#else
+
TEST_IGNORE_MESSAGE("OpenSSL not found, skipping...");
+
#endif /* OPENSSL */
}
void
-test_VerifyCorrectMD5(void) {
+test_VerifyCorrectMD5(void)
+{
const char* PKT_DATA =
- "sometestdata" // Data
- "\0\0\0\0" // Key-ID (unused)
- "\xc7\x58\x99\xdd\x99\x32\x0f\x71" // MAC
- "\x2b\x7b\xfe\x4f\xa2\x32\xcf\xac";
+ "sometestdata" /* Data */
+ "\0\0\0\0" /* Key-ID (unused) */
+ "\xc7\x58\x99\xdd\x99\x32\x0f\x71" /* MAC */
+ "\x2b\x7b\xfe\x4f\xa2\x32\xcf\xac";
const int PKT_LEN = 12;
struct key md5;
@@ -83,18 +89,20 @@ test_VerifyCorrectMD5(void) {
memcpy(&md5.key_seq, "md5key", md5.key_len);
memcpy(&md5.type, "MD5", 4);
- TEST_ASSERT_TRUE(auth_md5((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5));
+ TEST_ASSERT_TRUE(auth_md5(PKT_DATA, PKT_LEN, MD5_LENGTH, &md5));
}
void
-test_VerifySHA1(void) {
+test_VerifySHA1(void)
+{
#ifdef OPENSSL
+
const char* PKT_DATA =
- "sometestdata" // Data
- "\0\0\0\0" // Key-ID (unused)
- "\xad\x07\xde\x36\x39\xa6\x77\xfa\x5b\xce" // MAC
- "\x2d\x8a\x7d\x06\x96\xe6\x0c\xbc\xed\xe1";
+ "sometestdata" /* Data */
+ "\0\0\0\0" /* Key-ID (unused) */
+ "\xad\x07\xde\x36\x39\xa6\x77\xfa\x5b\xce" /* MAC */
+ "\x2d\x8a\x7d\x06\x96\xe6\x0c\xbc\xed\xe1";
const int PKT_LEN = 12;
struct key sha1;
@@ -104,21 +112,26 @@ test_VerifySHA1(void) {
memcpy(&sha1.key_seq, "sha1key", sha1.key_len);
memcpy(&sha1.type, "SHA1", 5);
- TEST_ASSERT_TRUE(auth_md5((char*)PKT_DATA, PKT_LEN, SHA1_LENGTH, &sha1));
+ TEST_ASSERT_TRUE(auth_md5(PKT_DATA, PKT_LEN, SHA1_LENGTH, &sha1));
+
#else
+
TEST_IGNORE_MESSAGE("OpenSSL not found, skipping...");
+
#endif /* OPENSSL */
}
void
-test_VerifyFailure(void) {
- /* We use a copy of the MD5 verification code, but modify
- * the last bit to make sure verification fails. */
+test_VerifyFailure(void)
+{
+ /* We use a copy of the MD5 verification code, but modify the
+ * last bit to make sure verification fails.
+ */
const char* PKT_DATA =
- "sometestdata" // Data
- "\0\0\0\0" // Key-ID (unused)
- "\xc7\x58\x99\xdd\x99\x32\x0f\x71" // MAC
- "\x2b\x7b\xfe\x4f\xa2\x32\xcf\x00"; // Last byte is wrong!
+ "sometestdata" /* Data */
+ "\0\0\0\0" /* Key-ID (unused) */
+ "\xc7\x58\x99\xdd\x99\x32\x0f\x71" /* MAC */
+ "\x2b\x7b\xfe\x4f\xa2\x32\xcf\x00"; /* Last byte is wrong! */
const int PKT_LEN = 12;
struct key md5;
@@ -128,12 +141,13 @@ test_VerifyFailure(void) {
memcpy(&md5.key_seq, "md5key", md5.key_len);
memcpy(&md5.type, "MD5", 4);
- TEST_ASSERT_FALSE(auth_md5((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5));
+ TEST_ASSERT_FALSE(auth_md5(PKT_DATA, PKT_LEN, MD5_LENGTH, &md5));
}
void
-test_PacketSizeNotMultipleOfFourBytes(void) {
+test_PacketSizeNotMultipleOfFourBytes(void)
+{
const char* PKT_DATA = "123456";
const int PKT_LEN = 6;
char actual[MD5_LENGTH];
@@ -145,5 +159,5 @@ test_PacketSizeNotMultipleOfFourBytes(void) {
memcpy(&md5.key_seq, "md5seq", md5.key_len);
memcpy(&md5.type, "MD5", 4);
- TEST_ASSERT_EQUAL(0, make_mac((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5, actual));
+ TEST_ASSERT_EQUAL(0, make_mac(PKT_DATA, PKT_LEN, MD5_LENGTH, &md5, actual));
}
diff --git a/sntp/tests/fileHandlingTest.c b/sntp/tests/fileHandlingTest.c
index ce3f0de77281..8acad5498f8b 100644
--- a/sntp/tests/fileHandlingTest.c
+++ b/sntp/tests/fileHandlingTest.c
@@ -3,35 +3,52 @@
#include "stdlib.h"
#include "sntptest.h"
-#include "fileHandlingTest.h" //required because of the h.in thingy
+#include "fileHandlingTest.h" /* required because of the h.in thingy */
#include <string.h>
#include <unistd.h>
-/*
-enum DirectoryType {
- INPUT_DIR = 0,
- OUTPUT_DIR = 1
-};
-*/
-//extern const char srcdir[];
-
const char *
-CreatePath(const char* filename, enum DirectoryType argument) {
- const char srcdir[] = SRCDIR_DEF;//"@abs_srcdir@/data/";
- char * path = emalloc (sizeof (char) * (strlen(srcdir) + 256));
-
- //char cwd[1024];
+CreatePath(
+ const char * filename,
+ enum DirectoryType argument
+ )
+{
+ const char srcdir[] = SRCDIR_DEF;//"@abs_srcdir@/data/";
+ size_t plen = sizeof(srcdir) + strlen(filename) + 1;
+ char * path = emalloc(plen);
+ ssize_t retc;
+
+ UNUSED_ARG(argument);
+
+ retc = snprintf(path, plen, "%s%s", srcdir, filename);
+ if (retc <= 0 || (size_t)retc >= plen)
+ exit(1);
+ return path;
+}
- strcpy(path, srcdir);
- strcat(path, filename);
- return path;
+void
+DestroyPath(
+ const char * pathname
+ )
+{
+ /* use a union to get terminally rid of the 'const' attribute */
+ union {
+ const char *ccp;
+ void *vp;
+ } any;
+
+ any.ccp = pathname;
+ free(any.vp);
}
int
-GetFileSize(FILE *file) {
+GetFileSize(
+ FILE * file
+ )
+{
fseek(file, 0L, SEEK_END);
int length = ftell(file);
fseek(file, 0L, SEEK_SET);
@@ -41,7 +58,11 @@ GetFileSize(FILE *file) {
bool
-CompareFileContent(FILE* expected, FILE* actual) {
+CompareFileContent(
+ FILE * expected,
+ FILE * actual
+ )
+{
int currentLine = 1;
char actualLine[1024];
@@ -67,8 +88,10 @@ CompareFileContent(FILE* expected, FILE* actual) {
void
-ClearFile(const char * filename) {
+ClearFile(
+ const char * filename
+ )
+{
if (!truncate(filename, 0))
exit(1);
}
-
diff --git a/sntp/tests/fileHandlingTest.h.in b/sntp/tests/fileHandlingTest.h.in
index e7d99ee403df..b93ed9e90293 100644
--- a/sntp/tests/fileHandlingTest.h.in
+++ b/sntp/tests/fileHandlingTest.h.in
@@ -15,21 +15,12 @@ enum DirectoryType {
};
#define SRCDIR_DEF "@abs_srcdir@/data/";
-//const char srcdir[] = "@abs_srcdir@/data/";
-
-const char *
-CreatePath(const char* filename, enum DirectoryType argument);
-
-
-int
-GetFileSize(FILE *file);
-
-
-bool
-CompareFileContent(FILE* expected, FILE* actual);
-
-void
-ClearFile(const char * filename) ;
+extern const char * CreatePath(const char* filename,
+ enum DirectoryType argument);
+extern void DestroyPath(const char* pathname);
+extern int GetFileSize(FILE *file);
+extern bool CompareFileContent(FILE* expected, FILE* actual);
+extern void ClearFile(const char * filename) ;
#endif // FILE_HANDLING_TEST_H
diff --git a/sntp/tests/keyFile.c b/sntp/tests/keyFile.c
index 883658a2b815..395ca0dc10e8 100644
--- a/sntp/tests/keyFile.c
+++ b/sntp/tests/keyFile.c
@@ -17,24 +17,28 @@ void test_ReadKeyFileWithInvalidHex(void);
bool
-CompareKeys(struct key expected, struct key actual) {
- if (expected.key_id != actual.key_id){
- printf("Expected key_id: %d", expected.key_id);
- printf(" but was: %d\n", actual.key_id);
+CompareKeys(
+ struct key expected,
+ struct key actual
+ )
+{
+ if (expected.key_id != actual.key_id) {
+ printf("Expected key_id: %d but was: %d\n",
+ expected.key_id, actual.key_id);
return FALSE;
}
- if (expected.key_len != actual.key_len){
- printf("Expected key_len: %d", expected.key_len);
- printf(" but was: %d\n", actual.key_len);
+ if (expected.key_len != actual.key_len) {
+ printf("Expected key_len: %d but was: %d\n",
+ expected.key_len, actual.key_len);
return FALSE;
}
- if (strcmp(expected.type, actual.type) != 0){
- printf("Expected key_type: %s", expected.type);
- printf(" but was: %s\n", actual.type);
+ if (strcmp(expected.type, actual.type) != 0) {
+ printf("Expected key_type: %s but was: %s\n",
+ expected.type, actual.type);
return FALSE;
}
- if (memcmp(expected.key_seq, actual.key_seq, expected.key_len) != 0){
+ if (memcmp(expected.key_seq, actual.key_seq, expected.key_len) != 0) {
printf("Key mismatch!\n");
return FALSE;
}
@@ -43,12 +47,15 @@ CompareKeys(struct key expected, struct key actual) {
bool
-CompareKeysAlternative(int key_id,
- int key_len,
- const char* type,
- const char* key_seq,
- struct key actual) {
- struct key temp;
+CompareKeysAlternative(
+ int key_id,
+ int key_len,
+ const char * type,
+ const char * key_seq,
+ struct key actual
+ )
+{
+ struct key temp;
temp.key_id = key_id;
temp.key_len = key_len;
@@ -60,30 +67,32 @@ CompareKeysAlternative(int key_id,
void
-test_ReadEmptyKeyFile(void) {