summaryrefslogtreecommitdiff
path: root/net/mDNSResponder/patches/patch-ac
blob: 78dd4058f38ca023f8aa6cc0b7eceef39e63d1d3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$NetBSD: patch-ac,v 1.11 2015/11/20 09:32:53 jperkin Exp $

* Fix build on FreeBSD and DragonFly, as shown in recent bulk builds and
  PR 34022.
* Don't try to include nonexistant ipv6 header on Solaris.
  From Volker Stolz in PR pkg/34883.
* For OpenBSD, from
  http://lists.apple.com/archives/bonjour-dev/2007/Jan/msg00003.html

--- mDNSPosix/mDNSUNP.c.orig	2010-06-24 21:49:06.000000000 +0000
+++ mDNSPosix/mDNSUNP.c
@@ -54,8 +54,10 @@
     #include <net/if_dl.h>
 #endif
 
-#if defined(AF_INET6) && HAVE_IPV6 && !HAVE_LINUX
+#if defined(AF_INET6) && HAVE_IPV6 && !HAVE_LINUX && !defined(sun)
+#if !defined(__NetBSD__)
 #include <net/if_var.h>
+#endif
 #include <netinet/in_var.h>
 // Note: netinet/in_var.h implicitly includes netinet6/in6_var.h for us
 #endif
@@ -105,6 +107,8 @@ struct ifi_info *get_ifi_info_linuxv6(in
 					  addr[4],addr[5],addr[6],addr[7],
 					  &index, &plen, &scope, &flags, ifname) != EOF) {
 
+			char ipv6addr[INET6_ADDRSTRLEN];
+
 			myflags = 0;
 			if (strncmp(lastname, ifname, IFNAMSIZ) == 0) {
 				if (doaliases == 0)
@@ -139,7 +143,6 @@ struct ifi_info *get_ifi_info_linuxv6(in
 			memcpy(ifi->ifi_addr, res0->ai_addr, sizeof(struct sockaddr_in6));
 
 			/* Add netmask of the interface */
-			char ipv6addr[INET6_ADDRSTRLEN];
 			plen_to_mask(plen, ipv6addr);
 			ifi->ifi_netmask = calloc(1, sizeof(struct sockaddr_in6));
 			if (ifi->ifi_addr == NULL) {
@@ -488,6 +491,14 @@ recvfrom_flags(int fd, void *ptr, size_t
            set the value to 0, but I'm concerned that 0 
            might be a valid interface value.
         */
+#if HAVE_BROKEN_RECVDSTADDR
+       /* similar to the issue with OpenBSD in mDNSPosix.c, we need
+          to preset sin_family to IF_NET, because of broken IP_RECVDSTADDR
+        */
+        struct in_pktinfo *tmp;
+        struct sockaddr_in *sin = (struct sockaddr_in*)&pktp->ipi_addr;
+        sin->sin_family = AF_INET;
+#endif
         memset(pktp, 0, sizeof(struct my_in_pktinfo));
         pktp->ipi_ifindex = -1;
     }