Skip to content

Proposal: adopt shadow-utils-rs as a new uutils family member #11828

@pierre-warnier

Description

@pierre-warnier

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

  1. Repo location: transfer to a uutils/shadow repo, or keep it as affiliated shadow-utils-rs/shadow-rs?
  2. newgrp overlap: does uutils/login already handle newgrp? If so we need to coordinate.
  3. Crate naming: shadow-rs publishes uu_passwd, uu_useradd, etc. — any planned conflicts with uutils crates on crates.io?
  4. CI template: should I migrate to the uutils GitHub Actions template?
  5. File headers / authorship: any uutils conventions I should adopt beyond what's already in place?

Happy to do whatever integration work is needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions