Bug 1003963
Summary: | id always report default primary group when gid/egid has been set to other group | ||||||
---|---|---|---|---|---|---|---|
Product: | Red Hat Enterprise Linux 6 | Reporter: | Ron van der Wees <rvdwees> | ||||
Component: | coreutils | Assignee: | Ondrej Vasik <ovasik> | ||||
Status: | CLOSED DUPLICATE | QA Contact: | qe-baseos-daemons | ||||
Severity: | unspecified | Docs Contact: | |||||
Priority: | unspecified | ||||||
Version: | 6.4 | ||||||
Target Milestone: | rc | ||||||
Target Release: | --- | ||||||
Hardware: | All | ||||||
OS: | Linux | ||||||
Whiteboard: | |||||||
Fixed In Version: | Doc Type: | Bug Fix | |||||
Doc Text: | Story Points: | --- | |||||
Clone Of: | Environment: | ||||||
Last Closed: | 2013-09-04 07:00:07 UTC | Type: | Bug | ||||
Regression: | --- | Mount Type: | --- | ||||
Documentation: | --- | CRM: | |||||
Verified Versions: | Category: | --- | |||||
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |||||
Cloudforms Team: | --- | Target Upstream Version: | |||||
Embargoed: | |||||||
Attachments: |
|
Thanks for report. I believe this is duplicate of https://bugzilla.redhat.com/show_bug.cgi?id=816708 (I checked the fixed version of id and it works just fine). *** This bug has been marked as a duplicate of bug 816708 *** |
Created attachment 793234 [details] Reproducer source code Description of problem: /usr/bin/id -G always reports the primary group as defined in /etc/passwd, even when gid, egid and supplementary group list has been set to a different group. Version-Release number of selected component (if applicable): coreutils-8.4-19.el6.x86_64 How reproducible: Always Steps to Reproduce: 1. Create additional group: # groupadd -g 1010 group1010 2. Add user: # useradd user1 3. Make user member of additional group # gpasswd -a user1 group1010 4. Build and install reproducer: # gcc -Wall -o reproducer reproducer2.c # install -m4755 reproducer /usr/local/bin/reproducer 5. Run reproducer which sets gid/egid to group1010 and calls exceve(2) to execute "id -G" Actual results: On RHEL-6.4: # su - user1 $ /usr/local/bin/reproducer 1010 501 <<---- Even when gid and egid have been set to 1010, the primary gid as configured in /etc/passwd is reported while not not being effective. Expected results: On RHEL-5.9: # su - user1 $ /usr/local/bin/reproducer 1010 <<---- Only the gid as set by reproducer is shown. Additional info: The reproducer calls execve(2) in stead of system(3) to avoid bash dropping the privileges. From coreutils-8.4/lib/mgetgroups.c in function mgetgroups(): ~~~ ng = (username ? getugroups (max_n_groups, g, username, gid) : getgroups (max_n_groups - (gid != (gid_t) -1), g + (gid != (gid_t) -1))); if (ng < 0) { /* Failure is unexpected, but handle it anyway. */ int saved_errno = errno; free (g); errno = saved_errno; return -1; } if (!username && gid != (gid_t) -1) <-- primary gid is always added to list { *g = gid; ng++; } ~~~