Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-ports-gnome
Path: blob/main/dns/djbdns/files/djbdns-ipv6-ooyama.patch
16125 views
1
# http://hasiru.net/djbdns-ipv6-ooyama.patch
2
3
diff -puNr dns_transmit.c dns_transmit.c
4
--- dns_transmit.c 2008-07-12 14:10:52.000000000 +0900
5
+++ dns_transmit.c 2008-07-11 15:35:23.000000000 +0900
6
@@ -104,6 +104,14 @@ static int thisudp(struct dns_transmit *
7
while (d->udploop < 4) {
8
for (;d->curserver < 16;++d->curserver) {
9
ip = d->servers + 16 * d->curserver;
10
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
11
+ if (!fromserver) {
12
+ if (ip6_isv4mapped(ip))
13
+ noipv6 = 1;
14
+ else
15
+ noipv6 = 0;
16
+ }
17
+#endif
18
if (byte_diff(ip,16,V6any)) {
19
d->query[2] = dns_random(256);
20
d->query[3] = dns_random(256);
21
@@ -155,6 +163,14 @@ static int thistcp(struct dns_transmit *
22
23
for (;d->curserver < 16;++d->curserver) {
24
ip = d->servers + 16 * d->curserver;
25
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
26
+ if (!fromserver) {
27
+ if (ip6_isv4mapped(ip))
28
+ noipv6 = 1;
29
+ else
30
+ noipv6 = 0;
31
+ }
32
+#endif
33
if (byte_diff(ip,16,V6any)) {
34
d->query[2] = dns_random(256);
35
d->query[3] = dns_random(256);
36
diff -puNr dnscache.c dnscache.c
37
--- dnscache.c 2008-07-12 14:10:52.000000000 +0900
38
+++ dnscache.c 2008-07-11 15:32:00.000000000 +0900
39
@@ -59,6 +59,7 @@ uint64 numqueries = 0;
40
41
static int udp53;
42
43
+
44
#define MAXUDP 200
45
static struct udpclient {
46
struct query q;
47
@@ -408,11 +409,12 @@ int main()
48
if (!ip6_scan(x,myipincoming))
49
strerr_die3x(111,FATAL,"unable to parse IP address ",x);
50
51
-#if 0
52
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
53
/* if if IP is a mapped-IPv4 address, disable IPv6 functionality */
54
/* this is actually a bad idea */
55
if (ip6_isv4mapped(myipincoming))
56
noipv6 = 1;
57
+ fromserver = 1;
58
#endif
59
60
udp53 = socket_udp6();
61
diff -puNr server.c server.c
62
--- server.c 2008-07-12 14:10:52.000000000 +0900
63
+++ server.c 2008-07-11 15:33:18.000000000 +0900
64
@@ -92,6 +92,9 @@ int main()
65
{
66
char *x;
67
int *udp53;
68
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
69
+ int *noipv6s;
70
+#endif
71
unsigned int off;
72
unsigned int cnt;
73
iopause_fd *iop;
74
@@ -116,6 +119,11 @@ int main()
75
}
76
udp53=(int *) alloc(sizeof(int) *cnt);
77
if (!udp53) nomem();
78
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
79
+ noipv6s=(int *) alloc(sizeof(int) *cnt);
80
+ if (!noipv6s) nomem();
81
+ fromserver = 1;
82
+#endif
83
iop=(iopause_fd *) alloc(sizeof(*iop) * cnt);
84
if (!iop) nomem();
85
86
@@ -124,6 +132,12 @@ int main()
87
unsigned int l;
88
uint32 ifid=0;
89
l=ip6_scan(x+off,ip);
90
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
91
+ if (ip6_isv4mapped(ip))
92
+ noipv6 = noipv6s[cnt] = 1;
93
+ else
94
+ noipv6 = noipv6s[cnt] = 0;
95
+#endif
96
udp53[cnt] = socket_udp6();
97
if (udp53[cnt] == -1)
98
strerr_die2sys(111,fatal,"unable to create UDP socket: ");
99
@@ -165,6 +179,9 @@ int main()
100
iopause(iop,cnt,&deadline,&stamp);
101
for (i=0;i<cnt;i++)
102
if (iop[i].revents) {
103
+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)
104
+ noipv6 = noipv6s[i];
105
+#endif
106
len = socket_recv6(udp53[i],buf,sizeof buf,ip,&port,&ifid);
107
if (len < 0) continue;
108
if (!doit()) continue;
109
diff -puNr socket.h socket.h
110
--- socket.h 2008-07-12 14:10:52.000000000 +0900
111
+++ socket.h 2008-07-11 15:44:14.000000000 +0900
112
@@ -34,5 +34,6 @@ extern const char* socket_getifname(uint
113
extern uint32 socket_getifidx(const char *ifname);
114
115
extern int noipv6;
116
+extern int fromserver;
117
118
#endif
119
diff -puNr socket_noipv6.c socket_noipv6.c
120
--- socket_noipv6.c 2008-07-12 14:10:52.000000000 +0900
121
+++ socket_noipv6.c 2008-07-11 15:30:12.000000000 +0900
122
@@ -1,5 +1,6 @@
123
#include "haveip6.h"
124
125
+int fromserver=0;
126
#ifdef LIBC_HAS_IP6
127
int noipv6=0;
128
#else
129
130