You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by cn...@apache.org on 2014/08/22 06:05:19 UTC
svn commit: r1619659 - in
/hadoop/common/trunk/hadoop-common-project/hadoop-common: CHANGES.txt
src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c
Author: cnauroth
Date: Fri Aug 22 04:05:18 2014
New Revision: 1619659
URL: http://svn.apache.org/r1619659
Log:
HADOOP-10989. Work around buggy getgrouplist() implementations on Linux that return 0 on failure. Contributed by Chris Nauroth.
Modified:
hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt?rev=1619659&r1=1619658&r2=1619659&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/CHANGES.txt Fri Aug 22 04:05:18 2014
@@ -686,6 +686,9 @@ Release 2.6.0 - UNRELEASED
HADOOP-10488. TestKeyProviderFactory fails randomly. (tucu)
+ HADOOP-10989. Work around buggy getgrouplist() implementations on Linux that
+ return 0 on failure. (cnauroth)
+
Release 2.5.0 - 2014-08-11
INCOMPATIBLE CHANGES
Modified: hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c
URL: http://svn.apache.org/viewvc/hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c?rev=1619659&r1=1619658&r2=1619659&view=diff
==============================================================================
--- hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c (original)
+++ hadoop/common/trunk/hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c Fri Aug 22 04:05:18 2014
@@ -193,7 +193,17 @@ int hadoop_user_info_getgroups(struct ha
ngroups = uinfo->gids_size;
ret = getgrouplist(uinfo->pwd.pw_name, uinfo->pwd.pw_gid,
uinfo->gids, &ngroups);
+ // Return value is different on Linux vs. FreeBSD. Linux: the number of groups
+ // or -1 on error. FreeBSD: 0 on success or -1 on error. Unfortunately, we
+ // can't accept a 0 return on Linux, because buggy implementations have been
+ // observed to return 0 but leave the other out parameters in an indeterminate
+ // state. This deviates from the man page, but it has been observed in
+ // practice. See issue HADOOP-10989 for details.
+#ifdef __linux__
+ if (ret > 0) {
+#else
if (ret >= 0) {
+#endif
uinfo->num_gids = ngroups;
ret = put_primary_gid_first(uinfo);
if (ret) {