/* ntp_crypto.c */
#ifdef OPENSSL
extern void crypto_recv P((struct peer *, struct recvbuf *));
-extern int crypto_xmit P((struct pkt *, struct sockaddr_in *, int, struct exten *, keyid_t));
+extern int crypto_xmit P((struct pkt *, struct sockaddr_storage *, int, struct exten *, keyid_t));
extern keyid_t session_key P((struct sockaddr_storage *, struct sockaddr_storage *, keyid_t, keyid_t, u_long));
extern void make_keylist P((struct peer *, struct interface *));
extern void key_expire P((struct peer *));
int
crypto_xmit(
struct pkt *xpkt, /* transmit packet pointer */
- struct sockaddr_in *srcadr_sin, /* active runway */
+ struct sockaddr_storage *srcadr_sin, /* active runway */
int start, /* offset to extension field */
struct exten *ep, /* extension pointer */
keyid_t cookie /* session cookie */
* persistent rascals we toss back a kiss-of-death grenade.
*/
if (rval > XEVNT_TSP) {
- struct sockaddr_in mskadr_sin;
+ struct sockaddr_storage mskadr_sin;
int hismode;
int resflag = RES_DONTSERVE | RES_TIMEOUT;
opcode |= CRYPTO_ERROR;
sprintf(statstr, "error %x opcode %x", rval, opcode);
record_crypto_stats(srcadr_sin, statstr);
- mskadr_sin.sin_addr.s_addr = ~(u_int32)0;
+ memset((char *)&mskadr_sin, 0, sizeof(struct sockaddr_storage));
+ mskadr_sin.ss_family = srcadr_sin->ss_family;
+ if (mskadr_sin.ss_family == AF_INET)
+ GET_INADDR(mskadr_sin) =~(u_int32)0;
+ else
+ memset(&GET_INADDR6(mskadr_sin), 0xff,
+ sizeof(struct in6_addr));
hismode = PKT_MODE(xpkt->li_vn_mode);
if (hismode != MODE_BROADCAST && hismode != MODE_SERVER)
resflag |= RES_DEMOBILIZE;
crypto_recv(peer, rbufp);
if (peer->flash) {
unpeer(peer);
- mskadr_sin.sin_addr.s_addr =~(u_int32)0;
+ memset((char *)&mskadr_sin, 0,
+ sizeof(struct sockaddr_storage));
+ mskadr_sin.ss_family =
+ rbufp->recv_srcadr.ss_family;
+ if (mskadr_sin.ss_family == AF_INET)
+ GET_INADDR(mskadr_sin) =~(u_int32)0;
+ else
+ memset(&GET_INADDR6(mskadr_sin), 0xff,
+ sizeof(struct in6_addr));
hack_restrict(RESTRICT_FLAGS,
&rbufp->recv_srcadr, &mskadr_sin,
RESM_NTPONLY, RES_DONTSERVE |
}
peer->flash |= TEST4;
memcpy(&peer->refid, "CRYP", 4);
- mskadr_sin.sin_addr.s_addr =
- ~(u_int32)0;
+ memset((char *)&mskadr_sin, 0,
+ sizeof(struct sockaddr_storage));
+ mskadr_sin.ss_family =
+ rbufp->recv_srcadr.ss_family;
+ if (mskadr_sin.ss_family == AF_INET)
+ GET_INADDR(mskadr_sin) =~(u_int32)0;
+ else
+ memset(&GET_INADDR6(mskadr_sin), 0xff,
+ sizeof(struct in6_addr));
if (hismode != MODE_BROADCAST &&
hismode != MODE_SERVER)
resflag |= RES_DEMOBILIZE;