From: Arkadiusz Miśkiewicz Date: Tue, 5 Jun 2018 15:45:39 +0000 (+0200) Subject: - rel 4; make it possible to run mtr against unreachable host X-Git-Tag: auto/th/mtr-0.92-4 X-Git-Url: http://git.pld-linux.org/gitweb.cgi?a=commitdiff_plain;h=bc7a85ec31da5df0dd67414c9b872b4b376266b3;p=packages%2Fmtr.git - rel 4; make it possible to run mtr against unreachable host --- 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?= +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 + 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}