diff options
Diffstat (limited to 'contrib/ntp/ntpq/ntpq-subs.c')
-rw-r--r-- | contrib/ntp/ntpq/ntpq-subs.c | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/contrib/ntp/ntpq/ntpq-subs.c b/contrib/ntp/ntpq/ntpq-subs.c index 527be098b561..6aded4050c15 100644 --- a/contrib/ntp/ntpq/ntpq-subs.c +++ b/contrib/ntp/ntpq/ntpq-subs.c @@ -1495,7 +1495,7 @@ radiostatus( #endif /* UNUSED */ /* - * when - print how long its been since his last packet arrived + * when - return how long its been since his last packet arrived */ static long when( @@ -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; } @@ -1843,7 +1851,7 @@ doprintpeers( if (!decodets(value, &reftime)) L_CLR(&reftime); } else if (!strcmp("flash", name)) { - decodeuint(value, &flash); + decodeuint(value, &flash); } else { // xprintf(stderr, "UNRECOGNIZED name=%s ", name); } @@ -1931,6 +1939,7 @@ doprintpeers( drlen = strlen(dstadr_refid); makeascii(drlen, dstadr_refid, fp); } + free(drbuf); if (pvl == apeervarlist) { while (drlen++ < 9) xputc(' ', fp); @@ -2452,7 +2461,7 @@ fetch_nonce( return FALSE; } - if ((size_t)rsize <= sizeof(nonce_eq) - 1 || + if (rsize <= sizeof(nonce_eq) - 1 || strncmp(rdata, nonce_eq, sizeof(nonce_eq) - 1)) { xprintf(stderr, "unexpected nonce response format: %.*s\n", (int)rsize, rdata); /* cast is wobbly */ |