commit:     ae6ad766ca854bf00c6cbe18beb6f7ea6b806c79
Author:     Joshua Kinard <kumba <AT> gentoo <DOT> org>
AuthorDate: Wed Jul  5 10:21:38 2017 +0000
Commit:     Joshua Kinard <kumba <AT> gentoo <DOT> org>
CommitDate: Wed Jul  5 10:22:16 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ae6ad766

net-libs/libtirpc: backport fixes for uclibc-ng userlands

A number of patches from libtirpc git were backported from 1.0.2_rc3 to
resolve compiliation errors when building under a sys-libs/uclibc-ng
userland.  Two patches are custom fixes -- see the top of each patch for
a more detailed explanation.  Tested on mips (both uclibc-ng and glibc)
and amd64 glibc.  Solves Bug #610846.

Signed-off-by: Joshua Kinard <kumba <AT> gentoo.org>
Package-Manager: Portage-2.3.6, Repoman-2.3.2

 ...ibtirpc-1.0.1_add-des_impl-c-7f6bb9a3467a.patch |  29 +++++
 ...c-1.0.1_ifdef-out-yp-headers-742bbdff6ddf.patch |  30 +++++
 ...0.1_remove-des-deps-to-glibc-503ac2e9fa56.patch |  43 +++++++
 ...tirpc-1.0.1_remove-nis-h-dep-5f00f8c78c5d.patch | 137 +++++++++++++++++++++
 ...tirpc-1.0.1_uclibc-dont-use-struct-rpcent.patch |  51 ++++++++
 ...ibtirpc-1.0.1_uclibc-use-memset-not-bzero.patch |  21 ++++
 net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild         |  66 ++++++++++
 7 files changed, 377 insertions(+)

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_add-des_impl-c-7f6bb9a3467a.patch 
b/net-libs/libtirpc/files/libtirpc-1.0.1_add-des_impl-c-7f6bb9a3467a.patch
new file mode 100644
index 00000000000..a62f23d87e9
--- /dev/null
+++ b/net-libs/libtirpc/files/libtirpc-1.0.1_add-des_impl-c-7f6bb9a3467a.patch
@@ -0,0 +1,29 @@
+From: Thorsten Kukuk <ku...@thkukuk.de>
+Date: Mon, 4 Apr 2016 13:48:04 +0000 (-0400)
+Subject: Compile des_crypt.c and des_impl.c
+X-Git-Tag: libtirpc-1-0-2-rc3~1
+X-Git-Url: 
http://git.linux-nfs.org/?p=steved%2Flibtirpc.git;a=commitdiff_plain;h=7f6bb9a3467a57caf43425d213a06aeb7870086b
+
+Compile des_crypt.c and des_impl.c
+
+Add des_impl.c to become independent of deprecated functions of glibc
+
+Fixes: f17b44048003 ('Revert commit c0547c56dafb')
+Signed-off-by: Thorsten Kukuk <ku...@thkukuk.de>
+Signed-off-by: Steve Dickson <ste...@redhat.com>
+---
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index e4ed8aa..fba2aa4 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -24,7 +24,7 @@ libtirpc_la_SOURCES = auth_none.c auth_unix.c 
authunix_prot.c bindresvport.c cln
+         rpcb_st_xdr.c svc.c svc_auth.c svc_dg.c svc_auth_unix.c 
svc_auth_none.c \
+       svc_auth_des.c \
+         svc_generic.c svc_raw.c svc_run.c svc_simple.c svc_vc.c getpeereid.c \
+-        auth_time.c auth_des.c authdes_prot.c debug.c
++        auth_time.c auth_des.c authdes_prot.c debug.c des_crypt.c des_impl.c
+ 
+ ## XDR
+ libtirpc_la_SOURCES += xdr.c xdr_rec.c xdr_array.c xdr_float.c xdr_mem.c 
xdr_reference.c xdr_stdio.c xdr_sizeof.c
+

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_ifdef-out-yp-headers-742bbdff6ddf.patch
 
