diff -up ntp-4.2.6p5/ntpstat-0.5/ntpstat.compat ntp-4.2.6p5/ntpstat-0.5/ntpstat --- ntp-4.2.6p5/ntpstat-0.5/ntpstat.compat 2018-03-20 16:02:33.000000000 +0100 +++ ntp-4.2.6p5/ntpstat-0.5/ntpstat 2019-01-11 16:52:04.003167878 +0100 @@ -116,6 +116,7 @@ get_ntpd_state() { disp=$(parse_rv_field "$output" "rootdisp") distance=$(echo "$delay $disp" | awk '{ printf "%.3f", $1 / 2.0 + $2 }') + : <<'EOF' syspeer_id=$("${NTPQ[@]}" -c associations 2> /dev/null |\ grep 'sys\.peer' | awk '{ print $2 }') || return 4 output=$("${NTPQ[@]}" -c "rv $syspeer_id" 2> /dev/null) || return 5 @@ -124,6 +125,19 @@ get_ntpd_state() { address=$(parse_rv_field "$output" "srcadr") fi poll=$(parse_rv_field "$output" "hpoll") +EOF + + # bug compatibility with original EL7 ntpstat + # - refid interpretted as IP address + # - tc interpretted as poll + # - code 1 (no drift file in NTPv4) printed as server restart in NTPv3 + address=$(parse_rv_field "$output" "refid") + poll=$(parse_rv_field "$output" "tc") + local code=$(parse_rv_field "$output" "status" | \ + awk '{ print and(strtonum($1), 0xf) }') + if [ "$leap" -eq 3 ] && [ "$code" -eq 1 ]; then + leap=4 + fi echo "$leap,$source,$address,$stratum,$distance,$poll" } @@ -176,6 +190,9 @@ if [ "$leap" -ge 0 -a "$leap" -le 2 ]; t fi else printf "unsynchronised\n" + if [ "$leap" -eq 4 ]; then + printf " time server re-starting\n" + fi status=1 fi