[packages/mtr] - rel 4; make it possible to run mtr against unreachable host

arekm arekm at pld-linux.org
Tue Jun 5 17:45:46 CEST 2018


commit bc7a85ec31da5df0dd67414c9b872b4b376266b3
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date:   Tue Jun 5 17:45:39 2018 +0200

    - rel 4; make it possible to run mtr against unreachable host

 ...r-to-a-unreachable-host-is-possible-again.patch | 79 ++++++++++++++++++++++
 mtr.spec                                           |  4 +-
 2 files changed, 82 insertions(+), 1 deletion(-)
---
diff --git a/mtr.spec b/mtr.spec
index d2c4df7..f6df910 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.92
-Release:	3
+Release:	4
 Epoch:		1
 License:	GPL v2
 Group:		Networking/Utilities
@@ -24,6 +24,7 @@ Patch2:		%{name}-mtr6.patch
 Patch3:		%{name}-display.patch
 Patch4:		%{name}-curses-clear_colors.patch
 Patch5:		%{name}-sourceaddr_ipv4.patch
+Patch6:		0001-mtr-to-a-unreachable-host-is-possible-again.patch
 URL:		http://www.bitwizard.nl/mtr/
 BuildRequires:	autoconf >= 2.50
 BuildRequires:	automake
@@ -159,6 +160,7 @@ Pakiet ten dostarcza bashowe uzupełnianie nazw dla mtra.
 %patch3 -p1
 %patch4 -p1
 %patch5 -p1
+%patch6 -p1
 
 #echo 'AC_DEFUN([AM_PATH_GTK],[$3])' >> acinclude.m4
 %{!?with_x:echo 'AC_DEFUN([AM_PATH_GTK_2_0],[$3])' >> acinclude.m4}
diff --git a/0001-mtr-to-a-unreachable-host-is-possible-again.patch b/0001-mtr-to-a-unreachable-host-is-possible-again.patch
new file mode 100644
index 0000000..bedd0e5
--- /dev/null
+++ b/0001-mtr-to-a-unreachable-host-is-possible-again.patch
@@ -0,0 +1,79 @@
+From 240725528c5a756ee9aaff247e3731f4b8517c06 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= <arekm at maven.pl>
+Date: Tue, 5 Jun 2018 17:38:08 +0200
+Subject: [PATCH] mtr to a unreachable host is possible again.
+
+In mtr 0.87 it was possible to start mtr against unreachable
+host (that local kernel already knew that it is unreachable).
+Later it was broken. Make such tracing possible again.
+---
+ packet/probe.c | 28 +++++++++++++++++++++++-----
+ ui/net.c       | 10 ++++++++++
+ 2 files changed, 33 insertions(+), 5 deletions(-)
+
+diff --git a/packet/probe.c b/packet/probe.c
+index 27bf138..cf95f8a 100644
+--- a/packet/probe.c
++++ b/packet/probe.c
+@@ -356,14 +356,32 @@ int find_source_addr(
+         return -1;
+     }
+ 
+-    if (connect(sock, (struct sockaddr *) &dest_with_port, len)) {
+-        close(sock);
+-        return -1;
+-    }
++    if (connect(sock, (struct sockaddr *) &dest_with_port, len) == 0) {
++        if (getsockname(sock, (struct sockaddr *) srcaddr, &len)) {
++            close(sock);
++            return -1;
++        }
++    } else {
++#ifdef __linux__
++        /* Linux doesn't require source address, so we can support
++         * a case when mtr is run against unreachable host (that can become
++         * reachable) */
++        if (errno != EHOSTUNREACH) {
++            close(sock);
++            return -1;
++        }
+ 
+-    if (getsockname(sock, (struct sockaddr *) srcaddr, &len)) {
++        if (destaddr->ss_family == AF_INET6) {
++            srcaddr6 = (struct sockaddr_in6 *) srcaddr;
++            srcaddr6->sin6_addr = in6addr_any;
++        } else {
++            srcaddr4 = (struct sockaddr_in *) srcaddr;
++            srcaddr4->sin_addr.s_addr = INADDR_ANY;
++        }
++#else
+         close(sock);
+         return -1;
++#endif
+     }
+ 
+     close(sock);
+diff --git a/ui/net.c b/ui/net.c
+index 69d4477..11dd4c8 100644
+--- a/ui/net.c
++++ b/ui/net.c
+@@ -720,6 +720,16 @@ static void net_find_local_address(
+ 
+     if (connect
+         (udp_socket, (struct sockaddr *) &remote_sockaddr, addr_length)) {
++#ifdef __linux__
++        /* Linux doesn't require source address, so we can support
++         * a case when mtr is run against unreachable host (that can become
++         * reachable) */
++        if (errno == EHOSTUNREACH) {
++            close(udp_socket);
++            localaddr[0] = '\0';
++            return;
++        }
++#endif
+         error(EXIT_FAILURE, errno, "udp socket connect failed");
+     }
+ 
+-- 
+2.17.1
+
================================================================

---- gitweb:

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



More information about the pld-cvs-commit mailing list