[ntp:bk-ntp-dev-send] BitKeeper patch
stenn at whimsy.udel.edu
stenn at whimsy.udel.edu
Fri Jun 27 03:19:23 PDT 2003
This BitKeeper patch contains the following changesets:
stenn at whimsy.udel.edu|ChangeSet|20030627094400|03836
stenn at whimsy.udel.edu|ChangeSet|20030627101758|55014
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# ID: stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
# User: stenn
# Host: whimsy.udel.edu
# Root: /backroom/ntp-dev
#
#--- 1.23.3.2/ntpd/ntp_request.c Tue May 27 22:36:32 2003
#+++ 1.49/ntpd/ntp_request.c Fri Jun 27 06:17:54 2003
#@@ -1,6 +1,7 @@
# /*
# * ntp_request.c - respond to information requests
# */
#+
# #ifdef HAVE_CONFIG_H
# # include <config.h>
# #endif
#@@ -31,12 +32,19 @@
# #define AUTH 1
#
# #define NO_REQUEST (-1)
#+/*
#+ * Because we now have v6 addresses in the messages, we need to compensate
#+ * for the larger size. Therefore, we introduce the alternate size to
#+ * keep us friendly with older implementations. A little ugly.
#+ */
#+static int client_v6_capable = 0; /* the client can handle longer messages */
#
# struct req_proc {
# short request_code; /* defined request code */
# short needs_auth; /* true when authentication needed */
#- short sizeofitem; /* size of request data item */
#- void (*handler) P((struct sockaddr_in *, struct interface *,
#+ short sizeofitem; /* size of request data item (older size)*/
#+ short v6_sizeofitem; /* size of request data item (new size)*/
#+ void (*handler) P((struct sockaddr_storage *, struct interface *,
# struct req_pkt *)); /* routine to handle request */
# };
#
#@@ -47,105 +55,120 @@
# { NO_REQUEST, NOAUTH, 0, 0 }
# };
#
#-static void req_ack P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
#-static char * prepare_pkt P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_int));
#+static void req_ack P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
#+static char * prepare_pkt P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_int));
# static char * more_pkt P((void));
# static void flush_pkt P((void));
#-static void peer_list P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void peer_list_sum P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void peer_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void peer_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void sys_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void sys_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void mem_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void io_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void timer_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void loop_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void dns_a P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_conf P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_unconf P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void set_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void clr_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void setclr_flags P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_long));
#-static void list_restrict P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_resaddflags P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_ressubflags P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_unrestrict P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_restrict P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
#-static void mon_getlist_0 P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void mon_getlist_1 P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void reset_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void reset_peer P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_key_reread P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void trust_key P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void untrust_key P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_trustkey P((struct sockaddr_in *, struct interface *, struct req_pkt *, u_long));
#-static void get_auth_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#+static void peer_list P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void peer_list_sum P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void peer_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void peer_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void sys_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void sys_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void mem_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void io_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void timer_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void loop_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_conf P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_unconf P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void set_sys_flag P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void clr_sys_flag P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void setclr_flags P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_long));
#+static void list_restrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_resaddflags P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_ressubflags P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_unrestrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_restrict P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
#+static void mon_getlist_0 P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void mon_getlist_1 P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void reset_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void reset_peer P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_key_reread P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void trust_key P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void untrust_key P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_trustkey P((struct sockaddr_storage *, struct interface *, struct req_pkt *, u_long));
#+static void get_auth_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
# static void reset_auth_stats P((void));
#-static void req_get_traps P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void req_set_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void req_clr_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void do_setclr_trap P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
#-static void set_request_keyid P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void set_control_keyid P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void get_ctl_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#+static void req_get_traps P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void req_set_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void req_clr_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void do_setclr_trap P((struct sockaddr_storage *, struct interface *, struct req_pkt *, int));
#+static void set_request_keyid P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void set_control_keyid P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void get_ctl_stats P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
# #ifdef KERNEL_PLL
#-static void get_kernel_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#+static void get_kernel_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
# #endif /* KERNEL_PLL */
# #ifdef REFCLOCK
#-static void get_clock_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#-static void set_clock_fudge P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#+static void get_clock_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
#+static void set_clock_fudge P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
# #endif /* REFCLOCK */
# #ifdef REFCLOCK
#-static void get_clkbug_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#+static void get_clkbug_info P((struct sockaddr_storage *, struct interface *, struct req_pkt *));
# #endif /* REFCLOCK */
#
# /*
# * ntpd request codes
# */
# static struct req_proc ntp_codes[] = {
#- { REQ_PEER_LIST, NOAUTH, 0, peer_list },
#- { REQ_PEER_LIST_SUM, NOAUTH, 0, peer_list_sum },
#- { REQ_PEER_INFO, NOAUTH, sizeof(struct info_peer_list), peer_info },
#- { REQ_PEER_STATS, NOAUTH, sizeof(struct info_peer_list), peer_stats },
#- { REQ_SYS_INFO, NOAUTH, 0, sys_info },
#- { REQ_SYS_STATS, NOAUTH, 0, sys_stats },
#- { REQ_IO_STATS, NOAUTH, 0, io_stats },
#- { REQ_MEM_STATS, NOAUTH, 0, mem_stats },
#- { REQ_LOOP_INFO, NOAUTH, 0, loop_info },
#- { REQ_TIMER_STATS, NOAUTH, 0, timer_stats },
#- { REQ_HOSTNAME_ASSOCID, AUTH, sizeof(struct info_dns_assoc), dns_a },
#- { REQ_CONFIG, AUTH, sizeof(struct conf_peer), do_conf },
#- { REQ_UNCONFIG, AUTH, sizeof(struct conf_unpeer), do_unconf },
#- { REQ_SET_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags), set_sys_flag },
#- { REQ_CLR_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags), clr_sys_flag },
#- { REQ_GET_RESTRICT, NOAUTH, 0, list_restrict },
#- { REQ_RESADDFLAGS, AUTH, sizeof(struct conf_restrict), do_resaddflags },
#- { REQ_RESSUBFLAGS, AUTH, sizeof(struct conf_restrict), do_ressubflags },
#- { REQ_UNRESTRICT, AUTH, sizeof(struct conf_restrict), do_unrestrict },
#- { REQ_MON_GETLIST, NOAUTH, 0, mon_getlist_0 },
#- { REQ_MON_GETLIST_1, NOAUTH, 0, mon_getlist_1 },
#- { REQ_RESET_STATS, AUTH, sizeof(struct reset_flags), reset_stats },
#- { REQ_RESET_PEER, AUTH, sizeof(struct conf_unpeer), reset_peer },
#- { REQ_REREAD_KEYS, AUTH, 0, do_key_reread },
#- { REQ_TRUSTKEY, AUTH, sizeof(u_long), trust_key },
#- { REQ_UNTRUSTKEY, AUTH, sizeof(u_long), untrust_key },
#- { REQ_AUTHINFO, NOAUTH, 0, get_auth_info },
#- { REQ_TRAPS, NOAUTH, 0, req_get_traps },
#- { REQ_ADD_TRAP, AUTH, sizeof(struct conf_trap), req_set_trap },
#- { REQ_CLR_TRAP, AUTH, sizeof(struct conf_trap), req_clr_trap },
#- { REQ_REQUEST_KEY, AUTH, sizeof(u_long), set_request_keyid },
#- { REQ_CONTROL_KEY, AUTH, sizeof(u_long), set_control_keyid },
#- { REQ_GET_CTLSTATS, NOAUTH, 0, get_ctl_stats },
#+ { REQ_PEER_LIST, NOAUTH, 0, 0, peer_list },
#+ { REQ_PEER_LIST_SUM, NOAUTH, 0, 0, peer_list_sum },
#+ { REQ_PEER_INFO, NOAUTH, (sizeof(struct info_peer_list) - ALT_LONG),
#+ sizeof(struct info_peer_list), peer_info},
#+ { REQ_PEER_STATS, NOAUTH, (sizeof(struct info_peer_list) - ALT_LONG),
#+ sizeof(struct info_peer_list), peer_stats},
#+ { REQ_SYS_INFO, NOAUTH, 0, 0, sys_info },
#+ { REQ_SYS_STATS, NOAUTH, 0, 0, sys_stats },
#+ { REQ_IO_STATS, NOAUTH, 0, 0, io_stats },
#+ { REQ_MEM_STATS, NOAUTH, 0, 0, mem_stats },
#+ { REQ_LOOP_INFO, NOAUTH, 0, 0, loop_info },
#+ { REQ_TIMER_STATS, NOAUTH, 0, 0, timer_stats },
#+ { REQ_CONFIG, AUTH, (sizeof(struct conf_peer) - ALT_LONG),
#+ sizeof(struct conf_peer), do_conf },
#+ { REQ_UNCONFIG, AUTH, (sizeof(struct conf_unpeer) - ALT_INT),
#+ sizeof(struct conf_unpeer), do_unconf },
#+ { REQ_SET_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags),
#+ sizeof(struct conf_sys_flags), set_sys_flag },
#+ { REQ_CLR_SYS_FLAG, AUTH, sizeof(struct conf_sys_flags),
#+ sizeof(struct conf_sys_flags), clr_sys_flag },
#+ { REQ_GET_RESTRICT, NOAUTH, 0, 0, list_restrict },
#+ { REQ_RESADDFLAGS, AUTH, (sizeof(struct conf_restrict) - ALT_LONG),
#+ sizeof(struct conf_restrict), do_resaddflags },
#+ { REQ_RESSUBFLAGS, AUTH, (sizeof(struct conf_restrict) - ALT_LONG),
#+ sizeof(struct conf_restrict), do_ressubflags },
#+ { REQ_UNRESTRICT, AUTH, (sizeof(struct conf_restrict) - ALT_LONG),
#+ 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_RESET_STATS, AUTH, sizeof(struct reset_flags), 0, reset_stats },
#+ { REQ_RESET_PEER, AUTH, (sizeof(struct conf_unpeer) - ALT_INT),
#+ sizeof(struct conf_unpeer), reset_peer },
#+ { REQ_REREAD_KEYS, AUTH, 0, 0, do_key_reread },
#+ { REQ_TRUSTKEY, AUTH, sizeof(u_long), sizeof(u_long), trust_key },
#+ { REQ_UNTRUSTKEY, AUTH, sizeof(u_long), sizeof(u_long), untrust_key },
#+ { REQ_AUTHINFO, NOAUTH, 0, 0, get_auth_info },
#+ { REQ_TRAPS, NOAUTH, 0, 0, req_get_traps },
#+ { REQ_ADD_TRAP, AUTH, (sizeof(struct conf_trap) - ALT_LONG),
#+ sizeof(struct conf_trap), req_set_trap },
#+ { REQ_CLR_TRAP, AUTH, (sizeof(struct conf_trap) - ALT_LONG),
#+ sizeof(struct conf_trap), req_clr_trap },
#+ { REQ_REQUEST_KEY, AUTH, sizeof(u_long), sizeof(u_long),
#+ set_request_keyid },
#+ { REQ_CONTROL_KEY, AUTH, sizeof(u_long), sizeof(u_long),
#+ set_control_keyid },
#+ { REQ_GET_CTLSTATS, NOAUTH, 0, 0, get_ctl_stats },
# #ifdef KERNEL_PLL
#- { REQ_GET_KERNEL, NOAUTH, 0, get_kernel_info },
#+ { REQ_GET_KERNEL, NOAUTH, 0, 0, get_kernel_info },
# #endif
# #ifdef REFCLOCK
#- { REQ_GET_CLOCKINFO, NOAUTH, sizeof(u_int32), get_clock_info },
#- { REQ_SET_CLKFUDGE, AUTH, sizeof(struct conf_fudge), set_clock_fudge },
#- { REQ_GET_CLKBUGINFO, NOAUTH, sizeof(u_int32), get_clkbug_info },
#+ { REQ_GET_CLOCKINFO, NOAUTH, sizeof(u_int32), sizeof(u_int32),
#+ get_clock_info },
#+ { REQ_SET_CLKFUDGE, AUTH, sizeof(struct conf_fudge),
#+ sizeof(struct conf_fudge), set_clock_fudge },
#+ { REQ_GET_CLKBUGINFO, NOAUTH, sizeof(u_int32), sizeof(u_int32),
#+ get_clkbug_info },
# #endif
#- { NO_REQUEST, NOAUTH, 0, 0 }
#+ { NO_REQUEST, NOAUTH, 0, 0, 0 }
# };
#
#
#@@ -185,7 +208,7 @@
# static int databytes;
# static char exbuf[RESP_DATA_SIZE];
# static int usingexbuf;
#-static struct sockaddr_in *toaddr;
#+static struct sockaddr_storage *toaddr;
# static struct interface *frominter;
#
# /*
#@@ -211,7 +234,7 @@
# */
# static void
# req_ack(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt,
# int errcode
#@@ -241,7 +264,7 @@
# */
# static char *
# prepare_pkt(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *pkt,
# u_int structsize
#@@ -253,7 +276,7 @@
# #endif
#
# /*
#- * Fill in the implementation, reqest and itemsize fields
#+ * Fill in the implementation, request and itemsize fields
# * since these won't change.
# */
# rpkt.implementation = pkt->implementation;
#@@ -380,10 +403,11 @@
# {
# struct req_pkt *inpkt;
# struct req_pkt_tail *tailinpkt;
#- struct sockaddr_in *srcadr;
#+ struct sockaddr_storage *srcadr;
# struct interface *inter;
# struct req_proc *proc;
# int ec;
#+ short temp_size;
#
# /*
# * Initialize pointers, for convenience
#@@ -410,10 +434,9 @@
# || (++ec, INFO_SEQ(inpkt->auth_seq) != 0)
# || (++ec, INFO_ERR(inpkt->err_nitems) != 0)
# || (++ec, INFO_MBZ(inpkt->mbz_itemsize) != 0)
#- || (++ec, rbufp->recv_length > REQ_LEN_MAC)
# || (++ec, rbufp->recv_length < REQ_LEN_HDR)
# ) {
#- msyslog(LOG_ERR, "process_private: INFO_ERR_FMT: test %d failed, pkt from %s", ec, inet_ntoa(srcadr->sin_addr));
#+ msyslog(LOG_ERR, "process_private: INFO_ERR_FMT: test %d failed, pkt from %s", ec, stoa(srcadr));
# req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
# return;
# }
#@@ -425,7 +448,8 @@
# */
# if (inpkt->implementation == IMPL_UNIV)
# proc = univ_codes;
#- else if (inpkt->implementation == IMPL_XNTPD)
#+ else if ((inpkt->implementation == IMPL_XNTPD) ||
#+ (inpkt->implementation == IMPL_XNTPD_OLD))
# proc = ntp_codes;
# else {
# req_ack(srcadr, inter, inpkt, INFO_ERR_IMPL);
#@@ -452,6 +476,50 @@
# #endif
#
# /*
#+ * If we need data, check to see if we have some. If we
#+ * don't, check to see that there is none (picky, picky).
#+ */
#+
#+ /* This part is a bit tricky, we want to be sure that the size
#+ * returned is either the old or the new size. We also can find
#+ * out if the client can accept both types of messages this way.
#+ *
#+ * Handle the exception of REQ_CONFIG. It can have two data sizes.
#+ */
#+ temp_size = INFO_ITEMSIZE(inpkt->mbz_itemsize);
#+ if ((temp_size != proc->sizeofitem &&
#+ temp_size != proc->v6_sizeofitem) &&
#+ !(inpkt->implementation == IMPL_XNTPD &&
#+ inpkt->request == REQ_CONFIG &&
#+ temp_size == sizeof(struct old_conf_peer))) {
#+ if (debug > 2)
#+ printf("process_private: wrong item size, received %d, should be %d or %d\n",
#+ temp_size, proc->sizeofitem, proc->v6_sizeofitem);
#+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#+ return;
#+ }
#+ if ((proc->sizeofitem != 0) &&
#+ ((temp_size * INFO_NITEMS(inpkt->err_nitems)) >
#+ (rbufp->recv_length - REQ_LEN_HDR))) {
#+ if (debug > 2)
#+ printf("process_private: not enough data\n");
#+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#+ return;
#+ }
#+
#+ switch (inpkt->implementation) {
#+ case IMPL_XNTPD:
#+ client_v6_capable = 1;
#+ break;
#+ case IMPL_XNTPD_OLD:
#+ client_v6_capable = 0;
#+ break;
#+ default:
#+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#+ return;
#+ }
#+
#+ /*
# * If we need to authenticate, do so. Note that an
# * authenticatable packet must include a mac field, must
# * have used key info_auth_keyid and must have included
#@@ -463,10 +531,10 @@
# l_fp ftmp;
# double dtemp;
#
#- if (rbufp->recv_length < (REQ_LEN_HDR +
#+ if (rbufp->recv_length < (int)((REQ_LEN_HDR +
# (INFO_ITEMSIZE(inpkt->mbz_itemsize) *
# INFO_NITEMS(inpkt->err_nitems))
#- + sizeof(struct req_pkt_tail))) {
#+ + sizeof(struct req_pkt_tail)))) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
# }
# tailinpkt = (struct req_pkt_tail *)((char *)&rbufp->recv_pkt +
#@@ -494,8 +562,8 @@
# printf("bad pkt length %d\n",
# rbufp->recv_length);
# #endif
#- msyslog(LOG_ERR, "process_private: bad pkt length %d",
#- rbufp->recv_length);
#+ msyslog(LOG_ERR, "process_private: bad pkt length %d",
#+ rbufp->recv_length);
# req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
# return;
# }
#@@ -519,6 +587,10 @@
# /*
# * He's a loser. Tell him.
# */
#+#ifdef DEBUG
#+ if (debug > 4)
#+ printf("xmit/rcv timestamp delta > INFO_TS_MAXSKEW\n");
#+#endif
# req_ack(srcadr, inter, inpkt, INFO_ERR_AUTH);
# return;
# }
#@@ -529,36 +601,15 @@
# if (!authdecrypt(info_auth_keyid, (u_int32 *)inpkt,
# rbufp->recv_length - sizeof(struct req_pkt_tail) +
# REQ_LEN_HDR, sizeof(struct req_pkt_tail) - REQ_LEN_HDR)) {
#+#ifdef DEBUG
#+ if (debug > 4)
#+ printf("authdecrypt failed\n");
#+#endif
# req_ack(srcadr, inter, inpkt, INFO_ERR_AUTH);
# return;
# }
# }
#
#- /*
#- * If we need data, check to see if we have some. If we
#- * don't, check to see that there is none (picky, picky).
#- *
#- * Handle the exception of REQ_CONFIG. It can have two data sizes.
#- */
#- if (INFO_ITEMSIZE(inpkt->mbz_itemsize) != proc->sizeofitem &&
#- !(inpkt->implementation == IMPL_XNTPD &&
#- inpkt->request == REQ_CONFIG &&
#- INFO_ITEMSIZE(inpkt->mbz_itemsize) == sizeof(struct old_conf_peer))) {
#- msyslog(LOG_ERR, "INFO_ITEMSIZE(inpkt->mbz_itemsize) != proc->sizeofitem: %d != %d",
#- INFO_ITEMSIZE(inpkt->mbz_itemsize), proc->sizeofitem);
#- req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#- return;
#- }
#- if (proc->sizeofitem != 0)
#- if (proc->sizeofitem*INFO_NITEMS(inpkt->err_nitems)
#- > sizeof(inpkt->data)) {
#- msyslog(LOG_ERR, "sizeofitem(%d)*NITEMS(%d) > data: %d > %ld",
#- proc->sizeofitem, INFO_NITEMS(inpkt->err_nitems),
#- proc->sizeofitem*INFO_NITEMS(inpkt->err_nitems),
#- (long)sizeof(inpkt->data));
#- req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#- return;
#- }
# #ifdef DEBUG
# if (debug > 3)
# printf("process_private: all okay, into handler\n");
#@@ -576,7 +627,7 @@
# */
# static void
# peer_list(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -584,26 +635,49 @@
# register struct info_peer_list *ip;
# register struct peer *pp;
# register int i;
#+ register int skip = 0;
#+ int offset;
#
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_LONG;
# ip = (struct info_peer_list *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_peer_list));
#+ sizeof(struct info_peer_list) - offset);
# for (i = 0; i < HASH_SIZE && ip != 0; i++) {
# pp = peer_hash[i];
# while (pp != 0 && ip != 0) {
#- ip->address = pp->srcadr.sin_addr.s_addr;
#- ip->port = pp->srcadr.sin_port;
#- 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 (pp->srcadr.ss_family == AF_INET6) {
#+ if (client_v6_capable) {
#+ ip->addr6 = GET_INADDR6(pp->srcadr);
#+ ip->v6_flag = 1;
#+ skip = 0;
#+ } else {
#+ skip = 1;
#+ break;
#+ }
#+ } else {
#+ ip->addr = GET_INADDR(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;
# }
# }
# flush_pkt();
#@@ -615,7 +689,7 @@
# */
# static void
# peer_list_sum(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -624,14 +698,19 @@
# register struct peer *pp;
# register int i;
# l_fp ltmp;
#+ register int skip;
#+ int offset;
#
# #ifdef DEBUG
# if (debug > 2)
# printf("wants peer list summary\n");
# #endif
#-
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_LONG;
# ips = (struct info_peer_summary *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_peer_summary));
#+ sizeof(struct info_peer_summary) - offset);
# for (i = 0; i < HASH_SIZE && ips != 0; i++) {
# pp = peer_hash[i];
# while (pp != 0 && ips != 0) {
#@@ -639,46 +718,66 @@
# if (debug > 3)
# printf("sum: got one\n");
# #endif
#- ips->dstadr =
#- (pp->processed)
#- ? pp->cast_flags == MDF_BCAST
#- ? pp->dstadr->bcast.sin_addr.s_addr
#- : pp->cast_flags
#- ? pp->dstadr->sin.sin_addr.s_addr
#- ? pp->dstadr->sin.sin_addr.s_addr
#- : pp->dstadr->bcast.sin_addr.s_addr
#- : 1
#- : 5;
#- ips->srcadr = pp->srcadr.sin_addr.s_addr;
#- ips->srcport = pp->srcadr.sin_port;
#- 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_AUTHENABLE)
#- ips->flags |= INFO_FLAG_AUTHENABLE;
#- 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, <mp);
#- HTONL_FP(<mp, &ips->offset);
#- ips->dispersion = HTONS_FP(DTOUFP(pp->disp));
#-
#- pp = pp->next;
#+ /*
#+ * Be careful here not to return v6 peers when we
#+ * want only v4.
#+ */
#+ if (pp->srcadr.ss_family == AF_INET6) {
#+ if (client_v6_capable) {
#+ ips->srcadr6 = GET_INADDR6(pp->srcadr);
#+ ips->v6_flag = 1;
#+ ips->dstadr6 = GET_INADDR6(pp->dstadr->sin);
#+ skip = 0;
#+ } else {
#+ skip = 1;
#+ break;
#+ }
#+ } else {
#+ ips->srcadr = GET_INADDR(pp->srcadr);
#+ if (client_v6_capable)
#+ ips->v6_flag = 0;
#+/* XXX PDM This code is buggy. Need to replace with a straightforward assignment */
#+ ips->dstadr = (pp->processed) ?
#+ pp->cast_flags == MDF_BCAST ?
#+ GET_INADDR(pp->dstadr->bcast):
#+ pp->cast_flags ?
#+ GET_INADDR(pp->dstadr->sin) ?
#+ GET_INADDR(pp->dstadr->sin):
#+ GET_INADDR(pp->dstadr->bcast):
#+ 1 : GET_INADDR(pp->dstadr->sin);
#+
#+ 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_AUTHENABLE)
#+ ips->flags |= INFO_FLAG_AUTHENABLE;
#+ 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, <mp);
#+ HTONL_FP(<mp, &ips->offset);
#+ ips->dispersion = HTONS_FP(DTOUFP(pp->disp));
#+ }
#+ pp = pp->next;
# ips = (struct info_peer_summary *)more_pkt();
# }
# }
#@@ -691,7 +790,7 @@
# */
# static void
# peer_info (
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -701,33 +800,58 @@
# register struct info_peer *ip;
# register int items;
# register int i, j;
#- struct sockaddr_in addr;
#+ int offset;
#+ struct sockaddr_storage addr;
# extern struct peer *sys_peer;
# l_fp ltmp;
#
# memset((char *)&addr, 0, sizeof addr);
#- addr.sin_family = AF_INET;
# items = INFO_NITEMS(inpkt->err_nitems);
# ipl = (struct info_peer_list *) inpkt->data;
#+
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_LONG;
# ip = (struct info_peer *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_peer));
#+ sizeof(struct info_peer) - offset);
# while (items-- > 0 && ip != 0) {
#- addr.sin_port = ipl->port;
#- addr.sin_addr.s_addr = ipl->address;
#+ memset((char *)&addr, 0, sizeof(addr));
#+ NSRCPORT(&addr) = ipl->port;
#+ if (client_v6_capable && ipl->v6_flag != 0) {
#+ addr.ss_family = AF_INET6;
#+ GET_INADDR6(addr) = ipl->addr6;
#+ } else {
#+ addr.ss_family = AF_INET;
#+ GET_INADDR(addr) = ipl->addr;
#+ }
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ addr.ss_len = SOCKLEN(&addr);
#+#endif
# ipl++;
# if ((pp = findexistingpeer(&addr, (struct peer *)0, -1)) == 0)
# continue;
#- ip->dstadr =
#- (pp->processed)
#- ? pp->cast_flags == MDF_BCAST
#- ? pp->dstadr->bcast.sin_addr.s_addr
#- : pp->cast_flags
#- ? pp->dstadr->sin.sin_addr.s_addr
#- ? pp->dstadr->sin.sin_addr.s_addr
#- : pp->dstadr->bcast.sin_addr.s_addr
#- : 2
#- : 6;
#- ip->srcadr = NSRCADR(&pp->srcadr);
#+ if (pp->srcadr.ss_family == AF_INET6) {
#+ ip->dstadr6 = pp->cast_flags == MDF_BCAST ?
#+ GET_INADDR6(pp->dstadr->bcast) :
#+ GET_INADDR6(pp->dstadr->sin);
#+ ip->srcadr6 = GET_INADDR6(pp->srcadr);
#+ ip->v6_flag = 1;
#+ } else {
#+/* XXX PDM This code is buggy. Need to replace with a straightforward assignment */
#+ ip->dstadr = (pp->processed) ?
#+ pp->cast_flags == MDF_BCAST ?
#+ GET_INADDR(pp->dstadr->bcast):
#+ pp->cast_flags ?
#+ GET_INADDR(pp->dstadr->sin) ?
#+ GET_INADDR(pp->dstadr->sin):
#+ GET_INADDR(pp->dstadr->bcast):
#+ 2 : GET_INADDR(pp->dstadr->sin);
#+
#+ ip->srcadr = GET_INADDR(pp->srcadr);
#+ if (client_v6_capable)
#+ ip->v6_flag = 0;
#+ }
# ip->srcport = NSRCPORT(&pp->srcadr);
# ip->flags = 0;
# if (pp == sys_peer)
#@@ -755,9 +879,9 @@
# ip->precision = pp->precision;
# ip->version = pp->version;
# ip->reach = pp->reach;
#- ip->unreach = pp->unreach;
#+ ip->unreach = (u_char) pp->unreach;
# ip->flash = (u_char)pp->flash;
#- ip->flash2 = pp->flash;
#+ ip->flash2 = (u_short) pp->flash;
# ip->estbdelay = HTONS_FP(DTOFP(pp->estbdelay));
# ip->ttl = pp->ttl;
# ip->associd = htons(pp->associd);
#@@ -775,8 +899,8 @@
# ip->filtdelay[i] = HTONS_FP(DTOFP(pp->filter_delay[j]));
# DTOLFP(pp->filter_offset[j], <mp);
# HTONL_FP(<mp, &ip->filtoffset[i]);
#- ip->order[i] = (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;
# }
#@@ -796,7 +920,7 @@
# */
# static void
# peer_stats (
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -805,32 +929,59 @@
# register struct peer *pp;
# register struct info_peer_stats *ip;
# register int items;
#- struct sockaddr_in addr;
#+ int offset;
#+ struct sockaddr_storage addr;
# extern struct peer *sys_peer;
#
#- memset((char *)&addr, 0, sizeof addr);
#- addr.sin_family = AF_INET;
#+ printf("peer_stats: called\n");
# items = INFO_NITEMS(inpkt->err_nitems);
# ipl = (struct info_peer_list *) inpkt->data;
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_LONG;
# ip = (struct info_peer_stats *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_peer_stats));
#+ sizeof(struct info_peer_stats) - offset);
# while (items-- > 0 && ip != 0) {
#- addr.sin_port = ipl->port;
#- addr.sin_addr.s_addr = ipl->address;
#- ipl++;
#+ memset((char *)&addr, 0, sizeof(addr));
#+ NSRCPORT(&addr) = ipl->port;
#+ if (client_v6_capable && ipl->v6_flag) {
#+ addr.ss_family = AF_INET6;
#+ GET_INADDR6(addr) = ipl->addr6;
#+ } else {
#+ addr.ss_family = AF_INET;
#+ GET_INADDR(addr) = ipl->addr;
#+ }
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ addr.ss_len = SOCKLEN(&addr);
#+#endif
#+ printf("peer_stats: looking for %s, %d, %d\n", stoa(&addr),
#+ ipl->port, ((struct sockaddr_in6 *)&addr)->sin6_port);
#+ ipl = (struct info_peer_list *)((char *)ipl +
#+ INFO_ITEMSIZE(inpkt->mbz_itemsize));
#+
# if ((pp = findexistingpeer(&addr, (struct peer *)0, -1)) == 0)
# continue;
#- ip->dstadr =
#- (pp->processed)
#- ? pp->cast_flags == MDF_BCAST
#- ? pp->dstadr->bcast.sin_addr.s_addr
#- : pp->cast_flags
#- ? pp->dstadr->sin.sin_addr.s_addr
#- ? pp->dstadr->sin.sin_addr.s_addr
#- : pp->dstadr->bcast.sin_addr.s_addr
#- : 3
#- : 7;
#- ip->srcadr = NSRCADR(&pp->srcadr);
#+ printf("peer_stats: found %s\n", stoa(&addr));
#+ if (pp->srcadr.ss_family == AF_INET) {
#+ ip->dstadr = (pp->processed) ?
#+ pp->cast_flags == MDF_BCAST ?
#+ GET_INADDR(pp->dstadr->bcast):
#+ pp->cast_flags ?
#+ GET_INADDR(pp->dstadr->sin) ?
#+ GET_INADDR(pp->dstadr->sin):
#+ GET_INADDR(pp->dstadr->bcast):
#+ 3 : 7;
#+ ip->srcadr = GET_INADDR(pp->srcadr);
#+ if (client_v6_capable)
#+ ip->v6_flag = 0;
#+ } else {
#+ ip->dstadr6 = pp->cast_flags == MDF_BCAST ?
#+ GET_INADDR6(pp->dstadr->bcast):
#+ GET_INADDR6(pp->dstadr->sin);
#+ ip->srcadr6 = GET_INADDR6(pp->srcadr);
#+ ip->v6_flag = 1;
#+ }
# ip->srcport = NSRCPORT(&pp->srcadr);
# ip->flags = 0;
# if (pp == sys_peer)
#@@ -871,12 +1022,13 @@
# */
# static void
# sys_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
# register struct info_sys *is;
#+ int offset;
#
# /*
# * Importations from the protocol module
#@@ -896,16 +1048,27 @@
# extern double clock_stability;
# extern double sys_jitter;
#
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_LONG;
# is = (struct info_sys *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_sys));
#+ sizeof(struct info_sys) - offset);
#
#+ is->peer = 0;
#+ is->peer_mode = 0;
# if (sys_peer != 0) {
#- is->peer = NSRCADR(&sys_peer->srcadr);
#+ if (sys_peer->srcadr.ss_family == AF_INET) {
#+ is->peer = GET_INADDR(sys_peer->srcadr);
#+ if (client_v6_capable)
#+ is->v6_flag = 0;
#+ } else if (client_v6_capable) {
#+ is->peer6 = GET_INADDR6(sys_peer->srcadr);
#+ is->v6_flag = 1;
#+ }
# is->peer_mode = sys_peer->hmode;
#- } else {
#- is->peer = 0;
#- is->peer_mode = 0;
# }
#+
# is->leap = sys_leap;
# is->stratum = sys_stratum;
# is->precision = sys_precision;
#@@ -950,7 +1113,7 @@
# */
# static void
# sys_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -960,22 +1123,11 @@
# /*
# * Importations from the protocol module
# */
#- extern u_long sys_stattime;
#- extern u_long sys_badstratum;
#- extern u_long sys_oldversionpkt;
#- extern u_long sys_newversionpkt;
#- extern u_long sys_unknownversion;
#- extern u_long sys_badlength;
#- extern u_long sys_processed;
#- extern u_long sys_badauth;
#- extern u_long sys_limitrejected;
#-
# ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_sys_stats));
#-
#+ sizeof(struct info_sys_stats));
# ss->timeup = htonl((u_int32)current_time);
# ss->timereset = htonl((u_int32)(current_time - sys_stattime));
#- ss->badstratum = htonl((u_int32)sys_badstratum);
#+ ss->denied = htonl((u_int32)sys_restricted);
# ss->oldversionpkt = htonl((u_int32)sys_oldversionpkt);
# ss->newversionpkt = htonl((u_int32)sys_newversionpkt);
# ss->unknownversion = htonl((u_int32)sys_unknownversion);
#@@ -983,6 +1135,7 @@
# ss->processed = htonl((u_int32)sys_processed);
# ss->badauth = htonl((u_int32)sys_badauth);
# ss->limitrejected = htonl((u_int32)sys_limitrejected);
#+ ss->received = htonl((u_int32)sys_received);
# (void) more_pkt();
# flush_pkt();
# }
#@@ -993,7 +1146,7 @@
# */
# static void
# mem_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1039,7 +1192,7 @@
# */
# static void
# io_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1077,7 +1230,7 @@
# */
# static void
# timer_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1109,7 +1262,7 @@
# */
# static void
# loop_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1145,50 +1298,44 @@
# */
# static void
# do_conf(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
#- u_int fl;
#- struct conf_peer *cp;
#- struct old_conf_peer *ocp;
# int items;
#- struct sockaddr_in peeraddr;
#+ u_int fl;
#+ struct conf_peer *cp;
#+ struct conf_peer temp_cp;
#+ struct sockaddr_storage peeraddr;
#+ struct sockaddr_in tmp_clock;
#
# /*
# * Do a check of everything to see that it looks
# * okay. If not, complain about it. Note we are
# * very picky here.
# */
#- ocp = NULL;
#- if (INFO_ITEMSIZE(inpkt->mbz_itemsize) == sizeof(struct old_conf_peer))
#- ocp = (struct old_conf_peer *)inpkt->data;
# 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));
# fl = 0;
# while (items-- > 0 && !fl) {
#- if (((cp->version) > NTP_VERSION)
#- || ((cp->version) < NTP_OLDVERSION))
#+ if (((temp_cp.version) > NTP_VERSION)
#+ || ((temp_cp.version) < NTP_OLDVERSION))
# fl = 1;
#- if (cp->hmode != MODE_ACTIVE
#- && cp->hmode != MODE_CLIENT
#- && cp->hmode != MODE_BROADCAST)
#+ if (temp_cp.hmode != MODE_ACTIVE
#+ && temp_cp.hmode != MODE_CLIENT
#+ && temp_cp.hmode != MODE_BROADCAST)
# fl = 1;
#- if (cp->flags & ~(CONF_FLAG_AUTHENABLE | CONF_FLAG_PREFER |
#- CONF_FLAG_NOSELECT | CONF_FLAG_BURST | CONF_FLAG_IBURST |
#- CONF_FLAG_SKEY))
#+ if (temp_cp.flags & ~(CONF_FLAG_AUTHENABLE | CONF_FLAG_PREFER
#+ | CONF_FLAG_BURST | CONF_FLAG_SKEY))
# fl = 1;
#- if (ocp) {
#- ocp++;
#- cp = (struct conf_peer *)ocp;
#- } else
#- cp++;
#+ cp = (struct conf_peer *)
#+ ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# if (fl) {
#- msyslog(LOG_ERR, "do_conf: fl is nonzero!");
# req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
# return;
# }
#@@ -1197,69 +1344,70 @@
# * Looks okay, try it out
# */
# items = INFO_NITEMS(inpkt->err_nitems);
#- cp = (struct conf_peer *)inpkt->data;
#- if (ocp)
#- ocp = (struct old_conf_peer *)inpkt->data;
#- memset((char *)&peeraddr, 0, sizeof(struct sockaddr_in));
#- peeraddr.sin_family = AF_INET;
#- peeraddr.sin_port = htons(NTP_PORT);
#+ cp = (struct conf_peer *)inpkt->data;
#
#- /*
#- * Make sure the address is valid
#- */
#- if (
#+ while (items-- > 0) {
#+ memset(&temp_cp, 0, sizeof(struct conf_peer));
#+ memcpy(&temp_cp, (char *)cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
#+ memset((char *)&peeraddr, 0, sizeof(struct sockaddr_storage));
#+
#+ fl = 0;
#+ if (temp_cp.flags & CONF_FLAG_AUTHENABLE)
#+ fl |= FLAG_AUTHENABLE;
#+ if (temp_cp.flags & CONF_FLAG_PREFER)
#+ fl |= FLAG_PREFER;
#+ if (temp_cp.flags & CONF_FLAG_BURST)
#+ fl |= FLAG_BURST;
#+ if (temp_cp.flags & CONF_FLAG_SKEY)
#+ fl |= FLAG_SKEY;
#+ if (client_v6_capable && temp_cp.v6_flag != 0) {
#+ peeraddr.ss_family = AF_INET6;
#+ GET_INADDR6(peeraddr) = temp_cp.peeraddr6;
#+ } else {
#+ peeraddr.ss_family = AF_INET;
#+ GET_INADDR(peeraddr) = temp_cp.peeraddr;
#+ /*
#+ * Make sure the address is valid
#+ */
#+ tmp_clock = *CAST_V4(peeraddr);
#+ if (
# #ifdef REFCLOCK
#- !ISREFCLOCKADR(&peeraddr) &&
#+ !ISREFCLOCKADR(&tmp_clock) &&
# #endif
#- ISBADADR(&peeraddr)) {
#-#ifdef REFCLOCK
#- msyslog(LOG_ERR, "do_conf: !ISREFCLOCK && ISBADADR");
#-#else
#- msyslog(LOG_ERR, "do_conf: ISBADADR");
#+ ISBADADR(&tmp_clock)) {
#+ req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#+ return;
#+ }
#+
#+ }
#+ NSRCPORT(&peeraddr) = htons(NTP_PORT);
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ peeraddr.ss_len = SOCKLEN(&peeraddr);
# #endif
#- req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
#- return;
#- }
#
#- while (items-- > 0) {
#- fl = 0;
#- if (cp->flags & CONF_FLAG_AUTHENABLE)
#- fl |= FLAG_AUTHENABLE;
#- if (cp->flags & CONF_FLAG_PREFER)
#- fl |= FLAG_PREFER;
#- if (cp->flags & CONF_FLAG_NOSELECT)
#- fl |= FLAG_NOSELECT;
#- if (cp->flags & CONF_FLAG_BURST)
#- fl |= FLAG_BURST;
#- if (cp->flags & CONF_FLAG_IBURST)
#- fl |= FLAG_IBURST;
#- if (cp->flags & CONF_FLAG_SKEY)
#- fl |= FLAG_SKEY;
#- peeraddr.sin_addr.s_addr = cp->peeraddr;
# /* XXX W2DO? minpoll/maxpoll arguments ??? */
#- if (peer_config(&peeraddr, any_interface, cp->hmode,
#- cp->version, cp->minpoll, cp->maxpoll, fl, cp->ttl,
#- cp->keyid, NULL) == 0) {
#+ if (peer_config(&peeraddr, (struct interface *)0,
#+ temp_cp.hmode, temp_cp.version, temp_cp.minpoll,
#+ temp_cp.maxpoll, fl, temp_cp.ttl, temp_cp.keyid,
#+ NULL) == 0) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
# }
#- if (ocp) {
#- ocp++;
#- cp = (struct conf_peer *)ocp;
#- } else
#- cp++;
#+ cp = (struct conf_peer *)
#+ ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# req_ack(srcadr, inter, inpkt, INFO_OKAY);
# }
#
#-
#+#if 0
#+/* XXX */
# /*
# * dns_a - Snarf DNS info for an association ID
# */
# static void
# dns_a(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1326,9 +1474,10 @@
# }
#
# msyslog(LOG_INFO, "dns_a: <%s> for %s, AssocID %d, bogon %d",
#- dp->hostname, inet_ntoa(peeraddr.sin_addr), associd,
#+ dp->hostname,
#+ stoa((struct sockaddr_storage *)&peeraddr), associd,
# bogon);
#-
#+
# if (bogon) {
# /* If it didn't work */
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
#@@ -1340,28 +1489,29 @@
# #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(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
# register struct conf_unpeer *cp;
#+ struct conf_unpeer temp_cp;
# register int items;
# register struct peer *peer;
#- struct sockaddr_in peeraddr;
#+ struct sockaddr_storage peeraddr;
# int bad, found;
#
# /*
#@@ -1370,17 +1520,28 @@
# * configured. If so, we remove them. If not, we return
# * an error.
# */
#- peeraddr.sin_family = AF_INET;
#- peeraddr.sin_port = htons(NTP_PORT);
#-
# items = INFO_NITEMS(inpkt->err_nitems);
# cp = (struct conf_unpeer *)inpkt->data;
#
# bad = 0;
# while (items-- > 0 && !bad) {
#- peeraddr.sin_addr.s_addr = cp->peeraddr;
#+ memset(&temp_cp, 0, sizeof(temp_cp));
#+ memset(&peeraddr, 0, sizeof(peeraddr));
#+ memcpy(&temp_cp, cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
#+ if (client_v6_capable && temp_cp.v6_flag != 0) {
#+ peeraddr.ss_family = AF_INET6;
#+ GET_INADDR6(peeraddr) = temp_cp.peeraddr6;
#+ } else {
#+ peeraddr.ss_family = AF_INET;
#+ GET_INADDR(peeraddr) = temp_cp.peeraddr;
#+ }
#+ NSRCPORT(&peeraddr) = htons(NTP_PORT);
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ peeraddr.ss_len = SOCKLEN(&peeraddr);
#+#endif
# found = 0;
# peer = (struct peer *)0;
#+ printf("searching for %s\n", stoa(&peeraddr));
# while (!found) {
# peer = findexistingpeer(&peeraddr, peer, -1);
# if (peer == (struct peer *)0)
#@@ -1390,7 +1551,8 @@
# }
# if (!found)
# bad = 1;
#- cp++;
#+ cp = (struct conf_unpeer *)
#+ ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# if (bad) {
#@@ -1405,9 +1567,23 @@
# items = INFO_NITEMS(inpkt->err_nitems);
# cp = (struct conf_unpeer *)inpkt->data;
# while (items-- > 0) {
#- peeraddr.sin_addr.s_addr = cp->peeraddr;
#+ memset(&temp_cp, 0, sizeof(temp_cp));
#+ memset(&peeraddr, 0, sizeof(peeraddr));
#+ memcpy(&temp_cp, cp, INFO_ITEMSIZE(inpkt->mbz_itemsize));
#+ if (client_v6_capable && temp_cp.v6_flag != 0) {
#+ peeraddr.ss_family = AF_INET6;
#+ GET_INADDR6(peeraddr) = temp_cp.peeraddr6;
#+ } else {
#+ peeraddr.ss_family = AF_INET;
#+ GET_INADDR(peeraddr) = temp_cp.peeraddr;
#+ }
#+ NSRCPORT(&peeraddr) = htons(NTP_PORT);
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ peeraddr.ss_len = SOCKLEN(&peeraddr);
#+#endif
# peer_unconfig(&peeraddr, (struct interface *)0, -1);
#- cp++;
#+ cp = (struct conf_unpeer *)
#+ ((char *)cp + INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# req_ack(srcadr, inter, inpkt, INFO_OKAY);
#@@ -1419,7 +1595,7 @@
# */
# static void
# set_sys_flag(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1433,7 +1609,7 @@
# */
# static void
# clr_sys_flag(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1447,7 +1623,7 @@
# */
# static void
# setclr_flags(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt,
# u_long set
#@@ -1467,7 +1643,7 @@
# SYS_FLAG_NTP | SYS_FLAG_KERNEL | SYS_FLAG_MONITOR |
# SYS_FLAG_FILEGEN | SYS_FLAG_AUTH | SYS_FLAG_CAL)) {
# msyslog(LOG_ERR, "setclr_flags: extra flags: %#x",
#- flags & ~(SYS_FLAG_BCLIENT | SYS_FLAG_PPS |
#+ flags & ~(SYS_FLAG_BCLIENT | SYS_FLAG_PPS |
# SYS_FLAG_NTP | SYS_FLAG_KERNEL |
# SYS_FLAG_MONITOR | SYS_FLAG_FILEGEN |
# SYS_FLAG_AUTH | SYS_FLAG_CAL));
#@@ -1476,21 +1652,21 @@
# }
#
# if (flags & SYS_FLAG_BCLIENT)
#- proto_config(PROTO_BROADCLIENT, set, 0.);
#+ proto_config(PROTO_BROADCLIENT, set, 0., NULL);
# if (flags & SYS_FLAG_PPS)
#- proto_config(PROTO_PPS, set, 0.);
#+ proto_config(PROTO_PPS, set, 0., NULL);
# if (flags & SYS_FLAG_NTP)
#- proto_config(PROTO_NTP, set, 0.);
#+ proto_config(PROTO_NTP, set, 0., NULL);
# if (flags & SYS_FLAG_KERNEL)
#- proto_config(PROTO_KERNEL, set, 0.);
#+ proto_config(PROTO_KERNEL, set, 0., NULL);
# if (flags & SYS_FLAG_MONITOR)
#- proto_config(PROTO_MONITOR, set, 0.);
#+ proto_config(PROTO_MONITOR, set, 0., NULL);
# if (flags & SYS_FLAG_FILEGEN)
#- proto_config(PROTO_FILEGEN, set, 0.);
#+ proto_config(PROTO_FILEGEN, set, 0., NULL);
# if (flags & SYS_FLAG_AUTH)
#- proto_config(PROTO_AUTHENTICATE, set, 0.);
#+ proto_config(PROTO_AUTHENTICATE, set, 0., NULL);
# if (flags & SYS_FLAG_CAL)
#- proto_config(PROTO_CAL, set, 0.);
#+ proto_config(PROTO_CAL, set, 0., NULL);
# req_ack(srcadr, inter, inpkt, INFO_OKAY);
# }
#
#@@ -1500,30 +1676,48 @@
# */
# static void
# list_restrict(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
# register struct info_restrict *ir;
# register struct restrictlist *rl;
#- extern struct restrictlist *restrictlist;
#+ register struct restrictlist6 *rl6;
#+ int offset;
#
# #ifdef DEBUG
# if (debug > 2)
#- printf("wants peer list summary\n");
#+ printf("wants restrict list summary\n");
# #endif
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_LONG;
#
# ir = (struct info_restrict *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_restrict));
#+ sizeof(struct info_restrict) - offset);
#+
# for (rl = restrictlist; rl != 0 && ir != 0; rl = rl->next) {
# ir->addr = htonl(rl->addr);
#+ if (client_v6_capable)
#+ ir->v6_flag = 0;
# ir->mask = htonl(rl->mask);
# ir->count = htonl((u_int32)rl->count);
# ir->flags = htons(rl->flags);
# ir->mflags = htons(rl->mflags);
# ir = (struct info_restrict *)more_pkt();
# }
#+ if (client_v6_capable)
#+ for (rl6 = restrictlist6; rl6 != 0 && ir != 0; rl6 = rl6->next) {
#+ ir->addr6 = rl6->addr6;
#+ ir->mask6 = rl6->mask6;
#+ ir->v6_flag = 1;
#+ ir->count = htonl((u_int32)rl6->count);
#+ ir->flags = htons(rl6->flags);
#+ ir->mflags = htons(rl6->mflags);
#+ ir = (struct info_restrict *)more_pkt();
#+ }
# flush_pkt();
# }
#
#@@ -1534,7 +1728,7 @@
# */
# static void
# do_resaddflags(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1549,7 +1743,7 @@
# */
# static void
# do_ressubflags(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1563,7 +1757,7 @@
# */
# static void
# do_unrestrict(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1580,7 +1774,7 @@
# */
# static void
# do_restrict(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt,
# int op
#@@ -1588,8 +1782,8 @@
# {
# register struct conf_restrict *cr;
# register int items;
#- struct sockaddr_in matchaddr;
#- struct sockaddr_in matchmask;
#+ struct sockaddr_storage matchaddr;
#+ struct sockaddr_storage matchmask;
# int bad;
#
# /*
#@@ -1606,9 +1800,16 @@
# bad |= 1;
# if (cr->flags & ~(RES_ALLFLAGS))
# bad |= 2;
#- if (cr->addr == htonl(INADDR_ANY) && cr->mask != htonl(INADDR_ANY))
#- bad |= 4;
#- cr++;
#+ if (cr->mask != htonl(INADDR_ANY)) {
#+ if (client_v6_capable && cr->v6_flag != 0) {
#+ if (IN6_IS_ADDR_UNSPECIFIED(&cr->addr6))
#+ bad |= 4;
#+ } else
#+ if (cr->addr == htonl(INADDR_ANY))
#+ bad |= 8;
#+ }
#+ cr = (struct conf_restrict *)((char *)cr +
#+ INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# if (bad) {
#@@ -1622,14 +1823,21 @@
# */
# items = INFO_NITEMS(inpkt->err_nitems);
# cr = (struct conf_restrict *)inpkt->data;
#- memset((char *)&matchaddr, 0, sizeof(struct sockaddr_in));
#- memset((char *)&matchmask, 0, sizeof(struct sockaddr_in));
#- matchaddr.sin_family = AF_INET;
#- matchmask.sin_family = AF_INET;
#+ memset((char *)&matchaddr, 0, sizeof(struct sockaddr_storage));
#+ memset((char *)&matchmask, 0, sizeof(struct sockaddr_storage));
#
# while (items-- > 0) {
#- matchaddr.sin_addr.s_addr = cr->addr;
#- matchmask.sin_addr.s_addr = cr->mask;
#+ if (client_v6_capable && cr->v6_flag != 0) {
#+ GET_INADDR6(matchaddr) = cr->addr6;
#+ GET_INADDR6(matchmask) = cr->mask6;
#+ matchaddr.ss_family = AF_INET6;
#+ matchmask.ss_family = AF_INET6;
#+ } else {
#+ GET_INADDR(matchaddr) = cr->addr;
#+ GET_INADDR(matchmask) = cr->mask;
#+ matchaddr.ss_family = AF_INET;
#+ matchmask.ss_family = AF_INET;
#+ }
# hack_restrict(op, &matchaddr, &matchmask, cr->mflags,
# cr->flags);
# cr++;
#@@ -1644,13 +1852,14 @@
# */
# static void
# mon_getlist_0(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
# register struct info_monitor *im;
# register struct mon_data *md;
#+ int offset;
# extern struct mon_data mon_mru_list;
# extern int mon_enabled;
#
#@@ -1662,19 +1871,28 @@
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
# }
#-
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_LONG;
# im = (struct info_monitor *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_monitor));
#+ sizeof(struct info_monitor) - offset);
# 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->lasttime));
#+ im->lasttime = htonl((u_int32)md->avg_interval);
# im->firsttime = htonl((u_int32)(current_time - md->firsttime));
#- if (md->lastdrop)
#- im->lastdrop = htonl((u_int32)(current_time - md->lastdrop));
#- else
#- im->lastdrop = 0;
#+ im->lastdrop = htonl((u_int32)md->drop_count);
# im->count = htonl((u_int32)(md->count));
#- im->addr = md->rmtadr;
#+ if (md->rmtadr.ss_family == AF_INET6) {
#+ if (!client_v6_capable)
#+ continue;
#+ im->addr6 = GET_INADDR6(md->rmtadr);
#+ im->v6_flag = 1;
#+ } else {
#+ im->addr = GET_INADDR(md->rmtadr);
#+ if (client_v6_capable)
#+ im->v6_flag = 0;
#+ }
# im->port = md->rmtport;
# im->mode = md->mode;
# im->version = md->version;
#@@ -1688,13 +1906,14 @@
# */
# static void
# mon_getlist_1(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
# {
# register struct info_monitor_1 *im;
# register struct mon_data *md;
#+ int offset;
# extern struct mon_data mon_mru_list;
# extern int mon_enabled;
#
#@@ -1706,28 +1925,36 @@
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
# }
#-
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_LONG;
# im = (struct info_monitor_1 *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_monitor_1));
#+ sizeof(struct info_monitor_1) - offset);
# 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->lasttime));
#+ im->lasttime = htonl((u_int32)md->avg_interval);
# im->firsttime = htonl((u_int32)(current_time - md->firsttime));
#- if (md->lastdrop)
#- im->lastdrop = htonl((u_int32)(current_time - md->lastdrop));
#- else
#- im->lastdrop = 0;
#+ im->lastdrop = htonl((u_int32)md->drop_count);
# im->count = htonl((u_int32)md->count);
#- im->addr = md->rmtadr;
#- im->daddr =
#- (md->cast_flags == MDF_BCAST)
#- ? md->interface->bcast.sin_addr.s_addr
#- : (md->cast_flags
#- ? (md->interface->sin.sin_addr.s_addr
#- ? md->interface->sin.sin_addr.s_addr
#- : md->interface->bcast.sin_addr.s_addr
#- )
#- : 4);
#+ if (md->rmtadr.ss_family == AF_INET6) {
#+ if (!client_v6_capable)
#+ continue;
#+ im->addr6 = GET_INADDR6(md->rmtadr);
#+ im->v6_flag = 1;
#+ im->daddr6 = GET_INADDR6(md->interface->sin);
#+ } else {
#+ im->addr = GET_INADDR(md->rmtadr);
#+ if (client_v6_capable)
#+ im->v6_flag = 0;
#+ im->daddr = (md->cast_flags == MDF_BCAST)
#+ ? GET_INADDR(md->interface->bcast)
#+ : (md->cast_flags
#+ ? (GET_INADDR(md->interface->sin)
#+ ? GET_INADDR(md->interface->sin)
#+ : GET_INADDR(md->interface->bcast))
#+ : 4);
#+ }
# im->flags = md->cast_flags;
# im->port = md->rmtport;
# im->mode = md->mode;
#@@ -1761,7 +1988,7 @@
# */
# static void
# reset_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1797,7 +2024,7 @@
# */
# static void
# reset_peer(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1805,26 +2032,36 @@
# register struct conf_unpeer *cp;
# register int items;
# register struct peer *peer;
#- struct sockaddr_in peeraddr;
#+ struct sockaddr_storage peeraddr;
# int bad;
#
# /*
# * We check first to see that every peer exists. If not,
# * we return an error.
# */
#- peeraddr.sin_family = AF_INET;
#- peeraddr.sin_port = htons(NTP_PORT);
#
# items = INFO_NITEMS(inpkt->err_nitems);
# cp = (struct conf_unpeer *)inpkt->data;
#
# bad = 0;
# while (items-- > 0 && !bad) {
#- peeraddr.sin_addr.s_addr = cp->peeraddr;
#+ memset((char *)&peeraddr, 0, sizeof(peeraddr));
#+ if (client_v6_capable && cp->v6_flag != 0) {
#+ GET_INADDR6(peeraddr) = cp->peeraddr6;
#+ peeraddr.ss_family = AF_INET6;
#+ } else {
#+ GET_INADDR(peeraddr) = cp->peeraddr;
#+ peeraddr.ss_family = AF_INET;
#+ }
#+ NSRCPORT(&peeraddr) = htons(NTP_PORT);
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ peeraddr.ss_len = SOCKLEN(&peeraddr);
#+#endif
# peer = findexistingpeer(&peeraddr, (struct peer *)0, -1);
# if (peer == (struct peer *)0)
# bad++;
#- cp++;
#+ cp = (struct conf_unpeer *)((char *)cp +
#+ INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# if (bad) {
#@@ -1839,13 +2076,24 @@
# items = INFO_NITEMS(inpkt->err_nitems);
# cp = (struct conf_unpeer *)inpkt->data;
# while (items-- > 0) {
#- peeraddr.sin_addr.s_addr = cp->peeraddr;
#+ memset((char *)&peeraddr, 0, sizeof(peeraddr));
#+ if (client_v6_capable && cp->v6_flag != 0) {
#+ GET_INADDR6(peeraddr) = cp->peeraddr6;
#+ peeraddr.ss_family = AF_INET6;
#+ } else {
#+ GET_INADDR(peeraddr) = cp->peeraddr;
#+ peeraddr.ss_family = AF_INET;
#+ }
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ peeraddr.ss_len = SOCKLEN(&peeraddr);
#+#endif
# peer = findexistingpeer(&peeraddr, (struct peer *)0, -1);
# while (peer != 0) {
# peer_reset(peer);
# peer = findexistingpeer(&peeraddr, (struct peer *)peer, -1);
# }
#- cp++;
#+ cp = (struct conf_unpeer *)((char *)cp +
#+ INFO_ITEMSIZE(inpkt->mbz_itemsize));
# }
#
# req_ack(srcadr, inter, inpkt, INFO_OKAY);
#@@ -1857,7 +2105,7 @@
# */
# static void
# do_key_reread(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1872,7 +2120,7 @@
# */
# static void
# trust_key(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1886,7 +2134,7 @@
# */
# static void
# untrust_key(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1900,7 +2148,7 @@
# */
# static void
# do_trustkey(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt,
# u_long trust
#@@ -1925,7 +2173,7 @@
# */
# static void
# get_auth_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -1993,7 +2241,7 @@
# */
# static void
# req_get_traps(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2001,6 +2249,7 @@
# register struct info_trap *it;
# register struct ctl_trap *tr;
# register int i;
#+ int offset;
#
# /*
# * Imported from the control module
#@@ -2013,17 +2262,32 @@
# return;
# }
#
#+ if (client_v6_capable)
#+ offset = 0;
#+ else
#+ offset = ALT_2ADDR_INT;
# it = (struct info_trap *)prepare_pkt(srcadr, inter, inpkt,
#- sizeof(struct info_trap));
#+ sizeof(struct info_trap) - offset);
#
# for (i = 0, tr = ctl_trap; i < CTL_MAXTRAPS; i++, tr++) {
# if (tr->tr_flags & TRAP_INUSE) {
#- if (tr->tr_localaddr == any_interface)
#- it->local_address = 0;
#- else
#- it->local_address
#- = NSRCADR(&tr->tr_localaddr->sin);
#- it->trap_address = NSRCADR(&tr->tr_addr);
#+ if (tr->tr_addr.ss_family == AF_INET) {
#+ if (tr->tr_localaddr == any_interface)
#+ it->local_address = 0;
#+ else
#+ it->local_address
#+ = GET_INADDR(tr->tr_localaddr->sin);
#+ it->trap_address = GET_INADDR(tr->tr_addr);
#+ if (client_v6_capable)
#+ it->v6_flag = 0;
#+ } else {
#+ if (!client_v6_capable)
#+ continue;
#+ it->local_address6
#+ = GET_INADDR6(tr->tr_localaddr->sin);
#+ it->trap_address6 = GET_INADDR6(tr->tr_addr);
#+ it->v6_flag = 1;
#+ }
# it->trap_port = NSRCPORT(&tr->tr_addr);
# it->sequence = htons(tr->tr_sequence);
# it->settime = htonl((u_int32)(current_time - tr->tr_settime));
#@@ -2042,7 +2306,7 @@
# */
# static void
# req_set_trap(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2057,7 +2321,7 @@
# */
# static void
# req_clr_trap(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2072,7 +2336,7 @@
# */
# static void
# do_setclr_trap(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt,
# int set
#@@ -2081,14 +2345,14 @@
# register struct conf_trap *ct;
# register struct interface *linter;
# int res;
#- struct sockaddr_in laddr;
#+ struct sockaddr_storage laddr;
#
# /*
#- * Prepare sockaddr_in structure
#+ * Prepare sockaddr_storage structure
# */
# memset((char *)&laddr, 0, sizeof laddr);
#- laddr.sin_family = AF_INET;
#- laddr.sin_port = ntohs(NTP_PORT);
#+ laddr.ss_family = srcadr->ss_family;
#+ NSRCPORT(&laddr) = ntohs(NTP_PORT);
#
# /*
# * Restrict ourselves to one item only. This eliminates
#@@ -2107,7 +2371,10 @@
# if (ct->local_address == 0) {
# linter = any_interface;
# } else {
#- laddr.sin_addr.s_addr = ct->local_address;
#+ if (laddr.ss_family == AF_INET)
#+ GET_INADDR(laddr) = ct->local_address;
#+ else
#+ GET_INADDR6(laddr) = ct->local_address6;
# linter = findinterface(&laddr);
# if (linter == NULL) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
#@@ -2115,11 +2382,14 @@
# }
# }
#
#- laddr.sin_addr.s_addr = ct->trap_address;
#+ if (laddr.ss_family == AF_INET)
#+ GET_INADDR(laddr) = ct->trap_address;
#+ else
#+ GET_INADDR6(laddr) = ct->trap_address6;
# if (ct->trap_port != 0)
#- laddr.sin_port = ct->trap_port;
#+ NSRCPORT(&laddr) = ct->trap_port;
# else
#- laddr.sin_port = htons(TRAPPORT);
#+ NSRCPORT(&laddr) = htons(TRAPPORT);
#
# if (set) {
# res = ctlsettrap(&laddr, linter, 0,
#@@ -2143,7 +2413,7 @@
# */
# static void
# set_request_keyid(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2171,7 +2441,7 @@
# */
# static void
# set_control_keyid(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2200,7 +2470,7 @@
# */
# static void
# get_ctl_stats(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2256,7 +2526,7 @@
# */
# static void
# get_kernel_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2311,7 +2581,7 @@
# */
# static void
# get_clock_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2320,12 +2590,16 @@
# register u_int32 *clkaddr;
# register int items;
# struct refclockstat clock_stat;
#- struct sockaddr_in addr;
#+ struct sockaddr_storage addr;
#+ struct sockaddr_in tmp_clock;
# l_fp ltmp;
#
# memset((char *)&addr, 0, sizeof addr);
#- addr.sin_family = AF_INET;
#- addr.sin_port = htons(NTP_PORT);
#+ addr.ss_family = AF_INET;
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ addr.ss_len = SOCKLEN(&addr);
#+#endif
#+ NSRCPORT(&addr) = htons(NTP_PORT);
# items = INFO_NITEMS(inpkt->err_nitems);
# clkaddr = (u_int32 *) inpkt->data;
#
#@@ -2333,8 +2607,9 @@
# sizeof(struct info_clock));
#
# while (items-- > 0) {
#- addr.sin_addr.s_addr = *clkaddr++;
#- if (!ISREFCLOCKADR(&addr) ||
#+ tmp_clock.sin_addr.s_addr = *clkaddr++;
#+ CAST_V4(addr)->sin_addr = tmp_clock.sin_addr;
#+ if (!ISREFCLOCKADR(&tmp_clock) ||
# findexistingpeer(&addr, (struct peer *)0, -1) == 0) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
#@@ -2344,7 +2619,7 @@
#
# refclock_control(&addr, (struct refclockstat *)0, &clock_stat);
#
#- ic->clockadr = addr.sin_addr.s_addr;
#+ ic->clockadr = tmp_clock.sin_addr.s_addr;
# ic->type = clock_stat.type;
# ic->flags = clock_stat.flags;
# ic->lastevent = clock_stat.lastevent;
#@@ -2375,7 +2650,7 @@
# */
# static void
# set_clock_fudge(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2383,19 +2658,24 @@
# register struct conf_fudge *cf;
# register int items;
# struct refclockstat clock_stat;
#- struct sockaddr_in addr;
#+ struct sockaddr_storage addr;
#+ struct sockaddr_in tmp_clock;
# l_fp ltmp;
#
# memset((char *)&addr, 0, sizeof addr);
# memset((char *)&clock_stat, 0, sizeof clock_stat);
#- addr.sin_family = AF_INET;
#- addr.sin_port = htons(NTP_PORT);
# items = INFO_NITEMS(inpkt->err_nitems);
# cf = (struct conf_fudge *) inpkt->data;
#
# while (items-- > 0) {
#- addr.sin_addr.s_addr = cf->clockadr;
#- if (!ISREFCLOCKADR(&addr) ||
#+ tmp_clock.sin_addr.s_addr = cf->clockadr;
#+ *CAST_V4(addr) = tmp_clock;
#+ addr.ss_family = AF_INET;
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ addr.ss_len = SOCKLEN(&addr);
#+#endif
#+ NSRCPORT(&addr) = htons(NTP_PORT);
#+ if (!ISREFCLOCKADR(&tmp_clock) ||
# findexistingpeer(&addr, (struct peer *)0, -1) == 0) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
#@@ -2421,7 +2701,7 @@
# clock_stat.haveflags = CLK_HAVEVAL2;
# break;
# case FUDGE_FLAGS:
#- clock_stat.flags = (u_char) ntohl(cf->fudgeval_flags) & 0xf;
#+ clock_stat.flags = (u_char) (ntohl(cf->fudgeval_flags) & 0xf);
# clock_stat.haveflags =
# (CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4);
# break;
#@@ -2444,7 +2724,7 @@
# */
# static void
# get_clkbug_info(
#- struct sockaddr_in *srcadr,
#+ struct sockaddr_storage *srcadr,
# struct interface *inter,
# struct req_pkt *inpkt
# )
#@@ -2454,11 +2734,15 @@
# register u_int32 *clkaddr;
# register int items;
# struct refclockbug bug;
#- struct sockaddr_in addr;
#+ struct sockaddr_storage addr;
#+ struct sockaddr_in tmp_clock;
#
# memset((char *)&addr, 0, sizeof addr);
#- addr.sin_family = AF_INET;
#- addr.sin_port = htons(NTP_PORT);
#+ addr.ss_family = AF_INET;
#+#ifdef HAVE_SA_LEN_IN_STRUCT_SOCKADDR
#+ addr.ss_len = SOCKLEN(&addr);
#+#endif
#+ NSRCPORT(&addr) = htons(NTP_PORT);
# items = INFO_NITEMS(inpkt->err_nitems);
# clkaddr = (u_int32 *) inpkt->data;
#
#@@ -2466,8 +2750,9 @@
# sizeof(struct info_clkbug));
#
# while (items-- > 0) {
#- addr.sin_addr.s_addr = *clkaddr++;
#- if (!ISREFCLOCKADR(&addr) ||
#+ tmp_clock.sin_addr.s_addr = *clkaddr++;
#+ GET_INADDR(addr) = tmp_clock.sin_addr.s_addr;
#+ if (!ISREFCLOCKADR(&tmp_clock) ||
# findexistingpeer(&addr, (struct peer *)0, -1) == 0) {
# req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
# return;
#@@ -2480,7 +2765,7 @@
# return;
# }
#
#- ic->clockadr = addr.sin_addr.s_addr;
#+ ic->clockadr = tmp_clock.sin_addr.s_addr;
# i = bug.nvalues;
# if (i > NUMCBUGVALUES)
# i = NUMCBUGVALUES;
#
# Diff checksum=d8f7c6b1
# Patch vers: 1.3
# Patch type: REGULAR
== ChangeSet ==
stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
stenn at whimsy.udel.edu|ChangeSet|20030627084929|03841
D 1.683.14.32 03/06/27 05:44:00-04:00 stenn at whimsy.udel.edu +1 -0
B stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
C
c [Bug 129] Add more debug output.
K 3836
P ChangeSet
------------------------------------------------
0a0
> stenn at whimsy.udel.edu|ntpd/ntp_request.c|19990526004817|01635|3aed0663 stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030627094350|50756
stenn at whimsy.udel.edu|ChangeSet|20030627085057|55034
D 1.1090 03/06/27 06:17:58-04:00 stenn at whimsy.udel.edu +1 -0
B stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
C
c Merge whimsy.udel.edu:/backroom/ntp-stable
c into whimsy.udel.edu:/backroom/ntp-dev
i stenn at whimsy.udel.edu|ChangeSet|20030627094400|03836
K 55014
M stenn at whimsy.udel.edu|ChangeSet|20030627094400|03836
P ChangeSet
------------------------------------------------
0a0
> stenn at whimsy.udel.edu|ntpd/ntp_request.c|19990526004817|01635|3aed0663 stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030627101754|03250
== ntpd/ntp_request.c ==
stenn at whimsy.udel.edu|ntpd/ntp_request.c|19990526004817|01635|3aed0663
stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030528023632|37599
D 1.23.3.3 03/06/27 05:43:50-04:00 stenn at whimsy.udel.edu +8 -0
B stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
C
c [Bug 129] Add more debug output.
K 50756
O -rw-rw-r--
P ntpd/ntp_request.c
------------------------------------------------
I521 4
#ifdef DEBUG
if (debug > 4)
printf("xmit/rcv timestamp delta > INFO_TS_MAXSKEW\n");
#endif
I531 4
#ifdef DEBUG
if (debug > 4)
printf("authdecrypt failed\n");
#endif
stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030528023817|55629
D 1.49 03/06/27 06:17:54-04:00 stenn at whimsy.udel.edu +0 -0
B stenn at whimsy.udel.edu|ChangeSet|19990526004811|57482|8983e65c737bb465
C
c Auto merged
i stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030627094350|50756
K 3250
M stenn at whimsy.udel.edu|ntpd/ntp_request.c|20030627094350|50756
O -rw-rw-r--
P ntpd/ntp_request.c
------------------------------------------------
# Patch checksum=cedf89a0
More information about the bk-ntp-dev-send
mailing list