fix(chmod): report Permission denied instead of No such file or directory#9860
fix(chmod): report Permission denied instead of No such file or directory#9860majiayu000 wants to merge 3 commits into
Conversation
|
GNU testsuite comparison: |
|
The CI failure on This test was previously skipped on the This looks like a flaky test or CI infrastructure issue rather than a regression caused by this PR. All 41 existing chmod tests pass locally and the new test case validates the fix correctly. Would it be possible to re-run the CI or have a maintainer take a look at why this unrelated test started running? |
|
Could you please fix the conflict? Thanks |
…tory When a file exists but is inaccessible due to permission restrictions, chmod was incorrectly reporting "No such file or directory" because Path::exists() returns false for both non-existent files and inaccessible files. This change uses fs::metadata() to distinguish between these two cases and reports the appropriate error message based on the actual error kind (PermissionDenied vs NotFound). Fixes uutils#9789 Signed-off-by: majiayu000 <1835304752@qq.com>
76c83d0 to
b15beab
Compare
|
Rebased onto main and resolved the conflict. Ready for review. |
|
@majiayu000 why did you close it? it looked good :) |
|
@sylvestre I just closed my all stable pr, if needed, I can open this |
Summary
fs::metadata()instead ofPath::exists()to distinguish between "file doesn't exist" and "permission denied" errorsRoot Cause
When a file exists but is inaccessible due to permission restrictions (e.g.,
chmod 755 locked/filewherelockeddirectory has no permissions),Path::exists()returnsfalsefor both non-existent files and inaccessible files. This caused chmod to incorrectly report "No such file or directory" instead of "Permission denied".Changes
Chmoder::chmod()to usefs::metadata()and check the error kindtest_chmod_permission_denied_not_no_such_fileto verify correct behaviorTest plan
Fixes #9789