summaryrefslogtreecommitdiff
path: root/ntpd/ntp_request.c
diff options
context:
space:
mode:
Diffstat (limited to 'ntpd/ntp_request.c')
-rw-r--r--ntpd/ntp_request.c1205
1 files changed, 463 insertions, 742 deletions
diff --git a/ntpd/ntp_request.c b/ntpd/ntp_request.c
index a3c17e2267e8..157304b6da52 100644
--- a/ntpd/ntp_request.c
+++ b/ntpd/ntp_request.c
@@ -50,78 +50,78 @@ struct req_proc {
short needs_auth; /* true when authentication needed */
short sizeofitem; /* size of request data item (older size)*/
short v6_sizeofitem; /* size of request data item (new size)*/
- void (*handler) (sockaddr_u *, struct interface *,
+ void (*handler) (sockaddr_u *, endpt *,
struct req_pkt *); /* routine to handle request */
};
/*
* Universal request codes
*/
-static struct req_proc univ_codes[] = {
+static const struct req_proc univ_codes[] = {
{ NO_REQUEST, NOAUTH, 0, 0 }
};
-static void req_ack (sockaddr_u *, struct interface *, struct req_pkt *, int);
-static char * prepare_pkt (sockaddr_u *, struct interface *,
+static void req_ack (sockaddr_u *, endpt *, struct req_pkt *, int);
+static void * prepare_pkt (sockaddr_u *, endpt *,
struct req_pkt *, size_t);
-static char * more_pkt (void);
+static void * more_pkt (void);
static void flush_pkt (void);
-static void peer_list (sockaddr_u *, struct interface *, struct req_pkt *);
-static void peer_list_sum (sockaddr_u *, struct interface *, struct req_pkt *);
-static void peer_info (sockaddr_u *, struct interface *, struct req_pkt *);
-static void peer_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void sys_info (sockaddr_u *, struct interface *, struct req_pkt *);
-static void sys_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void mem_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void io_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void timer_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void loop_info (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_conf (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_unconf (sockaddr_u *, struct interface *, struct req_pkt *);
-static void set_sys_flag (sockaddr_u *, struct interface *, struct req_pkt *);
-static void clr_sys_flag (sockaddr_u *, struct interface *, struct req_pkt *);
-static void setclr_flags (sockaddr_u *, struct interface *, struct req_pkt *, u_long);
-static void list_restrict (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_resaddflags (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_ressubflags (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_unrestrict (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_restrict (sockaddr_u *, struct interface *, struct req_pkt *, int);
-static void mon_getlist_0 (sockaddr_u *, struct interface *, struct req_pkt *);
-static void mon_getlist_1 (sockaddr_u *, struct interface *, struct req_pkt *);
-static void reset_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void reset_peer (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_key_reread (sockaddr_u *, struct interface *, struct req_pkt *);
-static void trust_key (sockaddr_u *, struct interface *, struct req_pkt *);
-static void untrust_key (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_trustkey (sockaddr_u *, struct interface *, struct req_pkt *, u_long);
-static void get_auth_info (sockaddr_u *, struct interface *, struct req_pkt *);
-static void reset_auth_stats (void);
-static void req_get_traps (sockaddr_u *, struct interface *, struct req_pkt *);
-static void req_set_trap (sockaddr_u *, struct interface *, struct req_pkt *);
-static void req_clr_trap (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_setclr_trap (sockaddr_u *, struct interface *, struct req_pkt *, int);
-static void set_request_keyid (sockaddr_u *, struct interface *, struct req_pkt *);
-static void set_control_keyid (sockaddr_u *, struct interface *, struct req_pkt *);
-static void get_ctl_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void get_if_stats (sockaddr_u *, struct interface *, struct req_pkt *);
-static void do_if_reload (sockaddr_u *, struct interface *, struct req_pkt *);
+static void list_peers (sockaddr_u *, endpt *, struct req_pkt *);
+static void list_peers_sum (sockaddr_u *, endpt *, struct req_pkt *);
+static void peer_info (sockaddr_u *, endpt *, struct req_pkt *);
+static void peer_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void sys_info (sockaddr_u *, endpt *, struct req_pkt *);
+static void sys_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void mem_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void io_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void timer_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void loop_info (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_conf (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_unconf (sockaddr_u *, endpt *, struct req_pkt *);
+static void set_sys_flag (sockaddr_u *, endpt *, struct req_pkt *);
+static void clr_sys_flag (sockaddr_u *, endpt *, struct req_pkt *);
+static void setclr_flags (sockaddr_u *, endpt *, struct req_pkt *, u_long);
+static void list_restrict4 (restrict_u *, struct info_restrict **);
+static void list_restrict6 (restrict_u *, struct info_restrict **);
+static void list_restrict (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_resaddflags (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_ressubflags (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_unrestrict (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_restrict (sockaddr_u *, endpt *, struct req_pkt *, int);
+static void mon_getlist (sockaddr_u *, endpt *, struct req_pkt *);
+static void reset_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void reset_peer (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_key_reread (sockaddr_u *, endpt *, struct req_pkt *);
+static void trust_key (sockaddr_u *, endpt *, struct req_pkt *);
+static void untrust_key (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_trustkey (sockaddr_u *, endpt *, struct req_pkt *, u_long);
+static void get_auth_info (sockaddr_u *, endpt *, struct req_pkt *);
+static void req_get_traps (sockaddr_u *, endpt *, struct req_pkt *);
+static void req_set_trap (sockaddr_u *, endpt *, struct req_pkt *);
+static void req_clr_trap (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_setclr_trap (sockaddr_u *, endpt *, struct req_pkt *, int);
+static void set_request_keyid (sockaddr_u *, endpt *, struct req_pkt *);
+static void set_control_keyid (sockaddr_u *, endpt *, struct req_pkt *);
+static void get_ctl_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void get_if_stats (sockaddr_u *, endpt *, struct req_pkt *);
+static void do_if_reload (sockaddr_u *, endpt *, struct req_pkt *);
#ifdef KERNEL_PLL
-static void get_kernel_info (sockaddr_u *, struct interface *, struct req_pkt *);
+static void get_kernel_info (sockaddr_u *, endpt *, struct req_pkt *);
#endif /* KERNEL_PLL */
#ifdef REFCLOCK
-static void get_clock_info (sockaddr_u *, struct interface *, struct req_pkt *);
-static void set_clock_fudge (sockaddr_u *, struct interface *, struct req_pkt *);
+static void get_clock_info (sockaddr_u *, endpt *, struct req_pkt *);
+static void set_clock_fudge (sockaddr_u *, endpt *, struct req_pkt *);
#endif /* REFCLOCK */
#ifdef REFCLOCK
-static void get_clkbug_info (sockaddr_u *, struct interface *, struct req_pkt *);
+static void get_clkbug_info (sockaddr_u *, endpt *, struct req_pkt *);
#endif /* REFCLOCK */
/*
* ntpd request codes
*/
-static struct req_proc ntp_codes[] = {
- { REQ_PEER_LIST, NOAUTH, 0, 0, peer_list },
- { REQ_PEER_LIST_SUM, NOAUTH, 0, 0, peer_list_sum },
+static const struct req_proc ntp_codes[] = {
+ { REQ_PEER_LIST, NOAUTH, 0, 0, list_peers },
+ { REQ_PEER_LIST_SUM, NOAUTH, 0, 0, list_peers_sum },
{ REQ_PEER_INFO, NOAUTH, v4sizeof(struct info_peer_list),
sizeof(struct info_peer_list), peer_info},
{ REQ_PEER_STATS, NOAUTH, v4sizeof(struct info_peer_list),
@@ -147,8 +147,8 @@ static struct req_proc ntp_codes[] = {
sizeof(struct conf_restrict), do_ressubflags },
{ REQ_UNRESTRICT, AUTH, v4sizeof(struct conf_restrict),
sizeof(struct conf_restrict), do_unrestrict },
- { REQ_MON_GETLIST, NOAUTH, 0, 0, mon_getlist_0 },
- { REQ_MON_GETLIST_1, NOAUTH, 0, 0, mon_getlist_1 },
+ { REQ_MON_GETLIST, NOAUTH, 0, 0, mon_getlist },
+ { REQ_MON_GETLIST_1, NOAUTH, 0, 0, mon_getlist },
{ REQ_RESET_STATS, AUTH, sizeof(struct reset_flags), 0, reset_stats },
{ REQ_RESET_PEER, AUTH, v4sizeof(struct conf_unpeer),
sizeof(struct conf_unpeer), reset_peer },
@@ -178,7 +178,7 @@ static struct req_proc ntp_codes[] = {
get_clkbug_info },
#endif
{ REQ_IF_STATS, AUTH, 0, 0, get_if_stats },
- { REQ_IF_RELOAD, AUTH, 0, 0, do_if_reload },
+ { REQ_IF_RELOAD, AUTH, 0, 0, do_if_reload },
{ NO_REQUEST, NOAUTH, 0, 0, 0 }
};
@@ -196,14 +196,16 @@ keyid_t info_auth_keyid;
u_long numrequests; /* number of requests we've received */
u_long numresppkts; /* number of resp packets sent with data */
-u_long errorcounter[INFO_ERR_AUTH+1]; /* lazy way to count errors, indexed */
-/* by the error code */
+/*
+ * lazy way to count errors, indexed by the error code
+ */
+u_long errorcounter[MAX_INFO_ERR + 1];
/*
* A hack. To keep the authentication module clear of ntp-ism's, we
* include a time reset variable for its stats here.
*/
-static u_long auth_timereset;
+u_long auth_timereset;
/*
* Response packet used by these routines. Also some state information
@@ -221,7 +223,7 @@ static int databytes;
static char exbuf[RESP_DATA_SIZE];
static int usingexbuf;
static sockaddr_u *toaddr;
-static struct interface *frominter;
+static endpt *frominter;
/*
* init_request - initialize request data
@@ -247,7 +249,7 @@ init_request (void)
static void
req_ack(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt,
int errcode
)
@@ -274,10 +276,10 @@ req_ack(
* prepare_pkt - prepare response packet for transmission, return pointer
* to storage for data item.
*/
-static char *
+static void *
prepare_pkt(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *pkt,
size_t structsize
)
@@ -306,14 +308,14 @@ prepare_pkt(
/*
* return the beginning of the packet buffer.
*/
- return &rpkt.data[0];
+ return &rpkt.u;
}
/*
* more_pkt - return a data pointer for a new item.
*/
-static char *
+static void *
more_pkt(void)
{
/*
@@ -331,7 +333,7 @@ more_pkt(void)
/*
* Copy data out of exbuf into the packet.
*/
- memcpy(&rpkt.data[0], exbuf, (unsigned)itemsize);
+ memcpy(&rpkt.u.data[0], exbuf, (unsigned)itemsize);
seqno++;
databytes = 0;
nitems = 0;
@@ -346,7 +348,7 @@ more_pkt(void)
* More room in packet. Give him the
* next address.
*/
- return &rpkt.data[databytes];
+ return &rpkt.u.data[databytes];
} else {
/*
* No room in packet. Give him the extra
@@ -413,8 +415,8 @@ process_private(
struct req_pkt *inpkt;
struct req_pkt_tail *tailinpkt;
sockaddr_u *srcadr;
- struct interface *inter;
- struct req_proc *proc;
+ endpt *inter;
+ const struct req_proc *proc;
int ec;
short temp_size;
l_fp ftmp;
@@ -613,6 +615,9 @@ process_private(
"process_private: failed auth mod_okay %d\n",
mod_okay);
#endif
+ if (!mod_okay) {
+ sys_restricted++;
+ }
req_ack(srcadr, inter, inpkt, INFO_ERR_AUTH);
return;
}
@@ -654,162 +659,149 @@ process_private(
/*
- * peer_list - send a list of the peers
+ * list_peers - send a list of the peers
*/
static void
-peer_list(
+list_peers(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_peer_list *ip;
- register struct peer *pp;
- register int i;
- register int skip = 0;
+ struct info_peer_list *ip;
+ struct peer *pp;
+ int skip = 0;
ip = (struct info_peer_list *)prepare_pkt(srcadr, inter, inpkt,
v6sizeof(struct info_peer_list));
- for (i = 0; i < NTP_HASH_SIZE && ip != 0; i++) {
- pp = peer_hash[i];
- while (pp != 0 && ip != 0) {
- if (IS_IPV6(&pp->srcadr)) {
- if (client_v6_capable) {
- ip->addr6 = SOCK_ADDR6(&pp->srcadr);
- ip->v6_flag = 1;
- skip = 0;
- } else {
- skip = 1;
- break;
- }
- } else {
- ip->addr = NSRCADR(&pp->srcadr);
- if (client_v6_capable)
- ip->v6_flag = 0;
+ for (pp = peer_list; pp != NULL && ip != NULL; pp = pp->p_link) {
+ if (IS_IPV6(&pp->srcadr)) {
+ if (client_v6_capable) {
+ ip->addr6 = SOCK_ADDR6(&pp->srcadr);
+ ip->v6_flag = 1;
skip = 0;
+ } else {
+ skip = 1;
+ break;
}
+ } else {
+ ip->addr = NSRCADR(&pp->srcadr);
+ if (client_v6_capable)
+ ip->v6_flag = 0;
+ skip = 0;
+ }
- if(!skip) {
- ip->port = NSRCPORT(&pp->srcadr);
- ip->hmode = pp->hmode;
- ip->flags = 0;
- if (pp->flags & FLAG_CONFIG)
- ip->flags |= INFO_FLAG_CONFIG;
- if (pp == sys_peer)
- ip->flags |= INFO_FLAG_SYSPEER;
- if (pp->status == CTL_PST_SEL_SYNCCAND)
- ip->flags |= INFO_FLAG_SEL_CANDIDATE;
- if (pp->status >= CTL_PST_SEL_SYSPEER)
- ip->flags |= INFO_FLAG_SHORTLIST;
- ip = (struct info_peer_list *)more_pkt();
- }
- pp = pp->next;
+ if (!skip) {
+ ip->port = NSRCPORT(&pp->srcadr);
+ ip->hmode = pp->hmode;
+ ip->flags = 0;
+ if (pp->flags & FLAG_CONFIG)
+ ip->flags |= INFO_FLAG_CONFIG;
+ if (pp == sys_peer)
+ ip->flags |= INFO_FLAG_SYSPEER;
+ if (pp->status == CTL_PST_SEL_SYNCCAND)
+ ip->flags |= INFO_FLAG_SEL_CANDIDATE;
+ if (pp->status >= CTL_PST_SEL_SYSPEER)
+ ip->flags |= INFO_FLAG_SHORTLIST;
+ ip = (struct info_peer_list *)more_pkt();
}
- }
+ } /* for pp */
+
flush_pkt();
}
/*
- * peer_list_sum - return extended peer list
+ * list_peers_sum - return extended peer list
*/
static void
-peer_list_sum(
+list_peers_sum(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
register struct info_peer_summary *ips;
register struct peer *pp;
- register int i;
l_fp ltmp;
register int skip;
-#ifdef DEBUG
- if (debug > 2)
- printf("wants peer list summary\n");
-#endif
+ DPRINTF(3, ("wants peer list summary\n"));
+
ips = (struct info_peer_summary *)prepare_pkt(srcadr, inter, inpkt,
v6sizeof(struct info_peer_summary));
- for (i = 0; i < NTP_HASH_SIZE && ips != 0; i++) {
- pp = peer_hash[i];
- while (pp != 0 && ips != 0) {
-#ifdef DEBUG
- if (debug > 3)
- printf("sum: got one\n");
-#endif
- /*
- * Be careful here not to return v6 peers when we
- * want only v4.
- */
- if (IS_IPV6(&pp->srcadr)) {
- if (client_v6_capable) {
- ips->srcadr6 = SOCK_ADDR6(&pp->srcadr);
- ips->v6_flag = 1;
- if (pp->dstadr)
- ips->dstadr6 = SOCK_ADDR6(&pp->dstadr->sin);
- else
- memset(&ips->dstadr6, 0, sizeof(ips->dstadr6));
- skip = 0;
- } else {
- skip = 1;
- break;
- }
+ for (pp = peer_list; pp != NULL && ips != NULL; pp = pp->p_link) {
+ DPRINTF(4, ("sum: got one\n"));
+ /*
+ * Be careful here not to return v6 peers when we
+ * want only v4.
+ */
+ if (IS_IPV6(&pp->srcadr)) {
+ if (client_v6_capable) {
+ ips->srcadr6 = SOCK_ADDR6(&pp->srcadr);
+ ips->v6_flag = 1;
+ if (pp->dstadr)
+ ips->dstadr6 = SOCK_ADDR6(&pp->dstadr->sin);
+ else
+ ZERO(ips->dstadr6);
+ skip = 0;
} else {
- ips->srcadr = NSRCADR(&pp->srcadr);
- if (client_v6_capable)
- ips->v6_flag = 0;
-
- if (pp->dstadr) {
- if (!pp->processed)
+ skip = 1;
+ break;
+ }
+ } else {
+ ips->srcadr = NSRCADR(&pp->srcadr);
+ if (client_v6_capable)
+ ips->v6_flag = 0;
+
+ if (pp->dstadr) {
+ if (!pp->processed)
+ ips->dstadr = NSRCADR(&pp->dstadr->sin);
+ else {
+ if (MDF_BCAST == pp->cast_flags)
+ ips->dstadr = NSRCADR(&pp->dstadr->bcast);
+ else if (pp->cast_flags) {
ips->dstadr = NSRCADR(&pp->dstadr->sin);
- else {
- if (MDF_BCAST == pp->cast_flags)
+ if (!ips->dstadr)
ips->dstadr = NSRCADR(&pp->dstadr->bcast);
- else if (pp->cast_flags) {
- ips->dstadr = NSRCADR(&pp->dstadr->sin);
- if (!ips->dstadr)
- ips->dstadr = NSRCADR(&pp->dstadr->bcast);
- }
}
- } else
- ips->dstadr = 0;
+ }
+ } else
+ ips->dstadr = 0;
- skip = 0;
- }
-
- if (!skip){
- ips->srcport = NSRCPORT(&pp->srcadr);
- ips->stratum = pp->stratum;
- ips->hpoll = pp->hpoll;
- ips->ppoll = pp->ppoll;
- ips->reach = pp->reach;
- ips->flags = 0;
- if (pp == sys_peer)
- ips->flags |= INFO_FLAG_SYSPEER;
- if (pp->flags & FLAG_CONFIG)
- ips->flags |= INFO_FLAG_CONFIG;
- if (pp->flags & FLAG_REFCLOCK)
- ips->flags |= INFO_FLAG_REFCLOCK;
- if (pp->flags & FLAG_PREFER)
- ips->flags |= INFO_FLAG_PREFER;
- if (pp->flags & FLAG_BURST)
- ips->flags |= INFO_FLAG_BURST;
- if (pp->status == CTL_PST_SEL_SYNCCAND)
- ips->flags |= INFO_FLAG_SEL_CANDIDATE;
- if (pp->status >= CTL_PST_SEL_SYSPEER)
- ips->flags |= INFO_FLAG_SHORTLIST;
- ips->hmode = pp->hmode;
- ips->delay = HTONS_FP(DTOFP(pp->delay));
- DTOLFP(pp->offset, &ltmp);
- HTONL_FP(&ltmp, &ips->offset);
- ips->dispersion = HTONS_FP(DTOUFP(SQRT(pp->disp)));
- }
- pp = pp->next;
- ips = (struct info_peer_summary *)more_pkt();
+ skip = 0;
}
- }
+
+ if (!skip) {
+ ips->srcport = NSRCPORT(&pp->srcadr);
+ ips->stratum = pp->stratum;
+ ips->hpoll = pp->hpoll;
+ ips->ppoll = pp->ppoll;
+ ips->reach = pp->reach;
+ ips->flags = 0;
+ if (pp == sys_peer)
+ ips->flags |= INFO_FLAG_SYSPEER;
+ if (pp->flags & FLAG_CONFIG)
+ ips->flags |= INFO_FLAG_CONFIG;
+ if (pp->flags & FLAG_REFCLOCK)
+ ips->flags |= INFO_FLAG_REFCLOCK;
+ if (pp->flags & FLAG_PREFER)
+ ips->flags |= INFO_FLAG_PREFER;
+ if (pp->flags & FLAG_BURST)
+ ips->flags |= INFO_FLAG_BURST;
+ if (pp->status == CTL_PST_SEL_SYNCCAND)
+ ips->flags |= INFO_FLAG_SEL_CANDIDATE;
+ if (pp->status >= CTL_PST_SEL_SYSPEER)
+ ips->flags |= INFO_FLAG_SHORTLIST;
+ ips->hmode = pp->hmode;
+ ips->delay = HTONS_FP(DTOFP(pp->delay));
+ DTOLFP(pp->offset, &ltmp);
+ HTONL_FP(&ltmp, &ips->offset);
+ ips->dispersion = HTONS_FP(DTOUFP(SQRT(pp->disp)));
+ }
+ ips = (struct info_peer_summary *)more_pkt();
+ } /* for pp */
+
flush_pkt();
}
@@ -820,39 +812,48 @@ peer_list_sum(
static void
peer_info (
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_peer_list *ipl;
- register struct peer *pp;
- register struct info_peer *ip;
- register int items;
- register int i, j;
- sockaddr_u addr;
- extern struct peer *sys_peer;
- l_fp ltmp;
+ u_short items;
+ size_t item_sz;
+ char * datap;
+ struct info_peer_list ipl;
+ struct peer * pp;
+ struct info_peer * ip;
+ int i;
+ int j;
+ sockaddr_u addr;
+ l_fp ltmp;
items = INFO_NITEMS(inpkt->err_nitems);
- ipl = (struct info_peer_list *) inpkt->data;
-
- ip = (struct info_peer *)prepare_pkt(srcadr, inter, inpkt,
- v6sizeof(struct info_peer));
- while (items-- > 0 && ip != 0) {
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz != sizeof(ipl)) {
+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
+ return;
+ }
+ ip = prepare_pkt(srcadr, inter, inpkt,
+ v6sizeof(struct info_peer));
+ while (items-- > 0 && ip != NULL) {
+ ZERO(ipl);
+ memcpy(&ipl, datap, item_sz);
ZERO_SOCK(&addr);
- NSRCPORT(&addr) = ipl->port;
- if (client_v6_capable && ipl->v6_flag) {
+ NSRCPORT(&addr) = ipl.port;
+ if (client_v6_capable && ipl.v6_flag) {
AF(&addr) = AF_INET6;
- SOCK_ADDR6(&addr) = ipl->addr6;
+ SOCK_ADDR6(&addr) = ipl.addr6;
} else {
AF(&addr) = AF_INET;
- NSRCADR(&addr) = ipl->addr;
+ NSRCADR(&addr) = ipl.addr;
}
#ifdef ISC_PLATFORM_HAVESALEN
addr.sa.sa_len = SOCKLEN(&addr);
#endif
- ipl++;
- pp = findexistingpeer(&addr, NULL, -1, 0);
+ datap += item_sz;
+
+ pp = findexistingpeer(&addr, NULL, NULL, -1, 0);
if (NULL == pp)
continue;
if (IS_IPV6(srcadr)) {
@@ -862,7 +863,7 @@ peer_info (
? SOCK_ADDR6(&pp->dstadr->bcast)
: SOCK_ADDR6(&pp->dstadr->sin);
else
- memset(&ip->dstadr6, 0, sizeof(ip->dstadr6));
+ ZERO(ip->dstadr6);
ip->srcadr6 = SOCK_ADDR6(&pp->srcadr);
ip->v6_flag = 1;
@@ -889,19 +890,19 @@ peer_info (
ip->srcport = NSRCPORT(&pp->srcadr);
ip->flags = 0;
if (pp == sys_peer)
- ip->flags |= INFO_FLAG_SYSPEER;
+ ip->flags |= INFO_FLAG_SYSPEER;
if (pp->flags & FLAG_CONFIG)
- ip->flags |= INFO_FLAG_CONFIG;
+ ip->flags |= INFO_FLAG_CONFIG;
if (pp->flags & FLAG_REFCLOCK)
- ip->flags |= INFO_FLAG_REFCLOCK;
+ ip->flags |= INFO_FLAG_REFCLOCK;
if (pp->flags & FLAG_PREFER)
- ip->flags |= INFO_FLAG_PREFER;
+ ip->flags |= INFO_FLAG_PREFER;
if (pp->flags & FLAG_BURST)
- ip->flags |= INFO_FLAG_BURST;
+ ip->flags |= INFO_FLAG_BURST;
if (pp->status == CTL_PST_SEL_SYNCCAND)
- ip->flags |= INFO_FLAG_SEL_CANDIDATE;
+ ip->flags |= INFO_FLAG_SEL_CANDIDATE;
if (pp->status >= CTL_PST_SEL_SYSPEER)
- ip->flags |= INFO_FLAG_SHORTLIST;
+ ip->flags |= INFO_FLAG_SHORTLIST;
ip->leap = pp->leap;
ip->hmode = pp->hmode;
ip->keyid = pp->keyid;
@@ -911,11 +912,11 @@ peer_info (
ip->precision = pp->precision;
ip->version = pp->version;
ip->reach = pp->reach;
- ip->unreach = (u_char) pp->unreach;
+ ip->unreach = (u_char)pp->unreach;
ip->flash = (u_char)pp->flash;
- ip->flash2 = (u_short) pp->flash;
+ ip->flash2 = (u_short)pp->flash;
ip->estbdelay = HTONS_FP(DTOFP(pp->delay));
- ip->ttl = pp->ttl;
+ ip->ttl = (u_char)pp->ttl;
ip->associd = htons(pp->associd);
ip->rootdelay = HTONS_FP(DTOUFP(pp->rootdelay));
ip->rootdispersion = HTONS_FP(DTOUFP(pp->rootdisp));
@@ -927,21 +928,22 @@ peer_info (
j = pp->filter_nextpt - 1;
for (i = 0; i < NTP_SHIFT; i++, j--) {
if (j < 0)
- j = NTP_SHIFT-1;
+ j = NTP_SHIFT-1;
ip->filtdelay[i] = HTONS_FP(DTOFP(pp->filter_delay[j]));
DTOLFP(pp->filter_offset[j], &ltmp);
HTONL_FP(&ltmp, &ip->filtoffset[i]);
- ip->order[i] = (u_char)((pp->filter_nextpt+NTP_SHIFT-1)
- - pp->filter_order[i]);
+ ip->order[i] = (u_char)((pp->filter_nextpt +
+ NTP_SHIFT - 1) -
+ pp->filter_order[i]);
if (ip->order[i] >= NTP_SHIFT)
- ip->order[i] -= NTP_SHIFT;
+ ip->order[i] -= NTP_SHIFT;
}
DTOLFP(pp->offset, &ltmp);
HTONL_FP(&ltmp, &ip->offset);
ip->delay = HTONS_FP(DTOFP(pp->delay));
ip->dispersion = HTONS_FP(DTOUFP(SQRT(pp->disp)));
ip->selectdisp = HTONS_FP(DTOUFP(SQRT(pp->jitter)));
- ip = (struct info_peer *)more_pkt();
+ ip = more_pkt();
}
flush_pkt();
}
@@ -953,45 +955,49 @@ peer_info (
static void
peer_stats (
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_peer_list *ipl;
- register struct peer *pp;
- register struct info_peer_stats *ip;
- register int items;
+ u_short items;
+ size_t item_sz;
+ char * datap;
+ struct info_peer_list ipl;
+ struct peer * pp;
+ struct info_peer_stats *ip;
sockaddr_u addr;
- extern struct peer *sys_peer;
-#ifdef DEBUG
- if (debug)
- printf("peer_stats: called\n");
-#endif
+ DPRINTF(1, ("peer_stats: called\n"));
items = INFO_NITEMS(inpkt->err_nitems);
- ipl = (struct info_peer_list *) inpkt->data;
- ip = (struct info_peer_stats *)prepare_pkt(srcadr, inter, inpkt,
- v6sizeof(struct info_peer_stats));
- while (items-- > 0 && ip != 0) {
- memset((char *)&addr, 0, sizeof(addr));
- NSRCPORT(&addr) = ipl->port;
- if (client_v6_capable && ipl->v6_flag) {
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz > sizeof(ipl)) {
+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
+ return;
+ }
+ ip = prepare_pkt(srcadr, inter, inpkt,
+ v6sizeof(struct info_peer_stats));
+ while (items-- > 0 && ip != NULL) {
+ ZERO(ipl);
+ memcpy(&ipl, datap, item_sz);
+ ZERO(addr);
+ NSRCPORT(&addr) = ipl.port;
+ if (client_v6_capable && ipl.v6_flag) {
AF(&addr) = AF_INET6;
- SOCK_ADDR6(&addr) = ipl->addr6;
+ SOCK_ADDR6(&addr) = ipl.addr6;
} else {
AF(&addr) = AF_INET;
- NSRCADR(&addr) = ipl->addr;
+ NSRCADR(&addr) = ipl.addr;
}
#ifdef ISC_PLATFORM_HAVESALEN
addr.sa.sa_len = SOCKLEN(&addr);
#endif
DPRINTF(1, ("peer_stats: looking for %s, %d, %d\n",
- stoa(&addr), ipl->port, NSRCPORT(&addr)));
+ stoa(&addr), ipl.port, NSRCPORT(&addr)));
- ipl = (struct info_peer_list *)((char *)ipl +
- INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
- pp = findexistingpeer(&addr, NULL, -1, 0);
+ pp = findexistingpeer(&addr, NULL, NULL, -1, 0);
if (NULL == pp)
continue;
@@ -1023,7 +1029,7 @@ peer_stats (
? SOCK_ADDR6(&pp->dstadr->bcast)
: SOCK_ADDR6(&pp->dstadr->sin);
else
- memset(&ip->dstadr6, 0, sizeof(ip->dstadr6));
+ ZERO(ip->dstadr6);
ip->srcadr6 = SOCK_ADDR6(&pp->srcadr);
ip->v6_flag = 1;
@@ -1070,7 +1076,7 @@ peer_stats (
static void
sys_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1103,7 +1109,7 @@ sys_info(
is->rootdelay = htonl(DTOFP(sys_rootdelay));
is->rootdispersion = htonl(DTOUFP(sys_rootdisp));
is->frequency = htonl(DTOFP(sys_jitter));
- is->stability = htonl(DTOUFP(clock_stability));
+ is->stability = htonl(DTOUFP(clock_stability * 1e6));
is->refid = sys_refid;
HTONL_FP(&sys_reftime, &is->reftime);
@@ -1124,12 +1130,12 @@ sys_info(
is->flags |= INFO_FLAG_MONITOR;
if (ntp_enable)
is->flags |= INFO_FLAG_NTP;
- if (pps_enable)
+ if (hardpps_enable)
is->flags |= INFO_FLAG_PPS_SYNC;
if (stats_control)
is->flags |= INFO_FLAG_FILEGEN;
is->bdelay = HTONS_FP(DTOFP(sys_bdelay));
- HTONL_UF(sys_authdelay.l_f, &is->authdelay);
+ HTONL_UF(sys_authdelay.l_uf, &is->authdelay);
(void) more_pkt();
flush_pkt();
}
@@ -1141,15 +1147,12 @@ sys_info(
static void
sys_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
register struct info_sys_stats *ss;
- /*
- * Importations from the protocol module
- */
ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_sys_stats));
ss->timeup = htonl((u_int32)current_time);
@@ -1174,24 +1177,13 @@ sys_stats(
static void
mem_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
register struct info_mem_stats *ms;
register int i;
- /*
- * Importations from the peer module
- */
- extern int peer_hash_count[NTP_HASH_SIZE];
- extern int peer_free_count;
- extern u_long peer_timereset;
- extern u_long findpeer_calls;
- extern u_long peer_allocations;
- extern u_long peer_demobilizations;
- extern int total_peer_structs;
-
ms = (struct info_mem_stats *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_mem_stats));
@@ -1202,14 +1194,11 @@ mem_stats(
ms->allocations = htonl((u_int32)peer_allocations);
ms->demobilizations = htonl((u_int32)peer_demobilizations);
- for (i = 0; i < NTP_HASH_SIZE; i++) {
- if (peer_hash_count[i] > 255)
- ms->hashcount[i] = 255;
- else
- ms->hashcount[i] = (u_char)peer_hash_count[i];
- }
+ for (i = 0; i < NTP_HASH_SIZE; i++)
+ ms->hashcount[i] = (u_char)
+ max((u_int)peer_hash_count[i], UCHAR_MAX);
- (void) more_pkt();
+ more_pkt();
flush_pkt();
}
@@ -1220,17 +1209,12 @@ mem_stats(
static void
io_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_io_stats *io;
+ struct info_io_stats *io;
- /*
- * Importations from the io module
- */
- extern u_long io_timereset;
-
io = (struct info_io_stats *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_io_stats));
@@ -1258,7 +1242,7 @@ io_stats(
static void
timer_stats(
sockaddr_u * srcadr,
- struct interface * inter,
+ endpt * inter,
struct req_pkt * inpkt
)
{
@@ -1285,21 +1269,13 @@ timer_stats(
static void
loop_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_loop *li;
+ struct info_loop *li;
l_fp ltmp;
- /*
- * Importations from the loop filter module
- */
- extern double last_offset;
- extern double drift_comp;
- extern int tc_counter;
- extern u_long sys_epoch;
-
li = (struct info_loop *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_loop));
@@ -1310,7 +1286,7 @@ loop_info(
li->compliance = htonl((u_int32)(tc_counter));
li->watchdog_timer = htonl((u_int32)(current_time - sys_epoch));
- (void) more_pkt();
+ more_pkt();
flush_pkt();
}
@@ -1321,16 +1297,16 @@ loop_info(
static void
do_conf(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- static u_long soonest_ifrescan_time = 0;
- int items;
- u_int fl;
- struct conf_peer *cp;
- struct conf_peer temp_cp;
- sockaddr_u peeraddr;
+ u_short items;
+ size_t item_sz;
+ u_int fl;
+ char * datap;
+ struct conf_peer temp_cp;
+ sockaddr_u peeraddr;
/*
* Do a check of everything to see that it looks
@@ -1338,56 +1314,30 @@ do_conf(
* very picky here.
*/
items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_peer *)inpkt->data;
- memset(&temp_cp, 0, sizeof(struct conf_peer));
- memcpy(&temp_cp, (char *)cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
-
-#if 0 /* paranoid checking - these are done in newpeer() */
- fl = 0;
- while (items-- > 0 && !fl) {
- if (((temp_cp.version) > NTP_VERSION)
- || ((temp_cp.version) < NTP_OLDVERSION))
- fl = 1;
- if (temp_cp.hmode != MODE_ACTIVE
- && temp_cp.hmode != MODE_CLIENT
- && temp_cp.hmode != MODE_BROADCAST)
- fl = 1;
- if (temp_cp.flags & ~(CONF_FLAG_PREFER | CONF_FLAG_BURST |
- CONF_FLAG_IBURST | CONF_FLAG_SKEY))
- fl = 1;
- cp = (struct conf_peer *)
- ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
- }
-
- if (fl) {
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz > sizeof(temp_cp)) {
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
-#endif /* end paranoid checking */
-
- /*
- * Looks okay, try it out
- */
- items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_peer *)inpkt->data;
while (items-- > 0) {
- memset(&temp_cp, 0, sizeof(struct conf_peer));
- memcpy(&temp_cp, (char *)cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ ZERO(temp_cp);
+ memcpy(&temp_cp, datap, item_sz);
ZERO_SOCK(&peeraddr);
fl = 0;
if (temp_cp.flags & CONF_FLAG_PREFER)
fl |= FLAG_PREFER;
if (temp_cp.flags & CONF_FLAG_BURST)
- fl |= FLAG_BURST;
+ fl |= FLAG_BURST;
if (temp_cp.flags & CONF_FLAG_IBURST)
- fl |= FLAG_IBURST;
-#ifdef OPENSSL
+ fl |= FLAG_IBURST;
+#ifdef AUTOKEY
if (temp_cp.flags & CONF_FLAG_SKEY)
fl |= FLAG_SKEY;
-#endif /* OPENSSL */
- if (client_v6_capable && temp_cp.v6_flag != 0) {
+#endif /* AUTOKEY */
+ if (client_v6_capable && temp_cp.v6_flag) {
AF(&peeraddr) = AF_INET6;
SOCK_ADDR6(&peeraddr) = temp_cp.peeraddr6;
} else {
@@ -1409,7 +1359,7 @@ do_conf(
#endif
/* XXX W2DO? minpoll/maxpoll arguments ??? */
- if (peer_config(&peeraddr, (struct interface *)0,
+ if (peer_config(&peeraddr, NULL, NULL,
temp_cp.hmode, temp_cp.version, temp_cp.minpoll,
temp_cp.maxpoll, fl, temp_cp.ttl, temp_cp.keyid,
NULL) == 0) {
@@ -1417,134 +1367,30 @@ do_conf(
return;
}
- /*
- * ntp_intres.c uses REQ_CONFIG/doconf() to add each
- * server after its name is resolved. If we have been
- * disconnected from the network, it may notice the
- * network has returned and add the first server while
- * the relevant interface is still disabled, awaiting
- * the next interface rescan. To get things moving
- * more quickly, trigger an interface scan now, except
- * if we have done so in the last half minute.
- */
- if (soonest_ifrescan_time < current_time) {
- soonest_ifrescan_time = current_time + 30;
- timer_interfacetimeout(current_time);
- DPRINTF(1, ("do_conf triggering interface rescan\n"));
- }
-
- cp = (struct conf_peer *)
- ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
}
-
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
-#if 0
-/* XXX */
-/*
- * dns_a - Snarf DNS info for an association ID
- */
-static void
-dns_a(
- sockaddr_u *srcadr,
- struct interface *inter,
- struct req_pkt *inpkt
- )
-{
- register struct info_dns_assoc *dp;
- register int items;
- struct sockaddr_in peeraddr;
-
- /*
- * Do a check of everything to see that it looks
- * okay. If not, complain about it. Note we are
- * very picky here.
- */
- items = INFO_NITEMS(inpkt->err_nitems);
- dp = (struct info_dns_assoc *)inpkt->data;
-
- /*
- * Looks okay, try it out
- */
- items = INFO_NITEMS(inpkt->err_nitems);
- dp = (struct info_dns_assoc *)inpkt->data;
- memset((char *)&peeraddr, 0, sizeof(struct sockaddr_in));
- peeraddr.sin_family = AF_INET;
- peeraddr.sin_port = htons(NTP_PORT);
-
- /*
- * Make sure the address is valid
- */
- if (!ISREFCLOCKADR(&peeraddr) && ISBADADR(&peeraddr)) {
- msyslog(LOG_ERR, "dns_a: !ISREFCLOCKADR && ISBADADR");
- req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
- return;
- }
-
- while (items-- > 0) {
- associd_t associd;
- size_t hnl;
- struct peer *peer;
- int bogon = 0;
-
- associd = dp->associd;
- peer = findpeerbyassoc(associd);
- if (peer == 0 || peer->flags & FLAG_REFCLOCK) {
- msyslog(LOG_ERR, "dns_a: %s",
- (peer == 0)
- ? "peer == 0"
- : "peer->flags & FLAG_REFCLOCK");
- ++bogon;
- }
- peeraddr.sin_addr.s_addr = dp->peeraddr;
- for (hnl = 0; dp->hostname[hnl] && hnl < sizeof dp->hostname; ++hnl) ;
- if (hnl >= sizeof dp->hostname) {
- msyslog(LOG_ERR, "dns_a: hnl (%ld) >= %ld",
- (long)hnl, (long)sizeof dp->hostname);
- ++bogon;
- }
-
- msyslog(LOG_INFO, "dns_a: <%s> for %s, AssocID %d, bogon %d",
- dp->hostname,
- stoa((sockaddr_u *)&peeraddr), associd,
- bogon);
-
- if (bogon) {
- /* If it didn't work */
- req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
- return;
- } else {
-#if 0
-#ifdef PUBKEY
- crypto_public(peer, dp->hostname);
-#endif /* PUBKEY */
-#endif
- }
-
- dp++;
- }
-
- req_ack(srcadr, inter, inpkt, INFO_OKAY);
-}
-#endif /* 0 */
/*
* do_unconf - remove a peer from the configuration list
*/
static void
do_unconf(
- sockaddr_u *srcadr,
- struct interface *inter,
+ sockaddr_u * srcadr,
+ endpt * inter,
struct req_pkt *inpkt
)
{
- register struct conf_unpeer *cp;
- struct conf_unpeer temp_cp;
- register int items;
- register struct peer *peer;
- sockaddr_u peeraddr;
- int bad, found;
+ u_short items;
+ size_t item_sz;
+ char * datap;
+ struct conf_unpeer temp_cp;
+ struct peer * p;
+ sockaddr_u peeraddr;
+ int bad;
+ int found;
/*
* This is a bit unstructured, but I like to be careful.
@@ -1553,13 +1399,18 @@ do_unconf(
* an error.
*/
items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_unpeer *)inpkt->data;
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz > sizeof(temp_cp)) {
+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
+ return;
+ }
- bad = 0;
+ bad = FALSE;
while (items-- > 0 && !bad) {
- memset(&temp_cp, 0, sizeof(temp_cp));
+ ZERO(temp_cp);
+ memcpy(&temp_cp, datap, item_sz);
ZERO_SOCK(&peeraddr);
- memcpy(&temp_cp, cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
if (client_v6_capable && temp_cp.v6_flag) {
AF(&peeraddr) = AF_INET6;
SOCK_ADDR6(&peeraddr) = temp_cp.peeraddr6;
@@ -1571,22 +1422,22 @@ do_unconf(
#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sa.sa_len = SOCKLEN(&peeraddr);
#endif
- found = 0;
- peer = NULL;
+ found = FALSE;
+ p = NULL;
DPRINTF(1, ("searching for %s\n", stoa(&peeraddr)));
while (!found) {
- peer = findexistingpeer(&peeraddr, peer, -1, 0);
- if (!peer)
+ p = findexistingpeer(&peeraddr, NULL, p, -1, 0);
+ if (NULL == p)
break;
- if (peer->flags & FLAG_CONFIG)
- found = 1;
+ if (FLAG_CONFIG & p->flags)
+ found = TRUE;
}
if (!found)
- bad = 1;
- cp = (struct conf_unpeer *)
- ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ bad = TRUE;
+
+ datap += item_sz;
}
if (bad) {
@@ -1599,12 +1450,12 @@ do_unconf(
*/
items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_unpeer *)inpkt->data;
+ datap = inpkt->u.data;
while (items-- > 0) {
- memset(&temp_cp, 0, sizeof(temp_cp));
- memset(&peeraddr, 0, sizeof(peeraddr));
- memcpy(&temp_cp, cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ ZERO(temp_cp);
+ memcpy(&temp_cp, datap, item_sz);
+ ZERO(peeraddr);
if (client_v6_capable && temp_cp.v6_flag) {
AF(&peeraddr) = AF_INET6;
SOCK_ADDR6(&peeraddr) = temp_cp.peeraddr6;
@@ -1616,24 +1467,23 @@ do_unconf(
#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sa.sa_len = SOCKLEN(&peeraddr);
#endif
- found = 0;
- peer = NULL;
+ found = FALSE;
+ p = NULL;
while (!found) {
- peer = findexistingpeer(&peeraddr, peer, -1, 0);
- if (!peer)
+ p = findexistingpeer(&peeraddr, NULL, p, -1, 0);
+ if (NULL == p)
break;
- if (peer->flags & FLAG_CONFIG)
- found = 1;
+ if (FLAG_CONFIG & p->flags)
+ found = TRUE;
}
- NTP_INSIST(found);
- NTP_INSIST(peer);
+ INSIST(found);
+ INSIST(NULL != p);
- peer_clear(peer, "GONE");
- unpeer(peer);
+ peer_clear(p, "GONE");
+ unpeer(p);
- cp = (struct conf_unpeer *)
- ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
}
req_ack(srcadr, inter, inpkt, INFO_OKAY);
@@ -1646,7 +1496,7 @@ do_unconf(
static void
set_sys_flag(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1660,7 +1510,7 @@ set_sys_flag(
static void
clr_sys_flag(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1674,23 +1524,21 @@ clr_sys_flag(
static void
setclr_flags(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt,
u_long set
)
{
struct conf_sys_flags *sf;
u_int32 flags;
- int prev_kern_enable;
- prev_kern_enable = kern_enable;
if (INFO_NITEMS(inpkt->err_nitems) > 1) {
msyslog(LOG_ERR, "setclr_flags: err_nitems > 1");
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
- sf = (struct conf_sys_flags *)inpkt->data;
+ sf = (struct conf_sys_flags *)&inpkt->u;
flags = ntohl(sf->flags);
if (flags & ~(SYS_FLAG_BCLIENT | SYS_FLAG_PPS |
@@ -1722,12 +1570,6 @@ setclr_flags(
if (flags & SYS_FLAG_CAL)
proto_config(PROTO_CAL, set, 0., NULL);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
-
- /* Reset the kernel ntp parameters if the kernel flag changed. */
- if (prev_kern_enable && !kern_enable)
- loop_config(LOOP_KERN_CLEAR, 0.0);
- if (!prev_kern_enable && kern_enable)
- loop_config(LOOP_DRIFTCOMP, drift_comp);
}
/*
@@ -1789,7 +1631,7 @@ list_restrict6(
static void
list_restrict(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1819,7 +1661,7 @@ list_restrict(
static void
do_resaddflags(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1834,7 +1676,7 @@ do_resaddflags(
static void
do_ressubflags(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1848,7 +1690,7 @@ do_ressubflags(
static void
do_unrestrict(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -1862,16 +1704,18 @@ do_unrestrict(
static void
do_restrict(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt,
int op
)
{
- register struct conf_restrict *cr;
- register int items;
- sockaddr_u matchaddr;
- sockaddr_u matchmask;
- int bad;
+ char * datap;
+ struct conf_restrict cr;
+ u_short items;
+ size_t item_sz;
+ sockaddr_u matchaddr;
+ sockaddr_u matchmask;
+ int bad;
/*
* Do a check of the flags to make sure that only
@@ -1879,26 +1723,32 @@ do_restrict(
* about it. Note we are very picky here.
*/
items = INFO_NITEMS(inpkt->err_nitems);
- cr = (struct conf_restrict *)inpkt->data;
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz > sizeof(cr)) {
+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
+ return;
+ }
- bad = 0;
- cr->flags = ntohs(cr->flags);
- cr->mflags = ntohs(cr->mflags);
+ bad = FALSE;
while (items-- > 0 && !bad) {
- if (cr->mflags & ~(RESM_NTPONLY))
- bad |= 1;
- if (cr->flags & ~(RES_ALLFLAGS))
- bad |= 2;
- if (cr->mask != htonl(INADDR_ANY)) {
- if (client_v6_capable && cr->v6_flag != 0) {
- if (IN6_IS_ADDR_UNSPECIFIED(&cr->addr6))
+ memcpy(&cr, datap, item_sz);
+ cr.flags = ntohs(cr.flags);
+ cr.mflags = ntohs(cr.mflags);
+ if (~RESM_NTPONLY & cr.mflags)
+ bad |= 1;
+ if (~RES_ALLFLAGS & cr.flags)
+ bad |= 2;
+ if (INADDR_ANY != cr.mask) {
+ if (client_v6_capable && cr.v6_flag) {
+ if (IN6_IS_ADDR_UNSPECIFIED(&cr.addr6))
bad |= 4;
- } else
- if (cr->addr == htonl(INADDR_ANY))
+ } else {
+ if (INADDR_ANY == cr.addr)
bad |= 8;
+ }
}
- cr = (struct conf_restrict *)((char *)cr +
- INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
}
if (bad) {
@@ -1910,26 +1760,28 @@ do_restrict(
/*
* Looks okay, try it out
*/
- items = INFO_NITEMS(inpkt->err_nitems);
- cr = (struct conf_restrict *)inpkt->data;
ZERO_SOCK(&matchaddr);
ZERO_SOCK(&matchmask);
+ datap = inpkt->u.data;
while (items-- > 0) {
- if (client_v6_capable && cr->v6_flag) {
+ memcpy(&cr, datap, item_sz);
+ cr.flags = ntohs(cr.flags);
+ cr.mflags = ntohs(cr.mflags);
+ if (client_v6_capable && cr.v6_flag) {
AF(&matchaddr) = AF_INET6;
AF(&matchmask) = AF_INET6;
- SOCK_ADDR6(&matchaddr) = cr->addr6;
- SOCK_ADDR6(&matchmask) = cr->mask6;
+ SOCK_ADDR6(&matchaddr) = cr.addr6;
+ SOCK_ADDR6(&matchmask) = cr.mask6;
} else {
AF(&matchaddr) = AF_INET;
AF(&matchmask) = AF_INET;
- NSRCADR(&matchaddr) = cr->addr;
- NSRCADR(&matchmask) = cr->mask;
+ NSRCADR(&matchaddr) = cr.addr;
+ NSRCADR(&matchmask) = cr.mask;
}
- hack_restrict(op, &matchaddr, &matchmask, cr->mflags,
- cr->flags);
- cr++;
+ hack_restrict(op, &matchaddr, &matchmask, cr.mflags,
+ cr.flags, 0);
+ datap += item_sz;
}
req_ack(srcadr, inter, inpkt, INFO_OKAY);
@@ -1940,114 +1792,22 @@ do_restrict(
* mon_getlist - return monitor data
*/
static void
-mon_getlist_0(
+mon_getlist(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_monitor *im;
- register struct mon_data *md;
- extern struct mon_data mon_mru_list;
- extern int mon_enabled;
-
-#ifdef DEBUG
- if (debug > 2)
- printf("wants monitor 0 list\n");
-#endif
- if (!mon_enabled) {
- req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
- return;
- }
- im = (struct info_monitor *)prepare_pkt(srcadr, inter, inpkt,
- v6sizeof(struct info_monitor));
- for (md = mon_mru_list.mru_next; md != &mon_mru_list && im != 0;
- md = md->mru_next) {
- im->lasttime = htonl((u_int32)((current_time -
- md->firsttime) / md->count));
- im->firsttime = htonl((u_int32)(current_time - md->lasttime));
- im->restr = htonl((u_int32)md->flags);
- im->count = htonl((u_int32)(md->count));
- if (IS_IPV6(&md->rmtadr)) {
- if (!client_v6_capable)
- continue;
- im->addr6 = SOCK_ADDR6(&md->rmtadr);
- im->v6_flag = 1;
- } else {
- im->addr = NSRCADR(&md->rmtadr);
- if (client_v6_capable)
- im->v6_flag = 0;
- }
- im->port = md->rmtport;
- im->mode = md->mode;
- im->version = md->version;
- im = (struct info_monitor *)more_pkt();
- }
- flush_pkt();
+ req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
}
-/*
- * mon_getlist - return monitor data
- */
-static void
-mon_getlist_1(
- sockaddr_u *srcadr,
- struct interface *inter,
- struct req_pkt *inpkt
- )
-{
- register struct info_monitor_1 *im;
- register struct mon_data *md;
- extern struct mon_data mon_mru_list;
- extern int mon_enabled;
-
- if (!mon_enabled) {
- req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
- return;
- }
- im = (struct info_monitor_1 *)prepare_pkt(srcadr, inter, inpkt,
- v6sizeof(struct info_monitor_1));
- for (md = mon_mru_list.mru_next; md != &mon_mru_list && im != 0;
- md = md->mru_next) {
- im->lasttime = htonl((u_int32)((current_time -
- md->firsttime) / md->count));
- im->firsttime = htonl((u_int32)(current_time - md->lasttime));
- im->restr = htonl((u_int32)md->flags);
- im->count = htonl((u_int32)md->count);
- if (IS_IPV6(&md->rmtadr)) {
- if (!client_v6_capable)
- continue;
- im->addr6 = SOCK_ADDR6(&md->rmtadr);
- im->v6_flag = 1;
- im->daddr6 = SOCK_ADDR6(&md->interface->sin);
- } else {
- im->addr = NSRCADR(&md->rmtadr);
- if (client_v6_capable)
- im->v6_flag = 0;
- if (MDF_BCAST == md->cast_flags)
- im->daddr = NSRCADR(&md->interface->bcast);
- else if (md->cast_flags) {
- im->daddr = NSRCADR(&md->interface->sin);
- if (!im->daddr)
- im->daddr = NSRCADR(&md->interface->bcast);
- } else
- im->daddr = 4;
- }
- im->flags = htonl(md->cast_flags);
- im->port = md->rmtport;
- im->mode = md->mode;
- im->version = md->version;
- im = (struct info_monitor_1 *)more_pkt();
- }
- flush_pkt();
-}
/*
* Module entry points and the flags they correspond with
*/
struct reset_entry {
int flag; /* flag this corresponds to */
- void (*handler) (void); /* routine to handle request */
+ void (*handler)(void); /* routine to handle request */
};
struct reset_entry reset_entries[] = {
@@ -2067,7 +1827,7 @@ struct reset_entry reset_entries[] = {
static void
reset_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2081,7 +1841,7 @@ reset_stats(
return;
}
- rflags = (struct reset_flags *)inpkt->data;
+ rflags = (struct reset_flags *)&inpkt->u;
flags = ntohl(rflags->flags);
if (flags & ~RESET_ALLFLAGS) {
@@ -2105,15 +1865,17 @@ reset_stats(
static void
reset_peer(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- struct conf_unpeer *cp;
- int items;
- struct peer *peer;
- sockaddr_u peeraddr;
- int bad;
+ u_short items;
+ size_t item_sz;
+ char * datap;
+ struct conf_unpeer cp;
+ struct peer * p;
+ sockaddr_u peeraddr;
+ int bad;
/*
* We check first to see that every peer exists. If not,
@@ -2121,27 +1883,33 @@ reset_peer(
*/
items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_unpeer *)inpkt->data;
+ item_sz = INFO_ITEMSIZE(inpkt->mbz_itemsize);
+ datap = inpkt->u.data;
+ if (item_sz > sizeof(cp)) {
+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
+ return;
+ }
- bad = 0;
+ bad = FALSE;
while (items-- > 0 && !bad) {
+ ZERO(cp);
+ memcpy(&cp, datap, item_sz);
ZERO_SOCK(&peeraddr);
- if (client_v6_capable && cp->v6_flag) {
+ if (client_v6_capable && cp.v6_flag) {
AF(&peeraddr) = AF_INET6;
- SOCK_ADDR6(&peeraddr) = cp->peeraddr6;
+ SOCK_ADDR6(&peeraddr) = cp.peeraddr6;
} else {
AF(&peeraddr) = AF_INET;
- NSRCADR(&peeraddr) = cp->peeraddr;
+ NSRCADR(&peeraddr) = cp.peeraddr;
}
#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sa.sa_len = SOCKLEN(&peeraddr);
#endif
- peer = findexistingpeer(&peeraddr, NULL, -1, 0);
- if (NULL == peer)
+ p = findexistingpeer(&peeraddr, NULL, NULL, -1, 0);
+ if (NULL == p)
bad++;
- cp = (struct conf_unpeer *)((char *)cp +
- INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
}
if (bad) {
@@ -2153,28 +1921,28 @@ reset_peer(
* Now do it in earnest.
*/
- items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_unpeer *)inpkt->data;
+ datap = inpkt->u.data;
while (items-- > 0) {
+ ZERO(cp);
+ memcpy(&cp, datap, item_sz);
ZERO_SOCK(&peeraddr);
- if (client_v6_capable && cp->v6_flag) {
+ if (client_v6_capable && cp.v6_flag) {
AF(&peeraddr) = AF_INET6;
- SOCK_ADDR6(&peeraddr) = cp->peeraddr6;
+ SOCK_ADDR6(&peeraddr) = cp.peeraddr6;
} else {
AF(&peeraddr) = AF_INET;
- NSRCADR(&peeraddr) = cp->peeraddr;
+ NSRCADR(&peeraddr) = cp.peeraddr;
}
SET_PORT(&peeraddr, 123);
#ifdef ISC_PLATFORM_HAVESALEN
peeraddr.sa.sa_len = SOCKLEN(&peeraddr);
#endif
- peer = findexistingpeer(&peeraddr, NULL, -1, 0);
- while (peer != NULL) {
- peer_reset(peer);
- peer = findexistingpeer(&peeraddr, peer, -1, 0);
+ p = findexistingpeer(&peeraddr, NULL, NULL, -1, 0);
+ while (p != NULL) {
+ peer_reset(p);
+ p = findexistingpeer(&peeraddr, NULL, p, -1, 0);
}
- cp = (struct conf_unpeer *)((char *)cp +
- INFO_ITEMSIZE(inpkt->mbz_itemsize));
+ datap += item_sz;
}
req_ack(srcadr, inter, inpkt, INFO_OKAY);
@@ -2187,7 +1955,7 @@ reset_peer(
static void
do_key_reread(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2202,7 +1970,7 @@ do_key_reread(
static void
trust_key(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2216,7 +1984,7 @@ trust_key(
static void
untrust_key(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2230,7 +1998,7 @@ untrust_key(
static void
do_trustkey(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt,
u_long trust
)
@@ -2239,7 +2007,7 @@ do_trustkey(
register int items;
items = INFO_NITEMS(inpkt->err_nitems);
- kp = (u_long *)inpkt->data;
+ kp = (u_long *)&inpkt->u;
while (items-- > 0) {
authtrust(*kp, trust);
kp++;
@@ -2255,24 +2023,12 @@ do_trustkey(
static void
get_auth_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
register struct info_auth *ia;
- /*
- * Importations from the authentication module
- */
- extern u_long authnumkeys;
- extern int authnumfreekeys;
- extern u_long authkeylookups;
- extern u_long authkeynotfound;
- extern u_long authencryptions;
- extern u_long authdecryptions;
- extern u_long authkeyuncached;
- extern u_long authkeyexpired;
-
ia = (struct info_auth *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_auth));
@@ -2296,18 +2052,9 @@ get_auth_info(
* reset_auth_stats - reset the authentication stat counters. Done here
* to keep ntp-isms out of the authentication module
*/
-static void
+void
reset_auth_stats(void)
{
- /*
- * Importations from the authentication module
- */
- extern u_long authkeylookups;
- extern u_long authkeynotfound;
- extern u_long authencryptions;
- extern u_long authdecryptions;
- extern u_long authkeyuncached;
-
authkeylookups = 0;
authkeynotfound = 0;
authencryptions = 0;
@@ -2323,19 +2070,13 @@ reset_auth_stats(void)
static void
req_get_traps(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
- register struct info_trap *it;
- register struct ctl_trap *tr;
- register int i;
-
- /*
- * Imported from the control module
- */
- extern struct ctl_trap ctl_trap[];
- extern int num_ctl_traps;
+ struct info_trap *it;
+ struct ctl_trap *tr;
+ int i;
if (num_ctl_traps == 0) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
@@ -2345,7 +2086,7 @@ req_get_traps(
it = (struct info_trap *)prepare_pkt(srcadr, inter, inpkt,
v6sizeof(struct info_trap));
- for (i = 0, tr = ctl_trap; i < CTL_MAXTRAPS; i++, tr++) {
+ for (i = 0, tr = ctl_traps; i < COUNTOF(ctl_traps); i++, tr++) {
if (tr->tr_flags & TRAP_INUSE) {
if (IS_IPV4(&tr->tr_addr)) {
if (tr->tr_localaddr == any_interface)
@@ -2383,7 +2124,7 @@ req_get_traps(
static void
req_set_trap(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2398,7 +2139,7 @@ req_set_trap(
static void
req_clr_trap(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2413,13 +2154,13 @@ req_clr_trap(
static void
do_setclr_trap(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt,
int set
)
{
register struct conf_trap *ct;
- register struct interface *linter;
+ register endpt *linter;
int res;
sockaddr_u laddr;
@@ -2439,7 +2180,7 @@ do_setclr_trap(
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
- ct = (struct conf_trap *)inpkt->data;
+ ct = (struct conf_trap *)&inpkt->u;
/*
* Look for the local interface. If none, use the default.
@@ -2490,7 +2231,7 @@ do_setclr_trap(
static void
set_request_keyid(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2505,7 +2246,7 @@ set_request_keyid(
return;
}
- pkeyid = (keyid_t *)inpkt->data;
+ pkeyid = (keyid_t *)&inpkt->u;
info_auth_keyid = ntohl(*pkeyid);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
@@ -2518,12 +2259,11 @@ set_request_keyid(
static void
set_control_keyid(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
keyid_t *pkeyid;
- extern keyid_t ctl_auth_keyid;
/*
* Restrict ourselves to one item only.
@@ -2534,7 +2274,7 @@ set_control_keyid(
return;
}
- pkeyid = (keyid_t *)inpkt->data;
+ pkeyid = (keyid_t *)&inpkt->u;
ctl_auth_keyid = ntohl(*pkeyid);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
@@ -2547,31 +2287,12 @@ set_control_keyid(
static void
get_ctl_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
register struct info_control *ic;
- /*
- * Importations from the control module
- */
- extern u_long ctltimereset;
- extern u_long numctlreq;
- extern u_long numctlbadpkts;
- extern u_long numctlresponses;
- extern u_long numctlfrags;
- extern u_long numctlerrors;
- extern u_long numctltooshort;
- extern u_long numctlinputresp;
- extern u_long numctlinputfrag;
- extern u_long numctlinputerr;
- extern u_long numctlbadoffset;
- extern u_long numctlbadversion;
- extern u_long numctldatatooshort;
- extern u_long numctlbadop;
- extern u_long numasyncmsgs;
-
ic = (struct info_control *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_control));
@@ -2603,7 +2324,7 @@ get_ctl_stats(
static void
get_kernel_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2615,7 +2336,7 @@ get_kernel_info(
return;
}
- memset((char *)&ntx, 0, sizeof(ntx));
+ ZERO(ntx);
if (ntp_adjtime(&ntx) < 0)
msyslog(LOG_ERR, "get_kernel_info: ntp_adjtime() failed: %m");
ik = (struct info_kernel *)prepare_pkt(srcadr, inter, inpkt,
@@ -2658,7 +2379,7 @@ get_kernel_info(
static void
get_clock_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2676,15 +2397,15 @@ get_clock_info(
#endif
SET_PORT(&addr, NTP_PORT);
items = INFO_NITEMS(inpkt->err_nitems);
- clkaddr = (u_int32 *) inpkt->data;
+ clkaddr = &inpkt->u.u32[0];
ic = (struct info_clock *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_clock));
while (items-- > 0) {
NSRCADR(&addr) = *clkaddr++;
- if (!ISREFCLOCKADR(&addr) ||
- findexistingpeer(&addr, NULL, -1, 0) == NULL) {
+ if (!ISREFCLOCKADR(&addr) || NULL ==
+ findexistingpeer(&addr, NULL, NULL, -1, 0)) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
}
@@ -2725,7 +2446,7 @@ get_clock_info(
static void
set_clock_fudge(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2735,10 +2456,10 @@ set_clock_fudge(
sockaddr_u addr;
l_fp ltmp;
- ZERO_SOCK(&addr);
- memset((char *)&clock_stat, 0, sizeof clock_stat);
+ ZERO(addr);
+ ZERO(clock_stat);
items = INFO_NITEMS(inpkt->err_nitems);
- cf = (struct conf_fudge *) inpkt->data;
+ cf = (struct conf_fudge *)&inpkt->u;
while (items-- > 0) {
AF(&addr) = AF_INET;
@@ -2747,8 +2468,8 @@ set_clock_fudge(
addr.sa.sa_len = SOCKLEN(&addr);
#endif
SET_PORT(&addr, NTP_PORT);
- if (!ISREFCLOCKADR(&addr) ||
- findexistingpeer(&addr, NULL, -1, 0) == 0) {
+ if (!ISREFCLOCKADR(&addr) || NULL ==
+ findexistingpeer(&addr, NULL, NULL, -1, 0)) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
}
@@ -2797,7 +2518,7 @@ set_clock_fudge(
static void
get_clkbug_info(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2815,20 +2536,20 @@ get_clkbug_info(
#endif
SET_PORT(&addr, NTP_PORT);
items = INFO_NITEMS(inpkt->err_nitems);
- clkaddr = (u_int32 *) inpkt->data;
+ clkaddr = (u_int32 *)&inpkt->u;
ic = (struct info_clkbug *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_clkbug));
while (items-- > 0) {
NSRCADR(&addr) = *clkaddr++;
- if (!ISREFCLOCKADR(&addr) ||
- findexistingpeer(&addr, NULL, -1, 0) == 0) {
+ if (!ISREFCLOCKADR(&addr) || NULL ==
+ findexistingpeer(&addr, NULL, NULL, -1, 0)) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
}
- memset((char *)&bug, 0, sizeof bug);
+ ZERO(bug);
refclock_buginfo(&addr, &bug);
if (bug.nvalues == 0 && bug.ntimes == 0) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
@@ -2869,7 +2590,7 @@ fill_info_if_stats(void *data, interface_info_t *interface_info)
struct info_if_stats *ifs = *ifsp;
endpt *ep = interface_info->ep;
- memset(ifs, 0, sizeof(*ifs));
+ ZERO(*ifs);
if (IS_IPV6(&ep->sin)) {
if (!client_v6_capable) {
@@ -2886,7 +2607,7 @@ fill_info_if_stats(void *data, interface_info_t *interface_info)
ifs->unmask.addr = SOCK_ADDR4(&ep->mask);
}
ifs->v6_flag = htonl(ifs->v6_flag);
- strncpy(ifs->name, ep->name, sizeof(ifs->name));
+ strlcpy(ifs->name, ep->name, sizeof(ifs->name));
ifs->family = htons(ep->family);
ifs->flags = htonl(ep->flags);
ifs->last_ttl = htonl(ep->last_ttl);
@@ -2895,7 +2616,7 @@ fill_info_if_stats(void *data, interface_info_t *interface_info)
ifs->sent = htonl(ep->sent);
ifs->notsent = htonl(ep->notsent);
ifs->ifindex = htonl(ep->ifindex);
- /* scope no longer in struct interface, in in6_addr typically */
+ /* scope no longer in endpt, in in6_addr typically */
ifs->scopeid = ifs->ifindex;
ifs->ifnum = htonl(ep->ifnum);
ifs->uptime = htonl(current_time - ep->starttime);
@@ -2912,7 +2633,7 @@ fill_info_if_stats(void *data, interface_info_t *interface_info)
static void
get_if_stats(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{
@@ -2931,7 +2652,7 @@ get_if_stats(
static void
do_if_reload(
sockaddr_u *srcadr,
- struct interface *inter,
+ endpt *inter,
struct req_pkt *inpkt
)
{