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


Reply via email to