Path: blob/main/dns/djbdns/files/djbdns-ipv6-ooyama.patch
16125 views
# http://hasiru.net/djbdns-ipv6-ooyama.patch12diff -puNr dns_transmit.c dns_transmit.c3--- dns_transmit.c 2008-07-12 14:10:52.000000000 +09004+++ dns_transmit.c 2008-07-11 15:35:23.000000000 +09005@@ -104,6 +104,14 @@ static int thisudp(struct dns_transmit *6while (d->udploop < 4) {7for (;d->curserver < 16;++d->curserver) {8ip = d->servers + 16 * d->curserver;9+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)10+ if (!fromserver) {11+ if (ip6_isv4mapped(ip))12+ noipv6 = 1;13+ else14+ noipv6 = 0;15+ }16+#endif17if (byte_diff(ip,16,V6any)) {18d->query[2] = dns_random(256);19d->query[3] = dns_random(256);20@@ -155,6 +163,14 @@ static int thistcp(struct dns_transmit *2122for (;d->curserver < 16;++d->curserver) {23ip = d->servers + 16 * d->curserver;24+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)25+ if (!fromserver) {26+ if (ip6_isv4mapped(ip))27+ noipv6 = 1;28+ else29+ noipv6 = 0;30+ }31+#endif32if (byte_diff(ip,16,V6any)) {33d->query[2] = dns_random(256);34d->query[3] = dns_random(256);35diff -puNr dnscache.c dnscache.c36--- dnscache.c 2008-07-12 14:10:52.000000000 +090037+++ dnscache.c 2008-07-11 15:32:00.000000000 +090038@@ -59,6 +59,7 @@ uint64 numqueries = 0;3940static int udp53;4142+43#define MAXUDP 20044static struct udpclient {45struct query q;46@@ -408,11 +409,12 @@ int main()47if (!ip6_scan(x,myipincoming))48strerr_die3x(111,FATAL,"unable to parse IP address ",x);4950-#if 051+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)52/* if if IP is a mapped-IPv4 address, disable IPv6 functionality */53/* this is actually a bad idea */54if (ip6_isv4mapped(myipincoming))55noipv6 = 1;56+ fromserver = 1;57#endif5859udp53 = socket_udp6();60diff -puNr server.c server.c61--- server.c 2008-07-12 14:10:52.000000000 +090062+++ server.c 2008-07-11 15:33:18.000000000 +090063@@ -92,6 +92,9 @@ int main()64{65char *x;66int *udp53;67+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)68+ int *noipv6s;69+#endif70unsigned int off;71unsigned int cnt;72iopause_fd *iop;73@@ -116,6 +119,11 @@ int main()74}75udp53=(int *) alloc(sizeof(int) *cnt);76if (!udp53) nomem();77+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)78+ noipv6s=(int *) alloc(sizeof(int) *cnt);79+ if (!noipv6s) nomem();80+ fromserver = 1;81+#endif82iop=(iopause_fd *) alloc(sizeof(*iop) * cnt);83if (!iop) nomem();8485@@ -124,6 +132,12 @@ int main()86unsigned int l;87uint32 ifid=0;88l=ip6_scan(x+off,ip);89+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)90+ if (ip6_isv4mapped(ip))91+ noipv6 = noipv6s[cnt] = 1;92+ else93+ noipv6 = noipv6s[cnt] = 0;94+#endif95udp53[cnt] = socket_udp6();96if (udp53[cnt] == -1)97strerr_die2sys(111,fatal,"unable to create UDP socket: ");98@@ -165,6 +179,9 @@ int main()99iopause(iop,cnt,&deadline,&stamp);100for (i=0;i<cnt;i++)101if (iop[i].revents) {102+#if defined(__NetBSD__) || defined(__OpenBSD__) || defined(__FreeBSD__)103+ noipv6 = noipv6s[i];104+#endif105len = socket_recv6(udp53[i],buf,sizeof buf,ip,&port,&ifid);106if (len < 0) continue;107if (!doit()) continue;108diff -puNr socket.h socket.h109--- socket.h 2008-07-12 14:10:52.000000000 +0900110+++ socket.h 2008-07-11 15:44:14.000000000 +0900111@@ -34,5 +34,6 @@ extern const char* socket_getifname(uint112extern uint32 socket_getifidx(const char *ifname);113114extern int noipv6;115+extern int fromserver;116117#endif118diff -puNr socket_noipv6.c socket_noipv6.c119--- socket_noipv6.c 2008-07-12 14:10:52.000000000 +0900120+++ socket_noipv6.c 2008-07-11 15:30:12.000000000 +0900121@@ -1,5 +1,6 @@122#include "haveip6.h"123124+int fromserver=0;125#ifdef LIBC_HAS_IP6126int noipv6=0;127#else128129130