mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-28 11:37:44 +00:00
uucore(perms): better support nameless uids, gids
Update the `wrap_chown()` function to support user IDs and group IDs that do not correspond to named users or groups, respectively. Before this commit, the result from `uid2usr()` and `gid2grp()` calls were unwrapped because we assumed a user name or group name, respectively, existed. However, this is not always true: for example, running the command `sudo chown 12345 f` works even if there is no named user with ID 12345. This commit expands `wrap_chown()` to work even if no name exists for the user or group.
This commit is contained in:
parent
6f5d5aa456
commit
08b6dd4975
1 changed files with 20 additions and 14 deletions
|
@ -92,22 +92,25 @@ pub fn wrap_chown<P: AsRef<Path>>(
|
||||||
);
|
);
|
||||||
if level == VerbosityLevel::Verbose {
|
if level == VerbosityLevel::Verbose {
|
||||||
out = if verbosity.groups_only {
|
out = if verbosity.groups_only {
|
||||||
|
let gid = meta.gid();
|
||||||
format!(
|
format!(
|
||||||
"{}\nfailed to change group of {} from {} to {}",
|
"{}\nfailed to change group of {} from {} to {}",
|
||||||
out,
|
out,
|
||||||
path.quote(),
|
path.quote(),
|
||||||
entries::gid2grp(meta.gid()).unwrap(),
|
entries::gid2grp(gid).unwrap_or(gid.to_string()),
|
||||||
entries::gid2grp(dest_gid).unwrap()
|
entries::gid2grp(dest_gid).unwrap_or(dest_gid.to_string())
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
let uid = meta.uid();
|
||||||
|
let gid = meta.gid();
|
||||||
format!(
|
format!(
|
||||||
"{}\nfailed to change ownership of {} from {}:{} to {}:{}",
|
"{}\nfailed to change ownership of {} from {}:{} to {}:{}",
|
||||||
out,
|
out,
|
||||||
path.quote(),
|
path.quote(),
|
||||||
entries::uid2usr(meta.uid()).unwrap(),
|
entries::uid2usr(uid).unwrap_or(uid.to_string()),
|
||||||
entries::gid2grp(meta.gid()).unwrap(),
|
entries::gid2grp(gid).unwrap_or(gid.to_string()),
|
||||||
entries::uid2usr(dest_uid).unwrap(),
|
entries::uid2usr(dest_uid).unwrap_or(dest_uid.to_string()),
|
||||||
entries::gid2grp(dest_gid).unwrap()
|
entries::gid2grp(dest_gid).unwrap_or(dest_gid.to_string())
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -119,21 +122,24 @@ pub fn wrap_chown<P: AsRef<Path>>(
|
||||||
if changed {
|
if changed {
|
||||||
match verbosity.level {
|
match verbosity.level {
|
||||||
VerbosityLevel::Changes | VerbosityLevel::Verbose => {
|
VerbosityLevel::Changes | VerbosityLevel::Verbose => {
|
||||||
|
let gid = meta.gid();
|
||||||
out = if verbosity.groups_only {
|
out = if verbosity.groups_only {
|
||||||
format!(
|
format!(
|
||||||
"changed group of {} from {} to {}",
|
"changed group of {} from {} to {}",
|
||||||
path.quote(),
|
path.quote(),
|
||||||
entries::gid2grp(meta.gid()).unwrap(),
|
entries::gid2grp(gid).unwrap_or(gid.to_string()),
|
||||||
entries::gid2grp(dest_gid).unwrap()
|
entries::gid2grp(dest_gid).unwrap_or(dest_gid.to_string())
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
let gid = meta.gid();
|
||||||
|
let uid = meta.uid();
|
||||||
format!(
|
format!(
|
||||||
"changed ownership of {} from {}:{} to {}:{}",
|
"changed ownership of {} from {}:{} to {}:{}",
|
||||||
path.quote(),
|
path.quote(),
|
||||||
entries::uid2usr(meta.uid()).unwrap(),
|
entries::uid2usr(uid).unwrap_or(uid.to_string()),
|
||||||
entries::gid2grp(meta.gid()).unwrap(),
|
entries::gid2grp(gid).unwrap_or(gid.to_string()),
|
||||||
entries::uid2usr(dest_uid).unwrap(),
|
entries::uid2usr(dest_uid).unwrap_or(dest_uid.to_string()),
|
||||||
entries::gid2grp(dest_gid).unwrap()
|
entries::gid2grp(dest_gid).unwrap_or(dest_gid.to_string())
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -150,8 +156,8 @@ pub fn wrap_chown<P: AsRef<Path>>(
|
||||||
format!(
|
format!(
|
||||||
"ownership of {} retained as {}:{}",
|
"ownership of {} retained as {}:{}",
|
||||||
path.quote(),
|
path.quote(),
|
||||||
entries::uid2usr(dest_uid).unwrap(),
|
entries::uid2usr(dest_uid).unwrap_or(dest_uid.to_string()),
|
||||||
entries::gid2grp(dest_gid).unwrap()
|
entries::gid2grp(dest_gid).unwrap_or(dest_gid.to_string())
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue