summaryrefslogtreecommitdiffstats
path: root/contrib/ntp/ntpdate/ntpdate.c
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/ntp/ntpdate/ntpdate.c')
-rw-r--r--contrib/ntp/ntpdate/ntpdate.c339
1 files changed, 236 insertions, 103 deletions
diff --git a/contrib/ntp/ntpdate/ntpdate.c b/contrib/ntp/ntpdate/ntpdate.c
index 24e2bc8..398d194 100644
--- a/contrib/ntp/ntpdate/ntpdate.c
+++ b/contrib/ntp/ntpdate/ntpdate.c
@@ -46,6 +46,12 @@
# include <sys/resource.h>
#endif /* HAVE_SYS_RESOURCE_H */
+#include <arpa/inet.h>
+
+#ifdef __QNXNTO__
+# include "adjtime.h"
+#endif
+
#ifdef SYS_VXWORKS
# include "ioLib.h"
# include "sockLib.h"
@@ -57,10 +63,17 @@ struct timeval timeout = {0,0};
struct timeval timeout = {60,0};
#endif
+#ifdef HAVE_NETINFO
+#include <netinfo/ni.h>
+#endif
+
#include "recvbuff.h"
#ifdef SYS_WINNT
-# define TARGET_RESOLUTION 1 /* Try for 1-millisecond accuracy
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#define TARGET_RESOLUTION 1 /* Try for 1-millisecond accuracy
on Windows NT timers. */
#pragma comment(lib, "winmm")
#endif /* SYS_WINNT */
@@ -98,12 +111,18 @@ volatile int debug = 0;
/*
* File descriptor masks etc. for call to select
*/
-int fd;
+
+int ai_fam_templ;
+int nbsock;
+SOCKET fd[MAX_AF]; /* support up to 2 sockets */
+int fd_family[MAX_AF]; /* to remember the socket family */
#ifdef HAVE_POLL_H
-struct pollfd fdmask;
+struct pollfd fdmask[MAX_AF];
#else
fd_set fdmask;
+int maxfd;
#endif
+int polltest = 0;
/*
* Initializing flag. All async routines watch this and only do their
@@ -184,6 +203,7 @@ int always_step = 0;
int never_step = 0;
int ntpdatemain P((int, char **));
+
static void transmit P((struct server *));
static void receive P((struct recvbuf *));
static void server_data P((struct server *, s_fp, l_fp *, u_fp));
@@ -191,20 +211,19 @@ static void clock_filter P((struct server *));
static struct server *clock_select P((void));
static int clock_adjust P((void));
static void addserver P((char *));
-static struct server *findserver P((struct sockaddr_in *));
+static struct server *findserver P((struct sockaddr_storage *));
void timer P((void));
static void init_alarm P((void));
#ifndef SYS_WINNT
static RETSIGTYPE alarming P((int));
#endif /* SYS_WINNT */
static void init_io P((void));
-static void sendpkt P((struct sockaddr_in *, struct pkt *, int));
+static void sendpkt P((struct sockaddr_storage *, struct pkt *, int));
void input_handler P((void));
static int l_adj_systime P((l_fp *));
static int l_step_systime P((l_fp *));
-static int getnetnum P((const char *, u_int32 *));
static void printserver P((struct server *, FILE *));
#ifdef SYS_WINNT
@@ -305,6 +324,8 @@ ntpdatemain (
l_fp tmp;
int errflg;
int c;
+ int nfound;
+
#ifdef HAVE_NETINFO
ni_namelist *netinfoservers;
#endif
@@ -313,7 +334,7 @@ ntpdatemain (
wVersionRequested = MAKEWORD(1,1);
if (WSAStartup(wVersionRequested, &wsaData)) {
- msyslog(LOG_ERR, "No useable winsock.dll: %m");
+ netsyslog(LOG_ERR, "No useable winsock.dll: %m");
exit(1);
}
@@ -336,9 +357,15 @@ ntpdatemain (
/*
* Decode argument list
*/
- while ((c = ntp_getopt(argc, argv, "a:bBde:k:o:p:qr:st:uv")) != EOF)
+ while ((c = ntp_getopt(argc, argv, "46a:bBde:k:o:p:qr:st:uv")) != EOF)
switch (c)
{
+ case '4':
+ ai_fam_templ = AF_INET;
+ break;
+ case '6':
+ ai_fam_templ = AF_INET6;
+ break;
case 'a':
c = atoi(ntp_optarg);
sys_authenticate = 1;
@@ -428,8 +455,8 @@ ntpdatemain (
if (errflg) {
(void) fprintf(stderr,
- "usage: %s [-bBdqsuv] [-a key#] [-e delay] [-k file] [-p samples] [-o version#] [-r rate] [-t timeo] server ...\n",
- progname);
+ "usage: %s [-46bBdqsuv] [-a key#] [-e delay] [-k file] [-p samples] [-o version#] [-r rate] [-t timeo] server ...\n",
+ progname);
exit(2);
}
@@ -538,17 +565,20 @@ ntpdatemain (
}
#endif /* SYS_WINNT */
- initializing = 0;
+
+ initializing = 0;
was_alarmed = 0;
rbuflist = (struct recvbuf *)0;
+
while (complete_servers < sys_numservers) {
#ifdef HAVE_POLL_H
- struct pollfd rdfdes;
+ struct pollfd* rdfdes;
+ rdfdes = fdmask;
#else
fd_set rdfdes;
+ rdfdes = fdmask;
#endif
- int nfound;
if (alarm_flag) { /* alarmed? */
was_alarmed = 1;
@@ -560,11 +590,11 @@ ntpdatemain (
/*
* Nothing to do. Wait for something.
*/
- rdfdes = fdmask;
#ifdef HAVE_POLL_H
- nfound = poll(&rdfdes, 1, timeout.tv_sec * 1000);
+ nfound = poll(rdfdes, (unsigned int)nbsock, timeout.tv_sec * 1000);
+
#else
- nfound = select(fd+1, &rdfdes, (fd_set *)0,
+ nfound = select(maxfd, &rdfdes, (fd_set *)0,
(fd_set *)0, &timeout);
#endif
if (nfound > 0)
@@ -579,7 +609,7 @@ ntpdatemain (
#ifndef SYS_WINNT
if (errno != EINTR)
#endif
- msyslog(LOG_ERR,
+ netsyslog(LOG_ERR,
#ifdef HAVE_POLL_H
"poll() error: %m"
#else
@@ -588,7 +618,7 @@ ntpdatemain (
);
} else {
#ifndef SYS_VXWORKS
- msyslog(LOG_DEBUG,
+ netsyslog(LOG_DEBUG,
#ifdef HAVE_POLL_H
"poll(): nfound = %d, error: %m",
#else
@@ -639,6 +669,7 @@ ntpdatemain (
close (fd);
timer_delete(ntpdate_timerid);
#endif
+
return clock_adjust();
}
@@ -656,7 +687,7 @@ transmit(
struct pkt xpkt;
if (debug)
- printf("transmit(%s)\n", ntoa(&server->srcadr));
+ printf("transmit(%s)\n", stoa(&(server->srcadr)));
if (server->filter_nextpt < server->xmtcnt) {
l_fp ts;
@@ -711,14 +742,14 @@ transmit(
if (debug > 1)
printf("transmit auth to %s\n",
- ntoa(&(server->srcadr)));
+ stoa(&(server->srcadr)));
} else {
get_systime(&(server->xmt));
HTONL_FP(&server->xmt, &xpkt.xmt);
sendpkt(&(server->srcadr), &xpkt, LEN_PKT_NOMAC);
if (debug > 1)
- printf("transmit to %s\n", ntoa(&(server->srcadr)));
+ printf("transmit to %s\n", stoa(&(server->srcadr)));
}
/*
@@ -748,7 +779,7 @@ receive(
int is_authentic;
if (debug)
- printf("receive(%s)\n", ntoa(&rbufp->recv_srcadr));
+ printf("receive(%s)\n", stoa(&rbufp->recv_srcadr));
/*
* Check to see if the packet basically looks like something
* intended for us.
@@ -911,7 +942,7 @@ server_data(
u_fp e
)
{
- register int i;
+ u_short i;
i = server->filter_nextpt;
if (i < NTP_SHIFT) {
@@ -919,7 +950,7 @@ server_data(
server->filter_offset[i] = *c;
server->filter_soffset[i] = LFPTOFP(c);
server->filter_error[i] = e;
- server->filter_nextpt = i + 1;
+ server->filter_nextpt = (u_short)(i + 1);
}
}
@@ -1254,14 +1285,14 @@ clock_adjust(void)
if (dostep) {
if (simple_query || l_step_systime(&server->offset)) {
msyslog(LOG_NOTICE, "step time server %s offset %s sec",
- ntoa(&server->srcadr),
+ stoa(&server->srcadr),
lfptoa(&server->offset, 6));
}
} else {
#if !defined SYS_WINNT && !defined SYS_CYGWIN32
if (simple_query || l_adj_systime(&server->offset)) {
msyslog(LOG_NOTICE, "adjust time server %s offset %s sec",
- ntoa(&server->srcadr),
+ stoa(&server->srcadr),
lfptoa(&server->offset, 6));
}
#else
@@ -1293,20 +1324,39 @@ addserver(
)
{
register struct server *server;
- u_int32 netnum;
-
- if (!getnetnum(serv, &netnum)) {
+ /* Address infos structure to store result of getaddrinfo */
+ struct addrinfo *addrResult;
+ /* Address infos structure to store hints for getaddrinfo */
+ struct addrinfo hints;
+ /* Error variable for getaddrinfo */
+ int error;
+ /* Service name */
+ char service[5];
+ strcpy(service, "ntp");
+
+ /* Get host address. Looking for UDP datagram connection. */
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = ai_fam_templ;
+ hints.ai_socktype = SOCK_DGRAM;
+
+ printf("Looking for host %s and service %s\n", serv, service);
+
+ error = getaddrinfo(serv, service, &hints, &addrResult);
+ if (error != 0) {
+ fprintf(stderr, "Error : %s\n", gai_strerror(error));
msyslog(LOG_ERR, "can't find host %s\n", serv);
return;
}
+ else {
+ fprintf(stderr, "host found : %s\n", stohost((struct sockaddr_storage*)addrResult->ai_addr));
+ }
server = (struct server *)emalloc(sizeof(struct server));
memset((char *)server, 0, sizeof(struct server));
- server->srcadr.sin_family = AF_INET;
- server->srcadr.sin_addr.s_addr = netnum;
- server->srcadr.sin_port = htons(NTP_PORT);
-
+ /* For now we only get the first returned server of the addrinfo list */
+ memset(&(server->srcadr), 0, sizeof(struct sockaddr_storage));
+ memcpy(&(server->srcadr), addrResult->ai_addr, addrResult->ai_addrlen);
server->event_time = ++sys_numservers;
if (sys_servers == NULL)
sys_servers = server;
@@ -1322,47 +1372,56 @@ addserver(
/*
* findserver - find a server in the list given its address
+ * ***(For now it isn't totally AF-Independant, to check later..)
*/
static struct server *
findserver(
- struct sockaddr_in *addr
+ struct sockaddr_storage *addr
)
{
- register u_int32 netnum;
struct server *server;
struct server *mc_server;
mc_server = NULL;
- if (htons(addr->sin_port) != NTP_PORT)
+ if (htons(((struct sockaddr_in*)addr)->sin_port) != NTP_PORT)
return 0;
- netnum = addr->sin_addr.s_addr;
for (server = sys_servers; server != NULL;
server = server->next_server) {
- register u_int32 servnum;
- servnum = server->srcadr.sin_addr.s_addr;
- if (netnum == servnum)
+ if (memcmp(addr, &server->srcadr, SOCKLEN(addr))==0)
return server;
- if (IN_MULTICAST(ntohl(servnum)))
+ /* Multicast compatibility to verify here... I'm not sure it's working */
+ if(addr->ss_family == AF_INET) {
+ if (IN_MULTICAST(ntohl(((struct sockaddr_in*)addr)->sin_addr.s_addr)))
+ mc_server = server;
+ }
+ else {
+#ifdef AF_INET6
+ if (IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6*)(&server->srcadr))->sin6_addr))
mc_server = server;
+#else
+ return 0;
+#endif
+ }
}
if (mc_server != NULL) {
+
struct server *sp;
if (mc_server->event_time != 0) {
mc_server->event_time = 0;
complete_servers++;
}
+
server = (struct server *)emalloc(sizeof(struct server));
memset((char *)server, 0, sizeof(struct server));
- server->srcadr.sin_family = AF_INET;
- server->srcadr.sin_addr.s_addr = netnum;
- server->srcadr.sin_port = htons(NTP_PORT);
+ memcpy(&server->srcadr, &addr, sizeof(struct sockaddr_storage));
server->event_time = ++sys_numservers;
+
for (sp = sys_servers; sp->next_server != NULL;
sp = sp->next_server) ;
sp->next_server = server;
@@ -1485,6 +1544,7 @@ init_alarm(void)
itimer.it_interval.tv_sec = itimer.it_value.tv_sec = 0;
itimer.it_interval.tv_usec = 1000000/TIMER_HZ;
itimer.it_value.tv_usec = 1000000/(TIMER_HZ<<1);
+
setitimer(ITIMER_REAL, &itimer, (struct itimerval *)0);
# endif
#if defined SYS_CYGWIN32
@@ -1582,51 +1642,96 @@ init_alarm(void)
static void
init_io(void)
{
+ struct addrinfo *res, *ressave;
+ struct addrinfo hints;
+ char service[5];
+ int optval = 1;
+
/*
* Init buffer free list and stat counters
*/
init_recvbuff(sys_numservers + 2);
+
/*
* Open the socket
*/
+ strcpy(service, "ntp");
+
+ /*
+ * Init hints addrinfo structure
+ */
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_PASSIVE;
+ hints.ai_socktype = SOCK_DGRAM;
+
+ if(getaddrinfo(NULL, service, &hints, &res) != 0) {
+ msyslog(LOG_ERR, "getaddrinfo() failed: %m");
+ exit(1);
+ /*NOTREACHED*/
+ }
+
+ /* Remember the address of the addrinfo structure chain */
+ ressave = res;
+
+ /*
+ * For each structure returned, open and bind socket
+ */
+ for(nbsock = 0; (nbsock < MAX_AF) && res ; res = res->ai_next) {
/* create a datagram (UDP) socket */
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- msyslog(LOG_ERR, "socket() failed: %m");
+ if ((fd[nbsock] = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) < 0) {
+ if (errno == EPROTONOSUPPORT || errno == EAFNOSUPPORT ||
+ errno == EPFNOSUPPORT)
+ continue;
+ netsyslog(LOG_ERR, "socket() failed: %m");
exit(1);
/*NOTREACHED*/
}
+ /* set socket to reuse address */
+ if (setsockopt(fd[nbsock], SOL_SOCKET, SO_REUSEADDR, (void*) &optval, sizeof(optval)) < 0) {
+ netsyslog(LOG_ERR, "setsockopt() SO_REUSEADDR failed: %m");
+ exit(1);
+ /*NOTREACHED*/
+ }
+#ifdef IPV6_V6ONLY
+ /* Restricts AF_INET6 socket to IPv6 communications (see RFC 2553bis-03) */
+ if (res->ai_family == AF_INET6)
+ if (setsockopt(fd[nbsock], IPPROTO_IPV6, IPV6_V6ONLY, (void*) &optval, sizeof(optval)) < 0) {
+ netsyslog(LOG_ERR, "setsockopt() IPV6_V6ONLY failed: %m");
+ exit(1);
+ /*NOTREACHED*/
+ }
+#endif
+
+ /* Remember the socket family in fd_family structure */
+ fd_family[nbsock] = res->ai_family;
/*
* bind the socket to the NTP port
*/
if (!debug && !simple_query && !unpriv_port) {
- struct sockaddr_in addr;
-
- memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
- addr.sin_addr.s_addr = htonl(INADDR_ANY);
- if (bind(fd, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
+ if (bind(fd[nbsock], res->ai_addr, SOCKLEN(res->ai_addr)) < 0) {
#ifndef SYS_WINNT
if (errno == EADDRINUSE)
#else
if (WSAGetLastError() == WSAEADDRINUSE)
#endif /* SYS_WINNT */
- msyslog(LOG_ERR,
+ netsyslog(LOG_ERR,
"the NTP socket is in use, exiting");
else
- msyslog(LOG_ERR, "bind() fails: %m");
+ netsyslog(LOG_ERR, "bind() fails: %m");
exit(1);
}
}
#ifdef HAVE_POLL_H
- fdmask.fd = fd;
- fdmask.events = POLLIN;
+ fdmask[nbsock].fd = fd[nbsock];
+ fdmask[nbsock].events = POLLIN;
#else
- FD_ZERO(&fdmask);
- FD_SET(fd, &fdmask);
+ FD_SET(fd[nbsock], &fdmask);
+ if ((SOCKET) maxfd < fd[nbsock]+1) {
+ maxfd = fd[nbsock]+1;
+ }
#endif
/*
@@ -1637,22 +1742,22 @@ init_io(void)
{
int on = TRUE;
- if (ioctl(fd,FIONBIO, &on) == ERROR) {
- msyslog(LOG_ERR, "ioctl(FIONBIO) fails: %m");
+ if (ioctl(fd[nbsock],FIONBIO, &on) == ERROR) {
+ netsyslog(LOG_ERR, "ioctl(FIONBIO) fails: %m");
exit(1);
}
}
# else /* not SYS_VXWORKS */
# if defined(O_NONBLOCK)
- if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0) {
- msyslog(LOG_ERR, "fcntl(FNDELAY|FASYNC) fails: %m");
+ if (fcntl(fd[nbsock], F_SETFL, O_NONBLOCK) < 0) {
+ netsyslog(LOG_ERR, "fcntl(FNDELAY|FASYNC) fails: %m");
exit(1);
/*NOTREACHED*/
}
# else /* not O_NONBLOCK */
# if defined(FNDELAY)
- if (fcntl(fd, F_SETFL, FNDELAY) < 0) {
- msyslog(LOG_ERR, "fcntl(FNDELAY|FASYNC) fails: %m");
+ if (fcntl(fd[nbsock], F_SETFL, FNDELAY) < 0) {
+ netsyslog(LOG_ERR, "fcntl(FNDELAY|FASYNC) fails: %m");
exit(1);
/*NOTREACHED*/
}
@@ -1662,32 +1767,51 @@ init_io(void)
# endif /* not O_NONBLOCK */
# endif /* SYS_VXWORKS */
#else /* SYS_WINNT */
- if (ioctlsocket(fd, FIONBIO, (u_long *) &on) == SOCKET_ERROR) {
- msyslog(LOG_ERR, "ioctlsocket(FIONBIO) fails: %m");
+ if (ioctlsocket(fd[nbsock], FIONBIO, (u_long *) &on) == SOCKET_ERROR) {
+ netsyslog(LOG_ERR, "ioctlsocket(FIONBIO) fails: %m");
exit(1);
}
#endif /* SYS_WINNT */
+ nbsock++;
+ }
+ freeaddrinfo(ressave);
}
-
/*
* sendpkt - send a packet to the specified destination
*/
static void
sendpkt(
- struct sockaddr_in *dest,
+ struct sockaddr_storage *dest,
struct pkt *pkt,
int len
)
{
+ int i;
int cc;
+ SOCKET sock = 0;
#ifdef SYS_WINNT
DWORD err;
#endif /* SYS_WINNT */
- cc = sendto(fd, (char *)pkt, (size_t)len, 0, (struct sockaddr *)dest,
- sizeof(struct sockaddr_in));
+ /* Find a local family compatible socket to send ntp packet to ntp server */
+ for(i = 0; (i < MAX_AF); i++) {
+ if(dest->ss_family == fd_family[i]) {
+ sock = fd[i];
+ break;
+ }
+ }
+
+ if ( sock == 0 ) {
+ netsyslog(LOG_ERR, "cannot find family compatible socket to send ntp packet");
+ exit(1);
+ /*NOTREACHED*/
+ }
+
+ cc = sendto(sock, (char *)pkt, len, 0, (struct sockaddr *)dest,
+ SOCKLEN(dest));
+
#ifndef SYS_WINNT
if (cc == -1) {
if (errno != EWOULDBLOCK && errno != ENOBUFS)
@@ -1696,7 +1820,7 @@ sendpkt(
err = WSAGetLastError();
if (err != WSAEWOULDBLOCK && err != WSAENOBUFS)
#endif /* SYS_WINNT */
- msyslog(LOG_ERR, "sendto(%s): %m", ntoa(dest));
+ netsyslog(LOG_ERR, "sendto(%s): %m", stohost(dest));
}
}
@@ -1712,22 +1836,49 @@ input_handler(void)
struct timeval tvzero;
int fromlen;
l_fp ts;
+ int i;
#ifdef HAVE_POLL_H
- struct pollfd fds;
+ struct pollfd fds[MAX_AF];
#else
fd_set fds;
#endif
+ int fdc = 0;
/*
* Do a poll to see if we have data
*/
for (;;) {
- fds = fdmask;
tvzero.tv_sec = tvzero.tv_usec = 0;
#ifdef HAVE_POLL_H
- n = poll(&fds, 1, tvzero.tv_sec * 1000);
+ memcpy(fds, fdmask, sizeof(fdmask));
+ n = poll(fds, (unsigned int)nbsock, tvzero.tv_sec * 1000);
+
+ /*
+ * Determine which socket received data
+ */
+
+ for(i=0; i < nbsock; i++) {
+ if(fds[i].revents & POLLIN) {
+ fdc = fd[i];
+ break;
+ }
+ }
+
#else
- n = select(fd+1, &fds, (fd_set *)0, (fd_set *)0, &tvzero);
+ fds = fdmask;
+ n = select(maxfd, &fds, (fd_set *)0, (fd_set *)0, &tvzero);
+
+ /*
+ * Determine which socket received data
+ */
+
+ for(i=0; i < maxfd; i++) {
+ if(FD_ISSET(fd[i], &fds)) {
+ fdc = fd[i];
+ break;
+ }
+ }
+
#endif
/*
@@ -1739,7 +1890,7 @@ input_handler(void)
return;
else if (n == -1) {
if (errno != EINTR)
- msyslog(LOG_ERR,
+ netsyslog(LOG_ERR,
#ifdef HAVE_POLL_H
"poll() error: %m"
#else
@@ -1758,23 +1909,24 @@ input_handler(void)
if (initializing || free_recvbuffs() == 0) {
char buf[100];
+
#ifndef SYS_WINNT
- (void) read(fd, buf, sizeof buf);
+ (void) read(fdc, buf, sizeof buf);
#else
/* NT's _read does not operate on nonblocking sockets
* either recvfrom or ReadFile() has to be used here.
* ReadFile is used in [ntpd]ntp_intres() and ntpdc,
* just to be different use recvfrom() here
*/
- recvfrom(fd, buf, sizeof(buf), 0, (struct sockaddr *)0, NULL);
+ recvfrom(fdc, buf, sizeof(buf), 0, (struct sockaddr *)0, NULL);
#endif /* SYS_WINNT */
continue;
}
rb = get_free_recv_buffer();
- fromlen = sizeof(struct sockaddr_in);
- rb->recv_length = recvfrom(fd, (char *)&rb->recv_pkt,
+ fromlen = sizeof(struct sockaddr_storage);
+ rb->recv_length = recvfrom(fdc, (char *)&rb->recv_pkt,
sizeof(rb->recv_pkt), 0,
(struct sockaddr *)&rb->recv_srcadr, &fromlen);
if (rb->recv_length == -1) {
@@ -1908,25 +2060,6 @@ l_step_systime(
#endif /* SLEWALWAYS */
}
-/*
- * getnetnum - given a host name, return its net number
- */
-static int
-getnetnum(
- const char *host,
- u_int32 *num
- )
-{
- struct hostent *hp;
-
- if (decodenetnum(host, num)) {
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
- memmove((char *)num, hp->h_addr, sizeof(u_int32));
- return (1);
- }
- return (0);
-}
/* XXX ELIMINATE printserver similar in ntptrace.c, ntpdate.c */
/*
@@ -1944,13 +2077,13 @@ printserver(
if (!debug) {
(void) fprintf(fp, "server %s, stratum %d, offset %s, delay %s\n",
- ntoa(&pp->srcadr), pp->stratum,
+ stoa(&pp->srcadr), pp->stratum,
lfptoa(&pp->offset, 6), fptoa((s_fp)pp->delay, 5));
return;
}
(void) fprintf(fp, "server %s, port %d\n",
- ntoa(&pp->srcadr), ntohs(pp->srcadr.sin_port));
+ stoa(&pp->srcadr), ntohs(((struct sockaddr_in*)&(pp->srcadr))->sin_port));
(void) fprintf(fp, "stratum %d, precision %d, leap %c%c, trust %03o\n",
pp->stratum, pp->precision,
@@ -1963,7 +2096,7 @@ printserver(
memmove(junk, (char *)&pp->refid, 4);
str = junk;
} else {
- str = numtoa(pp->refid);
+ str = stoa(&pp->srcadr);
}
(void) fprintf(fp,
"refid [%s], delay %s, dispersion %s\n",
OpenPOWER on IntegriCloud