Hello community,
here is the log from the commit of package chrony for openSUSE:Factory checked in at 2016-12-01 10:28:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chrony (Old)
and /work/SRC/openSUSE:Factory/.chrony.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "chrony"
Changes:
--------
--- /work/SRC/openSUSE:Factory/chrony/chrony.changes 2016-06-12 18:54:56.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.chrony.new/chrony.changes 2016-12-01 10:28:48.000000000 +0100
@@ -1,0 +2,10 @@
+Tue Nov 29 16:54:52 UTC 2016 - mpost@suse.com
+
+- Upgraded to version 2.4.1:
+ - Bug fixes
+ - Fix processing of kernel timestamps on non-Linux systems
+ - Fix crash with smoothtime directive
+ - Fix validation of refclock sample times
+ - Fix parsing of refclock directive
+
+-------------------------------------------------------------------
Old:
----
chrony-2.4.tar.gz
New:
----
chrony-2.4.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ chrony.spec ++++++
--- /var/tmp/diff_new_pack.QzBevW/_old 2016-12-01 10:28:49.000000000 +0100
+++ /var/tmp/diff_new_pack.QzBevW/_new 2016-12-01 10:28:49.000000000 +0100
@@ -11,10 +11,11 @@
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
-#
+
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
+
%define vendorzone opensuse.
%if 0%{?suse_version} > 1230
%bcond_without systemd
@@ -26,10 +27,10 @@
%global clknetsim_ver a5949fe
Name: chrony
-Version: 2.4
+Version: 2.4.1
Release: 0
-License: GPL-2.0
Summary: System Clock Synchronization Client and Server
+License: GPL-2.0
Group: Productivity/Networking/Other
Url: http://chrony.tuxfamily.org/
Source: http://download.tuxfamily.org/chrony/chrony-%{version}.tar.gz
@@ -51,11 +52,11 @@
#
BuildRequires: NetworkManager-devel
BuildRequires: bison
+BuildRequires: gcc-c++
BuildRequires: libcap-devel
BuildRequires: libedit-devel
BuildRequires: mozilla-nss-devel
BuildRequires: pkg-config
-BuildRequires: gcc-c++
# The timezone package is needed for the "make check" tests. It can be
# removed if the call to make check is ever deleted.
BuildRequires: timezone
++++++ chrony-2.4.tar.gz -> chrony-2.4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/FAQ new/chrony-2.4.1/FAQ
--- old/chrony-2.4/FAQ 2016-06-07 11:27:25.000000000 +0200
+++ new/chrony-2.4.1/FAQ 2016-11-21 12:10:57.000000000 +0100
@@ -406,4 +406,4 @@
We have no plans to do this. Anyone is welcome to pick this work up and
contribute it back to the project.
-Last updated 2016-06-07 11:20:59 CEST
+Last updated 2016-11-21 12:03:45 CET
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/INSTALL new/chrony-2.4.1/INSTALL
--- old/chrony-2.4/INSTALL 2016-06-07 11:27:25.000000000 +0200
+++ new/chrony-2.4.1/INSTALL 2016-11-21 12:10:57.000000000 +0100
@@ -147,4 +147,4 @@
to build a package. When untarred within the root directory, this will install
the files to the intended final locations.
-Last updated 2016-06-07 11:20:59 CEST
+Last updated 2016-11-21 12:03:45 CET
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/NEWS new/chrony-2.4.1/NEWS
--- old/chrony-2.4/NEWS 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/NEWS 2016-11-21 12:03:45.000000000 +0100
@@ -1,3 +1,13 @@
+New in version 2.4.1
+====================
+
+Bug fixes
+---------
+* Fix processing of kernel timestamps on non-Linux systems
+* Fix crash with smoothtime directive
+* Fix validation of refclock sample times
+* Fix parsing of refclock directive
+
New in version 2.4
==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/client.c new/chrony-2.4.1/client.c
--- old/chrony-2.4/client.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/client.c 2016-11-21 12:03:45.000000000 +0100
@@ -125,6 +125,7 @@
return( line );
#else
printf("%s", prompt);
+ fflush(stdout);
#endif
}
if (fgets(line, sizeof(line), stdin)) {
@@ -2007,7 +2008,7 @@
print_report("%c%c %-27s %2d %2d %3o %I %+S[%+S] +/- %S\n",
mode_ch, state_ch, name,
ntohs(reply.data.source_data.stratum),
- ntohs(reply.data.source_data.poll),
+ (int16_t)ntohs(reply.data.source_data.poll),
ntohs(reply.data.source_data.reachability),
(unsigned long)ntohl(reply.data.source_data.since_sample),
UTI_FloatNetworkToHost(reply.data.source_data.latest_meas),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/conf.c new/chrony-2.4.1/conf.c
--- old/chrony-2.4/conf.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/conf.c 2016-11-21 12:03:45.000000000 +0100
@@ -696,9 +696,9 @@
line = CPS_SplitWord(line);
param = Strdup(p);
- while (*line) {
- cmd = line;
+ for (cmd = line; *cmd; line += n, cmd = line) {
line = CPS_SplitWord(line);
+
if (!strcasecmp(cmd, "refid")) {
if (sscanf(line, "%4s%n", (char *)ref, &n) != 1)
break;
@@ -756,10 +756,9 @@
other_parse_error("Invalid refclock option");
return;
}
- line += n;
}
- if (*line) {
+ if (*cmd) {
command_parse_error();
return;
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/doc/chrony.conf.man.in new/chrony-2.4.1/doc/chrony.conf.man.in
--- old/chrony-2.4/doc/chrony.conf.man.in 2016-06-07 11:27:24.000000000 +0200
+++ new/chrony-2.4.1/doc/chrony.conf.man.in 2016-11-21 12:10:57.000000000 +0100
@@ -2,12 +2,12 @@
.\" Title: chrony.conf
.\" Author: [see the "AUTHORS" section]
.\" Generator: Asciidoctor 1.5.4
-.\" Date: 2016-06-07
+.\" Date: 2016-11-21
.\" Manual: Configuration Files
.\" Source: chrony @CHRONY_VERSION@
.\" Language: English
.\"
-.TH "CHRONY.CONF" "5" "2016-06-07" "chrony @CHRONY_VERSION@" "Configuration Files"
+.TH "CHRONY.CONF" "5" "2016-11-21" "chrony @CHRONY_VERSION@" "Configuration Files"
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.ss \n[.ss] 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/doc/chronyc.man.in new/chrony-2.4.1/doc/chronyc.man.in
--- old/chrony-2.4/doc/chronyc.man.in 2016-06-07 11:27:25.000000000 +0200
+++ new/chrony-2.4.1/doc/chronyc.man.in 2016-11-21 12:10:57.000000000 +0100
@@ -2,12 +2,12 @@
.\" Title: chronyc
.\" Author: [see the "AUTHORS" section]
.\" Generator: Asciidoctor 1.5.4
-.\" Date: 2016-06-07
+.\" Date: 2016-11-21
.\" Manual: User manual
.\" Source: chrony @CHRONY_VERSION@
.\" Language: English
.\"
-.TH "CHRONYC" "1" "2016-06-07" "chrony @CHRONY_VERSION@" "User manual"
+.TH "CHRONYC" "1" "2016-11-21" "chrony @CHRONY_VERSION@" "User manual"
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.ss \n[.ss] 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/doc/chronyd.man.in new/chrony-2.4.1/doc/chronyd.man.in
--- old/chrony-2.4/doc/chronyd.man.in 2016-06-07 11:27:25.000000000 +0200
+++ new/chrony-2.4.1/doc/chronyd.man.in 2016-11-21 12:10:57.000000000 +0100
@@ -2,12 +2,12 @@
.\" Title: chronyd
.\" Author: [see the "AUTHORS" section]
.\" Generator: Asciidoctor 1.5.4
-.\" Date: 2016-06-07
+.\" Date: 2016-11-21
.\" Manual: System Administration
.\" Source: chrony @CHRONY_VERSION@
.\" Language: English
.\"
-.TH "CHRONYD" "8" "2016-06-07" "chrony @CHRONY_VERSION@" "System Administration"
+.TH "CHRONYD" "8" "2016-11-21" "chrony @CHRONY_VERSION@" "System Administration"
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.ss \n[.ss] 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/examples/chrony.spec new/chrony-2.4.1/examples/chrony.spec
--- old/chrony-2.4/examples/chrony.spec 2016-06-07 11:27:24.000000000 +0200
+++ new/chrony-2.4.1/examples/chrony.spec 2016-11-21 12:10:55.000000000 +0100
@@ -1,4 +1,4 @@
-%global chrony_version 2.4
+%global chrony_version 2.4.1
%if 0%(echo %{chrony_version} | grep -q pre && echo 1)
%global prerelease %(echo %{chrony_version} | sed 's/.*-//')
%endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/ntp_io.c new/chrony-2.4.1/ntp_io.c
--- old/chrony-2.4/ntp_io.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/ntp_io.c 2016-11-21 12:03:45.000000000 +0100
@@ -556,7 +556,7 @@
#endif
#ifdef SO_TIMESTAMP
- if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SO_TIMESTAMP) {
+ if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_TIMESTAMP) {
struct timeval tv;
memcpy(&tv, CMSG_DATA(cmsg), sizeof(tv));
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/refclock.c new/chrony-2.4.1/refclock.c
--- old/chrony-2.4/refclock.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/refclock.c 2016-11-21 12:03:45.000000000 +0100
@@ -92,7 +92,7 @@
static LOG_FileID logfileid;
-static int valid_sample_time(RCL_Instance instance, struct timeval *tv);
+static int valid_sample_time(RCL_Instance instance, struct timeval *raw, struct timeval *cooked);
static int pps_stratum(RCL_Instance instance, struct timeval *tv);
static void poll_timeout(void *arg);
static void slew_samples(struct timeval *raw, struct timeval *cooked, double dfreq,
@@ -106,6 +106,7 @@
static double filter_get_avg_sample_dispersion(struct MedianFilter *filter);
static void filter_add_sample(struct MedianFilter *filter, struct timeval *sample_time, double offset, double dispersion);
static int filter_get_last_sample(struct MedianFilter *filter, struct timeval *sample_time, double *offset, double *dispersion);
+static int filter_get_samples(struct MedianFilter *filter);
static int filter_select_samples(struct MedianFilter *filter);
static int filter_get_sample(struct MedianFilter *filter, struct timeval *sample_time, double *offset, double *dispersion);
static void filter_slew_samples(struct MedianFilter *filter, struct timeval *when, double dfreq, double doffset);
@@ -372,7 +373,7 @@
/* Make sure the timestamp and offset provided by the driver are sane */
if (!UTI_IsTimeOffsetSane(sample_time, offset) ||
- !valid_sample_time(instance, sample_time))
+ !valid_sample_time(instance, sample_time, &cooked_time))
return 0;
switch (leap) {
@@ -412,7 +413,7 @@
dispersion += instance->precision;
if (!UTI_IsTimeOffsetSane(pulse_time, 0.0) ||
- !valid_sample_time(instance, pulse_time))
+ !valid_sample_time(instance, pulse_time, &cooked_time))
return 0;
rate = instance->pps_rate;
@@ -503,18 +504,25 @@
}
static int
-valid_sample_time(RCL_Instance instance, struct timeval *tv)
+valid_sample_time(RCL_Instance instance, struct timeval *raw, struct timeval *cooked)
{
- struct timeval raw_time;
- double diff;
+ struct timeval raw_time, last_sample_time;
+ double diff, last_offset, last_dispersion;
LCL_ReadRawTime(&raw_time);
- UTI_DiffTimevalsToDouble(&diff, &raw_time, tv);
- if (diff < 0.0 || diff > UTI_Log2ToDouble(instance->poll + 1)) {
- DEBUG_LOG(LOGF_Refclock, "%s refclock sample not valid age=%.6f tv=%s",
- UTI_RefidToString(instance->ref_id), diff, UTI_TimevalToString(tv));
+ UTI_DiffTimevalsToDouble(&diff, &raw_time, raw);
+
+ if (diff < 0.0 || diff > UTI_Log2ToDouble(instance->poll + 1) ||
+ (filter_get_samples(&instance->filter) > 0 &&
+ filter_get_last_sample(&instance->filter, &last_sample_time,
+ &last_offset, &last_dispersion) &&
+ UTI_CompareTimevals(&last_sample_time, cooked) >= 0)) {
+ DEBUG_LOG(LOGF_Refclock, "%s refclock sample not valid age=%.6f raw=%s cooked=%s",
+ UTI_RefidToString(instance->ref_id), diff,
+ UTI_TimevalToString(raw), UTI_TimevalToString(cooked));
return 0;
}
+
return 1;
}
@@ -719,6 +727,12 @@
return 1;
}
+static int
+filter_get_samples(struct MedianFilter *filter)
+{
+ return filter->used;
+}
+
static const struct FilterSample *tmp_sorted_array;
static int
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/smooth.c new/chrony-2.4.1/smooth.c
--- old/chrony-2.4/smooth.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/smooth.c 2016-11-21 12:03:45.000000000 +0100
@@ -137,7 +137,7 @@
static void
update_stages(void)
{
- double s1, s2, s, l1, l2, l3, lc, f, f2;
+ double s1, s2, s, l1, l2, l3, lc, f, f2, l1t[2], l3t[2], err[2];
int i, dir;
/* Prepare the three stages so that the integral of the frequency offset
@@ -146,22 +146,41 @@
s1 = smooth_offset / max_wander;
s2 = smooth_freq * smooth_freq / (2.0 * max_wander * max_wander);
- l1 = l2 = l3 = 0.0;
-
/* Calculate the lengths of the 1st and 3rd stage assuming there is no
- frequency limit. If length of the 1st stage comes out negative, switch
- its direction. */
- for (dir = -1; dir <= 1; dir += 2) {
+ frequency limit. The direction of the 1st stage is selected so that
+ the lengths will not be negative. With extremely small offsets both
+ directions may give a negative length due to numerical errors, so select
+ the one which gives a smaller error. */
+
+ for (i = 0, dir = -1; i <= 1; i++, dir += 2) {
+ err[i] = 0.0;
s = dir * s1 + s2;
- if (s >= 0.0) {
- l3 = sqrt(s);
- l1 = l3 - dir * smooth_freq / max_wander;
- if (l1 >= 0.0)
- break;
+
+ if (s < 0.0) {
+ err[i] += -s;
+ s = 0.0;
+ }
+
+ l3t[i] = sqrt(s);
+ l1t[i] = l3t[i] - dir * smooth_freq / max_wander;
+
+ if (l1t[i] < 0.0) {
+ err[i] += l1t[i] * l1t[i];
+ l1t[i] = 0.0;
}
}
- assert(dir <= 1 && l1 >= 0.0 && l3 >= 0.0);
+ if (err[0] < err[1]) {
+ l1 = l1t[0];
+ l3 = l3t[0];
+ dir = -1;
+ } else {
+ l1 = l1t[1];
+ l3 = l3t[1];
+ dir = 1;
+ }
+
+ l2 = 0.0;
/* If the limit was reached, shorten 1st+3rd stages and set a 2nd stage */
f = dir * smooth_freq + l1 * max_wander - max_freq;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/sources.c new/chrony-2.4.1/sources.c
--- old/chrony-2.4/sources.c 2016-06-07 11:20:59.000000000 +0200
+++ new/chrony-2.4.1/sources.c 2016-11-21 12:03:45.000000000 +0100
@@ -74,6 +74,7 @@
SRC_WAITS_STATS, /* Others have bad stats, selection postponed */
SRC_STALE, /* Has older samples than others */
SRC_ORPHAN, /* Has stratum equal or larger than orphan stratum */
+ SRC_UNTRUSTED, /* Overlaps trusted sources */
SRC_FALSETICKER, /* Doesn't agree with others */
SRC_JITTERY, /* Scatter worse than other's dispersion (not used) */
SRC_WAITS_SOURCES, /* Not enough sources, selection postponed */
@@ -890,6 +891,9 @@
if (sources[i]->sel_options & SRC_SELECT_REQUIRE)
sel_req_source = 0;
+ } else if (sources[i]->sel_info.lo_limit <= best_lo &&
+ sources[i]->sel_info.hi_limit >= best_hi) {
+ sources[i]->status = SRC_UNTRUSTED;
} else {
sources[i]->status = SRC_FALSETICKER;
}
@@ -1318,6 +1322,7 @@
case SRC_JITTERY:
report->state = RPT_JITTERY;
break;
+ case SRC_UNTRUSTED:
case SRC_WAITS_SOURCES:
case SRC_NONPREFERRED:
case SRC_WAITS_UPDATE:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/chrony-2.4/test/unit/smooth.c new/chrony-2.4.1/test/unit/smooth.c
--- old/chrony-2.4/test/unit/smooth.c 1970-01-01 01:00:00.000000000 +0100
+++ new/chrony-2.4.1/test/unit/smooth.c 2016-11-21 12:03:45.000000000 +0100
@@ -0,0 +1,63 @@
+/*
+ **********************************************************************
+ * Copyright (C) Miroslav Lichvar 2016
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License as
+ * published by the Free Software Foundation.
+ *
+ * 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, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ **********************************************************************
+ */
+
+#include