gpasswd: added implementation of gpasswd - #282
Conversation
|
Thanks for this — it is a complete piece of work: the tool, a man page, unit Unfortunately I have rebased it and pushed the result to What the rebase had to resolve
Four things worth your attention1. 2. Comments in 3. 4. The duplicated VerifiedAgainst a One small thing for next time, and only because it cost me a minute: the |
4cc8bac to
ea9eeb6
Compare
Rebases jlesage's implementation onto a main that moved a long way under
it, and carries it onto the interfaces that landed since the branch was
cut. The tool's behaviour is unchanged and still matches GNU on every
path probed.
What the rebase had to resolve:
- shadow-rs.spec and debian/ were revived by the merge; both were
deleted because neither could build.
- The standalone dispatch() and hand-written --list predate the single
applets() table, which now drives both. gpasswd joins the table.
- The five shadow-core parser features it asked for no longer exist.
- The fourteen [[test]] targets are one; test_gpasswd joins it.
- README, Makefile and PLATFORM-SUPPORT described the pre-uutils#239
privilege model, in which every applet ran with euid 0.
What changed beyond the rebase:
- gpasswd keeps its privilege in the multicall build. It is setuid in
GNU and the branch marks it setuid for the per-tool install, but
SETUID_APPLETS still listed four names, so the multicall build would
have dropped privilege and no group administrator could have used it
-- silently.
- Comments in /etc/group survive. It read entries only and wrote them
back, which erases every comment, blank line and NIS compatibility
line in the file. The locked-file transaction keeps them, and commits
group and gshadow together so a bad value cannot leave the pair
disagreeing.
- The duplicated EchoGuard and password reader are gone, replaced by
shadow_core::tty, which blocks interrupts for the read so Ctrl-C at
the prompt cannot leave the terminal with echo off.
- The print macros are replaced. They panic when the stream is closed,
which a setuid-root tool must not do part way through a change.
These were the only five in the repository and no lint caught them,
so clippy::print_stdout and print_stderr are now denied
workspace-wide, with the test crate exempt.
The GNU comparison suite gains gpasswd: the unknown-group, unknown-user
and non-member exit codes, all three of which match.
CONTRIBUTING's licence list also said ISC, BSD-2-Clause, CC0-1.0, Zlib
and MPL-2.0 were acceptable, which stopped being true when deny.toml was
narrowed to the graph. It now says what deny.toml enforces.
ea9eeb6 to
c26e6d1
Compare
|
I adjusted the PR. Everything should be good now :) |
|
Verified and merged — thank you. Your branch is byte-identical to what I had reviewed on the Re-ran everything on your tip rather than assuming: And the one path CI does not cover — a real group administrator using the I will add that last case to the deployment suite in a follow-up so it does |
The tool merged in #282 without an entry, and the Unreleased section was empty. Credited to its author.
|
Shipped in 0.4.0, credited to you in the release notes.
One thing worth knowing for the musl archive: Thanks again. |
Added implementation of
gpasswd.Mostly done by AI :)