|
 |
ad48f7 |
From 12c53f98e44598b87d3f2308e0d892f49d7af8e4 Mon Sep 17 00:00:00 2001
|
|
 |
ad48f7 |
From: Roger Wolff <R.E.Wolff@BitWizard.nl>
|
|
 |
ad48f7 |
Date: Tue, 16 Jul 2013 13:59:52 +0200
|
|
 |
ad48f7 |
Subject: [PATCH] Fix bombout with ipv6 enabled binary on ipv4 only system.
|
|
 |
ad48f7 |
|
|
 |
ad48f7 |
---
|
|
 |
ad48f7 |
dns.c | 33 +++++++++++++++++++++------------
|
|
 |
ad48f7 |
gtk.c | 6 ++++--
|
|
 |
ad48f7 |
select.c | 8 ++++++--
|
|
 |
ad48f7 |
3 files changed, 31 insertions(+), 16 deletions(-)
|
|
 |
ad48f7 |
|
|
 |
ad48f7 |
diff --git a/dns.c b/dns.c
|
|
 |
ad48f7 |
index 371934f..221665d 100644
|
|
 |
ad48f7 |
--- a/dns.c
|
|
 |
ad48f7 |
+++ b/dns.c
|
|
 |
ad48f7 |
@@ -529,10 +529,12 @@ void dns_open(void)
|
|
 |
ad48f7 |
#ifdef ENABLE_IPV6
|
|
 |
ad48f7 |
resfd6 = socket(AF_INET6, SOCK_DGRAM, 0);
|
|
 |
ad48f7 |
if (resfd6 == -1) {
|
|
 |
ad48f7 |
+ // consider making removing this warning. For now leave it in to see
|
|
 |
ad48f7 |
+ // new code activated. -- REW
|
|
 |
ad48f7 |
fprintf(stderr,
|
|
 |
ad48f7 |
"Unable to allocate IPv6 socket for nameserver communication: %s\n",
|
|
 |
ad48f7 |
strerror(errno));
|
|
 |
ad48f7 |
- exit(-1);
|
|
 |
ad48f7 |
+ // exit(-1);
|
|
 |
ad48f7 |
}
|
|
 |
ad48f7 |
#endif
|
|
 |
ad48f7 |
option = 1;
|
|
 |
ad48f7 |
@@ -543,11 +545,13 @@ void dns_open(void)
|
|
 |
ad48f7 |
exit(-1);
|
|
 |
ad48f7 |
}
|
|
 |
ad48f7 |
#ifdef ENABLE_IPV6
|
|
 |
