[
https://issues.apache.org/jira/browse/HADOOP-10781?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14053941#comment-14053941
]
Colin Patrick McCabe commented on HADOOP-10781:
-----------------------------------------------
Thanks for looking at this, Dmitry.
bq. Because according to manpage this is impossible.
I'm afraid we need to be paranoid when checking the result of this call. We've
seen some odd behavior in the past. man pages may not always be correct, even
when referring to their own operating system, let alone all possible operating
systems we support.
Can you post your comments as a patch for us to review? We can't review JIRA
comments (or at least we can't commit them to the codebase)
> Unportable getgrouplist() usage breaks FreeBSD
> ----------------------------------------------
>
> Key: HADOOP-10781
> URL: https://issues.apache.org/jira/browse/HADOOP-10781
> Project: Hadoop Common
> Issue Type: Bug
> Affects Versions: 2.4.1
> Reporter: Dmitry Sivachenko
>
> getgrouplist() has different return values on Linux and FreeBSD:
> Linux: either the number of groups (positive) or -1 on error
> FreeBSD: 0 on success or -1 on error
> The return value of getgrouplist() is analyzed in Linux-specific way in
> hadoop-common-project/hadoop-common/src/main/native/src/org/apache/hadoop/security/hadoop_user_info.c,
> in function hadoop_user_info_getgroups() which breaks FreeBSD.
> In this function you have 3 choices for the return value
> ret = getgrouplist(uinfo->pwd.pw_name, uinfo->pwd.pw_gid,
> uinfo->gids, &ngroups);
> 1) ret > 0 : OK for Linux, it will be zero on FreeBSD. I propose to change
> this to ret >= 0
> 2) First condition is false and ret != -1: impossible according to manpage
> 3) ret == 1 -- OK for both Linux and FreeBSD
> So I propose to change "ret > 0" to "ret >= 0" and (optionally) return 2nd
> case.
--
This message was sent by Atlassian JIRA
(v6.2#6252)