$OpenBSD: patch-src_dep_net_c,v 1.2 2017/09/09 21:22:49 naddy Exp $
Index: src/dep/net.c
--- src/dep/net.c.orig
+++ src/dep/net.c
@@ -16,24 +16,24 @@ lookupSubdomainAddress(Octet * subdomainName, Octet * 
 
 	/* set multicast group address based on subdomainName */
 	if (!memcmp(subdomainName, DEFAULT_PTP_DOMAIN_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
-		memcpy(subdomainAddress, DEFAULT_PTP_DOMAIN_ADDRESS, NET_ADDRESS_LENGTH);
+		strncpy(subdomainAddress, DEFAULT_PTP_DOMAIN_ADDRESS, NET_ADDRESS_LENGTH);
 	else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN1_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
-		memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
+		strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
 	else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN2_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
-		memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
+		strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
 	else if (!memcmp(subdomainName, ALTERNATE_PTP_DOMAIN3_NAME, PTP_SUBDOMAIN_NAME_LENGTH))
-		memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
+		strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
 	else {
 		h = crc_algorithm(subdomainName, PTP_SUBDOMAIN_NAME_LENGTH) % 3;
 		switch (h) {
 		case 0:
-			memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
+			strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN1_ADDRESS, NET_ADDRESS_LENGTH);
 			break;
 		case 1:
-			memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
+			strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN2_ADDRESS, NET_ADDRESS_LENGTH);
 			break;
 		case 2:
-			memcpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
+			strncpy(subdomainAddress, ALTERNATE_PTP_DOMAIN3_ADDRESS, NET_ADDRESS_LENGTH);
 			break;
 		default:
 			ERROR("handle out of range for '%s'!\n", subdomainName);
@@ -217,6 +217,7 @@ netInit(NetPath * netPath, RunTimeOpts * rtOpts, PtpCl
 	struct in_addr interfaceAddr, netAddr;
 	struct sockaddr_in addr;
 	struct ip_mreq imr;
+	unsigned char c;
 	char addrStr[NET_ADDRESS_LENGTH];
 	char *s;
 
@@ -304,22 +305,23 @@ netInit(NetPath * netPath, RunTimeOpts * rtOpts, PtpCl
 		return FALSE;
 	}
 	/* set socket time-to-live */
-	if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_TTL, &rtOpts->ttl, sizeof(int)) < 0
-	    || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_TTL, &rtOpts->ttl, sizeof(int)) < 0) {
+	c = rtOpts->ttl;
+	if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_TTL, &c, sizeof(c)) < 0
+	    || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_TTL, &c, sizeof(c)) < 0) {
 		PERROR("failed to set the multi-cast time-to-live");
 		return FALSE;
 	}
 	/* enable loopback */
-	temp = 1;
-	if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_LOOP, &temp, sizeof(int)) < 0
-	    || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_LOOP, &temp, sizeof(int)) < 0) {
+	c = 1;
+	if (setsockopt(netPath->eventSock, IPPROTO_IP, IP_MULTICAST_LOOP, &c, sizeof(c)) < 0
+	    || setsockopt(netPath->generalSock, IPPROTO_IP, IP_MULTICAST_LOOP, &c, sizeof(c)) < 0) {
 		PERROR("failed to enable multi-cast loopback");
 		return FALSE;
 	}
 	/* make timestamps available through recvmsg() */
 
 	temp = 1;
-#if defined(linux)
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
 	if (setsockopt(netPath->eventSock, SOL_SOCKET, SO_TIMESTAMP, &temp, sizeof(int)) < 0
 	    || setsockopt(netPath->generalSock, SOL_SOCKET, SO_TIMESTAMP, &temp, sizeof(int)) < 0) {
 #else /* BSD */
@@ -405,7 +407,7 @@ netRecvEvent(Octet * buf, TimeInternal * time, NetPath
 		char	control[CMSG_SPACE(sizeof(struct timeval))];
 	}     cmsg_un;
 	struct cmsghdr *cmsg;
-#if defined(linux)
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
 	struct timeval *tv;
 #else /* FreeBSD */
 	struct timespec ts;
@@ -454,7 +456,7 @@ netRecvEvent(Octet * buf, TimeInternal * time, NetPath
 		return 0;
 	}
 
-#if defined(linux)
+#if defined(linux) || defined(__NetBSD__) || defined(__OpenBSD__)
 	tv = 0;
 	for (cmsg = CMSG_FIRSTHDR(&msg); cmsg != NULL; 
 	     cmsg = CMSG_NXTHDR(&msg, cmsg)) 
