diff options
Diffstat (limited to 'ntpdc/ntpdc_ops.c')
-rw-r--r-- | ntpdc/ntpdc_ops.c | 1077 |
1 files changed, 513 insertions, 564 deletions
diff --git a/ntpdc/ntpdc_ops.c b/ntpdc/ntpdc_ops.c index e40016b901cd..9350c8ceaa86 100644 --- a/ntpdc/ntpdc_ops.c +++ b/ntpdc/ntpdc_ops.c @@ -1,5 +1,6 @@ /* - * ntpdc_ops.c - subroutines which are called to perform operations by xntpdc + * ntpdc_ops.c - subroutines which are called to perform operations by + * ntpdc */ #ifdef HAVE_CONFIG_H @@ -10,6 +11,7 @@ #include <stddef.h> #include "ntpdc.h" +#include "ntp_net.h" #include "ntp_control.h" #include "ntp_refclock.h" #include "ntp_stdlib.h" @@ -19,67 +21,73 @@ # include <sys/timex.h> #endif #if !defined(__bsdi__) && !defined(apollo) +#ifdef HAVE_NETINET_IN_H #include <netinet/in.h> #endif +#endif #include <arpa/inet.h> /* + * utility functions + */ +static int checkitems (int, FILE *); +static int checkitemsize (int, int); +static int check1item (int, FILE *); + +/* * Declarations for command handlers in here */ -static int checkitems P((int, FILE *)); -static int checkitemsize P((int, int)); -static int check1item P((int, FILE *)); -static void peerlist P((struct parse *, FILE *)); -static void peers P((struct parse *, FILE *)); -static void doconfig P((struct parse *pcmd, FILE *fp, int mode, int refc)); -static void dmpeers P((struct parse *, FILE *)); -static void dopeers P((struct parse *, FILE *, int)); -static void printpeer P((struct info_peer *, FILE *)); -static void showpeer P((struct parse *, FILE *)); -static void peerstats P((struct parse *, FILE *)); -static void loopinfo P((struct parse *, FILE *)); -static void sysinfo P((struct parse *, FILE *)); -static void sysstats P((struct parse *, FILE *)); -static void iostats P((struct parse *, FILE *)); -static void memstats P((struct parse *, FILE *)); -static void timerstats P((struct parse *, FILE *)); -static void addpeer P((struct parse *, FILE *)); -static void addserver P((struct parse *, FILE *)); -static void addrefclock P((struct parse *, FILE *)); -static void broadcast P((struct parse *, FILE *)); -static void doconfig P((struct parse *, FILE *, int, int)); -static void unconfig P((struct parse *, FILE *)); -static void set P((struct parse *, FILE *)); -static void sys_clear P((struct parse *, FILE *)); -static void doset P((struct parse *, FILE *, int)); -static void reslist P((struct parse *, FILE *)); -static void new_restrict P((struct parse *, FILE *)); -static void unrestrict P((struct parse *, FILE *)); -static void delrestrict P((struct parse *, FILE *)); -static void do_restrict P((struct parse *, FILE *, int)); -static void monlist P((struct parse *, FILE *)); -static void reset P((struct parse *, FILE *)); -static void preset P((struct parse *, FILE *)); -static void readkeys P((struct parse *, FILE *)); -static void trustkey P((struct parse *, FILE *)); -static void untrustkey P((struct parse *, FILE *)); -static void do_trustkey P((struct parse *, FILE *, int)); -static void authinfo P((struct parse *, FILE *)); -static void traps P((struct parse *, FILE *)); -static void addtrap P((struct parse *, FILE *)); -static void clrtrap P((struct parse *, FILE *)); -static void do_addclr_trap P((struct parse *, FILE *, int)); -static void requestkey P((struct parse *, FILE *)); -static void controlkey P((struct parse *, FILE *)); -static void do_changekey P((struct parse *, FILE *, int)); -static void ctlstats P((struct parse *, FILE *)); -static void clockstat P((struct parse *, FILE *)); -static void fudge P((struct parse *, FILE *)); -static void clkbug P((struct parse *, FILE *)); -static void kerninfo P((struct parse *, FILE *)); -static void get_if_stats P((struct parse *, FILE *)); -static void do_if_reload P((struct parse *, FILE *)); +static void peerlist (struct parse *, FILE *); +static void peers (struct parse *, FILE *); +static void doconfig (struct parse *pcmd, FILE *fp, int mode, int refc); +static void dmpeers (struct parse *, FILE *); +static void dopeers (struct parse *, FILE *, int); +static void printpeer (struct info_peer *, FILE *); +static void showpeer (struct parse *, FILE *); +static void peerstats (struct parse *, FILE *); +static void loopinfo (struct parse *, FILE *); +static void sysinfo (struct parse *, FILE *); +static void sysstats (struct parse *, FILE *); +static void iostats (struct parse *, FILE *); +static void memstats (struct parse *, FILE *); +static void timerstats (struct parse *, FILE *); +static void addpeer (struct parse *, FILE *); +static void addserver (struct parse *, FILE *); +static void addrefclock (struct parse *, FILE *); +static void broadcast (struct parse *, FILE *); +static void doconfig (struct parse *, FILE *, int, int); +static void unconfig (struct parse *, FILE *); +static void set (struct parse *, FILE *); +static void sys_clear (struct parse *, FILE *); +static void doset (struct parse *, FILE *, int); +static void reslist (struct parse *, FILE *); +static void new_restrict (struct parse *, FILE *); +static void unrestrict (struct parse *, FILE *); +static void delrestrict (struct parse *, FILE *); +static void do_restrict (struct parse *, FILE *, int); +static void monlist (struct parse *, FILE *); +static void reset (struct parse *, FILE *); +static void preset (struct parse *, FILE *); +static void readkeys (struct parse *, FILE *); +static void trustkey (struct parse *, FILE *); +static void untrustkey (struct parse *, FILE *); +static void do_trustkey (struct parse *, FILE *, int); +static void authinfo (struct parse *, FILE *); +static void traps (struct parse *, FILE *); +static void addtrap (struct parse *, FILE *); +static void clrtrap (struct parse *, FILE *); +static void do_addclr_trap (struct parse *, FILE *, int); +static void requestkey (struct parse *, FILE *); +static void controlkey (struct parse *, FILE *); +static void do_changekey (struct parse *, FILE *, int); +static void ctlstats (struct parse *, FILE *); +static void clockstat (struct parse *, FILE *); +static void fudge (struct parse *, FILE *); +static void clkbug (struct parse *, FILE *); +static void kerninfo (struct parse *, FILE *); +static void get_if_stats (struct parse *, FILE *); +static void do_if_reload (struct parse *, FILE *); /* * Commands we understand. Ntpdc imports this. @@ -221,6 +229,84 @@ struct xcmd opcmds[] = { */ #define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0) +/* + * SET_SS_LEN_IF_PRESENT - used by SET_ADDR, SET_ADDRS macros + */ + +#ifdef ISC_PLATFORM_HAVESALEN +#define SET_SS_LEN_IF_PRESENT(psau) \ + do { \ + (psau)->sa.sa_len = SOCKLEN(psau); \ + } while (0) +#else +#define SET_SS_LEN_IF_PRESENT(psau) do { } while (0) +#endif + +/* + * SET_ADDR - setup address for v4/v6 as needed + */ +#define SET_ADDR(address, v6flag, v4addr, v6addr) \ +do { \ + memset(&(address), 0, sizeof(address)); \ + if (v6flag) { \ + AF(&(address)) = AF_INET6; \ + SOCK_ADDR6(&(address)) = (v6addr); \ + } else { \ + AF(&(address)) = AF_INET; \ + NSRCADR(&(address)) = (v4addr); \ + } \ + SET_SS_LEN_IF_PRESENT(&(address)); \ +} while (0) + + +/* + * SET_ADDRS - setup source and destination addresses for + * v4/v6 as needed + */ +#define SET_ADDRS(a1, a2, info, a1prefix, a2prefix) \ +do { \ + memset(&(a1), 0, sizeof(a1)); \ + memset(&(a2), 0, sizeof(a2)); \ + if ((info)->v6_flag) { \ + AF(&(a1)) = AF_INET6; \ + AF(&(a2)) = AF_INET6; \ + SOCK_ADDR6(&(a1)) = (info)->a1prefix##6; \ + SOCK_ADDR6(&(a2)) = (info)->a2prefix##6; \ + } else { \ + AF(&(a1)) = AF_INET; \ + AF(&(a2)) = AF_INET; \ + NSRCADR(&(a1)) = (info)->a1prefix; \ + NSRCADR(&(a2)) = (info)->a2prefix; \ + } \ + SET_SS_LEN_IF_PRESENT(&(a1)); \ + SET_SS_LEN_IF_PRESENT(&(a2)); \ +} while (0) + + +/* + * SET_ADDRS - setup source and destination addresses for + * v4/v6 as needed + */ +#if 0 +#define SET_ADDR_MASK(address, addrmask, info) \ +do { \ + memset(&(address), 0, sizeof(address)); \ + memset(&(mask), 0, sizeof(mask)); \ + if ((info)->v6_flag) { \ + AF(&(address)) = AF_INET6; \ + AF(&(addrmask)) = AF_INET6; \ + SOCK_ADDR6(&(address)) = (info)->addr6; \ + SOCK_ADDR6(&(addrmask)) = (info)->mask6; \ + } else { \ + AF(&(address)) = AF_INET; \ + AF(&(addrmask)) = AF_INET; \ + NSRCADR(&(address)) = (info)->addr; \ + NSRCADR(&(addrmask)) = (info)->mask; \ + } \ + SET_SS_LEN_IF_PRESENT(&(address)); \ + SET_SS_LEN_IF_PRESENT(&(addrmask)); \ +} while (0) +#endif /* * checkitems - utility to print a message if no items were returned @@ -280,7 +366,6 @@ check1item( } - /* * peerlist - get a short list of peers */ @@ -292,7 +377,7 @@ peerlist( ) { struct info_peer_list *plist; - struct sockaddr_storage paddr; + sockaddr_u paddr; int items; int itemsize; int res; @@ -318,17 +403,7 @@ again: return; while (items > 0) { - memset((char *)&paddr, 0, sizeof(paddr)); - if (plist->v6_flag != 0) { - GET_INADDR6(paddr) = plist->addr6; - paddr.ss_family = AF_INET6; - } else { - GET_INADDR(paddr) = plist->addr; - paddr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - paddr.ss_len = SOCKLEN(&paddr); -#endif + SET_ADDR(paddr, plist->v6_flag, plist->addr, plist->addr6); if ((pcmd->nargs == 0) || ((pcmd->argval->ival == 6) && (plist->v6_flag != 0)) || ((pcmd->argval->ival == 4) && (plist->v6_flag == 0))) @@ -378,8 +453,8 @@ dopeers( ) { struct info_peer_summary *plist; - struct sockaddr_storage dstadr; - struct sockaddr_storage srcadr; + sockaddr_u dstadr; + sockaddr_u srcadr; int items; int itemsize; int ntp_poll; @@ -440,28 +515,12 @@ again: NTOHL_FP(&(plist->offset), &tempts); ntp_poll = 1<<max(min3(plist->ppoll, plist->hpoll, NTP_MAXPOLL), NTP_MINPOLL); - memset((char *)&dstadr, 0, sizeof(dstadr)); - memset((char *)&srcadr, 0, sizeof(srcadr)); - if (plist->v6_flag != 0) { - GET_INADDR6(dstadr) = plist->dstadr6; - GET_INADDR6(srcadr) = plist->srcadr6; - srcadr.ss_family = AF_INET6; - dstadr.ss_family = AF_INET6; - } else { - GET_INADDR(dstadr) = plist->dstadr; - GET_INADDR(srcadr) = plist->srcadr; - srcadr.ss_family = AF_INET; - dstadr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - srcadr.ss_len = SOCKLEN(&srcadr); - dstadr.ss_len = SOCKLEN(&dstadr); -#endif + SET_ADDRS(dstadr, srcadr, plist, dstadr, srcadr); if ((pcmd->nargs == 0) || ((pcmd->argval->ival == 6) && (plist->v6_flag != 0)) || ((pcmd->argval->ival == 4) && (plist->v6_flag == 0))) (void) fprintf(fp, - "%c%-15.15s %-15.15s %2d %4d %3o %7.7s %9.9s %7.7s\n", + "%c%-15.15s %-15.15s %2u %4d %3o %7.7s %9.9s %7.7s\n", c, nntohost(&srcadr), stoa(&dstadr), plist->stratum, ntp_poll, plist->reach, fptoa(NTOHS_FP(plist->delay), 5), @@ -546,25 +605,10 @@ printpeer( { register int i; l_fp tempts; - struct sockaddr_storage srcadr, dstadr; + sockaddr_u srcadr, dstadr; + + SET_ADDRS(dstadr, srcadr, pp, dstadr, srcadr); - memset((char *)&srcadr, 0, sizeof(srcadr)); - memset((char *)&dstadr, 0, sizeof(dstadr)); - if (pp->v6_flag != 0) { - srcadr.ss_family = AF_INET6; - dstadr.ss_family = AF_INET6; - GET_INADDR6(srcadr) = pp->srcadr6; - GET_INADDR6(dstadr) = pp->dstadr6; - } else { - srcadr.ss_family = AF_INET; - dstadr.ss_family = AF_INET; - GET_INADDR(srcadr) = pp->srcadr; - GET_INADDR(dstadr) = pp->dstadr; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - srcadr.ss_len = SOCKLEN(&srcadr); - dstadr.ss_len = SOCKLEN(&dstadr); -#endif (void) fprintf(fp, "remote %s, local %s\n", stoa(&srcadr), stoa(&dstadr)); (void) fprintf(fp, "hmode %s, pmode %s, stratum %d, precision %d\n", @@ -653,6 +697,7 @@ showpeer( struct info_peer *pp; /* 4 is the maximum number of peers which will fit in a packet */ struct info_peer_list *pl, plist[min(MAXARGS, 4)]; + int qitemlim; int qitems; int items; int itemsize; @@ -665,9 +710,10 @@ again: else sendsize = v4sizeof(struct info_peer_list); - for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 4); qitems++) { - if (pcmd->argval[qitems].netnum.ss_family == AF_INET) { - pl->addr = GET_INADDR(pcmd->argval[qitems].netnum); + qitemlim = min(pcmd->nargs, COUNTOF(plist)); + for (qitems = 0, pl = plist; qitems < qitemlim; qitems++) { + if (IS_IPV4(&pcmd->argval[qitems].netnum)) { + pl->addr = NSRCADR(&pcmd->argval[qitems].netnum); if (impl_ver == IMPL_XNTPD) pl->v6_flag = 0; } else { @@ -676,7 +722,7 @@ again: "***Server doesn't understand IPv6 addresses\n"); return; } - pl->addr6 = GET_INADDR6(pcmd->argval[qitems].netnum); + pl->addr6 = SOCK_ADDR6(&pcmd->argval[qitems].netnum); pl->v6_flag = 1; } pl->port = (u_short)s_port; @@ -724,7 +770,8 @@ peerstats( struct info_peer_stats *pp; /* 4 is the maximum number of peers which will fit in a packet */ struct info_peer_list *pl, plist[min(MAXARGS, 4)]; - struct sockaddr_storage src, dst; + sockaddr_u src, dst; + int qitemlim; int qitems; int items; int itemsize; @@ -737,10 +784,12 @@ again: else sendsize = v4sizeof(struct info_peer_list); - memset((char *)plist, 0, sizeof(struct info_peer_list) * min(MAXARGS, 4)); - for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 4); qitems++) { - if (pcmd->argval[qitems].netnum.ss_family == AF_INET) { - pl->addr = GET_INADDR(pcmd->argval[qitems].netnum); + memset(plist, 0, sizeof(plist)); + + qitemlim = min(pcmd->nargs, COUNTOF(plist)); + for (qitems = 0, pl = plist; qitems < qitemlim; qitems++) { + if (IS_IPV4(&pcmd->argval[qitems].netnum)) { + pl->addr = NSRCADR(&pcmd->argval[qitems].netnum); if (impl_ver == IMPL_XNTPD) pl->v6_flag = 0; } else { @@ -749,7 +798,7 @@ again: "***Server doesn't understand IPv6 addresses\n"); return; } - pl->addr6 = GET_INADDR6(pcmd->argval[qitems].netnum); + pl->addr6 = SOCK_ADDR6(&pcmd->argval[qitems].netnum); pl->v6_flag = 1; } pl->port = (u_short)s_port; @@ -778,54 +827,54 @@ again: return; while (items-- > 0) { - memset((char *)&src, 0, sizeof(src)); - memset((char *)&dst, 0, sizeof(dst)); + ZERO_SOCK(&dst); + ZERO_SOCK(&src); if (pp->v6_flag != 0) { - GET_INADDR6(src) = pp->srcadr6; - GET_INADDR6(dst) = pp->dstadr6; - src.ss_family = AF_INET6; - dst.ss_family = AF_INET6; + AF(&dst) = AF_INET6; + AF(&src) = AF_INET6; + SOCK_ADDR6(&dst) = pp->dstadr6; + SOCK_ADDR6(&src) = pp->srcadr6; } else { - GET_INADDR(src) = pp->srcadr; - GET_INADDR(dst) = pp->dstadr; - src.ss_family = AF_INET; - dst.ss_family = AF_INET; + AF(&dst) = AF_INET; + AF(&src) = AF_INET; + NSRCADR(&dst) = pp->dstadr; + NSRCADR(&src) = pp->srcadr; } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - src.ss_len = SOCKLEN(&src); - dst.ss_len = SOCKLEN(&dst); +#ifdef ISC_PLATFORM_HAVESALEN + src.sa.sa_len = SOCKLEN(&src); + dst.sa.sa_len = SOCKLEN(&dst); #endif - (void) fprintf(fp, "remote host: %s\n", - nntohost(&src)); - (void) fprintf(fp, "local interface: %s\n", - stoa(&dst)); - (void) fprintf(fp, "time last received: %lds\n", - (long)ntohl(pp->timereceived)); - (void) fprintf(fp, "time until next send: %lds\n", - (long)ntohl(pp->timetosend)); - (void) fprintf(fp, "reachability change: %lds\n", - (long)ntohl(pp->timereachable)); - (void) fprintf(fp, "packets sent: %ld\n", - (long)ntohl(pp->sent)); - (void) fprintf(fp, "packets received: %ld\n", - (long)ntohl(pp->processed)); - (void) fprintf(fp, "bad authentication: %ld\n", - (long)ntohl(pp->badauth)); - (void) fprintf(fp, "bogus origin: %ld\n", - (long)ntohl(pp->bogusorg)); - (void) fprintf(fp, "duplicate: %ld\n", - (long)ntohl(pp->oldpkt)); - (void) fprintf(fp, "bad dispersion: %ld\n", - (long)ntohl(pp->seldisp)); - (void) fprintf(fp, "bad reference time: %ld\n", - (long)ntohl(pp->selbroken)); - (void) fprintf(fp, "candidate order: %d\n", - (int)pp->candidate); + fprintf(fp, "remote host: %s\n", + nntohost(&src)); + fprintf(fp, "local interface: %s\n", + stoa(&dst)); + fprintf(fp, "time last received: %lus\n", + (u_long)ntohl(pp->timereceived)); + fprintf(fp, "time until next send: %lus\n", + (u_long)ntohl(pp->timetosend)); + fprintf(fp, "reachability change: %lus\n", + (u_long)ntohl(pp->timereachable)); + fprintf(fp, "packets sent: %lu\n", + (u_long)ntohl(pp->sent)); + fprintf(fp, "packets received: %lu\n", + (u_long)ntohl(pp->processed)); + fprintf(fp, "bad authentication: %lu\n", + (u_long)ntohl(pp->badauth)); + fprintf(fp, "bogus origin: %lu\n", + (u_long)ntohl(pp->bogusorg)); + fprintf(fp, "duplicate: %lu\n", + (u_long)ntohl(pp->oldpkt)); + fprintf(fp, "bad dispersion: %lu\n", + (u_long)ntohl(pp->seldisp)); + fprintf(fp, "bad reference time: %lu\n", + (u_long)ntohl(pp->selbroken)); + fprintf(fp, "candidate order: %u\n", + pp->candidate); if (items > 0) - (void) fprintf(fp, "\n"); - (void) fprintf(fp, "flags: "); + fprintf(fp, "\n"); + fprintf(fp, "flags: "); print_pflag(fp, ntohs(pp->flags)); - pp++; + pp++; } } @@ -886,7 +935,7 @@ again: "offset %s, frequency %s, time_const %ld, watchdog %ld\n", lfptoa(&tempts, 6), lfptoa(&temp2ts, 3), - (long)(int32_t)ntohl((u_long)il->compliance), + (long)(int32)ntohl((u_long)il->compliance), (u_long)ntohl((u_long)il->watchdog_timer)); } else { NTOHL_FP(&il->last_offset, &tempts); @@ -896,7 +945,7 @@ again: (void) fprintf(fp, "frequency: %s ppm\n", lfptoa(&tempts, 3)); (void) fprintf(fp, "poll adjust: %ld\n", - (long)(int32_t)ntohl(il->compliance)); + (long)(int32)ntohl(il->compliance)); (void) fprintf(fp, "watchdog timer: %ld s\n", (u_long)ntohl(il->watchdog_timer)); } @@ -914,7 +963,7 @@ sysinfo( ) { struct info_sys *is; - struct sockaddr_storage peeraddr; + sockaddr_u peeraddr; int items; int itemsize; int res; @@ -940,17 +989,8 @@ again: !checkitemsize(itemsize, v4sizeof(struct info_sys))) return; - memset((char *)&peeraddr, 0, sizeof(peeraddr)); - if (is->v6_flag != 0) { - GET_INADDR6(peeraddr) = is->peer6; - peeraddr.ss_family = AF_INET6; - } else { - GET_INADDR(peeraddr) = is->peer; - peeraddr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - peeraddr.ss_len = SOCKLEN(&peeraddr); -#endif + SET_ADDR(peeraddr, is->v6_flag, is->peer, is->peer6); + (void) fprintf(fp, "system peer: %s\n", nntohost(&peeraddr)); (void) fprintf(fp, "system peer mode: %s\n", modetoa(is->peer_mode)); (void) fprintf(fp, "leap indicator: %c%c\n", @@ -1039,30 +1079,30 @@ again: checkitemsize(itemsize, sizeof(struct info_sys_stats)); return; } - fprintf(fp, "time since restart: %ld\n", - (u_long)ntohl(ss->timeup)); - fprintf(fp, "time since reset: %ld\n", + fprintf(fp, "time since restart: %lu\n", + (u_long)ntohl(ss->timeup)); + fprintf(fp, "time since reset: %lu\n", (u_long)ntohl(ss->timereset)); - fprintf(fp, "packets received: %ld\n", + fprintf(fp, "packets received: %lu\n", (u_long)ntohl(ss->received)); - fprintf(fp, "packets processed: %ld\n", + fprintf(fp, "packets processed: %lu\n", (u_long)ntohl(ss->processed)); - fprintf(fp, "current version: %ld\n", - (u_long)ntohl(ss->newversionpkt)); - fprintf(fp, "previous version: %ld\n", - (u_long)ntohl(ss->oldversionpkt)); - fprintf(fp, "bad version: %ld\n", - (u_long)ntohl(ss->unknownversion)); - fprintf(fp, "access denied: %ld\n", + fprintf(fp, "current version: %lu\n", + (u_long)ntohl(ss->newversionpkt)); + fprintf(fp, "previous version: %lu\n", + (u_long)ntohl(ss->oldversionpkt)); + fprintf(fp, "declined: %lu\n", + (u_long)ntohl(ss->unknownversion)); + fprintf(fp, "access denied: %lu\n", (u_long)ntohl(ss->denied)); - fprintf(fp, "bad length or format: %ld\n", - (u_long)ntohl(ss->badlength)); - fprintf(fp, "bad authentication: %ld\n", - (u_long)ntohl(ss->badauth)); + fprintf(fp, "bad length or format: %lu\n", + (u_long)ntohl(ss->badlength)); + fprintf(fp, "bad authentication: %lu\n", + (u_long)ntohl(ss->badauth)); if (itemsize != sizeof(struct info_sys_stats)) return; - fprintf(fp, "rate exceeded: %ld\n", + fprintf(fp, "rate exceeded: %lu\n", (u_long)ntohl(ss->limitrejected)); } @@ -1084,9 +1124,8 @@ iostats( int res; again: - res = doquery(impl_ver, REQ_IO_STATS, 0, 0, 0, (char *)NULL, - &items, &itemsize, (void *)&io, 0, - sizeof(struct info_io_stats)); + res = doquery(impl_ver, REQ_IO_STATS, 0, 0, 0, NULL, &items, + &itemsize, (void *)&io, 0, sizeof(*io)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -1094,38 +1133,38 @@ again: } if (res != 0) - return; + return; if (!check1item(items, fp)) - return; + return; - if (!checkitemsize(itemsize, sizeof(struct info_io_stats))) - return; + if (!checkitemsize(itemsize, sizeof(*io))) + return; - (void) fprintf(fp, "time since reset: %ld\n", - (u_long)ntohl(io->timereset)); - (void) fprintf(fp, "receive buffers: %d\n", - ntohs(io->totalrecvbufs)); - (void) fprintf(fp, "free receive buffers: %d\n", - ntohs(io->freerecvbufs)); - (void) fprintf(fp, "used receive buffers: %d\n", - ntohs(io->fullrecvbufs)); - (void) fprintf(fp, "low water refills: %d\n", - ntohs(io->lowwater)); - (void) fprintf(fp, "dropped packets: %ld\n", - (u_long)ntohl(io->dropped)); - (void) fprintf(fp, "ignored packets: %ld\n", - (u_long)ntohl(io->ignored)); - (void) fprintf(fp, "received packets: %ld\n", - (u_long)ntohl(io->received)); - (void) fprintf(fp, "packets sent: %ld\n", - (u_long)ntohl(io->sent)); - (void) fprintf(fp, "packets not sent: %ld\n", - (u_long)ntohl(io->notsent)); - (void) fprintf(fp, "interrupts handled: %ld\n", - (u_long)ntohl(io->interrupts)); - (void) fprintf(fp, "received by int: %ld\n", - (u_long)ntohl(io->int_received)); + fprintf(fp, "time since reset: %lu\n", + (u_long)ntohl(io->timereset)); + fprintf(fp, "receive buffers: %u\n", + (u_int)ntohs(io->totalrecvbufs)); + fprintf(fp, "free receive buffers: %u\n", + (u_int)ntohs(io->freerecvbufs)); + fprintf(fp, "used receive buffers: %u\n", + (u_int)ntohs(io->fullrecvbufs)); + fprintf(fp, "low water refills: %u\n", + (u_int)ntohs(io->lowwater)); + fprintf(fp, "dropped packets: %lu\n", + (u_long)ntohl(io->dropped)); + fprintf(fp, "ignored packets: %lu\n", + (u_long)ntohl(io->ignored)); + fprintf(fp, "received packets: %lu\n", + (u_long)ntohl(io->received)); + fprintf(fp, "packets sent: %lu\n", + (u_long)ntohl(io->sent)); + fprintf(fp, "packets not sent: %lu\n", + (u_long)ntohl(io->notsent)); + fprintf(fp, "interrupts handled: %lu\n", + (u_long)ntohl(io->interrupts)); + fprintf(fp, "received by int: %lu\n", + (u_long)ntohl(io->int_received)); } @@ -1146,9 +1185,8 @@ memstats( int res; again: - res = doquery(impl_ver, REQ_MEM_STATS, 0, 0, 0, (char *)NULL, - &items, &itemsize, (void *)&mem, 0, - sizeof(struct info_mem_stats)); + res = doquery(impl_ver, REQ_MEM_STATS, 0, 0, 0, NULL, &items, + &itemsize, (void *)&mem, 0, sizeof(*mem)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -1156,35 +1194,34 @@ again: } if (res != 0) - return; + return; if (!check1item(items, fp)) - return; + return; - if (!checkitemsize(itemsize, sizeof(struct info_mem_stats))) - return; + if (!checkitemsize(itemsize, sizeof(*mem))) + return; - (void) fprintf(fp, "time since reset: %ld\n", - (u_long)ntohl(mem->timereset)); - (void) fprintf(fp, "total peer memory: %d\n", - ntohs(mem->totalpeermem)); - (void) fprintf(fp, "free peer memory: %d\n", - ntohs(mem->freepeermem)); - (void) fprintf(fp, "calls to findpeer: %ld\n", - (u_long)ntohl(mem->findpeer_calls)); - (void) fprintf(fp, "new peer allocations: %ld\n", - (u_long)ntohl(mem->allocations)); - (void) fprintf(fp, "peer demobilizations: %ld\n", - (u_long)ntohl(mem->demobilizations)); - - (void) fprintf(fp, "hash table counts: "); + fprintf(fp, "time since reset: %lu\n", + (u_long)ntohl(mem->timereset)); + fprintf(fp, "total peer memory: %u\n", + (u_int)ntohs(mem->totalpeermem)); + fprintf(fp, "free peer memory: %u\n", + (u_int)ntohs(mem->freepeermem)); + fprintf(fp, "calls to findpeer: %lu\n", + (u_long)ntohl(mem->findpeer_calls)); + fprintf(fp, "new peer allocations: %lu\n", + (u_long)ntohl(mem->allocations)); + fprintf(fp, "peer demobilizations: %lu\n", + (u_long)ntohl(mem->demobilizations)); + + fprintf(fp, "hash table counts: "); for (i = 0; i < NTP_HASH_SIZE; i++) { - (void) fprintf(fp, "%4d", (int)mem->hashcount[i]); - if ((i % 8) == 7 && i != (NTP_HASH_SIZE-1)) { - (void) fprintf(fp, "\n "); - } + fprintf(fp, "%4d", (int)mem->hashcount[i]); + if ((i % 8) == 7 && i != (NTP_HASH_SIZE-1)) + fprintf(fp, "\n "); } - (void) fprintf(fp, "\n"); + fprintf(fp, "\n"); } @@ -1205,9 +1242,8 @@ timerstats( int res; again: - res = doquery(impl_ver, REQ_TIMER_STATS, 0, 0, 0, (char *)NULL, - &items, &itemsize, (void *)&tim, 0, - sizeof(struct info_timer_stats)); + res = doquery(impl_ver, REQ_TIMER_STATS, 0, 0, 0, NULL, &items, + &itemsize, (void *)&tim, 0, sizeof(*tim)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -1215,22 +1251,22 @@ again: } if (res != 0) - return; + return; if (!check1item(items, fp)) - return; + return; - if (!checkitemsize(itemsize, sizeof(struct info_timer_stats))) - return; + if (!checkitemsize(itemsize, sizeof(*tim))) + return; - (void) fprintf(fp, "time since reset: %ld\n", - (u_long)ntohl(tim->timereset)); - (void) fprintf(fp, "alarms handled: %ld\n", - (u_long)ntohl(tim->alarms)); - (void) fprintf(fp, "alarm overruns: %ld\n", - (u_long)ntohl(tim->overflows)); - (void) fprintf(fp, "calls to transmit: %ld\n", - (u_long)ntohl(tim->xmtcalls)); + fprintf(fp, "time since reset: %lu\n", + (u_long)ntohl(tim->timereset)); + fprintf(fp, "alarms handled: %lu\n", + (u_long)ntohl(tim->alarms)); + fprintf(fp, "alarm overruns: %lu\n", + (u_long)ntohl(tim->overflows)); + fprintf(fp, "calls to transmit: %lu\n", + (u_long)ntohl(tim->xmtcalls)); } @@ -1292,7 +1328,7 @@ doconfig( struct parse *pcmd, FILE *fp, int mode, - int refc + int refc ) { struct conf_peer cpeer; @@ -1308,18 +1344,19 @@ doconfig( int res; int sendsize; int numtyp; + long val; again: keyid = 0; version = 3; flags = 0; - res = 0; + res = FALSE; cmode = 0; minpoll = NTP_MINDPOLL; maxpoll = NTP_MAXDPOLL; numtyp = 1; if (refc) - numtyp = 5; + numtyp = 5; if (impl_ver == IMPL_XNTPD) sendsize = sizeof(struct conf_peer); @@ -1329,89 +1366,85 @@ again: items = 1; while (pcmd->nargs > items) { if (STREQ(pcmd->argval[items].string, "prefer")) - flags |= CONF_FLAG_PREFER; + flags |= CONF_FLAG_PREFER; else if (STREQ(pcmd->argval[items].string, "burst")) - flags |= CONF_FLAG_BURST; - else if (STREQ(pcmd->argval[items].string, "dynamic")) - (void) fprintf(fp, "Warning: the \"dynamic\" keyword has been obsoleted and will be removed in the next release\n"); + flags |= CONF_FLAG_BURST; else if (STREQ(pcmd->argval[items].string, "iburst")) - flags |= CONF_FLAG_IBURST; + flags |= CONF_FLAG_IBURST; else if (!refc && STREQ(pcmd->argval[items].string, "keyid")) - numtyp = 1; + numtyp = 1; else if (!refc && STREQ(pcmd->argval[items].string, "version")) - numtyp = 2; + numtyp = 2; else if (STREQ(pcmd->argval[items].string, "minpoll")) - numtyp = 3; + numtyp = 3; else if (STREQ(pcmd->argval[items].string, "maxpoll")) - numtyp = 4; + numtyp = 4; else { - long val; if (!atoint(pcmd->argval[items].string, &val)) - numtyp = 0; + numtyp = 0; switch (numtyp) { case 1: - keyid = val; - numtyp = 2; - break; - + keyid = val; + numtyp = 2; + break; + case 2: - version = (u_int) val; - numtyp = 0; - break; + version = (u_int)val; + numtyp = 0; + break; case 3: - minpoll = (u_char)val; - numtyp = 0; - break; + minpoll = (u_char)val; + numtyp = 0; + break; case 4: - maxpoll = (u_char)val; - numtyp = 0; - break; + maxpoll = (u_char)val; + numtyp = 0; + break; case 5: - cmode = (u_char)val; - numtyp = 0; - break; + cmode = (u_char)val; + numtyp = 0; + break; default: - (void) fprintf(fp, "*** '%s' not understood\n", - pcmd->argval[items].string); - res++; - numtyp = 0; + fprintf(fp, "*** '%s' not understood\n", + pcmd->argval[items].string); + res = TRUE; + numtyp = 0; } if (val < 0) { - (void) fprintf(stderr, - "***Value '%s' should be unsigned\n", - pcmd->argval[items].string); - res++; + fprintf(stderr, + "*** Value '%s' should be unsigned\n", + pcmd->argval[items].string); + res = TRUE; } - } - items++; + } + items++; } if (keyid > 0) - flags |= CONF_FLAG_AUTHENABLE; - if (version > NTP_VERSION || - version < NTP_OLDVERSION) { - (void)fprintf(fp, "***invalid version number: %u\n", - version); - res++; + flags |= CONF_FLAG_AUTHENABLE; + if (version > NTP_VERSION || version < NTP_OLDVERSION) { + fprintf(fp, "***invalid version number: %u\n", + version); + res = TRUE; } if (minpoll < NTP_MINPOLL || minpoll > NTP_MAXPOLL || maxpoll < NTP_MINPOLL || maxpoll > NTP_MAXPOLL || minpoll > maxpoll) { - (void) fprintf(fp, "***min/max-poll must be within %d..%d\n", - NTP_MINPOLL, NTP_MAXPOLL); - res++; + fprintf(fp, "***min/max-poll must be within %d..%d\n", + NTP_MINPOLL, NTP_MAXPOLL); + res = TRUE; } if (res) - return; + return; - memset((void *)&cpeer, 0, sizeof(cpeer)); + memset(&cpeer, 0, sizeof(cpeer)); - if (pcmd->argval[0].netnum.ss_family == AF_INET) { - cpeer.peeraddr = GET_INADDR(pcmd->argval[0].netnum); + if (IS_IPV4(&pcmd->argval[0].netnum)) { + cpeer.peeraddr = NSRCADR(&pcmd->argval[0].netnum); if (impl_ver == IMPL_XNTPD) cpeer.v6_flag = 0; } else { @@ -1420,7 +1453,7 @@ again: "***Server doesn't understand IPv6 addresses\n"); return; } - cpeer.peeraddr6 = GET_INADDR6(pcmd->argval[0].netnum); + cpeer.peeraddr6 = SOCK_ADDR6(&pcmd->argval[0].netnum); cpeer.v6_flag = 1; } cpeer.hmode = (u_char) mode; @@ -1465,6 +1498,7 @@ unconfig( { /* 8 is the maximum number of peers which will fit in a packet */ struct conf_unpeer *pl, plist[min(MAXARGS, 8)]; + int qitemlim; int qitems; int items; int itemsize; @@ -1478,9 +1512,10 @@ again: else sendsize = v4sizeof(struct conf_unpeer); - for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 8); qitems++) { - if (pcmd->argval[0].netnum.ss_family == AF_INET) { - pl->peeraddr = GET_INADDR(pcmd->argval[qitems].netnum); + qitemlim = min(pcmd->nargs, COUNTOF(plist)); + for (qitems = 0, pl = plist; qitems < qitemlim; qitems++) { + if (IS_IPV4(&pcmd->argval[0].netnum)) { + pl->peeraddr = NSRCADR(&pcmd->argval[qitems].netnum); if (impl_ver == IMPL_XNTPD) pl->v6_flag = 0; } else { @@ -1490,7 +1525,7 @@ again: return; } pl->peeraddr6 = - GET_INADDR6(pcmd->argval[qitems].netnum); + SOCK_ADDR6(&pcmd->argval[qitems].netnum); pl->v6_flag = 1; } pl = (struct conf_unpeer *)((char *)pl + sendsize); @@ -1546,7 +1581,6 @@ doset( int req ) { - /* 8 is the maximum number of peers which will fit in a packet */ struct conf_sys_flags sys; int items; int itemsize; @@ -1632,7 +1666,7 @@ static struct resflags resflagsV3[] = { { "lptrap", RES_LPTRAP }, { "limited", RES_LIMITED }, { "version", RES_VERSION }, - { "kod", RES_DEMOBILIZE }, + { "kod", RES_KOD }, { "timeout", RES_TIMEOUT }, { "", 0 } @@ -1656,8 +1690,8 @@ reslist( ) { struct info_restrict *rl; - struct sockaddr_storage resaddr; - struct sockaddr_storage maskaddr; + sockaddr_u resaddr; + sockaddr_u maskaddr; int items; int itemsize; int res; @@ -1697,27 +1731,12 @@ again: "=====================================================================\n"); while (items > 0) { - memset((char *)&resaddr, 0, sizeof(resaddr)); - memset((char *)&maskaddr, 0, sizeof(maskaddr)); + SET_ADDRS(resaddr, maskaddr, rl, addr, mask); if (rl->v6_flag != 0) { - GET_INADDR6(resaddr) = rl->addr6; - GET_INADDR6(maskaddr) = rl->mask6; - resaddr.ss_family = AF_INET6; - maskaddr.ss_family = AF_INET6; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - resaddr.ss_len = SOCKLEN(&resaddr); -#endif addr = nntohost(&resaddr); } else { - GET_INADDR(resaddr) = rl->addr; - GET_INADDR(maskaddr) = rl->mask; - resaddr.ss_family = AF_INET; - maskaddr.ss_family = AF_INET; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - resaddr.ss_len = SOCKLEN(&resaddr); -#endif if ((rl->mask == (u_int32)0xffffffff)) - addr = nntohost(&resaddr); + addr = nntohost(&resaddr); else addr = stoa(&resaddr); } @@ -1759,11 +1778,11 @@ again: } if (flagstr[0] == '\0') - (void) strcpy(flagstr, "none"); + strcpy(flagstr, "none"); if (!skip) - (void) fprintf(fp, "%-15.15s %-15.15s %9ld %s\n", - addr, mask, (u_long)count, flagstr); + fprintf(fp, "%-15.15s %-15.15s %9lu %s\n", + addr, mask, (u_long)count, flagstr); rl++; items--; } @@ -1844,23 +1863,23 @@ again: else sendsize = v4sizeof(struct conf_restrict); - if (pcmd->argval[0].netnum.ss_family == AF_INET) { - cres.addr = GET_INADDR(pcmd->argval[0].netnum); - cres.mask = GET_INADDR(pcmd->argval[1].netnum); + if (IS_IPV4(&pcmd->argval[0].netnum)) { + cres.addr = NSRCADR(&pcmd->argval[0].netnum); + cres.mask = NSRCADR(&pcmd->argval[1].netnum); if (impl_ver == IMPL_XNTPD) cres.v6_flag = 0; } else { if (impl_ver == IMPL_XNTPD_OLD) { fprintf(stderr, - "***Server doesn't understand IPv6 addresses\n"); + "***Server doesn't understand IPv6 addresses\n"); return; } - cres.addr6 = GET_INADDR6(pcmd->argval[0].netnum); + cres.addr6 = SOCK_ADDR6(&pcmd->argval[0].netnum); cres.v6_flag = 1; } cres.flags = 0; cres.mflags = 0; - err = 0; + err = FALSE; for (res = 2; res < pcmd->nargs; res++) { if (STREQ(pcmd->argval[res].string, "ntpport")) { cres.mflags |= RESM_NTPONLY; @@ -1868,20 +1887,20 @@ again: for (i = 0; resflagsV3[i].bit != 0; i++) { if (STREQ(pcmd->argval[res].string, resflagsV3[i].str)) - break; + break; } if (resflagsV3[i].bit != 0) { cres.flags |= resflagsV3[i].bit; if (req_code == REQ_UNRESTRICT) { - (void) fprintf(fp, - "Flag %s inappropriate\n", - resflagsV3[i].str); - err++; + fprintf(fp, + "Flag %s inappropriate\n", + resflagsV3[i].str); + err = TRUE; } } else { - (void) fprintf(fp, "Unknown flag %s\n", - pcmd->argval[res].string); - err++; + fprintf(fp, "Unknown flag %s\n", + pcmd->argval[res].string); + err = TRUE; } } } @@ -1892,21 +1911,21 @@ again: * Make sure mask for default address is zero. Otherwise, * make sure mask bits are contiguous. */ - if (pcmd->argval[0].netnum.ss_family == AF_INET) { + if (IS_IPV4(&pcmd->argval[0].netnum)) { if (cres.addr == 0) { cres.mask = 0; } else { num = ntohl(cres.mask); for (bit = 0x80000000; bit != 0; bit >>= 1) - if ((num & bit) == 0) - break; + if ((num & bit) == 0) + break; for ( ; bit != 0; bit >>= 1) - if ((num & bit) != 0) - break; + if ((num & bit) != 0) + break; if (bit != 0) { - (void) fprintf(fp, "Invalid mask %s\n", - numtoa(cres.mask)); - err++; + fprintf(fp, "Invalid mask %s\n", + numtoa(cres.mask)); + err = TRUE; } } } else { @@ -1914,11 +1933,10 @@ again: } if (err) - return; + return; - res = doquery(impl_ver, req_code, 1, 1, - sendsize, (char *)&cres, &items, - &itemsize, &dummy, 0, sizeof(struct conf_restrict)); + res = doquery(impl_ver, req_code, 1, 1, sendsize, (char *)&cres, + &items, &itemsize, &dummy, 0, sizeof(cres)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -1942,8 +1960,8 @@ monlist( ) { char *struct_star; - struct sockaddr_storage addr; - struct sockaddr_storage dstadr; + sockaddr_u addr; + sockaddr_u dstadr; int items; int itemsize; int res; @@ -1982,39 +2000,23 @@ again: struct info_monitor_1 *ml = (struct info_monitor_1 *) struct_star; (void) fprintf(fp, - "remote address port local address count m ver code avgint lstint\n"); + "remote address port local address count m ver rstr avgint lstint\n"); (void) fprintf(fp, "===============================================================================\n"); while (items > 0) { - memset((char *)&addr, 0, sizeof(addr)); - memset((char *)&dstadr, 0, sizeof(dstadr)); - if (ml->v6_flag != 0) { - GET_INADDR6(addr) = ml->addr6; - addr.ss_family = AF_INET6; - GET_INADDR6(dstadr) = ml->daddr6; - dstadr.ss_family = AF_INET6; - } else { - GET_INADDR(addr) = ml->addr; - addr.ss_family = AF_INET; - GET_INADDR(dstadr) = ml->daddr; - dstadr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - addr.ss_len = SOCKLEN(&addr); - dstadr.ss_len = SOCKLEN(&dstadr); -#endif + SET_ADDRS(dstadr, addr, ml, daddr, addr); if ((pcmd->nargs == 0) || ((pcmd->argval->ival == 6) && (ml->v6_flag != 0)) || ((pcmd->argval->ival == 4) && (ml->v6_flag == 0))) - (void) fprintf(fp, - "%-22.22s %5d %-15s %8ld %1d %1d %6lx %6lu %7lu\n", + fprintf(fp, + "%-22.22s %5d %-15s %8lu %1u %1u %6lx %6lu %7lu\n", nntohost(&addr), ntohs(ml->port), stoa(&dstadr), (u_long)ntohl(ml->count), ml->mode, ml->version, - (u_long)ntohl(ml->lastdrop), + (u_long)ntohl(ml->restr), (u_long)ntohl(ml->lasttime), (u_long)ntohl(ml->firsttime)); ml++; @@ -2025,32 +2027,22 @@ again: struct info_monitor *ml = (struct info_monitor *) struct_star; (void) fprintf(fp, - " address port count mode ver code avgint lstint\n"); + " address port count mode ver rstr avgint lstint\n"); (void) fprintf(fp, "===============================================================================\n"); while (items > 0) { - memset((char *)&dstadr, 0, sizeof(dstadr)); - if (ml->v6_flag != 0) { - GET_INADDR6(dstadr) = ml->addr6; - dstadr.ss_family = AF_INET6; - } else { - GET_INADDR(dstadr) = ml->addr; - dstadr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - dstadr.ss_len = SOCKLEN(&dstadr); -#endif + SET_ADDR(dstadr, ml->v6_flag, ml->addr, ml->addr6); if ((pcmd->nargs == 0) || ((pcmd->argval->ival == 6) && (ml->v6_flag != 0)) || ((pcmd->argval->ival == 4) && (ml->v6_flag == 0))) (void) fprintf(fp, - "%-25.25s %5d %9ld %4d %2d %9lx %9lu %9lu\n", + "%-25.25s %5u %9lu %4u %2u %9lx %9lu %9lu\n", nntohost(&dstadr), ntohs(ml->port), (u_long)ntohl(ml->count), ml->mode, ml->version, - (u_long)ntohl(ml->lastdrop), + (u_long)ntohl(ml->restr), (u_long)ntohl(ml->lasttime), (u_long)ntohl(ml->firsttime)); ml++; @@ -2063,18 +2055,8 @@ again: (void) fprintf(fp, "======================================================================\n"); while (items > 0) { - memset((char *)&dstadr, 0, sizeof(dstadr)); - if (oml->v6_flag != 0) { - GET_INADDR6(dstadr) = oml->addr6; - dstadr.ss_family = AF_INET6; - } else { - GET_INADDR(dstadr) = oml->addr; - dstadr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - dstadr.ss_len = SOCKLEN(&dstadr); -#endif - (void) fprintf(fp, "%-20.20s %5d %9ld %4d %3d %9lu %9lu\n", + SET_ADDR(dstadr, oml->v6_flag, oml->addr, oml->addr6); + (void) fprintf(fp, "%-20.20s %5u %9lu %4u %3u %9lu %9lu\n", nntohost(&dstadr), ntohs(oml->port), (u_long)ntohl(oml->count), @@ -2175,6 +2157,7 @@ preset( { /* 8 is the maximum number of peers which will fit in a packet */ struct conf_unpeer *pl, plist[min(MAXARGS, 8)]; + int qitemlim; int qitems; int items; int itemsize; @@ -2188,9 +2171,10 @@ again: else sendsize = v4sizeof(struct conf_unpeer); - for (qitems = 0, pl = plist; qitems < min(pcmd->nargs, 8); qitems++) { - if (pcmd->argval[qitems].netnum.ss_family == AF_INET) { - pl->peeraddr = GET_INADDR(pcmd->argval[qitems].netnum); + qitemlim = min(pcmd->nargs, COUNTOF(plist)); + for (qitems = 0, pl = plist; qitems < qitemlim; qitems++) { + if (IS_IPV4(&pcmd->argval[qitems].netnum)) { + pl->peeraddr = NSRCADR(&pcmd->argval[qitems].netnum); if (impl_ver == IMPL_XNTPD) pl->v6_flag = 0; } else { @@ -2200,7 +2184,7 @@ again: return; } pl->peeraddr6 = - GET_INADDR6(pcmd->argval[qitems].netnum); + SOCK_ADDR6(&pcmd->argval[qitems].netnum); pl->v6_flag = 1; } pl = (struct conf_unpeer *)((char *)pl + sendsize); @@ -2332,9 +2316,8 @@ authinfo( int res; again: - res = doquery(impl_ver, REQ_AUTHINFO, 0, 0, 0, (char *)NULL, - &items, &itemsize, (void *)&ia, 0, - sizeof(struct info_auth)); + res = doquery(impl_ver, REQ_AUTHINFO, 0, 0, 0, NULL, &items, + &itemsize, (void *)&ia, 0, sizeof(*ia)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -2342,32 +2325,32 @@ again: } if (res != 0) - return; + return; if (!check1item(items, fp)) - return; + return; - if (!checkitemsize(itemsize, sizeof(struct info_auth))) - return; + if (!checkitemsize(itemsize, sizeof(*ia))) + return; - (void) fprintf(fp, "time since reset: %ld\n", - (u_long)ntohl(ia->timereset)); - (void) fprintf(fp, "stored keys: %ld\n", - (u_long)ntohl(ia->numkeys)); - (void) fprintf(fp, "free keys: %ld\n", - (u_long)ntohl(ia->numfreekeys)); - (void) fprintf(fp, "key lookups: %ld\n", - (u_long)ntohl(ia->keylookups)); - (void) fprintf(fp, "keys not found: %ld\n", - (u_long)ntohl(ia->keynotfound)); - (void) fprintf(fp, "uncached keys: %ld\n", - (u_long)ntohl(ia->keyuncached)); - (void) fprintf(fp, "encryptions: %ld\n", - (u_long)ntohl(ia->encryptions)); - (void) fprintf(fp, "decryptions: %ld\n", - (u_long)ntohl(ia->decryptions)); - (void) fprintf(fp, "expired keys: %ld\n", - (u_long)ntohl(ia->expired)); + fprintf(fp, "time since reset: %lu\n", + (u_long)ntohl(ia->timereset)); + fprintf(fp, "stored keys: %lu\n", + (u_long)ntohl(ia->numkeys)); + fprintf(fp, "free keys: %lu\n", + (u_long)ntohl(ia->numfreekeys)); + fprintf(fp, "key lookups: %lu\n", + (u_long)ntohl(ia->keylookups)); + fprintf(fp, "keys not found: %lu\n", + (u_long)ntohl(ia->keynotfound)); + fprintf(fp, "uncached keys: %lu\n", + (u_long)ntohl(ia->keyuncached)); + fprintf(fp, "encryptions: %lu\n", + (u_long)ntohl(ia->encryptions)); + fprintf(fp, "decryptions: %lu\n", + (u_long)ntohl(ia->decryptions)); + fprintf(fp, "expired keys: %lu\n", + (u_long)ntohl(ia->expired)); } @@ -2384,7 +2367,7 @@ traps( { int i; struct info_trap *it; - struct sockaddr_storage trap_addr, local_addr; + sockaddr_u trap_addr, local_addr; int items; int itemsize; int res; @@ -2412,23 +2395,7 @@ again: for (i = 0; i < items; i++ ) { if (i != 0) (void) fprintf(fp, "\n"); - memset((char *)&trap_addr, 0, sizeof(trap_addr)); - memset((char *)&local_addr, 0, sizeof(local_addr)); - if (it->v6_flag != 0) { - GET_INADDR6(trap_addr) = it->trap_address6; - GET_INADDR6(local_addr) = it->local_address6; - trap_addr.ss_family = AF_INET6; - local_addr.ss_family = AF_INET6; - } else { - GET_INADDR(trap_addr) = it->trap_address; - GET_INADDR(local_addr) = it->local_address; - trap_addr.ss_family = AF_INET; - local_addr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - trap_addr.ss_len = SOCKLEN(&trap_addr); - local_addr.ss_len = SOCKLEN(&local_addr); -#endif + SET_ADDRS(trap_addr, local_addr, it, trap_address, local_address); (void) fprintf(fp, "address %s, port %d\n", stoa(&trap_addr), ntohs(it->trap_port)); @@ -2502,8 +2469,8 @@ again: else sendsize = v4sizeof(struct conf_trap); - if (pcmd->argval[0].netnum.ss_family == AF_INET) { - ctrap.trap_address = GET_INADDR(pcmd->argval[0].netnum); + if (IS_IPV4(&pcmd->argval[0].netnum)) { + ctrap.trap_address = NSRCADR(&pcmd->argval[0].netnum); if (impl_ver == IMPL_XNTPD) ctrap.v6_flag = 0; } else { @@ -2512,7 +2479,7 @@ again: "***Server doesn't understand IPv6 addresses\n"); return; } - ctrap.trap_address6 = GET_INADDR6(pcmd->argval[0].netnum); + ctrap.trap_address6 = SOCK_ADDR6(&pcmd->argval[0].netnum); ctrap.v6_flag = 1; } ctrap.local_address = 0; @@ -2520,19 +2487,18 @@ again: ctrap.unused = 0; if (pcmd->nargs > 1) { - ctrap.trap_port - = htons((u_short)(pcmd->argval[1].uval & 0xffff)); + ctrap.trap_port = htons((u_short)pcmd->argval[1].uval); if (pcmd->nargs > 2) { - if (pcmd->argval[2].netnum.ss_family != - pcmd->argval[0].netnum.ss_family) { + if (AF(&pcmd->argval[2].netnum) != + AF(&pcmd->argval[0].netnum)) { fprintf(stderr, "***Cannot mix IPv4 and IPv6 addresses\n"); return; } - if (pcmd->argval[2].netnum.ss_family == AF_INET) - ctrap.local_address = GET_INADDR(pcmd->argval[2].netnum); + if (IS_IPV4(&pcmd->argval[2].netnum)) + ctrap.local_address = NSRCADR(&pcmd->argval[2].netnum); else - ctrap.local_address6 = GET_INADDR6(pcmd->argval[2].netnum); + ctrap.local_address6 = SOCK_ADDR6(&pcmd->argval[2].netnum); } } @@ -2631,9 +2597,8 @@ ctlstats( int res; again: - res = doquery(impl_ver, REQ_GET_CTLSTATS, 0, 0, 0, (char *)NULL, - &items, &itemsize, (void *)&ic, 0, - sizeof(struct info_control)); + res = doquery(impl_ver, REQ_GET_CTLSTATS, 0, 0, 0, NULL, &items, + &itemsize, (void *)&ic, 0, sizeof(*ic)); if (res == INFO_ERR_IMPL && impl_ver == IMPL_XNTPD) { impl_ver = IMPL_XNTPD_OLD; @@ -2641,44 +2606,44 @@ again: } if (res != 0) - return; + return; if (!check1item(items, fp)) - return; + return; - if (!checkitemsize(itemsize, sizeof(struct info_control))) - return; + if (!checkitemsize(itemsize, sizeof(*ic))) + return; - (void) fprintf(fp, "time since reset: %ld\n", - (u_long)ntohl(ic->ctltimereset)); - (void) fprintf(fp, "requests received: %ld\n", - (u_long)ntohl(ic->numctlreq)); - (void) fprintf(fp, "responses sent: %ld\n", - (u_long)ntohl(ic->numctlresponses)); - (void) fprintf(fp, "fragments sent: %ld\n", - (u_long)ntohl(ic->numctlfrags)); - (void) fprintf(fp, "async messages sent: %ld\n", - (u_long)ntohl(ic->numasyncmsgs)); - (void) fprintf(fp, "error msgs sent: %ld\n", - (u_long)ntohl(ic->numctlerrors)); - (void) fprintf(fp, "total bad pkts: %ld\n", - (u_long)ntohl(ic->numctlbadpkts)); - (void) fprintf(fp, "packet too short: %ld\n", - (u_long)ntohl(ic->numctltooshort)); - (void) fprintf(fp, "response on input: %ld\n", - (u_long)ntohl(ic->numctlinputresp)); - (void) fprintf(fp, "fragment on input: %ld\n", - (u_long)ntohl(ic->numctlinputfrag)); - (void) fprintf(fp, "error set on input: %ld\n", - (u_long)ntohl(ic->numctlinputerr)); - (void) fprintf(fp, "bad offset on input: %ld\n", - (u_long)ntohl(ic->numctlbadoffset)); - (void) fprintf(fp, "bad version packets: %ld\n", - (u_long)ntohl(ic->numctlbadversion)); - (void) fprintf(fp, "data in pkt too short: %ld\n", - (u_long)ntohl(ic->numctldatatooshort)); - (void) fprintf(fp, "unknown op codes: %ld\n", - (u_long)ntohl(ic->numctlbadop)); + fprintf(fp, "time since reset: %lu\n", + (u_long)ntohl(ic->ctltimereset)); + fprintf(fp, "requests received: %lu\n", + (u_long)ntohl(ic->numctlreq)); + fprintf(fp, "responses sent: %lu\n", + (u_long)ntohl(ic->numctlresponses)); + fprintf(fp, "fragments sent: %lu\n", + (u_long)ntohl(ic->numctlfrags)); + fprintf(fp, "async messages sent: %lu\n", + (u_long)ntohl(ic->numasyncmsgs)); + fprintf(fp, "error msgs sent: %lu\n", + (u_long)ntohl(ic->numctlerrors)); + fprintf(fp, "total bad pkts: %lu\n", + (u_long)ntohl(ic->numctlbadpkts)); + fprintf(fp, "packet too short: %lu\n", + (u_long)ntohl(ic->numctltooshort)); + fprintf(fp, "response on input: %lu\n", + (u_long)ntohl(ic->numctlinputresp)); + fprintf(fp, "fragment on input: %lu\n", + (u_long)ntohl(ic->numctlinputfrag)); + fprintf(fp, "error set on input: %lu\n", + (u_long)ntohl(ic->numctlinputerr)); + fprintf(fp, "bad offset on input: %lu\n", + (u_long)ntohl(ic->numctlbadoffset)); + fprintf(fp, "bad version packets: %lu\n", + (u_long)ntohl(ic->numctlbadversion)); + fprintf(fp, "data in pkt too short: %lu\n", + (u_long)ntohl(ic->numctldatatooshort)); + fprintf(fp, "unknown op codes: %lu\n", + (u_long)ntohl(ic->numctlbadop)); } @@ -2694,6 +2659,7 @@ clockstat( struct info_clock *cl; /* 8 is the maximum number of clocks which will fit in a packet */ u_long clist[min(MAXARGS, 8)]; + int qitemlim; int qitems; int items; int itemsize; @@ -2701,8 +2667,9 @@ clockstat( l_fp ts; struct clktype *clk; - for (qitems = 0; qitems < min(pcmd->nargs, 8); qitems++) - clist[qitems] = GET_INADDR(pcmd->argval[qitems].netnum); + qitemlim = min(pcmd->nargs, COUNTOF(clist)); + for (qitems = 0; qitems < qitemlim; qitems++) + clist[qitems] = NSRCADR(&pcmd->argval[qitems].netnum); again: res = doquery(impl_ver, REQ_GET_CLOCKINFO, 0, qitems, @@ -2715,13 +2682,13 @@ again: } if (res != 0) - return; + return; if (!checkitems(items, fp)) - return; + return; if (!checkitemsize(itemsize, sizeof(struct info_clock))) - return; + return; while (items-- > 0) { (void) fprintf(fp, "clock address: %s\n", @@ -2791,7 +2758,7 @@ fudge( err = 0; memset((char *)&fudgedata, 0, sizeof fudgedata); - fudgedata.clockadr = GET_INADDR(pcmd->argval[0].netnum); + fudgedata.clockadr = NSRCADR(&pcmd->argval[0].netnum); if (STREQ(pcmd->argval[1].string, "time1")) { fudgedata.which = htonl(FUDGE_TIME1); @@ -2866,6 +2833,7 @@ clkbug( /* 8 is the maximum number of clocks which will fit in a packet */ u_long clist[min(MAXARGS, 8)]; u_int32 ltemp; + int qitemlim; int qitems; int items; int itemsize; @@ -2873,8 +2841,9 @@ clkbug( int needsp; l_fp ts; - for (qitems = 0; qitems < min(pcmd->nargs, 8); qitems++) - clist[qitems] = GET_INADDR(pcmd->argval[qitems].netnum); + qitemlim = min(pcmd->nargs, COUNTOF(clist)); + for (qitems = 0; qitems < qitemlim; qitems++) + clist[qitems] = NSRCADR(&pcmd->argval[qitems].netnum); again: res = doquery(impl_ver, REQ_GET_CLKBUGINFO, 0, qitems, @@ -2887,13 +2856,13 @@ again: } if (res != 0) - return; + return; if (!checkitems(items, fp)) - return; + return; if (!checkitemsize(itemsize, sizeof(struct info_clkbug))) - return; + return; while (items-- > 0) { (void) fprintf(fp, "clock address: %s\n", @@ -2990,7 +2959,7 @@ again: tscale = 1e-9; #endif (void)fprintf(fp, "pll offset: %g s\n", - (int32_t)ntohl(ik->offset) * tscale); + (int32)ntohl(ik->offset) * tscale); (void)fprintf(fp, "pll frequency: %s ppm\n", fptoa((s_fp)ntohl(ik->freq), 3)); (void)fprintf(fp, "maximum error: %g s\n", @@ -3082,11 +3051,11 @@ again: (u_long)ntohl(ik->errcnt)); } -#define IF_LIST_FMT "%2d %c %48s %c %c %12.12s %03x %3d %2d %5d %5d %5d %2d %2d %3d %7d\n" -#define IF_LIST_FMT_STR "%2s %c %48s %c %c %12.12s %3s %3s %2s %5s %5s %5s %2s %2s %3s %7s\n" +#define IF_LIST_FMT "%2d %c %48s %c %c %12.12s %03lx %3lu %2lu %5lu %5lu %5lu %2lu %3lu %7lu\n" +#define IF_LIST_FMT_STR "%2s %c %48s %c %c %12.12s %3s %3s %2s %5s %5s %5s %2s %3s %7s\n" #define IF_LIST_AFMT_STR " %48s %c\n" -#define IF_LIST_LABELS "#", 'A', "Address/Mask/Broadcast", 'T', 'E', "IF name", "Flg", "TL", "#M", "recv", "sent", "drop", "S", "IX", "PC", "uptime" -#define IF_LIST_LINE "=====================================================================================================================\n" +#define IF_LIST_LABELS "#", 'A', "Address/Mask/Broadcast", 'T', 'E', "IF name", "Flg", "TL", "#M", "recv", "sent", "drop", "S", "PC", "uptime" +#define IF_LIST_LINE "==================================================================================================================\n" static void iflist( @@ -3098,7 +3067,7 @@ iflist( ) { static char *actions = "?.+-"; - struct sockaddr_storage saddr; + sockaddr_u saddr; if (res != 0) return; @@ -3113,51 +3082,31 @@ iflist( fprintf(fp, IF_LIST_LINE); while (items > 0) { - if (ntohl(ifs->v6_flag)) { - memcpy((char *)&GET_INADDR6(saddr), (char *)&ifs->unaddr.addr6, sizeof(ifs->unaddr.addr6)); - saddr.ss_family = AF_INET6; - } else { - memcpy((char *)&GET_INADDR(saddr), (char *)&ifs->unaddr.addr, sizeof(ifs->unaddr.addr)); - saddr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - saddr.ss_len = SOCKLEN(&saddr); -#endif + SET_ADDR(saddr, ntohl(ifs->v6_flag), + ifs->unaddr.addr.s_addr, ifs->unaddr.addr6); fprintf(fp, IF_LIST_FMT, ntohl(ifs->ifnum), actions[(ifs->action >= 1 && ifs->action < 4) ? ifs->action : 0], stoa((&saddr)), 'A', ifs->ignore_packets ? 'D' : 'E', ifs->name, - ntohl(ifs->flags), - ntohl(ifs->last_ttl), - ntohl(ifs->num_mcast), - ntohl(ifs->received), - ntohl(ifs->sent), - ntohl(ifs->notsent), - ntohl(ifs->scopeid), - ntohl(ifs->ifindex), - ntohl(ifs->peercnt), - ntohl(ifs->uptime)); - - if (ntohl(ifs->v6_flag)) { - memcpy((char *)&GET_INADDR6(saddr), (char *)&ifs->unmask.addr6, sizeof(ifs->unmask.addr6)); - saddr.ss_family = AF_INET6; - } else { - memcpy((char *)&GET_INADDR(saddr), (char *)&ifs->unmask.addr, sizeof(ifs->unmask.addr)); - saddr.ss_family = AF_INET; - } -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - saddr.ss_len = SOCKLEN(&saddr); -#endif + (u_long)ntohl(ifs->flags), + (u_long)ntohl(ifs->last_ttl), + (u_long)ntohl(ifs->num_mcast), + (u_long)ntohl(ifs->received), + (u_long)ntohl(ifs->sent), + (u_long)ntohl(ifs->notsent), + (u_long)ntohl(ifs->scopeid), + (u_long)ntohl(ifs->peercnt), + (u_long)ntohl(ifs->uptime)); + + SET_ADDR(saddr, ntohl(ifs->v6_flag), + ifs->unmask.addr.s_addr, ifs->unmask.addr6); fprintf(fp, IF_LIST_AFMT_STR, stoa(&saddr), 'M'); if (!ntohl(ifs->v6_flag) && ntohl(ifs->flags) & (INT_BCASTOPEN)) { - memcpy((char *)&GET_INADDR(saddr), (char *)&ifs->unbcast.addr, sizeof(ifs->unbcast.addr)); - saddr.ss_family = AF_INET; -#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR - saddr.ss_len = SOCKLEN(&saddr); -#endif + SET_ADDR(saddr, ntohl(ifs->v6_flag), + ifs->unbcast.addr.s_addr, ifs->unbcast.addr6); fprintf(fp, IF_LIST_AFMT_STR, stoa(&saddr), 'B'); } |