Accepting request 709983 from network:utilities
OBS-URL: https://build.opensuse.org/request/show/709983 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/iputils?expand=0&rev=46
This commit is contained in:
commit
740b60b992
@ -1,3 +1,8 @@
|
||||
-------------------------------------------------------------------
|
||||
Fri Jun 14 12:56:38 UTC 2019 - Petr Vorel <pvorel@suse.cz>
|
||||
|
||||
- Add patch ping-Fix-unwanted-bell-on-unreachable-address.patch (boo#1135118)
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Fri May 24 16:22:41 UTC 2019 - Petr Vorel <pvorel@suse.cz>
|
||||
|
||||
|
@ -29,6 +29,7 @@ Patch1: iputils-sec-ping-unblock.diff
|
||||
Patch2: iputils-ping-interrupt.diff
|
||||
Patch3: 0001-build-sys-doc-Fix-the-dependency-on-xsltproc.patch
|
||||
Patch4: meson-remove-setcap-setuid.sh.patch
|
||||
Patch5: ping-Fix-unwanted-bell-on-unreachable-address.patch
|
||||
BuildRequires: docbook5-xsl-stylesheets
|
||||
BuildRequires: docbook_5
|
||||
BuildRequires: iso_ent
|
||||
@ -70,6 +71,7 @@ out their IP addresses.
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
|
||||
%build
|
||||
# Export CFLAGS so we can also benefit from the ones the Makefile sets for us
|
||||
|
111
ping-Fix-unwanted-bell-on-unreachable-address.patch
Normal file
111
ping-Fix-unwanted-bell-on-unreachable-address.patch
Normal file
@ -0,0 +1,111 @@
|
||||
From effe9cd6c0a0269345cf0c092fe75aadf5f49102 Mon Sep 17 00:00:00 2001
|
||||
From: Petr Vorel <pvorel@suse.cz>
|
||||
Date: Mon, 3 Jun 2019 18:35:40 +0200
|
||||
Subject: [PATCH] ping: Fix unwanted bell on unreachable address
|
||||
Upstream-status: commit effe9cd6c0a0269345cf0c092fe75aadf5f49102
|
||||
Fixes: boo#1135118
|
||||
|
||||
Commit 4471ac629cf2603f4b8b45e042e072c992ce25a5 caused regression for IPv6
|
||||
that ping -a IP6_ADDR beeps also on wrong address (i.e. when "Address
|
||||
unreachable"):
|
||||
|
||||
$ ping -a -c1 fd00:1:1:1::15
|
||||
PING fd00:1:1:1::15(fd00:1:1:1::15) 56 data bytes
|
||||
From fd00:1:1:1::2 icmp_seq=1 Destination unreachable: Address unreachable
|
||||
|
||||
--- fd00:1:1:1::15 ping statistics ---
|
||||
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0m
|
||||
|
||||
It should only bell when ping returns correctly.
|
||||
|
||||
Another (fixed) regression was that ping after exit printed error "pipe N",
|
||||
where N is number of counts. Error was result of code from ping_common.c:
|
||||
printf("%spipe %d", comma, pipesize);
|
||||
|
||||
4471ac6 was wrong that code for sock->working_recverr == 1 should stay,
|
||||
sock->working_recverr should be removed.
|
||||
|
||||
Thus changes:
|
||||
* ping.c: put back "stronger filter" for raw socket but (unlike before
|
||||
4471ac6) exit with 2 if setsockopt(ICMP_FILTER) fails
|
||||
* ping6_common.c: put back setsockopt(IPV6_RECVERR), but (unlike before
|
||||
4471ac6) exit with 2 if it fails
|
||||
* ping6_common.c: remove ICMP6_FILTER_SETPASS calls. These caused error "pipe N".
|
||||
* ping6_common.c: return 0 after acknowledge() in ping6_parse_reply
|
||||
|
||||
Fixes: 4471ac6 ("ping: Remove workaround for bug in IP_RECVERR on raw sockets")
|
||||
Fixes: https://github.com/iputils/iputils/issues/182
|
||||
Reported-by: Luiz Angelo Daros de Luca <luizluca@tre-sc.jus.br>
|
||||
Signed-off-by: Petr Vorel <pvorel@suse.cz>
|
||||
Reviewed-by: Sami Kerola <kerolasa@iki.fi>
|
||||
---
|
||||
ping.c | 10 ++++++++++
|
||||
ping6_common.c | 17 +++++------------
|
||||
2 files changed, 15 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/ping.c b/ping.c
|
||||
index 3debd82..34653be 100644
|
||||
--- a/ping.c
|
||||
+++ b/ping.c
|
||||
@@ -877,6 +877,16 @@ int ping4_receive_error_msg(socket_st *sock)
|
||||
|
||||
acknowledge(ntohs(icmph.un.echo.sequence));
|
||||
|
||||
+ if (sock->socktype == SOCK_RAW) {
|
||||
+ struct icmp_filter filt;
|
||||
+
|
||||
+ filt.data = ~((1 << ICMP_SOURCE_QUENCH) |
|
||||
+ (1 << ICMP_REDIRECT) |
|
||||
+ (1 << ICMP_ECHOREPLY));
|
||||
+ if (setsockopt(sock->fd, SOL_RAW, ICMP_FILTER, (const void *)&filt,
|
||||
+ sizeof(filt)) == -1)
|
||||
+ error(2, errno, "setsockopt(ICMP_FILTER)");
|
||||
+ }
|
||||
net_errors++;
|
||||
nerrors++;
|
||||
if (options & F_QUIET)
|
||||
diff --git a/ping6_common.c b/ping6_common.c
|
||||
index f2b91d8..6cc5404 100644
|
||||
--- a/ping6_common.c
|
||||
+++ b/ping6_common.c
|
||||
@@ -726,6 +726,10 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock
|
||||
if (!(packet = (unsigned char *)malloc((unsigned int)packlen)))
|
||||
error(2, errno, _("memory allocation failed"));
|
||||
|
||||
+ hold = 1;
|
||||
+ if (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_RECVERR, (const void *)&hold, sizeof hold))
|
||||
+ error(2, errno, "IPV6_RECVERR");
|
||||
+
|
||||
/* Estimate memory eaten by single packet. It is rough estimate.
|
||||
* Actually, for small datalen's it depends on kernel side a lot. */
|
||||
hold = datalen + 8;
|
||||
@@ -754,11 +758,6 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock
|
||||
|
||||
ICMP6_FILTER_SETBLOCKALL(&filter);
|
||||
|
||||
- ICMP6_FILTER_SETPASS(ICMP6_DST_UNREACH, &filter);
|
||||
- ICMP6_FILTER_SETPASS(ICMP6_PACKET_TOO_BIG, &filter);
|
||||
- ICMP6_FILTER_SETPASS(ICMP6_TIME_EXCEEDED, &filter);
|
||||
- ICMP6_FILTER_SETPASS(ICMP6_PARAM_PROB, &filter);
|
||||
-
|
||||
if (niquery_is_enabled())
|
||||
ICMP6_FILTER_SETPASS(IPUTILS_NI_ICMP6_REPLY, &filter);
|
||||
else
|
||||
@@ -1254,13 +1253,7 @@ ping6_parse_reply(socket_st *sock, struct msghdr *msg, int cc, void *addr, struc
|
||||
!is_ours(sock, icmph1->icmp6_id))
|
||||
return 1;
|
||||
acknowledge(ntohs(icmph1->icmp6_seq));
|
||||
- nerrors++;
|
||||
- if (options & F_FLOOD) {
|
||||
- write_stdout("\bE", 2);
|
||||
- return 0;
|
||||
- }
|
||||
- print_timestamp();
|
||||
- printf(_("From %s: icmp_seq=%u "), pr_addr(from, sizeof *from), ntohs(icmph1->icmp6_seq));
|
||||
+ return 0;
|
||||
} else {
|
||||
/* We've got something other than an ECHOREPLY */
|
||||
if (!(options & F_VERBOSE) || uid)
|
||||
--
|
||||
2.21.0
|
||||
|
Loading…
Reference in New Issue
Block a user