From c54f978acec617b9583d3ec8455724dbe20a1b9f Mon Sep 17 00:00:00 2001 From: max-amb Date: Thu, 11 Jun 2026 19:23:54 +0100 Subject: [PATCH 1/2] chown: changing group to users group #12751 --- src/uu/chown/src/chown.rs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/uu/chown/src/chown.rs b/src/uu/chown/src/chown.rs index ac71abd3804..1221a128404 100644 --- a/src/uu/chown/src/chown.rs +++ b/src/uu/chown/src/chown.rs @@ -16,6 +16,7 @@ use uucore::error::{FromIo, UResult, USimpleError}; use clap::{Arg, ArgAction, ArgMatches, Command}; +use core::write; use std::fs; use std::os::unix::fs::MetadataExt; @@ -194,6 +195,7 @@ fn parse_gid(group: &str, spec: &str) -> UResult> { /// * `"owner:group"`, /// * `"owner"`, /// * `":group"`, +/// * `"owner:"`, /// /// and the owner or group can be specified either as an ID or a /// name. The `sep` argument specifies which character to use as a @@ -230,7 +232,13 @@ fn parse_spec(spec: &str, sep: char) -> UResult<(Option, Option)> { )); } - Ok((uid, gid)) + if gid.is_none() && !user.is_empty() && spec.ends_with(':') { + // we have input of the form user: and should change the group to the users login group as + // per GNU + Ok((uid, Some(entries::usr2gid(user)?))) + } else { + Ok((uid, gid)) + } } #[cfg(test)] From def806f691cbe3dda78465481ca3a6938095901f Mon Sep 17 00:00:00 2001 From: max-amb Date: Thu, 11 Jun 2026 19:26:06 +0100 Subject: [PATCH 2/2] Removed accidental import --- src/uu/chown/src/chown.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/uu/chown/src/chown.rs b/src/uu/chown/src/chown.rs index 1221a128404..4e4a7c052dc 100644 --- a/src/uu/chown/src/chown.rs +++ b/src/uu/chown/src/chown.rs @@ -16,7 +16,6 @@ use uucore::error::{FromIo, UResult, USimpleError}; use clap::{Arg, ArgAction, ArgMatches, Command}; -use core::write; use std::fs; use std::os::unix::fs::MetadataExt;