linux: Prevent target file from being trashed when trashing symlink #22704
+8
−3
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #22399
Currently, the target file is being trashed when trashing a symlink, and the symlink remains intact. Symlinks are not handled separately yet, so when
open
is used on a symlink, it gets resolved to the target file.To fix this, we can get the file descriptor of the symlink by passing
libc::O_PATH | libc::O_NOFOLLOW
flags toopen
, and then pass this file descriptor to the existingtrash::trash_file
fromashpd
. However, this would result in an error becauseashpd
currently does not support trashing symlink files. I have created an issue for it here: bilelmoussaoui/ashpd#255.For the time being, this PR partially fixes the issue by removing the symlink without trashing so that the target file won't be affected. Once the upstream bug is fixed, we can switch this remove action back to trashing.
Release Notes: