mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
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@gentoo.org> Package-Manager: Portage-2.3.6, Repoman-2.3.2
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
From: Thorsten Kukuk <kukuk@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 <kukuk@thkukuk.de>
|
||||
Signed-off-by: Steve Dickson <steved@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
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
From: Thorsten Kukuk <kukuk@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 <kukuk@thkukuk.de>
|
||||
Signed-off-by: Steve Dickson <steved@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>
|
||||
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
From: Thorsten Kukuk <kukuk@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 <kukuk@thkukuk.de>
|
||||
Signed-off-by: Steve Dickson <steved@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
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
From: Thorsten Kukuk <kukuk@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 <steved@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;
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
From https://patchwork.kernel.org/patch/5499671/:
|
||||
|
||||
Subject: [6/9] Define struct rpcent on non GNU libc
|
||||
From: Natanael Copa <ncopa@alpinelinux.org>
|
||||
X-Patchwork-Id: 5499671
|
||||
Message-Id: <1418718540-13667-7-git-send-email-ncopa@alpinelinux.org>
|
||||
To: libtirpc-devel@lists.sourceforge.net
|
||||
Cc: linux-nfs@vger.kernel.org, Natanael Copa <ncopa@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 <ncopa@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 */
|
||||
@@ -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);
|
||||
}
|
||||
66
net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild
Normal file
66
net-libs/libtirpc/libtirpc-1.0.1-r2.ebuild
Normal file
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user