From 08003ea30d86a8b983be89f6a161d3baacdaa038 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Sun, 6 Nov 2016 23:40:54 -0800
Subject: [PATCH] Musl does not have _r versions of getent() and getpwent()
 APIs

Taken from gentoo
http://data.gpo.zugaina.org/musl/net-fs/samba/files/samba-4.3.9-remove-getpwent_r.patch

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending

 source4/torture/local/nss_tests.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/source4/torture/local/nss_tests.c b/source4/torture/local/nss_tests.c
index 2943122..bc185ca 100644
--- a/source4/torture/local/nss_tests.c
+++ b/source4/torture/local/nss_tests.c
@@ -247,7 +247,6 @@ static bool test_getgrnam_r(struct torture_context *tctx,
 	return true;
 }
 
-
 static bool test_getgrgid(struct torture_context *tctx,
 			  gid_t gid,
 			  struct group *grp_p)
@@ -333,6 +332,7 @@ static bool test_enum_passwd(struct torture_context *tctx,
 	return true;
 }
 
+#if HAVE_GETPWENT_R
 static bool test_enum_r_passwd(struct torture_context *tctx,
 			       struct passwd **pwd_array_p,
 			       size_t *num_pwd_p)
@@ -383,6 +383,7 @@ static bool test_enum_r_passwd(struct torture_context *tctx,
 
 	return true;
 }
+#endif
 
 static bool torture_assert_passwd_equal(struct torture_context *tctx,
 					const struct passwd *p1,
@@ -434,7 +435,7 @@ static bool test_passwd_r(struct torture_context *tctx)
 	struct passwd *pwd, pwd1, pwd2;
 	size_t num_pwd;
 
-	torture_assert(tctx, test_enum_r_passwd(tctx, &pwd, &num_pwd),
+	torture_assert(tctx, test_enum_passwd(tctx, &pwd, &num_pwd),
 						"failed to enumerate passwd");
 
 	for (i=0; i < num_pwd; i++) {
@@ -462,7 +463,7 @@ static bool test_passwd_r_cross(struct torture_context *tctx)
 	struct passwd *pwd, pwd1, pwd2, pwd3, pwd4;
 	size_t num_pwd;
 
-	torture_assert(tctx, test_enum_r_passwd(tctx, &pwd, &num_pwd),
+	torture_assert(tctx, test_enum_passwd(tctx, &pwd, &num_pwd),
 						"failed to enumerate passwd");
 
 	for (i=0; i < num_pwd; i++) {
@@ -533,6 +534,7 @@ static bool test_enum_group(struct torture_context *tctx,
 	return true;
 }
 
+#if HAVE_GETGRENT_R
 static bool test_enum_r_group(struct torture_context *tctx,
 			      struct group **grp_array_p,
 			      size_t *num_grp_p)
@@ -583,6 +585,7 @@ static bool test_enum_r_group(struct torture_context *tctx,
 
 	return true;
 }
+#endif
 
 static bool torture_assert_group_equal(struct torture_context *tctx,
 				       const struct group *g1,
@@ -639,7 +642,7 @@ static bool test_group_r(struct torture_context *tctx)
 	struct group *grp, grp1, grp2;
 	size_t num_grp;
 
-	torture_assert(tctx, test_enum_r_group(tctx, &grp, &num_grp),
+	torture_assert(tctx, test_enum_group(tctx, &grp, &num_grp),
 					       "failed to enumerate group");
 
 	for (i=0; i < num_grp; i++) {
@@ -667,7 +670,7 @@ static bool test_group_r_cross(struct torture_context *tctx)
 	struct group *grp, grp1, grp2, grp3, grp4;
 	size_t num_grp;
 
-	torture_assert(tctx, test_enum_r_group(tctx, &grp, &num_grp),
+	torture_assert(tctx, test_enum_group(tctx, &grp, &num_grp),
 					       "failed to enumerate group");
 
 	for (i=0; i < num_grp; i++) {
-- 
2.25.1