b/net-libs/libtirpc/files/libtirpc-1.0.1_ifdef-out-yp-headers-742bbdff6ddf.patch
new file mode 100644
index 00000000000..481ace7e6fc
--- /dev/null
+++ 
b/net-libs/libtirpc/files/libtirpc-1.0.1_ifdef-out-yp-headers-742bbdff6ddf.patch
@@ -0,0 +1,30 @@
+From: Thorsten Kukuk <ku...@thkukuk.de>
+Date: Mon, 4 Apr 2016 13:37:32 +0000 (-0400)
+Subject: getpublickey.c: ifdef out yp headers
+X-Git-Tag: libtirpc-1-0-2-rc3~3
+X-Git-Url: 
http://git.linux-nfs.org/?p=steved%2Flibtirpc.git;a=commitdiff_plain;h=742bbdff6ddff4dde0d610a842cd8ac0408af0a0
+
+getpublickey.c: ifdef out yp headers
+
+If we don't compile in YP support, don't include YP
+
+Signed-off-by: Thorsten Kukuk <ku...@thkukuk.de>
+Signed-off-by: Steve Dickson <ste...@redhat.com>
+---
+
+diff --git a/src/getpublickey.c b/src/getpublickey.c
+index 764a5f9..8cf4dc2 100644
+--- a/src/getpublickey.c
++++ b/src/getpublickey.c
+@@ -38,8 +38,10 @@
+ #include <pwd.h>
+ #include <rpc/rpc.h>
+ #include <rpc/key_prot.h>
++#ifdef YP
+ #include <rpcsvc/yp_prot.h>
+ #include <rpcsvc/ypclnt.h>
++#endif
+ #include <string.h>
+ #include <stdlib.h>
+ 
+

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_remove-des-deps-to-glibc-503ac2e9fa56.patch
 
