summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2021-10-14 04:15:47 +0100
committerSam James <sam@gentoo.org>2021-10-14 04:15:47 +0100
commitc8e7cf5b4f813a24758f4d81e722df07bba85017 (patch)
tree50be4c9510a7ea555a3eefca80435ec4b1fd115a /net-misc
parentapp-i18n/yaskkserv2: [QA] use system copy of OpenSSL (diff)
downloadgentoo-c8e7cf5b4f813a24758f4d81e722df07bba85017.tar.gz
gentoo-c8e7cf5b4f813a24758f4d81e722df07bba85017.tar.bz2
gentoo-c8e7cf5b4f813a24758f4d81e722df07bba85017.zip
net-misc/iputils: backport no-IPv6 ping patch
Bug: https://bugs.gentoo.org/818022 Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'net-misc')
-rw-r--r--net-misc/iputils/files/iputils-20210722-fix-no-ipv6-ping.patch47
-rw-r--r--net-misc/iputils/iputils-20210722-r1.ebuild192
2 files changed, 239 insertions, 0 deletions
diff --git a/net-misc/iputils/files/iputils-20210722-fix-no-ipv6-ping.patch b/net-misc/iputils/files/iputils-20210722-fix-no-ipv6-ping.patch
new file mode 100644
index 000000000000..61f9f5c03fd6
--- /dev/null
+++ b/net-misc/iputils/files/iputils-20210722-fix-no-ipv6-ping.patch
@@ -0,0 +1,47 @@
+https://github.com/iputils/iputils/commit/79d713eab6181e219bf932b404706f6f59ff2539.patch
+https://bugs.gentoo.org/818022
+
+From: Byron Stanoszek <gandalf@winds.org>
+Date: Thu, 16 Sep 2021 23:38:54 +0200
+Subject: [PATCH] ping: Remove 'unsupported IPv6' warning on disabled IPv6
+
+Regression was introduced in d141cb6 as introduced condition
+
+if ((errno == EAFNOSUPPORT && socktype == AF_INET6) || options & F_VERBOSE || requisite)
+
+was wrong, it should have been:
+
+if ((errno == EAFNOSUPPORT && family == AF_INET6 && requisite) || options & F_VERBOSE)
+
+but bug was hidden as `family == AF_INET6' was always false until
+otherwise correct fix 904cdb6 ("ping: AF_INET6 is address family not
+socket type [lgtm scan]") propagated the error.
+
+Tested on kernel booted with ipv6.disable=1 (disabling via sysctl, i.e.
+sysctl -w net.ipv6.conf.all.disable_ipv6=1; sysctl -w net.ipv6.conf.default.disable_ipv6=1
+does not trigger the issue as it exit with "socket: Address family not
+supported by protocol" - errno EADDRNOTAVAIL).
+
+Fixes: d141cb6 ("ping: work with older kernels that don't support ping sockets")
+Closes: https://github.com/iputils/iputils/issues/293
+Closes: https://github.com/iputils/iputils/pull/370
+
+Reported-by: lekto <lekto@o2.pl>
+Reviewed-by: Andrew Clayton <andrew@digital-domain.net>
+Reviewed-by: Petr Vorel <pvorel@suse.cz>
+Signed-off-by: Byron Stanoszek <gandalf@winds.org>
+[ pvorel: create commit from Byron's patch on the issue, do analysis and wrote commit message ]
+Signed-off-by: Petr Vorel <pvorel@suse.cz>
+--- a/ping/ping.c
++++ b/ping/ping.c
+@@ -150,8 +150,8 @@ static void create_socket(struct ping_rts *rts, socket_st *sock, int family,
+ /* Report error related to disabled IPv6 only when IPv6 also failed or in
+ * verbose mode. Report other errors always.
+ */
+- if ((errno == EAFNOSUPPORT && family == AF_INET6) ||
+- rts->opt_verbose || requisite)
++ if ((errno == EAFNOSUPPORT && family == AF_INET6 && requisite) ||
++ rts->opt_verbose)
+ error(0, errno, "socket");
+ if (requisite)
+ exit(2);
diff --git a/net-misc/iputils/iputils-20210722-r1.ebuild b/net-misc/iputils/iputils-20210722-r1.ebuild
new file mode 100644
index 000000000000..7d70dc9970a2
--- /dev/null
+++ b/net-misc/iputils/iputils-20210722-r1.ebuild
@@ -0,0 +1,192 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+# For released versions, we precompile the man/html pages and store
+# them in a tarball on our mirrors. This avoids ugly issues while
+# building stages, and reduces dependencies.
+# To regenerate man/html pages emerge iputils-99999999[doc] with
+# EGIT_COMMIT set to release tag, all USE flags enabled and
+# tar ${S}/doc folder.
+
+EAPI="7"
+
+PLOCALES="de fr ja pt_BR tr uk zh_CN"
+
+inherit fcaps flag-o-matic meson plocale systemd toolchain-funcs
+
+if [[ ${PV} == "99999999" ]] ; then
+ EGIT_REPO_URI="https://github.com/iputils/iputils.git"
+ inherit git-r3
+else
+ SRC_URI="https://github.com/iputils/iputils/archive/${PV}.tar.gz -> ${P}.tar.gz
+ https://dev.gentoo.org/~whissi/dist/iputils/${PN}-manpages-${PV}.tar.xz"
+ KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux"
+fi
+
+DESCRIPTION="Network monitoring tools including ping and ping6"
+HOMEPAGE="https://wiki.linuxfoundation.org/networking/iputils"
+
+LICENSE="BSD GPL-2+ rdisc"
+SLOT="0"
+IUSE="+arping caps clockdiff doc gcrypt idn ipv6 nettle nls rarpd rdisc ssl static test tftpd tracepath traceroute6"
+RESTRICT="!test? ( test )"
+
+BDEPEND="
+ virtual/pkgconfig
+ test? ( sys-apps/iproute2 )
+ nls? ( sys-devel/gettext )
+"
+
+LIB_DEPEND="
+ caps? ( sys-libs/libcap[static-libs(+)] )
+ idn? ( net-dns/libidn2:=[static-libs(+)] )
+ nls? ( virtual/libintl[static-libs(+)] )
+"
+
+RDEPEND="
+ traceroute6? ( !net-analyzer/traceroute )
+ !static? ( ${LIB_DEPEND//\[static-libs(+)]} )
+"
+
+DEPEND="
+ ${RDEPEND}
+ virtual/os-headers
+ static? ( ${LIB_DEPEND} )
+"
+
+if [[ ${PV} == "99999999" ]] ; then
+ BDEPEND+="
+ app-text/docbook-xml-dtd:4.2
+ app-text/docbook-xml-dtd:4.5
+ app-text/docbook-xsl-ns-stylesheets
+ app-text/docbook-xsl-stylesheets
+ dev-libs/libxslt:0
+ "
+fi
+
+PATCHES=(
+ # Upstream; drop on bump
+ "${FILESDIR}"/${P}-optional-tests.patch
+ # Upstream; drop on bump
+ "${FILESDIR}"/${P}-fix-no-ipv6-ping.patch
+)
+
+src_prepare() {
+ default
+
+ plocale_get_locales > po/LINGUAS || die
+}
+
+src_configure() {
+ use static && append-ldflags -static
+
+ local emesonargs=(
+ -DUSE_CAP="$(usex caps true false)"
+ -DUSE_IDN="$(usex idn true false)"
+ -DBUILD_ARPING="$(usex arping true false)"
+ -DBUILD_CLOCKDIFF="$(usex clockdiff true false)"
+ -DBUILD_PING="true"
+ -DBUILD_RARPD="$(usex rarpd true false)"
+ -DBUILD_RDISC="$(usex rdisc true false)"
+ -DENABLE_RDISC_SERVER="$(usex rdisc true false)"
+ -DBUILD_TFTPD="$(usex tftpd true false)"
+ -DBUILD_TRACEPATH="$(usex tracepath true false)"
+ -DBUILD_TRACEROUTE6="$(usex ipv6 $(usex traceroute6 true false) false)"
+ -DBUILD_NINFOD="false"
+ -DNINFOD_MESSAGES="false"
+ -DNO_SETCAP_OR_SUID="true"
+ -Dsystemdunitdir="$(systemd_get_systemunitdir)"
+ -DUSE_GETTEXT="$(usex nls true false)"
+ $(meson_use !test SKIP_TESTS)
+ )
+
+ if [[ "${PV}" == 99999999 ]] ; then
+ emesonargs+=(
+ -DBUILD_HTML_MANS="$(usex doc true false)"
+ -DBUILD_MANS="true"
+ )
+ else
+ emesonargs+=(
+ -DBUILD_HTML_MANS="false"
+ -DBUILD_MANS="false"
+ )
+ fi
+
+ meson_src_configure
+}
+
+src_compile() {
+ tc-export CC
+ meson_src_compile
+}
+
+src_test() {
+ if [[ ${EUID} != 0 ]]; then
+ einfo "Tests require root privileges; Skipping ..."
+ return
+ fi
+
+ meson_src_test
+}
+
+src_install() {
+ meson_src_install
+
+ dodir /bin
+ local my_bin
+ for my_bin in $(usex arping arping '') ping ; do
+ mv "${ED}"/usr/bin/${my_bin} "${ED}"/bin/ || die
+ done
+ dosym ping /bin/ping4
+
+ if use tracepath ; then
+ dosym tracepath /usr/bin/tracepath4
+ fi
+
+ if use ipv6 ; then
+ dosym ping /bin/ping6
+
+ if use tracepath ; then
+ dosym tracepath /usr/bin/tracepath6
+ dosym tracepath.8 /usr/share/man/man8/tracepath6.8
+ fi
+ fi
+
+ if [[ "${PV}" != 99999999 ]] ; then
+ local -a man_pages
+ local -a html_man_pages
+
+ while IFS= read -r -u 3 -d $'\0' my_bin
+ do
+ my_bin=$(basename "${my_bin}")
+ [[ -z "${my_bin}" ]] && continue
+
+ if [[ -f "${S}/doc/${my_bin}.8" ]] ; then
+ man_pages+=( ${my_bin}.8 )
+ fi
+
+ if [[ -f "${S}/doc/${my_bin}.html" ]] ; then
+ html_man_pages+=( ${my_bin}.html )
+ fi
+ done 3< <(find "${ED}"/{bin,usr/bin,usr/sbin} -type f -perm -a+x -print0 2>/dev/null)
+
+ pushd doc &>/dev/null || die
+ doman "${man_pages[@]}"
+ if use doc ; then
+ docinto html
+ dodoc "${html_man_pages[@]}"
+ fi
+ popd &>/dev/null || die
+ else
+ if use doc ; then
+ mv "${ED}"/usr/share/${PN} "${ED}"/usr/share/doc/${PF}/html || die
+ fi
+ fi
+}
+
+pkg_postinst() {
+ fcaps cap_net_raw \
+ bin/ping \
+ $(usex arping 'bin/arping' '') \
+ $(usex clockdiff 'usr/bin/clockdiff' '')
+}