[packages/mtr] - rel 2; make it working in ipv4 only env when built with ipv6 support (from upstream)

arekm arekm at pld-linux.org
Wed Jul 17 13:29:57 CEST 2013


commit 17ea20d3c64f0bdd7245a3c5a12a2b3bf3e482b4
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Wed Jul 17 13:29:54 2013 +0200

    - rel 2; make it working in ipv4 only env when built with ipv6 support (from upstream)

 mtr-git.patch | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 mtr.spec      |   6 ++--
 2 files changed, 113 insertions(+), 3 deletions(-)
---
diff --git a/mtr.spec b/mtr.spec
index fded5d2..03581ef 100644
--- a/mtr.spec
+++ b/mtr.spec
@@ -10,7 +10,7 @@ Summary(ru.UTF-8):	Matt's Traceroute - утилита для диагности
 Summary(uk.UTF-8):	Matt's Traceroute - утиліта для діагностики мережі
 Name:		mtr
 Version:	0.85
-Release:	1
+Release:	2
 Epoch:		1
 License:	GPL v2
 Group:		Networking/Utilities
@@ -19,7 +19,7 @@ Source0:	ftp://ftp.bitwizard.nl/mtr/%{name}-%{version}.tar.gz
 Source1:	%{name}.desktop
 Source2:	%{name}.png
 Patch0:		%{name}-Makefile.patch
-
+Patch1:		%{name}-git.patch
 Patch2:		%{name}-mtr6.patch
 Patch3:		%{name}-display.patch
 Patch4:		%{name}-usage_first_max_hop.patch
@@ -138,7 +138,7 @@ mtr - це traceroute та ping в одному флаконі. При запу
 %prep
 %setup -q
 %patch0 -p1
-
+%patch1 -p1
 %patch2 -p1
 %patch3 -p1
 %patch4 -p0
diff --git a/mtr-git.patch b/mtr-git.patch
new file mode 100644
index 0000000..4a2db87
--- /dev/null
+++ b/mtr-git.patch
@@ -0,0 +1,110 @@
+commit 12c53f98e44598b87d3f2308e0d892f49d7af8e4
+Author: Roger Wolff <R.E.Wolff at BitWizard.nl>
+Date:   Tue Jul 16 13:59:52 2013 +0200
+
+    Fix bombout with ipv6 enabled binary on ipv4 only system.
+
+diff --git a/dns.c b/dns.c
+index 371934f..221665d 100644
+--- a/dns.c
++++ b/dns.c
+@@ -529,10 +529,12 @@ void dns_open(void)
+ #ifdef ENABLE_IPV6
+   resfd6 = socket(AF_INET6, SOCK_DGRAM, 0);
+   if (resfd6 == -1) {
++    // consider making removing this warning. For now leave it in to see 
++    // new code activated. -- REW
+     fprintf(stderr,
+             "Unable to allocate IPv6 socket for nameserver communication: %s\n",
+ 	    strerror(errno));
+-    exit(-1);
++    //    exit(-1);
+   }
+ #endif
+   option = 1;
+@@ -543,11 +545,13 @@ void dns_open(void)
+     exit(-1);
+   }
+ #ifdef ENABLE_IPV6
+-  if (setsockopt(resfd6,SOL_SOCKET,SO_BROADCAST,(char *)&option,sizeof(option))) {
+-    fprintf(stderr,
+-            "Unable to setsockopt() on IPv6 nameserver communication socket: %s\n",
+-	    strerror(errno));
+-    exit(-1);
++  if (resfd6 > 0) {
++    if (setsockopt(resfd6,SOL_SOCKET,SO_BROADCAST,(char *)&option,sizeof(option))) {
++      fprintf(stderr,
++	      "Unable to setsockopt() on IPv6 nameserver communication socket: %s\n",
++	      strerror(errno));
++      exit(-1);
++    }
+   }
+ #endif
+   longipstr( "127.0.0.1", &localhost, AF_INET );
+@@ -933,12 +937,14 @@ void dorequest(char *s,int type,word id)
+   hp = (packetheader *)buf;
+   hp->id = id;	/* htons() deliberately left out (redundant) */
+ #ifdef ENABLE_IPV6
+-  for (i = 0;i < NSCOUNT6;i++) {
+-    if (!NSSOCKADDR6(i))
+-      continue;
+-    if (NSSOCKADDR6(i)->sin6_family == AF_INET6)
+-      (void)sendto(resfd6,buf,r,0,(struct sockaddr *) NSSOCKADDR6(i),
+-		   sizeof(struct sockaddr_in6));
++  if (resfd6 > 0) {
++    for (i = 0;i < NSCOUNT6;i++) {
++      if (!NSSOCKADDR6(i))
++	continue;
++      if (NSSOCKADDR6(i)->sin6_family == AF_INET6)
++	(void)sendto(resfd6,buf,r,0,(struct sockaddr *) NSSOCKADDR6(i),
++		     sizeof(struct sockaddr_in6));
++    }
+   }
+ #endif
+   for (i = 0;i < myres.nscount;i++)
+@@ -1327,6 +1333,9 @@ void dns_ack6(void)
+   int r,i;
+   static char addrstr[INET6_ADDRSTRLEN];
+ 
++  // Probably not necessary. -- REW
++  if (resfd6 < 0) return; 
++
+   r = recvfrom(resfd6,(byte *)resrecvbuf,MaxPacketsize,0,
+                from, &fromlen);
+   if (r > 0) {
+diff --git a/gtk.c b/gtk.c
+index d00f769..38ed507 100644
+--- a/gtk.c
++++ b/gtk.c
+@@ -615,8 +615,10 @@ void gtk_loop(void)
+   net_iochannel = g_io_channel_unix_new(net_waitfd());
+   g_io_add_watch(net_iochannel, G_IO_IN, gtk_net_data, NULL);
+ #ifdef ENABLE_IPV6
+-  dns_iochannel = g_io_channel_unix_new(dns_waitfd6());
+-  g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data6, NULL);
++  if (dns_waitfd6() > 0) {
++    dns_iochannel = g_io_channel_unix_new(dns_waitfd6());
++    g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data6, NULL);
++  }
+ #endif
+   dns_iochannel = g_io_channel_unix_new(dns_waitfd());
+   g_io_add_watch(dns_iochannel, G_IO_IN, gtk_dns_data, NULL);
+diff --git a/select.c b/select.c
+index 0545d9f..e7c397e 100644
+--- a/select.c
++++ b/select.c
+@@ -80,8 +80,12 @@ void select_loop(void) {
+ #ifdef ENABLE_IPV6
+     if (dns) {
+       dnsfd6 = dns_waitfd6();
+-      FD_SET(dnsfd6, &readfd);
+-      if(dnsfd6 >= maxfd) maxfd = dnsfd6 + 1;
++      if (dnsfd6 >= 0) {
++        FD_SET(dnsfd6, &readfd);
++        if(dnsfd6 >= maxfd) maxfd = dnsfd6 + 1;
++      } else {
++        dnsfd6 = 0;
++      }
+     } else
+       dnsfd6 = 0;
+ #endif
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/mtr.git/commitdiff/17ea20d3c64f0bdd7245a3c5a12a2b3bf3e482b4



More information about the pld-cvs-commit mailing list