b/net-libs/libtirpc/files/libtirpc-1.0.1_remove-des-deps-to-glibc-503ac2e9fa56.patch
new file mode 100644
index 00000000000..0ef15290ea1
--- /dev/null
+++ 
b/net-libs/libtirpc/files/libtirpc-1.0.1_remove-des-deps-to-glibc-503ac2e9fa56.patch
@@ -0,0 +1,43 @@
+From: Thorsten Kukuk <ku...@thkukuk.de>
+Date: Mon, 4 Apr 2016 13:51:15 +0000 (-0400)
+Subject: Remove des*.c dependencies to glibc
+X-Git-Tag: libtirpc-1-0-2-rc3
+X-Git-Url: 
http://git.linux-nfs.org/?p=steved%2Flibtirpc.git;a=commitdiff_plain;h=503ac2e9fa569d95e366766202a7ca840e28b28a
+
+Remove des*.c dependencies to glibc
+
+Our des_impl.c has dependencies to glibc header files
+and different arguments then our header file has.
+Bring our own code in sync.
+
+Signed-off-by: Thorsten Kukuk <ku...@thkukuk.de>
+Signed-off-by: Steve Dickson <ste...@redhat.com>
+---
+
+diff --git a/src/des_impl.c b/src/des_impl.c
+index c5b7ed6..9dbccaf 100644
+--- a/src/des_impl.c
++++ b/src/des_impl.c
+@@ -6,7 +6,8 @@
+ /* see <http://www.gnu.org/licenses/> to obtain a copy.  */
+ #include <string.h>
+ #include <stdint.h>
+-#include <rpc/rpc_des.h>
++#include <sys/types.h>
++#include <rpc/des.h>
+ 
+ 
+ static const uint32_t des_SPtrans[8][64] =
+diff --git a/tirpc/rpc/des.h b/tirpc/rpc/des.h
+index d2881ad..018aa48 100644
+--- a/tirpc/rpc/des.h
++++ b/tirpc/rpc/des.h
+@@ -82,6 +82,6 @@ struct desparams {
+ /*
+  * Software DES.
+  */
+-extern int _des_crypt( char *, int, struct desparams * );
++extern int _des_crypt( char *, unsigned, struct desparams * );
+ 
+ #endif
+

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_remove-nis-h-dep-5f00f8c78c5d.patch 
b/net-libs/libtirpc/files/libtirpc-1.0.1_remove-nis-h-dep-5f00f8c78c5d.patch
new file mode 100644
index 00000000000..a8ad182f76b
--- /dev/null
+++ b/net-libs/libtirpc/files/libtirpc-1.0.1_remove-nis-h-dep-5f00f8c78c5d.patch
@@ -0,0 +1,137 @@
+From: Thorsten Kukuk <ku...@thkukuk.de>
+Date: Mon, 4 Apr 2016 13:44:19 +0000 (-0400)
+Subject: Remove dependency to nis.h
+X-Git-Tag: libtirpc-1-0-2-rc3~2
+X-Git-Url: 
http://git.linux-nfs.org/?p=steved%2Flibtirpc.git;a=commitdiff_plain;h=5f00f8c78c5d13437d50c0737ce77ad67fd4361d
+
+Remove dependency to nis.h
+
+libtirpc needs rpcsvc/nis.h for compiling, but does not
+provide this head file. It's only provided by glibc,
+if the sunrpc code is not marked as deprecated, and
+by libnsl. But libnsl needs libtirpc to compile...
+
+Signed-off-by: Steve Dickson <ste...@redhat.com>
+---
+
+diff --git a/src/auth_des.c b/src/auth_des.c
+index 4d3639e..af2f61f 100644
+--- a/src/auth_des.c
++++ b/src/auth_des.c
+@@ -46,8 +46,8 @@
+ #include <rpc/clnt.h>
+ #include <rpc/xdr.h>
+ #include <sys/socket.h>
+-#undef NIS
+-#include <rpcsvc/nis.h>
++
++#include "nis.h"
+ 
+ #if defined(LIBC_SCCS) && !defined(lint)
+ #endif
+diff --git a/src/auth_time.c b/src/auth_time.c
+index 10e58eb..7f83ab4 100644
+--- a/src/auth_time.c
++++ b/src/auth_time.c
+@@ -44,8 +44,8 @@
+ #include <rpc/rpcb_prot.h>
+ //#include <clnt_soc.h>
+ #include <sys/select.h>
+-#undef NIS
+-#include <rpcsvc/nis.h>
++
++#include "nis.h"
+ 
+ 
+ #ifdef TESTING
+diff --git a/src/nis.h b/src/nis.h
+new file mode 100644
+index 0000000..588c041
+--- /dev/null
++++ b/src/nis.h
+@@ -0,0 +1,70 @@
++/*
++ * Copyright (c) 2010, Oracle America, Inc.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are
++ * met:
++ *
++ *     * Redistributions of source code must retain the above copyright
++ *       notice, this list of conditions and the following disclaimer.
++ *     * Redistributions in binary form must reproduce the above
++ *       copyright notice, this list of conditions and the following
++ *       disclaimer in the documentation and/or other materials
++ *       provided with the distribution.
++ *     * Neither the name of the "Oracle America, Inc." nor the names of its
++ *       contributors may be used to endorse or promote products derived
++ *       from this software without specific prior written permission.
++ *
++ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
++ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
++ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
++ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
++ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
++ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ */
++
++#ifndef _INTERNAL_NIS_H
++#define _INTERNAL_NIS_H 1
++
++/*  This file only contains the definition of nis_server, to be
++    able to compile libtirpc without the need to have a glibc
++    with sunrpc or a libnsl already installed. */
++
++#define NIS_PK_NONE 0
++
++struct nis_attr {
++      char *zattr_ndx;
++      struct {
++              u_int zattr_val_len;
++              char *zattr_val_val;
++      } zattr_val;
++};
++typedef struct nis_attr nis_attr;
++
++typedef char *nis_name;
++
++struct endpoint {
++      char *uaddr;
++      char *family;
++      char *proto;
++};
++typedef struct endpoint endpoint;
++
++struct nis_server {
++      nis_name name;
++      struct {
++              u_int ep_len;
++              endpoint *ep_val;
++      } ep;
++      uint32_t key_type;
++      netobj pkey;
++};
++typedef struct nis_server nis_server;
++
++#endif /* ! _INTERNAL_NIS_H */
+diff --git a/src/rpc_soc.c b/src/rpc_soc.c
+index 1ec7b3f..ed0892a 100644
+--- a/src/rpc_soc.c
++++ b/src/rpc_soc.c
+@@ -61,8 +61,8 @@
+ #include <string.h>
+ #include <unistd.h>
+ #include <fcntl.h>
+-#include <rpcsvc/nis.h>
+ 
++#include "nis.h"
+ #include "rpc_com.h"
+ 
+ extern mutex_t        rpcsoc_lock;
+

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-dont-use-struct-rpcent.patch 
b/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-dont-use-struct-rpcent.patch
new file mode 100644
index 00000000000..b2760d2b77b
--- /dev/null
+++ b/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-dont-use-struct-rpcent.patch
@@ -0,0 +1,51 @@
+From https://patchwork.kernel.org/patch/5499671/:
+
+    Subject: [6/9] Define struct rpcent on non GNU libc
+    From: Natanael Copa <nc...@alpinelinux.org>
+    X-Patchwork-Id: 5499671
+    Message-Id: <1418718540-13667-7-git-send-email-nc...@alpinelinux.org>
+    To: libtirpc-de...@lists.sourceforge.net
+    Cc: linux-...@vger.kernel.org, Natanael Copa <nc...@alpinelinux.org>
+    Date: Tue, 16 Dec 2014 09:28:57 +0100
+
+    This fixes the following compile error with musl libc:
+    getrpcent.c:65:16: error: field 'rpc' has incomplete type
+      struct rpcent rpc;
+                    ^
+
+    Signed-off-by: Natanael Copa <nc...@alpinelinux.org>
+    ---
+    This patch could probably be better. It assumes that only GNU libc has
+    the rpcent struct defined, but the BSDs probably has it too.
+
+    I am not sure if uClibc has it, but uClibc does define __GLIBC__ so it
+    might be broken there too.
+
+    I looked into using AC_CHECK_MEMBER but I don't think it is a good idea
+    so depend on config.h since this is a header that will be installed on
+    the system.
+
+    I also found out that struct rpcent is also defined in
+    /usr/include/gssrpc/netdb.h but I am unsure if we can depend on that
+    too since GSS is optional.
+
+    So I am a bit in doubt what the proper fix is. Meanwhile, this works
+    for musl libc.
+
+We fix the uClibc case by checking for __UCLIBC__ as well, since uClibc will
+define __GLIBC__ as well (why?) as __UCLIBC__.  This should not affect the
+musl case.
+---
+
+diff -Naurp libtirpc-1.0.1.orig/tirpc/rpc/rpcent.h 
libtirpc-1.0.1/tirpc/rpc/rpcent.h
+--- libtirpc-1.0.1.orig/tirpc/rpc/rpcent.h     2015-10-30 15:15:14.000000000 
+0000
++++ libtirpc-1.0.1/tirpc/rpc/rpcent.h  2017-07-05 04:58:27.141468000 +0000
+@@ -49,7 +49,7 @@ extern "C" {
+ #endif
+ 
+ /* These are defined in /usr/include/rpc/netdb.h */
+-#if !defined(__GLIBC__)
++#if !defined(__GLIBC__) || defined(__UCLIBC__)
+ struct rpcent {
+       char    *r_name;        /* name of server for this rpc program */
+       char    **r_aliases;    /* alias list */

diff --git 
a/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-use-memset-not-bzero.patch 
b/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-use-memset-not-bzero.patch
new file mode 100644
index 00000000000..f7657f74db4
--- /dev/null
+++ b/net-libs/libtirpc/files/libtirpc-1.0.1_uclibc-use-memset-not-bzero.patch
@@ -0,0 +1,21 @@
+Inspired by a similar fix here:
+http://git.yoctoproject.org/cgit.cgi/poky/plain/meta/packages/nfs-utils/files/uclibc_bzero_fix.patch?id=39d8c0fc4a9d14b7bad1442e05c536e28b196a47
+
+Because uclibc does not have a working implementation of `__bzero'.
+---
+
+diff -Naurp libtirpc-1.0.1.orig/src/des_impl.c libtirpc-1.0.1/src/des_impl.c
+--- libtirpc-1.0.1.orig/src/des_impl.c 2017-07-05 06:16:07.441468000 +0000
++++ libtirpc-1.0.1/src/des_impl.c      2017-07-05 06:19:57.351468000 +0000
+@@ -588,7 +588,11 @@ _des_crypt (char *buf, unsigned len, str
+     }
+   tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
+   tbuf[0] = tbuf[1] = 0;
++#ifndef __UCLIBC__
+   __bzero (schedule, sizeof (schedule));
++#else
++  memset (schedule, 0, sizeof (schedule));
++#endif
+ 
+   return (1);
+ }

diff --git a/net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild 
b/net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild
new file mode 100644
index 00000000000..7a836805185
--- /dev/null
+++ b/net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild
@@ -0,0 +1,66 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="5"
+
+inherit multilib-minimal toolchain-funcs eutils
+
+DESCRIPTION="Transport Independent RPC library (SunRPC replacement)"
+HOMEPAGE="http://libtirpc.sourceforge.net/";
+SRC_URI="mirror://sourceforge/${PN}/${P}.tar.bz2
+       mirror://gentoo/${PN}-glibc-nfs.tar.xz"
+
+LICENSE="GPL-2"
+SLOT="0/3" # subslot matches SONAME major
+KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh 
~sparc ~x86"
+IUSE="ipv6 kerberos static-libs"
+
+RDEPEND="kerberos? ( >=virtual/krb5-0-r1[${MULTILIB_USEDEP}] )"
+DEPEND="${RDEPEND}
+       app-arch/xz-utils
+       >=virtual/pkgconfig-0-r1[${MULTILIB_USEDEP}]"
+
+PATCHES=(
+       "${FILESDIR}/${P}-CVE-2017-8779.patch"
+       "${FILESDIR}/${P}_uclibc-dont-use-struct-rpcent.patch"
+       "${FILESDIR}/${P}_ifdef-out-yp-headers-742bbdff6ddf.patch"
+       "${FILESDIR}/${P}_remove-nis-h-dep-5f00f8c78c5d.patch"
+       "${FILESDIR}/${P}_add-des_impl-c-7f6bb9a3467a.patch"
+       "${FILESDIR}/${P}_remove-des-deps-to-glibc-503ac2e9fa56.patch"
+       "${FILESDIR}/${P}_uclibc-use-memset-not-bzero.patch"
+)
+
+src_prepare() {
+       cp -r "${WORKDIR}"/tirpc "${S}"/ || die
+       epatch "${PATCHES[@]}"
+       epatch_user
+}
+
+multilib_src_configure() {
+       ECONF_SOURCE=${S} \
+       econf \
+               $(use_enable ipv6) \
+               $(use_enable kerberos gssapi) \
+               $(use_enable static-libs static)
+}
+
+multilib_src_install() {
+       default
+
+       # libtirpc replaces rpc support in glibc, so we need it in /
+       gen_usr_ldscript -a tirpc
+}
+
+multilib_src_install_all() {
+       einstalldocs
+
+       insinto /etc
+       doins doc/netconfig
+
+       insinto /usr/include/tirpc
+       doins -r "${WORKDIR}"/tirpc/*
+
+       # makes sure that the linking order for nfs-utils is proper, as
+       # libtool would inject a libgssglue dependency in the list.
+       use static-libs || prune_libtool_files
+}

Reply via email to