Skip to content

chmod: behavioral divergence from coreutils when the target file is not accessible #9789

Description

@sylvestre

Component

chmod

Description

In Chmoder::chmod()

if !file.exists() {
    // .........
}

Path::exists() is used to determine whether a file is existed. Because Path::exists() will return false when there is a metadata access errors, including PermissionDenied, it can misclassify existing but inaccessible paths as non-existent, producing incorrect result.

Test / Reproduction Steps

core_sbx$ sudo mkdir locked
core_sbx$ sudo touch locked/file
core_sbx$ sudo chmod 000 locked
core_sbx$ ../../coreutils/target/release/chmod 000 locked/file
../../coreutils/target/release/chmod: cannot access 'locked/file': No such file or directory
core_sbx$ chmod 000 locked/file
chmod: cannot access 'locked/file': Permission denied

Impact

Behavioral divergence from GNU coreutils: scripts and tooling may treat No such file differently from Permission denied.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions