]> git.ipfire.org Git - thirdparty/ntp.git/commitdiff
[Bug 3850] ntpq -c apeers breaks column formatting s2 w/refclock refid.
authorDave Hart <hart@ntp.org>
Sun, 30 Jul 2023 19:49:30 +0000 (19:49 +0000)
committerDave Hart <hart@ntp.org>
Sun, 30 Jul 2023 19:49:30 +0000 (19:49 +0000)
bk: 64c6becaDHCjM9h9k2JEArRY0dezdg

ChangeLog
ntpq/ntpq-subs.c

index 244e0c6ee1600d6e47221000269f5e0dea64fe80..b04fac44170dc9fb93ccde7b3b459168f565031b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 ---
 
+* [Bug 3850] ntpq -c apeers breaks column formatting s2 w/refclock refid.
+             <hart@ntp.org>
 * [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
index 527be098b5611cfe526a7d2b89ed08743ec6dfe9..e74c2bc45e02c8497bacb58dba4ad867b1a43f29 100644 (file)
@@ -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);