libnfsidmap: pulled in for NFSv4 support in nfs-utils

Upgraded net-libs/libnfsidmap to version 0.24 on amd64, arm, x86

Nothing depends on nfs-utils (it exists just for devs to play with).

BUG=None
TEST=`emerge-x86-generic nfs-utils` worked

Change-Id: Ia0d3101461b626a663d40af892e1004d02b2e3ad
Reviewed-on: https://gerrit.chromium.org/gerrit/26106
Reviewed-by: David James <davidjames@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Commit-Ready: Mike Frysinger <vapier@chromium.org>
diff --git a/metadata/md5-cache/net-libs/libnfsidmap-0.24 b/metadata/md5-cache/net-libs/libnfsidmap-0.24
new file mode 100644
index 0000000..705e866
--- /dev/null
+++ b/metadata/md5-cache/net-libs/libnfsidmap-0.24
@@ -0,0 +1,13 @@
+DEFINED_PHASES=configure install prepare
+DEPEND=ldap? ( net-nds/openldap ) || ( >=sys-devel/automake-1.11.1:1.11 ) >=sys-devel/autoconf-2.68 sys-devel/libtool
+DESCRIPTION=NFSv4 ID <-> name mapping library
+EAPI=2
+HOMEPAGE=http://www.citi.umich.edu/projects/nfsv4/linux/
+IUSE=ldap static-libs
+KEYWORDS=alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86
+LICENSE=BSD
+RDEPEND=ldap? ( net-nds/openldap ) !<net-fs/nfs-utils-1.2.2 !net-fs/idmapd
+SLOT=0
+SRC_URI=http://www.citi.umich.edu/projects/nfsv4/linux/libnfsidmap/libnfsidmap-0.24.tar.gz
+_eclasses_=autotools	addbdf6cce5024ac93ad2084ad5e1d2d	eutils	33ef77a15337022e05342d2c772a7a5a	libtool	0fd90d183673bf1107465ec45849d1ea	multilib	5f4ad6cf85e365e8f0c6050ddd21659e	portability	0be430f759a631e692678ed796e09f5c	toolchain-funcs	6526ac6fc9aedf391efb91fcd75ace68	user	9e552f935106ff0bc92af16da64b4b29
+_md5_=accc06ffb8606bb01973f5652b2d92b0
diff --git a/net-libs/libnfsidmap/Manifest b/net-libs/libnfsidmap/Manifest
new file mode 100644
index 0000000..f14e519
--- /dev/null
+++ b/net-libs/libnfsidmap/Manifest
@@ -0,0 +1 @@
+DIST libnfsidmap-0.24.tar.gz 328720 RMD160 c1d61b31cc63a8c6c46709b1dfc4e94d22e0eaba SHA1 3ced887b642d33ecabdd751ec7c4fb536347fba1 SHA256 59501432e683336d7a290da13767e92afb5b86f42ea4254041225fe218e8dd47
diff --git a/net-libs/libnfsidmap/files/libnfsidmap-0.19-getgrouplist.patch b/net-libs/libnfsidmap/files/libnfsidmap-0.19-getgrouplist.patch
new file mode 100644
index 0000000..c8cfeb9
--- /dev/null
+++ b/net-libs/libnfsidmap/files/libnfsidmap-0.19-getgrouplist.patch
@@ -0,0 +1,112 @@
+http://bugs.gentoo.org/169909
+
+--- libnfsidmap-0.19/configure.in
++++ libnfsidmap-0.19/configure.in
+@@ -38,7 +38,7 @@
+ 
+ # Checks for library functions.
+ AC_FUNC_MALLOC
+-AC_CHECK_FUNCS([strchr strdup])
++AC_CHECK_FUNCS([strchr strdup getgrouplist])
+ 
+ AC_CONFIG_FILES([Makefile])
+ AC_OUTPUT(libnfsidmap.pc)
+--- libnfsidmap-0.19/nss.c
++++ libnfsidmap-0.19/nss.c
+@@ -49,6 +49,8 @@
+ #include "cfg.h"
+ #include <syslog.h>
+ 
++#include "getgrouplist.c"
++
+ /*
+  * NSS Translation Methods
+  *
+--- libnfsidmap-0.19/getgrouplist.c
++++ libnfsidmap-0.19/getgrouplist.c
+@@ -0,0 +1,85 @@
++/*
++ *  getgrouplist.c
++ *
++ *  if system does not provide the non-standard getgrouplist, we will emulate
++ *  it via POSIX standard functions
++ *
++ * Copyright (c) 1991, 1993
++ *	The Regents of the University of California.  All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions
++ * are met:
++ * 1. Redistributions of source code must retain the above copyright
++ *    notice, this list of conditions and the following disclaimer.
++ * 2. 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.
++ * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
++ */
++
++#include <sys/types.h>
++#include <grp.h>
++#include <string.h>
++#include <unistd.h>
++
++#ifndef HAVE_GETGROUPLIST
++static
++int
++getgrouplist(const char *uname, gid_t agroup, gid_t *groups, int *grpcnt)
++{
++	const struct group *grp;
++	int i, maxgroups, ngroups, ret;
++
++	ret = 0;
++	ngroups = 0;
++	maxgroups = *grpcnt;
++	/*
++	 * When installing primary group, duplicate it;
++	 * the first element of groups is the effective gid
++	 * and will be overwritten when a setgid file is executed.
++	 */
++	groups[ngroups++] = agroup;
++	if (maxgroups > 1)
++		groups[ngroups++] = agroup;
++	/*
++	 * Scan the group file to find additional groups.
++	 */
++	setgrent();
++	while ((grp = getgrent()) != NULL) {
++		for (i = 0; i < ngroups; i++) {
++			if (grp->gr_gid == groups[i])
++				goto skip;
++		}
++		for (i = 0; grp->gr_mem[i]; i++) {
++			if (!strcmp(grp->gr_mem[i], uname)) {
++				if (ngroups >= maxgroups) {
++					ret = -1;
++					break;
++				}
++				groups[ngroups++] = grp->gr_gid;
++				break;
++			}
++		}
++skip:
++		;
++	}
++	endgrent();
++	*grpcnt = ngroups;
++	return (ret);
++}
++#endif
diff --git a/net-libs/libnfsidmap/files/libnfsidmap-0.21-headers.patch b/net-libs/libnfsidmap/files/libnfsidmap-0.21-headers.patch
new file mode 100644
index 0000000..6ef12d4
--- /dev/null
+++ b/net-libs/libnfsidmap/files/libnfsidmap-0.21-headers.patch
@@ -0,0 +1,22 @@
+for toupper and such
+
+--- a/nss.c
++++ b/nss.c
+@@ -34,6 +34,7 @@
+  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
++#include <ctype.h>
+ #include <sys/types.h>
+ #include <errno.h>
+ #include <unistd.h>
+--- a/libnfsidmap.c
++++ b/libnfsidmap.c
+@@ -37,6 +37,7 @@
+  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+  */
+ 
++#include <ctype.h>
+ #include <sys/types.h>
+ #include <errno.h>
+ #include <unistd.h>
diff --git a/net-libs/libnfsidmap/libnfsidmap-0.24.ebuild b/net-libs/libnfsidmap/libnfsidmap-0.24.ebuild
new file mode 100644
index 0000000..2956b1a
--- /dev/null
+++ b/net-libs/libnfsidmap/libnfsidmap-0.24.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-libs/libnfsidmap/libnfsidmap-0.24.ebuild,v 1.7 2012/05/21 19:13:27 xarthisius Exp $
+
+EAPI="2"
+
+inherit autotools eutils
+
+DESCRIPTION="NFSv4 ID <-> name mapping library"
+HOMEPAGE="http://www.citi.umich.edu/projects/nfsv4/linux/"
+SRC_URI="http://www.citi.umich.edu/projects/nfsv4/linux/libnfsidmap/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc x86"
+IUSE="ldap static-libs"
+
+DEPEND="ldap? ( net-nds/openldap )"
+RDEPEND="${DEPEND}
+	!<net-fs/nfs-utils-1.2.2
+	!net-fs/idmapd"
+
+src_prepare() {
+	epatch "${FILESDIR}"/${PN}-0.19-getgrouplist.patch #169909
+	epatch "${FILESDIR}"/${PN}-0.21-headers.patch
+	eautoreconf
+}
+
+src_configure() {
+	econf \
+		--disable-dependency-tracking \
+		$(use_enable static-libs static) \
+		$(use_enable ldap)
+}
+
+src_install() {
+	emake install DESTDIR="${D}" || die
+	dodoc AUTHORS ChangeLog NEWS README
+
+	insinto /etc
+	doins idmapd.conf || die
+
+	# remove useless files
+	rm -f "${D}"/usr/lib*/libnfsidmap/*.{a,la}
+	use static-libs || rm -f "${D}"/usr/lib*/*.la
+}