summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornaddy <naddy@openbsd.org>2008-06-10 03:51:53 +0000
committernaddy <naddy@openbsd.org>2008-06-10 03:51:53 +0000
commita94d3d28bb89a46aabceb62c2bb9f0e8722aee25 (patch)
tree14628dd83d779d60b91fc886f346581d6e03339d
parentAccording to the latest SNTPv4 spec in RFC4330, secondary servers (diff)
downloadwireguard-openbsd-a94d3d28bb89a46aabceb62c2bb9f0e8722aee25.tar.xz
wireguard-openbsd-a94d3d28bb89a46aabceb62c2bb9f0e8722aee25.zip
For IPv6 addresses, return the first 32 bits of the MD5 hash of the
address as ref ID (RFC4330). ok henning@
-rw-r--r--usr.sbin/ntpd/client.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/usr.sbin/ntpd/client.c b/usr.sbin/ntpd/client.c
index 92a5199d5a2..bf374510bea 100644
--- a/usr.sbin/ntpd/client.c
+++ b/usr.sbin/ntpd/client.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: client.c,v 1.80 2008/06/10 03:46:09 naddy Exp $ */
+/* $OpenBSD: client.c,v 1.81 2008/06/10 03:51:53 naddy Exp $ */
/*
* Copyright (c) 2003, 2004 Henning Brauer <henning@openbsd.org>
@@ -19,6 +19,7 @@
#include <sys/param.h>
#include <errno.h>
+#include <md5.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
@@ -267,10 +268,20 @@ client_dispatch(struct ntp_peer *p, u_int8_t settime)
p->reply[p->shift].status.poll = msg.ppoll;
p->reply[p->shift].status.stratum = msg.stratum;
- if (p->addr->ss.ss_family == AF_INET)
+ if (p->addr->ss.ss_family == AF_INET) {
p->reply[p->shift].status.send_refid =
((struct sockaddr_in *)&p->addr->ss)->sin_addr.s_addr;
- else
+ } else if (p->addr->ss.ss_family == AF_INET6) {
+ MD5_CTX context;
+ u_int8_t digest[MD5_DIGEST_LENGTH];
+
+ MD5Init(&context);
+ MD5Update(&context, ((struct sockaddr_in6 *)&p->addr->ss)->
+ sin6_addr.s6_addr, sizeof(struct in6_addr));
+ MD5Final(digest, &context);
+ memcpy((char *)&p->reply[p->shift].status.send_refid, digest,
+ sizeof(u_int32_t));
+ } else
p->reply[p->shift].status.send_refid = msg.xmttime.fractionl;
if (p->trustlevel < TRUSTLEVEL_PATHETIC)