[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