From b48e4421debd448eb9a25f6fd592129e6d2b5690 Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Thu, 12 May 2016 15:43:42 +0200 Subject: [PATCH] ntp: don't check for synchronization loop in special reference modes If a special reference mode is enabled, always pass the test for synchronization loop. This allows chronyd using the initstepslew directive (or the -q/-Q option) to accept time from its own clients after restart as is documented in the chrony.conf man page. This was broken since update to NTPv4. --- ntp_core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ntp_core.c b/ntp_core.c index 3d3a612..7942693 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -1348,7 +1348,8 @@ receive_packet(NTP_Packet *message, struct timeval *now, double now_err, NCR_Ins /* Test D requires that the remote peer is not synchronised to us to prevent a synchronisation loop */ - testD = message->stratum <= 1 || pkt_refid != UTI_IPToRefid(&local_addr->ip_addr); + testD = message->stratum <= 1 || REF_GetMode() != REF_ModeNormal || + pkt_refid != UTI_IPToRefid(&local_addr->ip_addr); } else { offset = delay = dispersion = 0.0; sample_time = *now;