Hello community, here is the log from the commit of package iputils for openSUSE:Factory checked in at 2019-06-18 14:54:53 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/iputils (Old) and /work/SRC/openSUSE:Factory/.iputils.new.4811 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "iputils" Tue Jun 18 14:54:53 2019 rev:46 rq:709983 version:s20190515 Changes: -------- --- /work/SRC/openSUSE:Factory/iputils/iputils.changes 2019-05-28 09:41:29.545881102 +0200 +++ /work/SRC/openSUSE:Factory/.iputils.new.4811/iputils.changes 2019-06-18 14:54:54.641458568 +0200 @@ -1,0 +2,5 @@ +Fri Jun 14 12:56:38 UTC 2019 - Petr Vorel <[email protected]> + +- Add patch ping-Fix-unwanted-bell-on-unreachable-address.patch (boo#1135118) + +------------------------------------------------------------------- New: ---- ping-Fix-unwanted-bell-on-unreachable-address.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ iputils.spec ++++++ --- /var/tmp/diff_new_pack.TMzKvV/_old 2019-06-18 14:54:55.409458068 +0200 +++ /var/tmp/diff_new_pack.TMzKvV/_new 2019-06-18 14:54:55.413458066 +0200 @@ -29,6 +29,7 @@ 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 @@ %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 %build # Export CFLAGS so we can also benefit from the ones the Makefile sets for us ++++++ ping-Fix-unwanted-bell-on-unreachable-address.patch ++++++ >From effe9cd6c0a0269345cf0c092fe75aadf5f49102 Mon Sep 17 00:00:00 2001 From: Petr Vorel <[email protected]> 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 <[email protected]> Signed-off-by: Petr Vorel <[email protected]> Reviewed-by: Sami Kerola <[email protected]> --- 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
