Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package chrony for openSUSE:Factory checked 
in at 2021-06-05 23:31:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/chrony (Old)
 and      /work/SRC/openSUSE:Factory/.chrony.new.1898 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "chrony"

Sat Jun  5 23:31:06 2021 rev:28 rq:896714 version:4.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/chrony/chrony.changes    2020-11-02 
09:40:50.681635909 +0100
+++ /work/SRC/openSUSE:Factory/.chrony.new.1898/chrony.changes  2021-06-05 
23:31:35.480444147 +0200
@@ -1,0 +2,107 @@
+Tue Jun  1 12:53:23 UTC 2021 - Reinhard Max <m...@suse.com>
+
+- Update to 4.1
+  * Add support for NTS servers specified by IP address (matching
+    Subject Alternative Name in server certificate)
+  * Add source-specific configuration of trusted certificates
+  * Allow multiple files and directories with trusted certificates
+  * Allow multiple pairs of server keys and certificates
+  * Add copy option to server/pool directive
+  * Increase PPS lock limit to 40% of pulse interval
+  * Perform source selection immediately after loading dump files
+  * Reload dump files for addresses negotiated by NTS-KE server
+  * Update seccomp filter and add less restrictive level
+  * Restart ongoing name resolution on online command
+  * Fix dump files to not include uncorrected offset
+  * Fix initstepslew to accept time from own NTP clients
+  * Reset NTP address and port when no longer negotiated by NTS-KE
+    server
+- Update clknetsim to snapshot f89702d.
+- Refresh chrony.keyring from
+  
https://chrony.tuxfamily.org/gpgkey-8F375C7E8D0EE125A3D3BD51537E2B76F7680DAC.asc
+- Ensure the correct pool packages are installed for openSUSE
+  and SLE (bsc#1180689).
+
+-------------------------------------------------------------------
+Fri Feb  5 09:38:02 UTC 2021 - Reinhard Max <m...@suse.com>
+
+- Enable syscallfilter unconditionally [boo#1181826].
+
+-------------------------------------------------------------------
+Mon Dec  7 09:53:22 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- drop buildrequires on NSS. We need gnutls for NTS anyway and we
+  can do all the other required crypto via nettle+gnutls. no need
+  for another crypto library.
+
+-------------------------------------------------------------------
+Sun Nov  1 22:26:48 UTC 2020 - Marcus Rueckert <mrueck...@suse.de>
+
+- Update to 4.0
+  - Enhancements
+    - Add support for Network Time Security (NTS) authentication
+    - Add support for AES-CMAC keys (AES128, AES256) with Nettle
+    - Add authselectmode directive to control selection of
+      unauthenticated sources
+    - Add binddevice, bindacqdevice, bindcmddevice directives
+    - Add confdir directive to better support fragmented
+      configuration
+    - Add sourcedir directive and "reload sources" command to
+      support dynamic NTP sources specified in files
+    - Add clockprecision directive
+    - Add dscp directive to set Differentiated Services Code Point
+      (DSCP)
+    - Add -L option to limit log messages by severity
+    - Add -p option to print whole configuration with included
+      files
+    - Add -U option to allow start under non-root user
+    - Allow maxsamples to be set to 1 for faster update with -q/-Q
+      option
+    - Avoid replacing NTP sources with sources that have
+      unreachable address
+    - Improve pools to repeat name resolution to get "maxsources"
+      sources
+    - Improve source selection with trusted sources
+    - Improve NTP loop test to prevent synchronisation to itself
+    - Repeat iburst when NTP source is switched from offline state
+      to online
+    - Update clock synchronisation status and leap status more
+      frequently
+    - Update seccomp filter
+    - Add "add pool" command
+    - Add "reset sources" command to drop all measurements
+    - Add authdata command to print details about NTP
+      authentication
+    - Add selectdata command to print details about source
+      selection
+    - Add -N option and sourcename command to print original names
+      of sources
+    - Add -a option to some commands to print also unresolved
+      sources
+    - Add -k, -p, -r options to clients command to select, limit,
+      reset data
+  - Bug fixes
+    - Don???t set interface for NTP responses to allow asymmetric
+      routing
+    - Handle RTCs that don???t support interrupts
+    - Respond to command requests with correct address on
+      multihomed hosts
+  - Removed features
+    - Drop support for RIPEMD keys (RMD128, RMD160, RMD256, RMD320)
+    - Drop support for long (non-standard) MACs in NTPv4 packets
+      (chrony 2.x clients using non-MD5/SHA1 keys need to use
+      option "version 3")
+    - Drop support for line editing with GNU Readline
+- add BuildRequires for gnutls-devel (which also pulls nettle to
+  enable the new features)
+- drop patches which are included in the update:
+  chrony-test-update-processing-of-packet-log.patch
+  chrony-test-fix-util-unit-test-for-NTP-era-split.patch
+- refreshed chrony-config.patch
+- track series file for easier quilt setup
+- added option to turn off testsuite with
+  osc build --without=testsuite
+
+  testsuite still runs by default
+
+-------------------------------------------------------------------

Old:
----
  chrony-3.5.1.tar.gz
  chrony-3.5.1.tar.gz.sig
  chrony-test-fix-util-unit-test-for-NTP-era-split.patch
  chrony-test-update-processing-of-packet-log.patch
  clknetsim-79ffe44.tar.gz

New:
----
  chrony-4.1.tar.gz
  chrony-4.1.tar.gz.sig
  clknetsim-f89702d.tar.gz
  series

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ chrony.spec ++++++
--- /var/tmp/diff_new_pack.pDuLsh/_old  2021-06-05 23:31:36.376445705 +0200
+++ /var/tmp/diff_new_pack.pDuLsh/_new  2021-06-05 23:31:36.380445712 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package chrony
 #
-# Copyright (c) 2020 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,14 +16,17 @@
 #
 
 
+%bcond_without testsuite
+
 %define _systemdutildir %(pkg-config --variable systemdutildir systemd)
-%global clknetsim_ver 79ffe44
+#global clknetsim_ver 79ffe44
+%global clknetsim_ver f89702d
 #Compat macro for new _fillupdir macro introduced in Nov 2017
 %if ! %{defined _fillupdir}
   %define _fillupdir %{_localstatedir}/adm/fillup-templates
 %endif
 Name:           chrony
-Version:        3.5.1
+Version:        4.1
 Release:        0
 Summary:        System Clock Synchronization Client and Server
 License:        GPL-2.0-only
@@ -42,20 +45,19 @@
 Source11:       chrony-tmpfiles
 Source12:       pool.conf.suse
 Source13:       pool.conf.opensuse
+Source99:       series
 # PATCH-MISSING-TAG -- See 
http://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines
 Patch0:         chrony-config.patch
 # Add NTP servers from DHCP when starting service
 Patch1:         chrony-service-helper.patch
 Patch2:         chrony-logrotate.patch
 Patch3:         chrony-service-ordering.patch
-Patch4:         chrony-test-fix-util-unit-test-for-NTP-era-split.patch
-Patch5:         chrony-test-update-processing-of-packet-log.patch
 BuildRequires:  NetworkManager-devel
 BuildRequires:  bison
 BuildRequires:  gcc-c++
+BuildRequires:  gnutls-devel
 BuildRequires:  libcap-devel
 BuildRequires:  libedit-devel
-BuildRequires:  mozilla-nss-devel
 BuildRequires:  pkgconfig
 BuildRequires:  pps-tools-devel
 # The timezone package is needed for the "make check" tests. It can be
@@ -120,6 +122,7 @@
 Conflicts:      otherproviders(%name-pool)
 Requires:       %name = %version
 BuildArch:      noarch
+Supplements:    (chrony and branding-openSUSE)
 RemovePathPostfixes: .opensuse
 
 %description pool-openSUSE
@@ -133,6 +136,7 @@
 Conflicts:      otherproviders(%name-pool)
 Requires:       %name = %version
 BuildArch:      noarch
+Supplements:    (chrony and branding-SLE)
 RemovePathPostfixes: .empty
 
 %description pool-empty
@@ -147,8 +151,6 @@
 %patch1 -p1
 %patch2 -p1
 %patch3
-%patch4 -p1
-%patch5 -p1
 
 # Remove pool statements from the default /etc/chrony.conf. They will
 # be provided by branding packages in /etc/chrony.d/pool.conf .
@@ -175,9 +177,7 @@
 export LDFLAGS="-pie -Wl,-z,relro,-z,now"
 %configure                                  \
   --docdir="%{_docdir}/%{name}"             \
-  %if %{with syscallfilter}
   --enable-scfilter                         \
-  %endif
   --with-user=chrony                        \
   --with-hwclockfile=%{_sysconfdir}/adjtime \
   --with-sendmail=%{_sbindir}/sendmail      \
@@ -191,7 +191,7 @@
 mkdir %{buildroot}%{_sysconfdir}/chrony.d
 install -Dpm 0640 examples/chrony.keys.example \
   %{buildroot}%{_sysconfdir}/chrony.keys
-install -Dpm 0755 examples/chrony.nm-dispatcher \
+install -Dpm 0755 examples/chrony.nm-dispatcher.onoffline \
   %{buildroot}%{_sysconfdir}/NetworkManager/dispatcher.d/20-chrony
 install -Dpm 0755 %{SOURCE3} \
   %{buildroot}%{_sysconfdir}/dhcp/dhclient.d/chrony.sh
@@ -229,6 +229,7 @@
 install -Dpm 644 %{SOURCE12} %{SOURCE13} %{buildroot}/etc/chrony.d
 touch %{buildroot}/etc/chrony.d/pool.conf.empty
 
+%if %{with testsuite}
 %ifnarch %ix86
 %check
 # Set random seed to get deterministic results
@@ -237,6 +238,7 @@
 make %{?_smp_mflags} -C test/simulation/clknetsim
 make %{?_smp_mflags} check
 %endif
+%endif
 
 %pre
 getent group %{name} >/dev/null || groupadd -r %{name}

++++++ chrony-3.5.1.tar.gz -> chrony-4.1.tar.gz ++++++
++++ 40928 lines of diff (skipped)

++++++ chrony-config.patch ++++++
--- /var/tmp/diff_new_pack.pDuLsh/_old  2021-06-05 23:31:36.632446150 +0200
+++ /var/tmp/diff_new_pack.pDuLsh/_new  2021-06-05 23:31:36.636446157 +0200
@@ -1,7 +1,7 @@
-Index: chrony-3.2/examples/chrony.conf.example3
+Index: chrony-4.0/examples/chrony.conf.example3
 ===================================================================
---- chrony-3.2.orig/examples/chrony.conf.example3
-+++ chrony-3.2/examples/chrony.conf.example3
+--- chrony-4.0.orig/examples/chrony.conf.example3
++++ chrony-4.0/examples/chrony.conf.example3
 @@ -27,12 +27,38 @@
  # you can access at http://support.ntp.org/bin/view/Servers/WebHome or
  # you can use servers from the pool.ntp.org project.
@@ -45,7 +45,7 @@
  #######################################################################
  ### AVOIDING POTENTIALLY BOGUS CHANGES TO YOUR CLOCK
  #
-@@ -65,7 +91,7 @@
+@@ -79,7 +105,7 @@
  # immediately so that it doesn't gain or lose any more time.  You
  # generally want this, so it is uncommented.
  
@@ -54,7 +54,7 @@
  
  # If you want to enable NTP authentication with symmetric keys, you will need
  # to uncomment the following line and edit the file to set up the keys.
-@@ -124,8 +150,8 @@ driftfile /var/lib/chrony/drift
+@@ -165,8 +191,8 @@ ntsdumpdir /var/lib/chrony
  # produce some graphs of your system's timekeeping performance, or you
  # need help in debugging a problem.
  

++++++ chrony.keyring ++++++
--- /var/tmp/diff_new_pack.pDuLsh/_old  2021-06-05 23:31:36.700446269 +0200
+++ /var/tmp/diff_new_pack.pDuLsh/_new  2021-06-05 23:31:36.700446269 +0200
@@ -1,116 +1,54 @@
 -----BEGIN PGP PUBLIC KEY BLOCK-----
 
-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
-y2z7tjnVpw==
-=EQrk
+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
+bcAu2uXfRrQxpaqcOg==
+=/wbD
 -----END PGP PUBLIC KEY BLOCK-----

++++++ clknetsim-79ffe44.tar.gz -> clknetsim-f89702d.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/client.c 
new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/client.c
--- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/client.c     
2019-11-26 10:05:32.000000000 +0100
+++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/client.c     
2021-04-21 09:49:16.000000000 +0200
@@ -31,6 +31,7 @@
 #include <time.h>
 #include <stdio.h>
 #include <dlfcn.h>
+#include <fcntl.h>
 #include <sys/un.h>
 #include <unistd.h>
 #include <assert.h>
@@ -46,6 +47,7 @@
 #include <ifaddrs.h>
 #include <linux/types.h>
 #include <linux/ethtool.h>
+#include <linux/pps.h>
 #include <linux/sockios.h>
 #ifdef SO_TIMESTAMPING
 #include <linux/ptp_clock.h>
@@ -75,13 +77,14 @@
 #define SYSCLK_FD 1001
 #define SYSCLK_CLOCKID ((~(clockid_t)SYSCLK_FD << 3) | 3)
 #define SYSCLK_PHC_INDEX 1
+#define PPS_FD 1002
 #define URANDOM_FD 1010
 
 #define MAX_SOCKETS 20
 #define BASE_SOCKET_FD 100
 #define BASE_SOCKET_DEFAULT_PORT 60000
 
-#define MAX_TIMERS 40
+#define MAX_TIMERS 80
 #define BASE_TIMER_ID 0xC1230123
 #define BASE_TIMER_FD 200
 
@@ -93,7 +96,7 @@
 static int (*_fileno)(FILE *stream);
 static int (*_fclose)(FILE *fp);
 static int (*_fcntl)(int fd, int cmd, ...);
-static int (*_open)(const char *pathname, int flags, mode_t mode);
+static int (*_open)(const char *pathname, int flags, ...);
 static ssize_t (*_read)(int fd, void *buf, size_t count);
 static int (*_close)(int fd);
 static int (*_socket)(int domain, int type, int protocol);
@@ -106,6 +109,7 @@
 static void *(*_shmat)(int shmid, const void *shmaddr, int shmflg);
 
 static unsigned int node;
+static int initialized_symbols = 0;
 static int initialized = 0;
 static int clknetsim_fd;
 static int precision_hack = 1;
@@ -193,18 +197,12 @@
 static double shm_refclock_time = 0.0;
 static struct Reply_getrefoffsets refclock_offsets;
 static int refclock_offsets_used = REPLY_GETREFOFFSETS_SIZE;
+static int pps_fds = 0;
 
 static void make_request(int request_id, const void *request_data, int reqlen, 
void *reply, int replylen);
 
-__attribute__((constructor))
-static void init(void) {
-       struct Request_register req;
-       struct Reply_register rep;
-       struct sockaddr_un s = {AF_UNIX, "clknetsim.sock"};
-       const char *env;
-       unsigned int connect_retries = 100; /* 10 seconds */
-
-       if (initialized)
+static void init_symbols(void) {
+       if (initialized_symbols)
                return;
 
        _fopen = (FILE *(*)(const char *path, const char 
*mode))dlsym(RTLD_NEXT, "fopen");
@@ -213,7 +211,7 @@
        _fileno = (int (*)(FILE *stream))dlsym(RTLD_NEXT, "fileno");
        _fclose = (int (*)(FILE *fp))dlsym(RTLD_NEXT, "fclose");
        _fcntl = (int (*)(int fd, int cmd, ...))dlsym(RTLD_NEXT, "fcntl");
-       _open = (int (*)(const char *pathname, int flags, mode_t 
mode))dlsym(RTLD_NEXT, "open");
+       _open = (int (*)(const char *pathname, int flags, ...))dlsym(RTLD_NEXT, 
"open");
        _read = (ssize_t (*)(int fd, void *buf, size_t count))dlsym(RTLD_NEXT, 
"read");
        _close = (int (*)(int fd))dlsym(RTLD_NEXT, "close");
        _socket = (int (*)(int domain, int type, int protocol))dlsym(RTLD_NEXT, 
"socket");
@@ -225,6 +223,24 @@
        _shmget = (int (*)(key_t key, size_t size, int shmflg))dlsym(RTLD_NEXT, 
"shmget");
        _shmat = (void *(*)(int shmid, const void *shmaddr, int 
shmflg))dlsym(RTLD_NEXT, "shmat");
 
+       initialized_symbols = 1;
+}
+
+__attribute__((constructor))
+static void init(void) {
+       unsigned int connect_retries = 100; /* 10 seconds */
+       struct sockaddr_un s = {AF_UNIX, "clknetsim.sock"};
+       struct Request_register req;
+       struct Reply_register rep;
+       const char *env;
+       char command[64];
+       FILE *f;
+
+       if (initialized)
+               return;
+
+       init_symbols();
+
        env = getenv("CLKNETSIM_START_DATE");
        if (env)
                system_time_offset = atol(env);
@@ -241,6 +257,20 @@
        if (env)
                timestamping = atoi(env);
 
+       f = _fopen("/proc/self/comm", "r");
+       if (f) {
+               command[0] = '\0';
+               if (!fgets(command, sizeof (command), f))
+                       ;
+               fclose(f);
+
+               if (strncmp(command, "valgrind", 8) == 0) {
+                       /* don't connect to the server */
+                       initialized = 1;
+                       return;
+               }
+       }
+
        if (fuzz_init()) {
                node = 0;
                subnets = 1;
@@ -296,7 +326,7 @@
        struct Request_packet request;
        int sent, received = 0;
 
-       assert(initialized);
+       init();
 
        if (fuzz_mode) {
                fuzz_process_request(request_id, request_data, reply, replylen);
@@ -386,7 +416,7 @@
        double clock_time, receive_time, round_corr;
        int i;
 
-       if (!shm_refclocks)
+       if (shm_refclocks == 0 && pps_fds == 0)
                return;
 
        make_request(REQ_GETREFSAMPLE, NULL, 0, &r, sizeof (r));
@@ -664,6 +694,16 @@
 int clock_gettime(clockid_t which_clock, struct timespec *tp) {
        double time;
 
+       /* try to allow reading of the clock from other constructors, but
+          prevent a recursive call (e.g. due to a special memory allocator) */
+       if (!initialized) {
+               if (initialized_symbols) {
+                       errno = EINVAL;
+                       return -1;
+               }
+               init();
+       }
+
        switch (which_clock) {
                case CLOCK_REALTIME:
                case CLOCK_REALTIME_COARSE:
@@ -725,7 +765,23 @@
        if (buf->modes & ADJ_SETOFFSET)
                local_time_valid = 0;
 
-       req.timex = *buf;
+       memset(&req, 0, sizeof (req));
+       req.timex.modes = buf->modes;
+       if (buf->modes & ADJ_FREQUENCY)
+               req.timex.freq = buf->freq;
+       if (buf->modes & ADJ_MAXERROR)
+               req.timex.maxerror = buf->maxerror;
+       if (buf->modes & ADJ_STATUS)
+               req.timex.status = buf->status;
+       if ((buf->modes & ADJ_TIMECONST) || (buf->modes & ADJ_TAI))
+               req.timex.constant = buf->constant;
+       if (buf->modes & ADJ_TICK)
+               req.timex.tick = buf->tick;
+       if (buf->modes & ADJ_OFFSET)
+               req.timex.offset = buf->offset;
+       if (buf->modes & ADJ_SETOFFSET)
+               req.timex.time = buf->time;
+
        make_request(REQ_ADJTIMEX, &req, sizeof (req), &rep, sizeof (rep));
        *buf = rep.timex;
        
@@ -925,6 +981,22 @@
                case REPLY_SELECT_NORMAL:
                case REPLY_SELECT_BROADCAST:
                        s = find_recv_socket(&rep);
+
+                       if (s >= 0 && rep.type == MSG_TYPE_TCP_CONNECT &&
+                           !sockets[s].listening && !sockets[s].connected) {
+                               struct Reply_recv recv_rep;
+
+                               /* drop the connection packet and let the 
client repeat the call
+                                  in order to see that the socket is ready for 
writing */
+                               make_request(REQ_RECV, NULL, 0, &recv_rep, 
sizeof (recv_rep));
+
+                               assert(recv_rep.type == MSG_TYPE_TCP_CONNECT);
+                               assert(sockets[s].type == SOCK_STREAM);
+                               sockets[s].connected = 1;
+                               errno = EINTR;
+                               return -1;
+                       }
+
                        recv_fd = s >= 0 ? get_socket_fd(s) : 0;
 
                        /* fetch and drop the packet if no fd is waiting for it 
*/
@@ -940,21 +1012,6 @@
 
                                goto try_again;
                        }
-
-                       if (rep.type == MSG_TYPE_TCP_CONNECT &&
-                           !sockets[s].listening && !sockets[s].connected) {
-                               struct Reply_recv recv_rep;
-
-                               /* drop the connection packet and let the 
client repeat the call
-                                  in order to see that the socket is ready for 
writing */
-                               make_request(REQ_RECV, NULL, 0, &recv_rep, 
sizeof (recv_rep));
-
-                               assert(recv_rep.type == MSG_TYPE_TCP_CONNECT);
-                               assert(sockets[s].type == SOCK_STREAM);
-                               sockets[s].connected = 1;
-                               errno = EINTR;
-                               return -1;
-                       }
                        break;
                default:
                        assert(0);
@@ -1048,7 +1105,7 @@
        tv.tv_usec = usec % 1000000;
 
        r = select(0, NULL, NULL, NULL, &tv);
-       assert(r == 0);
+       assert(r <= 0);
 
        return 0;
 }
@@ -1096,11 +1153,15 @@
 
        /* make sure _fopen is initialized in case it is called from another
           constructor (e.g. OpenSSL's libcrypto) */
-       init();
+       init_symbols();
 
        return _fopen(path, mode);
 }
 
+FILE *fopen64(const char *path, const char *mode) {
+       return fopen(path, mode);
+}
+
 FILE *fdopen(int fd, const char *mode) {
        if (fd == URANDOM_FD)
                return URANDOM_FILE;
@@ -1119,6 +1180,10 @@
        return _fread(ptr, size, nmemb, stream);
 }
 
+size_t __fread_chk(void *ptr, size_t ptrlen, size_t size, size_t nmemb, FILE 
*stream) {
+       return fread(ptr, size, nmemb, stream);
+}
+
 int fileno(FILE *stream) {
        if (stream == URANDOM_FILE)
                return -1;
@@ -1132,18 +1197,34 @@
        return _fclose(fp);
 }
 
-int open(const char *pathname, int flags, mode_t mode) {
-       int r;
+int open(const char *pathname, int flags, ...) {
+       int r, mode_arg = 0;
+       mode_t mode = 0;
+       va_list ap;
+
+       mode_arg = flags & O_CREAT || (flags & O_TMPFILE) == O_TMPFILE;
+
+       if (mode_arg) {
+               va_start(ap, flags);
+               mode = va_arg(ap, mode_t);
+               va_end(ap);
+       }
 
        assert(REFCLK_PHC_INDEX == 0 && SYSCLK_PHC_INDEX == 1);
        if (!strcmp(pathname, "/dev/ptp0"))
                return REFCLK_FD;
        else if (!strcmp(pathname, "/dev/ptp1"))
                return SYSCLK_FD;
+       else if (!strcmp(pathname, "/dev/pps0"))
+               return pps_fds++, PPS_FD;
        else if (!strcmp(pathname, "/dev/urandom"))
                return URANDOM_FD;
 
-       r = _open(pathname, flags, mode);
+       if (mode_arg)
+               r = _open(pathname, flags, mode);
+       else
+               r = _open(pathname, flags);
+
        assert(r < 0 || (r < BASE_SOCKET_FD && r < BASE_TIMER_FD));
 
        return r;
@@ -1174,6 +1255,9 @@
 
        if (fd == REFCLK_FD || fd == SYSCLK_FD || fd == URANDOM_FD) {
                return 0;
+       } else if (fd == PPS_FD) {
+               pps_fds--;
+               return 0;
        } else if ((t = get_timer_from_fd(fd)) >= 0) {
                return timer_delete(get_timerid(t));
        } else if ((s = get_socket_from_fd(fd)) >= 0) {
@@ -1590,6 +1674,35 @@
                ts_config->tx_type = HWTSTAMP_TX_ON;
                ts_config->rx_filter = HWTSTAMP_FILTER_ALL;
 #endif
+       } else if (request == PPS_GETCAP && fd == PPS_FD) {
+               int *mode = va_arg(ap, int *);
+               *mode = PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC;
+       } else if (request == PPS_GETPARAMS && fd == PPS_FD) {
+               struct pps_kparams *params = va_arg(ap, struct pps_kparams *);
+               memset(params, 0, sizeof (*params));
+               params->mode = PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC;
+       } else if (request == PPS_SETPARAMS && fd == PPS_FD) {
+               struct pps_kparams *params = va_arg(ap, struct pps_kparams *);
+               if (params->mode != (PPS_CAPTUREASSERT | PPS_TSFMT_TSPEC))
+                       ret = -1, errno = EINVAL;
+       } else if (request == PPS_FETCH && fd == PPS_FD) {
+               static unsigned long seq = 0;
+               struct pps_fdata *data = va_arg(ap, struct pps_fdata *);
+               memset(&data->info, 0, sizeof (data->info));
+               if (data->timeout.flags & PPS_TIME_INVALID ||
+                   data->timeout.sec > 0 || data->timeout.nsec > 0) {
+                       double d, prev_shm_time = shm_refclock_time;
+                       while (prev_shm_time == shm_refclock_time) {
+                               d = ceil(network_time) - network_time + 0.001;
+                               usleep((d > 0.2 ? d : 0.2) * 1e6);
+                       }
+               }
+               if (shm_refclock_time > 0.0) {
+                       data->info.assert_sequence = ++seq;
+                       data->info.assert_tu.sec = shm_refclock_time;
+                       data->info.assert_tu.nsec = (shm_refclock_time - 
data->info.assert_tu.sec) * 1e9;
+                       data->info.assert_tu.sec += system_time_offset;
+               }
        } else {
                ret = -1;
                errno = EINVAL;
@@ -2387,7 +2500,8 @@
                *res = get_addrinfo(INADDR_ANY, port, type, NULL);
        } else if (inet_aton(node, &addr)) {
                *res = get_addrinfo(ntohl(addr.s_addr), port, type, NULL);
-       } else if (strcmp(node + strlen(node) - 4, ".clk") == 0) {
+       } else if ((strlen(node) > 4 && strcmp(node + strlen(node) - 4, ".clk") 
== 0) ||
+                  (strlen(node) > 5 && strcmp(node + strlen(node) - 5, 
".clk.") == 0)) {
                const char *s = strstr(node, ".net");
                int subnet;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/clknetsim.bash 
new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/clknetsim.bash
--- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/clknetsim.bash       
2019-11-26 10:05:32.000000000 +0100
+++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/clknetsim.bash       
2021-04-21 09:49:16.000000000 +0200
@@ -19,7 +19,7 @@
 
 start_client() {
     local node=$1 client=$2 config=$3 suffix=$4 opts=$5
-    local args=() line lastpid
+    local args=() line lastpid wrapper_options=""
 
     rm -f $CLKNETSIM_TMPDIR/log.$node $CLKNETSIM_TMPDIR/conf.$node
 
@@ -93,9 +93,15 @@
            ;;
     esac
 
+    if [[ $CLKNETSIM_CLIENT_WRAPPER == *valgrind* ]]; then
+           wrapper_options="--log-file=$CLKNETSIM_TMPDIR/valgrind.$node"
+    fi
+
     LD_PRELOAD=$CLKNETSIM_PATH/clknetsim.so \
-    CLKNETSIM_NODE=$node CLKNETSIM_SOCKET=$CLKNETSIM_TMPDIR/sock \
-    $client_wrapper $client$suffix "${args[@]}" &> $CLKNETSIM_TMPDIR/log.$node 
&
+       CLKNETSIM_NODE=$node CLKNETSIM_SOCKET=$CLKNETSIM_TMPDIR/sock \
+       $CLKNETSIM_CLIENT_WRAPPER $wrapper_options \
+       $client$suffix "${args[@]}" &> $CLKNETSIM_TMPDIR/log.$node &
+
     lastpid=$!
     disown $lastpid
 
@@ -103,16 +109,32 @@
 }
 
 start_server() {
-    local nodes=$1 ret=0
+    local nodes=$1 ret=0 wrapper_options=""
     shift
-    $server_wrapper $CLKNETSIM_PATH/clknetsim "$@" -s $CLKNETSIM_TMPDIR/sock \
+
+    if [[ $CLKNETSIM_SERVER_WRAPPER == *valgrind* ]]; then
+           wrapper_options="--log-file=$CLKNETSIM_TMPDIR/valgrind.0"
+    fi
+
+    $CLKNETSIM_SERVER_WRAPPER $wrapper_options \
+       $CLKNETSIM_PATH/clknetsim "$@" -s $CLKNETSIM_TMPDIR/sock \
        $CLKNETSIM_TMPDIR/conf $nodes > $CLKNETSIM_TMPDIR/stats 2> 
$CLKNETSIM_TMPDIR/log
+
     if [ $? -ne 0 ]; then
         echo clknetsim failed 1>&2
         ret=1
     fi
+
     kill $client_pids &> /dev/null
     client_pids=" "
+
+    if ls tmp/valgrind.* &> /dev/null; then
+       if grep -q 'ERROR SUMMARY: [^0]' tmp/valgrind.*; then
+               echo " valgrind error" 1>&2
+               ret=1
+       fi
+    fi
+
     return $ret
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/examples/visclocks.test 
new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/examples/visclocks.test
--- 
old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/examples/visclocks.test  
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/examples/visclocks.test  
    2021-04-21 09:49:16.000000000 +0200
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+CLKNETSIM_PATH=..
+. ../clknetsim.bash
+
+export CLKNETSIM_RANDOM_SEED
+
+CLKNETSIM_RANDOM_SEED=1011
+generate_seq '(sum (* 2e-9 (normal)))' 50000 > freq.input
+CLKNETSIM_RANDOM_SEED=1012
+generate_seq '(+ 1e-5 (* 1e-4 (exponential)))' 10000 > delay_up.input
+CLKNETSIM_RANDOM_SEED=1013
+generate_seq '(+ 1e-5 (* 1e-4 (exponential)))' 10000 > delay_down.input
+CLKNETSIM_RANDOM_SEED=1014
+
+generate_config1 3 0.0 "(file \"freq.input\")" \
+       "(file \"delay_up.input\")" "(file \"delay_down.input\")"
+
+start_client 1 chrony "local stratum 1"
+start_client 2 chrony "server 192.168.123.1 minpoll 6 maxpoll 6 minsamples 32"
+start_client 3 chrony "server 192.168.123.1 minpoll 6 maxpoll 6 maxsamples 16"
+start_server 3 -o log.offset -p log.packets -l 50000
+
+../visclocks.py freq.input log.offset log.packets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/visclocks.py 
new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/visclocks.py
--- old/clknetsim-79ffe448f262d0a411fe44380df94d504b965b2e/visclocks.py 
2019-11-26 10:05:32.000000000 +0100
+++ new/clknetsim-f89702d93d0cf668f70f0ce4bfdc3d732766aacf/visclocks.py 
2021-04-21 09:49:16.000000000 +0200
@@ -29,7 +29,7 @@
 window = pygame.display.set_mode((maxx, maxy))
 font = pygame.font.SysFont("monospace", 12)
 
-pygame.time.set_timer(pygame.USEREVENT, 1000 / 30)
+pygame.time.set_timer(pygame.USEREVENT, 1000 // 60)
 
 white = (255, 255, 255)
 black = (0, 0, 0)
@@ -50,7 +50,7 @@
 
 offset_rms = [ 0, 0, 0, 0 ]
 offset_lock = 0
-delays_shown = 3
+delays_shown = 2
 eof = False
 paused = False
 game_mode = False
@@ -78,7 +78,7 @@
 
     last_line = []
     for line in delay_lines[i]:
-        if len(last_line) == 4 and len(line) == 4 and last_line[2] == "1" and 
line[1] == "1":
+        if len(last_line) == 9 and len(line) == 9 and last_line[2] == "1" and 
line[1] == "1":
             delay1 = float(last_line[3])
             delay2 = float(line[3])
             delays[i].append((int(float(line[0])), (delay1 - delay2) / 2, 
(delay1 + delay2) / 2))
@@ -142,7 +142,7 @@
         if offset == "":
             eof = True
             break
-        offsets.appendleft(map(float, offset.split()))
+        offsets.appendleft(list(map(float, offset.split())))
         while len(offsets) > histsize:
             offsets.pop()
 

++++++ series ++++++
chrony-config.patch -p1
chrony-service-helper.patch -p1
chrony-logrotate.patch -p1
chrony-service-ordering.patch -p0

Reply via email to