Subject: Re: bug#76897: id improvements

From: Collin Funk <[email-masked]>
Date: Mon, 04 Aug 2025 20:21:31 -0700

Nicolas said:

> Context:
> $ cat /etc/passwd
> nicolas:x:1000:2001::/home/nicolas:/bin/bash
> claude:x:1000:2002::/home/claude:/bin/zsh
> $ cat /etc/group
> gnicolas:x:2001:
> gclaude:x:2002:
> 
> Test case:
> localhost login: claude
> $ getent passwd claude 
> claude::1000:2002::/home/claude:/bin/zsh
> $ id claude
> uid=1000(nicolas) gid=2002(gclaude) groups=2001(gnicolas)
> 
> groups is wrong, should be "groups=2002(gclaude)".
> 
> $ busybox id
> uid=1000 gid=2002(gclaude) groups=2002(gclaude)
> 
> groups is correct with busybox.
> 
> Given the ouput of getent, it could be possible to display a better result:
> uid=1000(claude) gid=2002(gclaude) groups=2002(gclaude)

Not really a bug, just a reason to avoid creating multiple users with
the same user-id.

See the following example:

    $ whoami
    root
    $ id claude
    uid=1000(nicolas) gid=2002(gclaude) groups=2001(gnicolas)
    $ busybox id claude
    uid=1000(nicolas) gid=2002(gclaude) groups=2002(gclaude)
    $ su claude
    $ id
    uid=1000(nicolas) gid=2002(gclaude) groups=2002(gclaude)
    $ busybox id
    uid=1000(nicolas) gid=2002(gclaude) groups=2002(gclaude)

One would expect that after logging into claude, id would print that
user name. But since nicolas shows up first in /etc/passwd that is what
we see.

Coreutils will then use the group id from the 'struct passwd' for
nicolas which is 2001(gnicolas) in this case. I think that busybox uses
the name passed to the command-line to call 'getgrouplist' which will
then return gclaude.

Collin