From: Dave Hart Date: Sun, 30 Jul 2023 19:49:30 +0000 (+0000) Subject: [Bug 3850] ntpq -c apeers breaks column formatting s2 w/refclock refid. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2323b1501a6edcea246965a60b8b69079b2107c1;p=thirdparty%2Fntp.git [Bug 3850] ntpq -c apeers breaks column formatting s2 w/refclock refid. bk: 64c6becaDHCjM9h9k2JEArRY0dezdg --- diff --git a/ChangeLog b/ChangeLog index 244e0c6ee..b04fac441 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ --- +* [Bug 3850] ntpq -c apeers breaks column formatting s2 w/refclock refid. + * [Bug 3846] Use -Wno-format-truncation by default. * [Bug 3841] 4.2.8p17 build break w/ gcc 12 -Wformat-security without -Wformat Need to remove --Wformat-security when removing -Wformat to diff --git a/ntpq/ntpq-subs.c b/ntpq/ntpq-subs.c index 527be098b..e74c2bc45 100644 --- a/ntpq/ntpq-subs.c +++ b/ntpq/ntpq-subs.c @@ -1691,6 +1691,7 @@ doprintpeers( u_int32 u32; const char *dstadr_refid = "0.0.0.0"; const char *serverlocal; + char *drbuf = NULL; size_t drlen; u_long stratum = 0; long ppoll = 0; @@ -1772,12 +1773,13 @@ doprintpeers( } else if (decodenetnum(value, &refidadr)) { if (SOCK_UNSPEC(&refidadr)) dstadr_refid = "0.0.0.0"; - else if (ISREFCLOCKADR(&refidadr)) + else if (ISREFCLOCKADR(&refidadr)) { dstadr_refid = refnumtoa(&refidadr); - else + } else { dstadr_refid = stoa(&refidadr); + } } else { have_da_rid = FALSE; } @@ -1796,19 +1798,25 @@ doprintpeers( } else if (decodenetnum(value, &refidadr)) { if (SOCK_UNSPEC(&refidadr)) dstadr_refid = "0.0.0.0"; - else if (ISREFCLOCKADR(&refidadr)) + else if (ISREFCLOCKADR(&refidadr)) { dstadr_refid = - refnumtoa(&refidadr); - else { - char *buf = emalloc(10); - int i = ntohl(refidadr.sa4.sin_addr.s_addr); - - snprintf(buf, 10, - "%0x", i); - dstadr_refid = buf; - //xprintf(stderr, "apeervarlist refid: value=<%x>\n", i); + refnumtoa(&refidadr); + if (pvl == apeervarlist) { + /* + * restrict refid to + * 8 chars [Bug 3850] + */ + dstadr_refid = + trunc_right( + dstadr_refid, + 8); + } + } else { + drbuf = emalloc(10); + snprintf(drbuf, 10, "%0x", + SRCADR(&refidadr)); + dstadr_refid = drbuf; } - //xprintf(stderr, "apeervarlist refid: value=<%s>\n", value); } else { have_da_rid = FALSE; } @@ -1931,6 +1939,7 @@ doprintpeers( drlen = strlen(dstadr_refid); makeascii(drlen, dstadr_refid, fp); } + free(drbuf); if (pvl == apeervarlist) { while (drlen++ < 9) xputc(' ', fp);