ad48f7 |
- if (setsockopt(resfd6,SOL_SOCKET,SO_BROADCAST,(char *)&option,sizeof(option))) {
|
|
 |
ad48f7 |
- fprintf(stderr,
|
|
 |
ad48f7 |
- "Unable to setsockopt() on IPv6 nameserver communication socket: %s\n",
|
|
 |
ad48f7 |
- strerror(errno));
|
|
 |
ad48f7 |
- exit(-1);
|
|
 |
ad48f7 |
+ if (resfd6 > 0) {
|
|
 |
ad48f7 |
+ if (setsockopt(resfd6,SOL_SOCKET,SO_BROADCAST,(char *)&option,sizeof(option))) {
|
|
 |
ad48f7 |
+ fprintf(stderr,
|
|
 |
ad48f7 |
+ "Unable to setsockopt() on IPv6 nameserver communication socket: %s\n",
|
|
 |
ad48f7 |
+ strerror(errno));
|
|
 |
ad48f7 |
+ exit(-1);
|
|
 |
ad48f7 |
+ }
|
|
 |
ad48f7 |
}
|
|
 |
ad48f7 |
#endif
|
|
 |
ad48f7 |
longipstr( "127.0.0.1", &localhost, AF_INET );
|
|
 |
ad48f7 |
@@ -933,12 +937,14 @@ void dorequest(char *s,int type,word id)
|
|
 |
ad48f7 |
hp = (packetheader *)buf;
|
|
 |
ad48f7 |
hp->id = id; /* htons() deliberately left out (redundant) */
|
|
 |
ad48f7 |
#ifdef ENABLE_IPV6
|
|
 |
ad48f7 |
- for (i = 0;i < NSCOUNT6;i++) {
|
|
 |
ad48f7 |
- if (!NSSOCKADDR6(i))
|
|
 |
ad48f7 |
- continue;
|
|
 |
ad48f7 |
- if (NSSOCKADDR6(i)->sin6_family == AF_INET6)
|
|
 |
ad48f7 |
- (void)sendto(resfd6,buf,r,0,(struct sockaddr *) NSSOCKADDR6(i),
|
|
 |
ad48f7 |
- sizeof(struct sockaddr_in6));
|
|
 |
ad48f7 |
+ if (resfd6 > 0) {
|
|
 |
ad48f7 |
+ for (i = 0;i < NSCOUNT6;i++) {
|
|
 |
ad48f7 |
+ if (!NSSOCKADDR6(i))
|
|
 |
ad48f7 |
+ continue;
|
|
 |
ad48f7 |
+ if (NSSOCKADDR6(i)->sin6_family == AF_INET6)
|
|
 |
ad48f7 |
+ (void)sendto(resfd6,buf,r,0,(struct sockaddr *) NSSOCKADDR6(i),
|
|
 |
ad48f7 |
+ sizeof(struct sockaddr_in6));
|
|
 |
ad48f7 |
+ }
|
|
 |
ad48f7 |
}
|
|
 |
ad48f7 |
#endif
|
|
 |
ad48f7 |
for (i = 0;i < myres.nscount;i++)
|
|
 |
ad48f7 |
@@ -1327,6 +1333,9 @@ void dns_ack6(void)
|
|
 |
ad48f7 |
int r,i;
|
|
 |
ad48f7 |
static char addrstr[INET6_ADDRSTRLEN];
|
|
 |
ad48f7 |
|
|
 |
ad48f7 |
+ // Probably not necessary. -- REW
|
|
 |
ad48f7 |
+ if (resfd6 < 0) return;
|
|
 |
ad48f7 |
+
|
|
 |
ad48f7 |
r = recvfrom(resfd6,(byte *)resrecvbuf,MaxPacketsize,0,
|
|
 |
ad48f7 |
from, &fromlen);
|
|
 |
ad48f7 |
if (r > 0) {
|
|
 |
ad48f7 |
diff --git a/gtk.c b/gtk.c
|
|
 |
ad48f7 |
index d00f769..38ed507 100644
|
|
 |
ad48f7 |
--- a/gtk.c
|
|
 |
ad48f7 |
+++ b/gtk.c
|
|
 |
ad48f7 |
@@ -615,8 +615,10 @@ void gtk_loop(void)
|
|
 |
ad48f7 |
net_iochannel = g_io_channel_unix_new(net_waitfd());
|
|
 |
ad48f7 |
g_io_add_watch(net_iochannel, G_IO_IN, gtk_net_data, NULL);
|
|
 |
ad48f7 |
#ifdef ENABLE_IPV6
|
|
 |
ad48f7 |
- dns_iochannel = g_io_channel_unix_new(dns_waitfd6());
|
|
 |
ad48f7 |
- g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data6, NULL);
|
|
 |
ad48f7 |
+ if (dns_waitfd6() > 0) {
|
|
 |
ad48f7 |
+ dns_iochannel = g_io_channel_unix_new(dns_waitfd6());
|
|
 |
ad48f7 |
+ g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data6, NULL);
|
|
 |
ad48f7 |
+ }
|
|
 |
ad48f7 |
#endif
|
|
 |
ad48f7 |
dns_iochannel = g_io_channel_unix_new(dns_waitfd());
|
|
 |
ad48f7 |
g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data, NULL);
|
|
 |
ad48f7 |
diff --git a/select.c b/select.c
|
|
 |
ad48f7 |
index 0545d9f..e7c397e 100644
|
|
 |
ad48f7 |
--- a/select.c
|
|
 |
ad48f7 |
+++ b/select.c
|
|
 |
ad48f7 |
@@ -80,8 +80,12 @@ void select_loop(void) {
|
|
 |
ad48f7 |
#ifdef ENABLE_IPV6
|
|
 |
ad48f7 |
if (dns) {
|
|
 |
ad48f7 |
dnsfd6 = dns_waitfd6();
|
|
 |
ad48f7 |
- FD_SET(dnsfd6, &readfd);
|
|
 |
ad48f7 |
- if(dnsfd6 >= maxfd) maxfd = dnsfd6 + 1;
|
|
 |
ad48f7 |
+ if (dnsfd6 >= 0) {
|
|
 |
ad48f7 |
+ FD_SET(dnsfd6, &readfd);
|
|
 |
ad48f7 |
+ if(dnsfd6 >= maxfd) maxfd = dnsfd6 + 1;
|
|
 |
ad48f7 |
+ } else {
|
|
 |
ad48f7 |
+ dnsfd6 = 0;
|
|
 |
ad48f7 |
+ }
|
|
 |
ad48f7 |
} else
|
|
 |
ad48f7 |
dnsfd6 = 0;
|
|
 |
ad48f7 |
#endif
|
|
 |
ad48f7 |
--
|
|
 |
ad48f7 |
1.8.3.1
|
|
 |
ad48f7 |
|