Test user::test::groups fails in devcontainer because real gid is not in supplementary groups
In a Visual Studio Code devcontainer based on Debian Bullseye the test user::test::groups fails. <details><summary>Backtrace</summary> ``` $ RUST_BACKTRACE=1 cargo test -p fs-mistrust --lib Finished test [unoptimized + debuginfo] target(s) in 0.09s Running unittests (target/debug/deps/fs_mistrust-bf6b7cb33876b3a0) running 26 tests test err::test::bits ... ok test test::default_mistrust ... ok test user::test::lookup_id ... ok test test::admin_only ... ok test user::test::username_from_env ... ok test user::test::selfnamed ... ok test user::test::username_ignoring_env ... ok test user::test::username_real ... ok test test::multiple_errors ... ok test test::check_contents ... ok test test::trust_everyone ... ok test test::want_type ... ok test test::readable_ok ... ok test dir::test::bad_paths ... ok test dir::test::read_and_write ... ok test test::trust_gid ... ok test walk::test::past_root ... ok test test::sticky ... ok test dir::test::easy_case ... ok test walk::test::simple_path ... ok test walk::test::unix_permissions ... ok test test::simple_cases ... ok test test::make_directory ... ok test walk::test::repeats ... ok test walk::test::looping ... ok test user::test::groups ... FAILED failures: ---- user::test::groups stdout ---- thread 'user::test::groups' panicked at 'assertion failed: groups.contains(&cur_gid)', crates/fs-mistrust/src/user.rs:264:9 stack backtrace: 0: rust_begin_unwind at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/std/src/panicking.rs:584:5 1: core::panicking::panic_fmt at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/panicking.rs:143:14 2: core::panicking::panic at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/panicking.rs:48:5 3: fs_mistrust::user::test::groups at ./src/user.rs:264:9 4: fs_mistrust::user::test::groups::{{closure}} at ./src/user.rs:256:5 5: core::ops::function::FnOnce::call_once at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:227:5 6: core::ops::function::FnOnce::call_once at /rustc/7737e0b5c4103216d6fd8cf941b7ab9bdbaace7c/library/core/src/ops/function.rs:227:5 note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace. failures: user::test::groups test result: FAILED. 25 passed; 1 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.03s ``` </details> This appears to be due to `cur_groups` being `vec![999]` but `cur_gid` being `1000` and the test assumes that `cur_gid` will be in `cur_groups`. I'm not entirely sure why the container is set up this way, but it seems like it might be permitted by specification. > It is unspecified whether the effective group ID of the calling > process is included in the returned list. (Thus, an application > should also call getegid(2) and add or remove the resulting > value.) From https://man7.org/linux/man-pages/man2/getgroups.2.html Here are some command outputs that seem relevant. ``` vscode ➜ /workspaces/arti (devcontainer) $ grep vscode /etc/group /etc/passwd /etc/group:vscode:x:1000: /etc/group:rustlang:x:999:vscode /etc/passwd:vscode:x:1000:1000::/home/vscode:/bin/bash vscode ➜ /workspaces/arti (devcontainer) $ ps -q $$ -eo pid,user,args,group,rgroup,supgrp PID USER COMMAND GROUP RGROUP SUPGRP 252 vscode /bin/bash vscode vscode rustlang vscode ➜ /workspaces/arti (devcontainer) $ id uid=1000(vscode) gid=1000(vscode) groups=1000(vscode),999(rustlang) ```
issue