[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