Context
shadow-rs is a memory-safe Rust reimplementation of the 14 shadow-utils tools (passwd, useradd, userdel, usermod, groupadd, groupdel, groupmod, chage, chpasswd, chfn, chsh, newgrp, pwck, grpck). Built on uucore, MIT licensed, clean-room GPL development (no reference to shadow-maint/shadow source). Already aligned with uutils conventions (uumain/uu_app, UResult, multicall binary, workspace layout).
Repo: https://github.com/shadow-utils-rs/shadow-rs
(cc @sylvestredeb — suite à notre échange email du 3 avril)
Status
- 14 tools with GNU-compatible flags and exit codes
- PAM integration for authentication and password changes
- Atomic file writes with lock files and stale lock detection
- 587 tests (unit, property-based, integration), 6 fuzz targets
- Docker test matrix: Debian (glibc), Alpine (musl), Fedora (SELinux enforcing)
unsafe_code = "deny" workspace-wide (only PAM/crypt FFI exempt)
- 894 KB stripped multicall binary
Open questions for maintainers
- Repo location: transfer to a
uutils/shadow repo, or keep it as affiliated shadow-utils-rs/shadow-rs?
newgrp overlap: does uutils/login already handle newgrp? If so we need to coordinate.
- Crate naming: shadow-rs publishes
uu_passwd, uu_useradd, etc. — any planned conflicts with uutils crates on crates.io?
- CI template: should I migrate to the uutils GitHub Actions template?
- File headers / authorship: any uutils conventions I should adopt beyond what's already in place?
Happy to do whatever integration work is needed.
Context
shadow-rs is a memory-safe Rust reimplementation of the 14 shadow-utils tools (
passwd,useradd,userdel,usermod,groupadd,groupdel,groupmod,chage,chpasswd,chfn,chsh,newgrp,pwck,grpck). Built onuucore, MIT licensed, clean-room GPL development (no reference toshadow-maint/shadowsource). Already aligned with uutils conventions (uumain/uu_app,UResult, multicall binary, workspace layout).Repo: https://github.com/shadow-utils-rs/shadow-rs
(cc @sylvestredeb — suite à notre échange email du 3 avril)
Status
unsafe_code = "deny"workspace-wide (only PAM/crypt FFI exempt)Open questions for maintainers
uutils/shadowrepo, or keep it as affiliatedshadow-utils-rs/shadow-rs?newgrpoverlap: doesuutils/loginalready handlenewgrp? If so we need to coordinate.uu_passwd,uu_useradd, etc. — any planned conflicts with uutils crates on crates.io?Happy to do whatever integration work is needed.